步进电机四相八拍驱动程序_免费下载.doc_第1页
步进电机四相八拍驱动程序_免费下载.doc_第2页
步进电机四相八拍驱动程序_免费下载.doc_第3页
步进电机四相八拍驱动程序_免费下载.doc_第4页
步进电机四相八拍驱动程序_免费下载.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*-名称: 步进电机四相八拍驱动程序文件名:steper.c作者: eastboyE-mail: eastboy_007163.com日期: 2008年7月16日版本: 1.0申明: 按键部分程序参考了raosibin的44按键状态机思想程序说明: 1.可通过按键选择正转或反转,碰到限位开关后自动微调上一次微调值后停止; 2.可通过按键微调,即低速转动,以便精确调整位置; 3.仿真时通过两个按钮模拟前后限位开关,以模拟实际生活当中步进电机带轴运动时部件的前后电限位, 程序并可自动记住以前后限位开关为基点的微调步数; 4.本程序只是通过了软件功能仿真,未做实物实验,不保证实际使用时可用,实际使用时应做相应参数调整; 5.本程序未加入电机过流保护部分,有兴趣可以自行加入。-*/#include #include #include #include #define ShortPush 0x40#define LongPush 0x80volatile uint8_t Direction=0,Limit=0; /Direction旋转方向,0为顺时针,1为逆时针;Limit限位,0为前限位,1为后限位volatile uint8_t Pflag=0,TuneFlag=0; /Pflag限位开关标志,1为开关动作;TuneFlag微调标志,0为不微调,1为微调加,2为微调减,3为微调连加,4为微调连减volatile SlowSpeed=0;/低速标志,1为低速,0为高速,用于微调时选低速static uint8_t stepper8=0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90; /驱动状态码表volatile uint16_t Position2=0x00,0x00;/限位开关动作后的微调步数记录volatile uint8_t keycode=0x00;volatile uint8_t LastKey=0xFF,CurKey=0x00;volatile uint8_t keytimes=0x00;volatile uint8_t key_limit=0x00;volatile uint8_t stepcnt=0;volatile uint16_t Pcnt=0;#define StepperStop() TCCR1B=0x00; PORTD&=(1PD3); PORTC&=(1PC2|1PC3); /Disable driver#define StepperStart() PORTD|=(1PD3); TCCR1B=(1CS02|1CS00); TIMSK|=1TOIE1;/Enable driverISR(SIG_OVERFLOW1)TCCR1B=0x00;/停止定时器if(SlowSpeed=1) /60msTCNT1H=0xC5;TCNT1L=0x69;else if(SlowSpeed=0) /15msTCNT1H=0xF1;TCNT1L=0x5B;if(Direction=0)PORTC&=(1PC2|1PC3);PORTD=(17)stepcnt=0;PORTC|=1PC2;else if(Direction=1)PORTC&=(1PC3|1PC2);PORTD=(1PD3)|stepperstepcnt);stepcnt-;if(stepcnt=0xFF)stepcnt=7;PORTC|=10) Pcnt-;elsePcnt+;break;case 0x02:case 0x04:if(Limit=0x00)Pcnt+;elseif(Pcnt0) Pcnt-;break;default:break;PositionLimit=Pcnt;eeprom_is_ready();eeprom_write_word(Limit=0x00 ? 0x01 : 0x03),PositionLimit);if(TuneFlag=1 | TuneFlag=2)StepperStop();goto T0End;elseStepperStart();goto T0End;if(Pflag=1)Pcnt+;if(Pcnt=PositionLimit)StepperStop();goto T0End;elseTCCR1B=(1CS11|1CS10);/启动定时器elseTCCR1B=(1CS11|1100) /长按keytimes=101;keycode=(LongPush|CurKey);else if(CurKey!=LastKey)LastKey=CurKey;keytimes=0x00;else /无键按下或已释放keytimes=0x00;void Timer0_init()TCCR0=0x00;TCNT0=0x64; /10mSTCCR0=(1CS02|1CS00);/1024预分频TIMSK|=1TOIE0;void Timer1_init()TCCR1B=0x00;/停止定时器TCNT1H=0xF1;TCNT1L=0x5B;/初始值TCCR1A=0x00;/TCCR1B=(1CS11|1CS10);/启动定时器TIMSK|=1TOIE1;void avr_init()/初始化端口DDRB=0X00; /配置为输入,内部上拉PORTB=0XFF;DDRC=(1PC2|1PC3); /PC2,PC3 LED OutPORTC=0x00;DDRD=(1PD3|1PD4|1PD5|1PD6|1PD7);PORTD=0X00;MCUCR=(1ISC01);GICR=1INT0;/初始化变量Direction=0;eeprom_is_ready();if(eeprom_read_byte(0x00)=0xFF)eeprom_is_ready();eeprom_write_byte(0x00,0x00);eeprom_is_ready();eeprom_write_word(0x01,0x0000);eeprom_is_ready();eeprom_write_word(0x03,0x0000);Position0=0;Position1=0;elsePosition0=eeprom_read_word(0x01);Position1=eeprom_read_word(0x03);Timer0_init(); Timer1_init();int main()cli();avr_init();sei();while(1)switch(keycode)case 0x4E: /正转Direction=0; /旋转方向,0为顺时针,1为逆时针SlowSpeed=0; /速度标志,为1时慢速Pflag=0; /限位标志,为1时限位开关作用TuneFlag=0; /微调标志,0为正常运转,1为位置微调StepperStart();break;case 0x4D: /反转Direction=1;SlowSpeed=0;Pflag=0;TuneFlag=0;StepperStart();break;case 0x4B: /微调+Direction=0;SlowSpeed=1;TuneFlag=1;Pflag=0;StepperStart();break;case 0x47: /微调-Direction=1;SlowSpeed=1;TuneFlag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论