单片机控制步进电机原理_第1页
单片机控制步进电机原理_第2页
单片机控制步进电机原理_第3页
单片机控制步进电机原理_第4页
单片机控制步进电机原理_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

51 单片机控制步进电机接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝上 /买了一个 EPSON的 UMX-1 型步进电机,此步进电机为双极性四相(后来才知道,四相和两相步进没什么区别的!),接线共有六根,外形如下图所示:拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将 5 伏电源的正端接上最边上两根褐色的线,然后用 5 伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(45)18 度。地线与四线接触的顺序相反,电机的转向也相反。如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四线脉冲电流的顺序,则可实现对转向的控制。所以,设计了如下电路图:C51 程序代码为:代码一#include static unsigned int count;static unsigned int endcount;void delay();void main(void) count = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; /允许 CPU 中断 TMOD = 0x11; /设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许 TH0 = 0xFC; TL0 = 0x18; /设定时每隔 1ms 中断一次 TR0 = 1; /开始计数startrun:P1_3 = 0;P1_0 = 1;delay();P1_0 = 0;P1_1 = 1;delay();P1_1 = 0;P1_2 = 1;delay();P1_2 = 0;P1_3 = 1;delay();goto startrun; /定时器 0 中断处理 void timeint(void) interrupt 1 TH0=0xFC; TL0=0x18; /设定时每隔 1ms 中断一次count+;void delay()endcount=2;count=0;dowhile(count static unsigned int count;static int step_index;void delay(unsigned int endcount);void gorun(bit turn, unsigned int speedlevel);void main(void) count = 0;step_index = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; /允许 CPU 中断 TMOD = 0x11; /设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许 TH0 = 0xFE; TL0 = 0x0C; /设定时每隔 0.5ms 中断一次 TR0 = 1; /开始计数dogorun(1,60);while(1); /定时器 0 中断处理 void timeint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /设定时每隔 0.5ms 中断一次count+;void delay(unsigned int endcount)count=0;dowhile(count7)step_index=0;elsestep_index-;if (step_index static unsigned int count; /计数static int step_index; /步进索引数,值为 07static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; /步进电机转速参数,数值越大速度越慢,最小值为 1,速度最快static int spcount; /步进电机转速参数计数void delay(unsigned int endcount); /延时函数,延时为 endcount*0.5 毫秒void gorun(); /步进电机控制步进函数void main(void) count = 0;step_index = 0;spcount = 0;stop_flag = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; /允许 CPU 中断 TMOD = 0x11; /设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许 TH0 = 0xFE;TL0 = 0x0C; /设定时每隔 0.5ms 中断一次TR0 = 1; /开始计数turn = 0;speedlevel = 2;delay(10000);speedlevel = 1;dospeedlevel = 2;delay(10000);speedlevel = 1;delay(10000);stop_flag=1;delay(10000);stop_flag=0;while(1); /定时器 0 中断处理 void timeint(void) interrupt 1 TH0=0xFE;TL0=0x0C; /设定时每隔 0.5ms 中断一次count+;spcount-;if(spcount7)step_index=0;elsestep_index-;if (step_index0)step_index=7;在代码三中,我将步进电机的运转控制放在时间中断函数之中,这样主函数就能很方便的加入其它任务的执行,而对步进电机的运转不产生影响。在此代码中,不但实现了步进电机的转速和转向的控制,另外还加了一个停止的功能,呵呵,这肯定是需要的。步进电机从静止到高速转动需要一个加速的过程,否则电机很容易被“卡住”,代码一、二实现加速不是很方便,而在代码三中,加速则很容易了。在此代码中,当转速参数 speedlevel 为 2 时,可以算出,此时步进电机的转速为1500RPM,而当转速参数 speedlevel 1 时,转速为 3000RPM。当步进电机停止,如果直接将 speedlevel 设为 1,此时步进电机将被“卡住” ,而如果先把speedlevel 设为 2,让电机以 1500RPM 的转速转起来,几秒种后,再把speedlevel 设为 1,此时电机就能以 3000RPM 的转速高速转动,这就是“加速”的效果。在此电路中,考虑到电流的缘故,我用的 NPN 三极管是 S8050,它的电流最大可达 1500mA,而在实际运转中,我用万用表测了一下,当转速为1500RPM 时,步进电机的电流只有 90mA 左右,电机发热量较小,当转速为60RPM 时,步进电机的电流为 200mA 左右,电机发热量较大,所以 NPN 三极管也可以选用 9013,对于电机发热量大的问题,可加一个 10 欧到 20 欧的限流电阻,不过这样步进电机的功率将会变小。步进电机驱动器的工作原理步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。 有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏) 要改作它用,一般需自己设计驱动器。本文介绍的就是为从一日本产旧式打印机上拆下的步进电机而设计的驱动器。本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。1. 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图 1 是该四相反应式步进电机工作原理示意图。图 1 四相步进电机步进示意图开始时,开关 SB 接通电源,SA、SC、SD 断开,B 相磁极和转子 0、3 号齿对齐,同时,转子的 1、4 号齿就和 C、D 相绕组磁极产生错齿,2、5 号齿就和 D、A 相绕组磁极产生错齿。当开关 SC 接通电源,SB、SA、SD 断开时,由于 C 相绕组的磁力线和 1、4 号齿之间磁力线的作用,使转子转动,1、4 号齿和 C 相绕组的磁极对齐。而 0、3 号齿和 A、B相绕组产生错齿, 2、5 号齿就和 A、D 相绕组磁极 产生错齿。依次类推,A、B、C、D 四相绕组轮流供电,则转子会沿着 A、B、C、D 方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图 2.a、b、c 所示:图 2.步进电机工作时序波形图 2.基于 AT89C2051 的步进电机驱动器系统电路原理图 3 步进电机驱动器系统电路原理图 AT89C2051 将控制脉冲从 P1 口的 P1.4P1.7 输出,经 74LS14 反相后进入 9014,经 9014 放大后控制光电开关,光电隔离后,由功率管 TIP122 将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中 L1 为步进电机的一相绕组。AT89C2051 选用频率 22MHz的晶振,选用较高晶振的目的是为了在方式 2 下尽量减小 AT89C2051 对上位机脉冲信号周期的影响。图 3 中的 RL1RL4 为绕组内阻,50 电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1D4 为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1D4)而衰减掉,从而保护了功率管 TIP122 不受损坏。在 50 外接电阻上并联一个 200F 电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。与续流二极管串联的 200 电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。3.软件设计该驱动器根据拨码开关 KX、KY 的不同组合有三种工作方式供选择:方式 1 为中断方式:P3.5(INT1)为步进脉冲输入端,P3.7 为正反转脉冲输入端。上位机(PC 机或单片机)与驱动器仅以 2 条线相连。方式 2 为串行通讯方式:上位机(PC 机或单片机)将控制命令发送给驱动器,驱动器根据控制命令自行完成有关控制过程。方式 3 为拨码开关控制方式:通过 K1K5 的不同组合,直接控制步进电机。当上电或按下复位键 KR 后,AT89C2051 先检测拨码开关 KX、KY 的状态,根据 KX、KY 的不同组合,进入不同的工作方式。以下给出方式 1 的程序流程框图与源程序。在程序的编制中,要特别注意步进电机在换向时的处理。为使步进电机在换向时能平滑过渡,不至于产生错步,应在每一步中设置标志位。其中 20H 单元的各位为步进电机正转标志位;21H 单元各位为反转标志位。在正转时,不仅给正转标志位赋值,也同时给反转标志位赋值;在反转时也如此。这样,当步进电机换向时,就可以上一次的位置作为起点反向运动,避免了电机换向时产生错步。图 4 方式 1 程序框图方式 1 源程序:MOV 20H,#00H ;20H 单元置初值,电机正转位置指针MOV 21H,#00H ;21H 单元置初值,电机反转位置指针MOV P1,#0C0H ;P1 口置初值,防止电机上电短路MOV TMOD,#60H ;T1 计数器置初值,开中断MOV TL1,#0FFHMOV TH1,#0FFHSETB ET1SETB EASETB TR1SJMP $;*计数器 1 中断程序* IT1P: JB P3.7,FAN ;电机正、反转指针;* 电机正转*JB 00H,LOOP0JB 01H,LOOP1JB 02H,LOOP2JB 03H,LOOP3JB 04H,LOOP4JB 05H,LOOP5JB 06H,LOOP6JB 07H,LOOP7LOOP0: MOV P1,#0D0HMOV 20H,#02HMOV 21H,#40HAJMP QUITLOOP1: MOV P1,#090HMOV 20H,#04HMOV 21H,#20HAJMP QUITLOOP2: MOV P1,#0B0HMOV 20H,#08HMOV 21H,#10HAJMP QUITLOOP3: MOV P1,#030HMOV 20H,#10HMOV 21H,#08HAJMP QUITLOOP4: MOV P1 ,#070HMOV 20H,#20HMOV 21H,#04HAJMP QUITLOOP5: MOV P1,#060HMOV 20H,#40HMOV 21H,#02HAJMP QUITLOOP6: MOV P1,#0E0HMOV 20H,#80HMOV 21H,#01HAJMP QUITLOOP7: MOV P1,#0C0HMOV 20H,#01HMOV 21H,#80HAJMP QUIT;*电机反转*FAN: JB 08H,LOOQ0J

温馨提示

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

评论

0/150

提交评论