资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
单片机控制步进电机实例分析本文主要介绍步进电机的一些基础知识及如何用单片机控制步进电机.步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位 移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的 方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量, 从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速 度,从而达到调速的目的。一、步进电机常识常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永 磁式步进一般为两相,转矩和体积较小,步进角一般为7. 5度 或15度;反应式 步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很 大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应 式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。二、永磁式步进电机的控制下面以电子爱好者业余制作中常用的永磁式步进电机为例,来介绍如何用单 片机控制步进电机。图1是35BY型永磁步进电机的外形图,图2是该电机的接线图,从图中可 以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5 根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识 为C,只要AC、C、BC、C,轮流加电就能驱动步进电机运转,加电的方式可以 有多种,如果将COM端接正电源,那么只要用开关元件(如三极管),将A、 B、轮流接地。下表列出了该电机的一些典型参数:表1 35BY48S03型步机电机参数型号步距角相数电压电流电阻最大静转距定位转距转动惯量 35BY48S03 7. 5 4 12 0. 26 47 180 65 2. 5有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为 0. 26A,因此用一块开路输出达林顿驱动器(ULN2003)来作为驱动,通过 P1.4P1. 7来控制各线圈的接通与切断,电路如图3所示。开机时,?1.01.7 均为高电平,依次将P1.厂P1.7切换为低电平即可驱动步进电机运行,注意在切 换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次 接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。图1 35BY48S03型步进电机外形图红 蓝图2 35BY48S03型步进电机的接线图图3单片机控制35BY48S03型步进电机的电路原理图三、步进电机的驱动实例要求:控制电路如图3所示,开机后,电机不转,按下启动键,电机旋转, 速度为25转/分,按下加1键,速度增加,按下减1键,速度降低,最高速度为 100转/分,最低转带为25转/分,按下停止键,电机停转。速度值要求在数码 管上显示出来。1. 要求分析按上面的分析,改变转速,只要改变P1.0P1.3轮流变低电平的时间即可达 到要求,这个时间不应采用延时来实现,因为会影响到其他功能的实现。这里以 定时的方式来实现。下面首先计算一下定时时间。按要求,最低转速为25转/分,而上述步进电机的步距角为7. 5,即每48个脉冲为1周,即在最低转速时,要求为1200脉冲/分,相当于50ms/脉冲。而在最 高转速时,要求为100转/分,即48000脉冲/分,相当于12. 5ms/脉冲。可以列 出下表表1步进电机转速与定时器定时常数关系速度单步时间(us) TH1 TL1实际定时(us)2526272850000480774629644643768289950 49996. 8236 48074. 1886 46292. 6173 44640. 155100 12500 211 0 12499.2表中不仅计算出了 TH1和TL1,而且还计算出了在这个定时常数下,真实的 定时时间,可以根据这个计算值来估算真实速度与理论速度的误差值。表中TH1和TL1是根据定时时间算出来的定时初值,这里用到的晶振是 11.0592M。有了上述表格,程序就不难实现了,使用定时/计数器T1为定时器, 定时时间到后切换输出脚即可。2. 程序实现定义DSB-1A实验板的S1为启动键,S2为停止键,S3为加1键,S4为减1 键,程序如下:StartEnd bit 01H ;起动及停止标志MinSpd EQU 25 ;起始转动速度MaxSpd EQU 100 ;最高转动速度Speed DATA 23H ;流动速度计数DjCount DATA 24H ;控制电机输出的一个值,初始为11110 111Hidden EQU 10H ;消隐码Counter DATA 57H ;显示计数器DISPBUF DATA 58H ;显示缓冲区ORG 0000HAJMP MAINORG 000BHJMP DISPORG 001BHJMP DJZDORG 30HMAIN:MOV SP,#5FHMOV P1,#OFFHMOV A, HiddenMOV DispBuf, AMOV DispBuf+1, AMOV DispBuf+2, AMOV DjCount,#11110111BMOV SPEED, #MinSpd ;起始转动速度送入计数器CLR StartEnd ;停转状态MOV TMOD, WOOO1OOO1B ;MOV THO, #HIGH(65536-3000)MOV TLO, #LOW(65536-3000)MOV TH1, #0FFH;MOV TL1, #0FFHSETB TROSETB EASETB ETOSETB ET1LOOP: ACALL KEY ;键盘程序JNB FO, m_NEXTl ;无键继续ACALL KEYPROC ;否则调用键盘处理程序 m_NEXTl:MOV A,SpeedMOV B, #10DIV ABMOV DispBuf+5,B ;最低位MOV B, #10DIV ABMOV DispBuf+4,BMOV DispBuf+3, AJB StartEnd, m_Next2CLR TRI ;关闭电机JMP LOOPORL Pl,#U110000Bm_Next2:SETB TRI ;启动电机AJMP LOOP ;主程序结束DIOms:延时程序,键盘处理中调用KEYPROC:MOVA,B ;获取键值JBACC. 2, StartStop ;分析键的代码,某位被按下,则该位为1JBACC. 3, KeyStyJBACC. 4, UpSpdJBACC. 5, DowSpdAJMP KEY_RETStartStop:SETB StartEnd ;启动AJMP KEY_RETKeySty:CLR StartEnd;停止AJMP KEY_RETUpSpd:INCSPEED;MOV A,SPEEDCJNEA, WMaxSpd, KI ;到了最多的次数?DECSPEED ;是则减去1,保证下次仍为该值K1:AJMPKEY_RETDowSpd:DECSPEEDMOVA, SPEEDCJNEA, #MAXSPD, KEY_RET ;不等(未到最大值),返回MOV SPEED,WMinSpd;KEY_RET:RETKEY:获取键值的程序RETDjZd:;定时器T1用于电机转速控制PUSH ACCPUSH PSWMOV A, SpeedSUBB A, #MinSpd ;减基准数MOV DPTR, #DjHMOVC A,A+DPTRMOV TH1, AMOV A, SpeedSUBB A,#MinSpdMOV DPTR, #DjLMOVC A,A+DPTRMOV TL1, AMOV A, DjCountCPL AORL Pl, AMOV A,DjCountJNB ACC. 7, d_NextlJMP d_Next2d_Nextl:MOV DjCount, #11110111Bd_Next2:MOV A,DjCountRL AMOV DjCount, A ;回存ANL Pl, APOP PSWPOP ACCRET IDjH: DB 76, 82, 89, 95, 100, 106, 110, 115, 119, 123, 12DjL: DB 0, 236, 86, 73, 212, 0, 214, 96, 163, 165DISP:;显示程序POP PSWPOP ACCRET IBitTab: DB 7Fh, OBFH, ODFH, OEFH, 0F7H, OFBHDISPTAB:DBOCOH, 0F9H, 0A4H, OBOH, 99H, 92H, 82H, 0F8H, 80H, 90H, 88H, 83H, 0C6H, 0A1H, 86H, 8E H, OFFHEND3. 程序分析本程序主要由键盘程序、显示器程序、步进电机驱动程序三部份组成,主 程序首先初始化各变量,将显示器的高3位消隐,步进电机驱动的各引脚均输出 高电平,然后调用键盘程序,并作判断,如果有键按下,则调用键盘处理程序, 否则直接转下一步。下一步是将当前的转速值转换为BCD码,送入显示缓冲区; 接着判断StartEnd这个位变量,是“1”还是“0”,如果是“1”,则开启定 时器T1,否则关闭定时器T1,为防止关闭时某一相线圈长期通电,因此,在关 闭定时器T1时,将Pl.OPl. 3均置高。至此,主程序的工作即结束。这里为简 便起见,这里没有做高位“0”消隐的工作,即如果速度为10转/分,则显示值 “010”,读者可以自行加入相关的代码来处理这一工作。步进电机的驱动工作是在定时器T1的中断服务程序中实现的,由前述分析, 每次的定时时间到达以后,需要将P1.0P1.3依次接通,程度中用了一个变量 DjCntr来实现这一功能,在主程序初始化时,该变量被赋予初值nnoniB, 进入到定时中断以后,将该变量取出送ACC累加器,并在累加器中进行左移,这 样,该数值就变为1110 1111,然后将该数与P1相“与”,此时,P1.4即输出 低电平,第二次进入中断时,先将该数取反,成为0001 0000,然后将该数与 P1相“或”,这样,P1.4即输出高电平,关断了相应的线圈,然后将该数重新 取出,并作左移,即1110,1111右移成为1101 1111,将该数与P1相“与”, 这样P1. 5即输出低电平,依次类推,Pl. 7P1.4即循环输出低电平。当这一数 据变为0111 1111后,需要作适当的改动,将数据重新变回1111 0111,进行 第二次循环,相关代码,请读者自行分析。定时时间又是如何确定的呢?这里用的是查表的方法,首先用Excel计算得 出在每一种转速下的TH值和TL值,然后,分别放入DjH和DjL表中,在进入 T1中断程序之后,将速度值变量Speed送入累加器ACC,然后减去基数25,使 其基数从0开始计数,然后分别查表,送入TH1和TL1,实现重置定时初值的目 的看完这一部份内容以后,请读者自行完成以下工作:1. 更改程序,将S1定义为“启动/停止”,而S2定义为“方向”,按下S2, 切换电机旋转方向。2. 更改程序,要求转速从1到100。3. 更改
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号