单片机控制步进电机原理.doc

上传人:豆**** 文档编号:17502909 上传时间:2022-05-24 格式:DOC 页数:15 大小:154KB
返回 下载 相关 举报
单片机控制步进电机原理.doc_第1页
第1页 / 共15页
单片机控制步进电机原理.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《单片机控制步进电机原理.doc》由会员分享,可在线阅读,更多相关《单片机控制步进电机原理.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流单片机控制步进电机原理.精品文档.51单片机控制步进电机 接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝上拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进

2、角度为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

3、 = 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=0x1

4、8; /设定时每隔1ms中断一次count+;void delay()endcount=2;count=0;dowhile(countendcount); 将上面的程序编译,用ISP下载线下载至单片机运行,步进电机便转动起来了,初步告捷! 不过,上面的程序还只是实现了步进电机的初步控制,速度和方向的控制还不够灵活,另外,由于没有利用步进电机内线圈之间的“中间状态”,步进电机的步进角度为18度。 二手步进电机的要注意,有些退磁比较严重,这个店代码二#include static unsigned int count;static int step_index;void delay(unsigne

5、d 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; /开始计数do gorun(1,60);while(1);/定时器0中断处理 void tim

6、eint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /设定时每隔0.5ms中断一次count+;void delay(unsigned int endcount)count=0;dowhile(count7) step_index=0;else step_index-; if (step_index0) step_index=7; 改进的代码能实现速度和方向的控制,而且,通过step_index静态全局变量能“记住”步进电机的步进位置,下次调用 gorun()函数时则可直接从上次步进位置继续转动,从而实现精确步进;另外,由于利用了步进电机内线圈之间的“中间状态

7、”,步进角度减小了一半,只为9度,低速运转也相对稳定一些了。 但是,在代码二中,步进电机的运转控制是在主函数中,如果程序还需执行其它任务,则有可能使步进电机的运转收到影响,另外还有其它方面的不便,总之不是很完美的控制。所以我又将代码再次改进:代码三#include static unsigned int count; /计数static int step_index; /步进索引数,值为07static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; /步进电机转速参数,数值越大速度越慢,最小值为

8、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;T

9、L0 = 0x0C; /设定时每隔0.5ms中断一次TR0 = 1; /开始计数turn = 0;speedlevel = 2;delay(10000);speedlevel = 1;do speedlevel = 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(spc

10、ount=0) spcount = speedlevel; gorun();void delay(unsigned int endcount)count=0;dowhile(count7) step_index=0;else step_index-; if (step_index0) step_index=7; 在代码三中,我将步进电机的运转控制放在时间中断函数之中,这样主函数就能很方便的加入其它任务的执行,而对步进电机的运转不产生影响。在此代码中,不但实现了步进电机的转速和转向的控制,另外还加了一个停止的功能,呵呵,这肯定是需要的。 步进电机从静止到高速转动需要一个加速的过程,否则电机很容易

11、被“卡住”,代码一、二实现加速不是很方便,而在代码三中,加速则很容易了。在此代码中,当转速参数speedlevel 为2时,可以算出,此时步进电机的转速为1500RPM,而当转速参数speedlevel 1时,转速为3000RPM。当步进电机停止,如果直接将speedlevel 设为1,此时步进电机将被“卡住”,而如果先把speedlevel 设为2,让电机以1500RPM的转速转起来,几秒种后,再把speedlevel 设为1,此时电机就能以3000RPM的转速高速转动,这就是“加速”的效果。 在此电路中,考虑到电流的缘故,我用的NPN三极管是S8050,它的电流最大可达1500mA,而在实

12、际运转中,我用万用表测了一下,当转速为1500RPM时,步进电机的电流只有90mA左右,电机发热量较小,当转速为60RPM时,步进电机的电流为200mA左右,电机发热量较大,所以NPN三极管也可以选用9013,对于电机发热量大的问题,可加一个10欧到20欧的限流电阻,不过这样步进电机的功率将会变小。步进电机驱动器的工作原理步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。 有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用,一般需自己设计驱动器。本文介绍的就是为从一日本产旧式打印机上拆下的步进电机而设计的驱动器

13、。本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。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号齿

14、和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极 产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:图2.步进电机工作时序波形图 2.基于AT89C2051的步进电机驱动器系统电路原理图3 步进电机驱动器系统电路原理图 AT89C2051将控制脉冲从P

15、1口的P1.4P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。图3中的RL1RL4为绕组内阻,50电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1D4)而衰减掉,从而保护了

16、功率管TIP122不受损坏。在50外接电阻上并联一个200F电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。与续流二极管串联的200电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。3.软件设计该驱动器根据拨码开关KX、KY的不同组合有三种工作方式供选择:方式1为中断方式:P3.5(INT1)为步进脉冲输入端,P3.7为正反转脉冲输入端。上位机(PC机或单片机)与驱动器仅以2条线相连。方式2为串行通讯方式:上位机(PC机或单片机)将控制命令发送给驱动器,驱动器根据控制命令自行完成有关控制过程。方式3为拨码开关控制方

17、式:通过K1K5的不同组合,直接控制步进电机。当上电或按下复位键KR后,AT89C2051先检测拨码开关KX、KY的状态,根据KX、KY 的不同组合,进入不同的工作方式。以下给出方式1的程序流程框图与源程序。在程序的编制中,要特别注意步进电机在换向时的处理。为使步进电机在换向时能平滑过渡,不至于产生错步,应在每一步中设置标志位。其中20H单元的各位为步进电机正转标志位;21H单元各位为反转标志位。在正转时,不仅给正转标志位赋值,也同时给反转标志位赋值;在反转时也如此。这样,当步进电机换向时,就可以上一次的位置作为起点反向运动,避免了电机换向时产生错步。图4 方式1程序框图方式1源程序:MOV

18、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,LOOP6J

19、B 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,#

20、40HMOV 21H,#02HAJMP QUITLOOP6: MOV P1,#0E0HMOV 20H,#80HMOV 21H,#01HAJMP QUITLOOP7: MOV P1,#0C0HMOV 20H,#01HMOV 21H,#80HAJMP QUIT;*电机反转*FAN: JB 08H,LOOQ0JB 09H,LOOQ1JB 0AH,LOOQ2JB 0BH,LOOQ3JB 0CH,LOOQ4JB 0DH,LOOQ5JB 0EH,LOOQ6JB 0FH,LOOQ7LOOQ0: MOV P1,#0A0HMOV 21H,#02HMOV 20H,#40HAJMP QUITLOOQ1: MOV P

21、1,#0E0HMOV 21H,#04HMOV 20H,#20HAJMP QUITLOOQ2: MOV P1,#0C0HMOV 21H,#08HMOV 20H,#10HAJMP QUITLOOQ3: MOV P1,#0D0HMOV 21H,#10HMOV 20H,#08HAJMP QUITLOOQ4: MOV P1,#050HMOV 21H,#20HMOV 20H,#04HAJMP QUITLOOQ5: MOV P1,#070HMOV 21H,#40HMOV 20H,#02HAJMP QUITLOOQ6: MOV P1,#030HMOV 21H,#80HMOV 20H,#01HAJMP QUITLOOQ7: MOV P1,#0B0HMOV 21H,#01HMOV 20H,#80HQUIT: RETIEND4.结论该驱动器经实验验证能驱动0.5N.m的步进电机。将驱动部分的电阻、电容及续流二极管的有关参数加以调整,可驱动1.2N.m的步进电机。该驱动器电路简单可靠,结构紧凑,对于I/O口线与单片机资源紧张的系统来说特别适用。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁