基于单片机的步进电机控制系统设计.docx
- 文档编号:9560238
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:32
- 大小:523.38KB
基于单片机的步进电机控制系统设计.docx
《基于单片机的步进电机控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制系统设计.docx(32页珍藏版)》请在冰豆网上搜索。
基于单片机的步进电机控制系统设计
目录
基于单片机的步进电机控制系统设计任务书…………………………………………………2
课题介绍、主要内容、主要器件、主要资料及参考文献、预期设计(论文)成果………2
一.基于单片机的步进电机控制系统设计…………………………………………………6
摘要…………………………………………………………………………………………6
1.1课程设计目的…………………………………………………………………………6
1.2课程设计说明………………………………………………………………………6
1.3步进电机的变频调速………………………………………………………………7
1.4系统软硬件协同设计………………………………………………………………8
1.5应用实例……………………………………………………………10
二.单片机的电机驱动接口电路设计………………………………………………………18
1.1.软件设计……………………………………………………………………………18
三.单片机对电机转向、转速的控制……………………………………………………………18
四.单片机对步进电机的正、反转控制………………………………………………………18
五.利用单片机实现对步进电机的运动控制…………………………………………………21
1引言……………………………………………………………………………………………212系统总体结构设计……………………………………………………………………………21
3系统硬件电路设计……………………………………………………………………………22
六.结束语……………………………………………………………………………………30
1.基于单片机的步进电机控制系统设计
摘要:
本文应用单片机、步进电机驱动芯片、字符型LCD和键盘阵列,构建了集步进电机控制器和驱动器为一体的步进电机控制系统。
二维工作台作为被控对象通过步进电机驱动滚珠丝杆在X/Y轴方向联动。
文中讨论了一种以最少参数确定一条圆弧轨迹的插补方法和步进电机变频调速的方法。
步进电机控制系统的开发采用了软硬件协同仿真的方法,可以有效地减少系统开发的周期和成本。
最后给出了步进电机控制系统的应用实例。
关键词:
步进电机控制系统,插补算法,变频调速,软硬件协同仿真
1.1课程设计目的
1、熟悉和掌握单片机的结构和工作原理。
2、掌握单片机的接口技术和相关外围芯片的特性及控制方法。
3、掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
4、通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5、通过完成一个包括电路设计和程序开发的完整过程,为今后从事相关工作打下基础。
1.2课程设计说明
(1)作为一种数字伺服执行元件,步进电机具有结构简单、运行可靠、控制方便、控制性能好等优点,广泛应用在数控机床、机器人、自动化仪表等领域。
为了实现步进电机的简易运动控制,一般以单片机作为控制系统的微处理器,通过步进电机专用驱动芯片实现步进电机的速度和位置定位控制。
(2)圆弧插补改进算法
逐点比较插补算法因其算法简单、易实现且最大误差不超过一个脉冲当量,在步进电机的位置控制中应用的相当广泛[1>。
圆弧插补中,为了确定一条圆弧的轨迹,可采用:
给出圆心坐标、起点坐标和终点坐标;给出半径、起点和终点坐标;给出圆弧的三点坐标等。
在算法实现时这些参数若要存放在单片机内部资源有限的数据存储器(RAM)中,如果要经过复杂的运算才能确定一段圆弧,不但给微处理器带来负担,而且要经过多步运算,往往会影响到算法的精确度。
因此选取一种简单且精确度高的插补算法是非常必要的。
本文提出了一种改进算法:
在圆弧插补中,无论圆弧在任何位置,是顺圆或是逆圆,都以此圆弧的圆心作为原点来确定其他坐标。
因此只须给出圆弧的起点坐标和圆弧角度就可以确定该圆弧。
如果一个轴坐标用4个字节存储(如12.36),而角度用2个字节存储(如45°),则只需要10个字节即可确定一段二维的圆弧。
较之起其他方法,最多可节省14个存储单元。
现以第I象限逆圆弧为例,计算其终点坐标。
如图1所示,(X0,Y0)为圆弧的起点坐标,(Xe,Ye)为圆弧的终点坐标,θ为圆弧的角度。
圆弧半径:
终点坐标:
终点坐标相对X轴的角度:
本系统要求输入的角度精确到1度,输入坐标的分辨率是0.01,单片机C语言的浮点运算能精确到0.000001,按照上面的公式算出的终点坐标1%,能够满足所要求的精确,虽存在误差,但这个误差小于度。
(3)步进电机的变频调速虽然步进电机具有快速启停能力强、精度高、转速容易控制的特点,但是在实际运行过程中由于启动和停止控制不当,步进电机仍会出现启动时抖动和停止时过冲的现象,从面影响系统的控制精度。
尤其是步进电机工作在频繁启动和停止时,这种现象就更为明显[2>。
为此本文提出了一种基于单片机控制的步进电机加减速离散控制方法。
加减速曲线如图2所示,纵坐标是频率f,单位为脉冲/秒或步/秒。
横坐标时间t,单位为秒。
步进电机以f0启动后加速至t1时刻达到最高运行频率f,然后匀速运行,至t2时刻开始减速,在t5时刻电机停转,总的步数为N。
其中电机从静止加速至最高运行频率和从最高运行频率至停止至是步进电机控制的关键,通常采用匀加速和匀减速方式。
图2时间与频率的函数图
图3离散化的时间变频图
采用单片机对步进电机进行加减速控制,实际上就是改变输出脉冲的时间间隔,可采用软件和硬件两种方法。
软件方法依靠延时程序来改变脉冲输出的频率,其中延时的长短是动态的,该方法因为要不停地产生控制脉冲,占用了大量的CPU时间;硬件方法是依靠单片机内部的定时器来实现的,在每次进入定时中断后,改变定时常数(定时器装载值),从而升速时使脉冲频率逐渐增大,减速时使脉冲频率逐渐减小。
这种方法占用CPU时间较少,是一种效率比较高的步进电机调速方法。
考虑到单片机资源(字长)和编程的方便,不需要每步都计算定时器装载值。
如图3所示,采用离散方法将加减速曲线离散化。
离散化后速度是分台阶上升的,而且每上升一个台阶都要在该台阶保持一段时间,以克服由于步进电机转子转动惯量所引起的速度滞后。
只有当实际运行速度达到预设值后才能急速加速,实际上也是局部速度误差的自动纠正。
(4)系统软硬件协同设计对于51系列单片机的软件开发,传统的方法是在PC机上采用Keil等开发工具进行程序设计、编译、调试,待程序调试通过之后生成目标文件下载至单片机硬件电路再进行硬件调试[3>。
这种方法只有硬件电路完成之后才能进行系统功能测试,若此时发现硬件电路存在设计问题且必须进行修改时就会显著影响系统开发的成本和周期。
为此,本文采用了系统软硬件协同仿真的开发方法,使得硬件电路实现前的功能测试成为可能。
同时硬件电路的软件化仿真为硬件电路的设计与实现提供了有力的保障。
其中在KeiluVision2集成开发环境下,实现步进电机控制系统的程序设计、编译、调试,并最终生成目标文件*.hex,而由英国ProteusLabcenterelectronics公司所提供的EDA工具Proteus则利用该目标文件*.hex实现对步进电机控制系统硬件电路功能的测试。
图4步进电机控制系统硬件电路仿真
如图4所示,单片机AT89C55司职步进电机控制器,通过运行在KeiluVision2环境下所开发的程序来控制两个步进电机驱动芯片L298,从而实现对AXIS_X/AXIS_Y两轴步进电机的联动控制。
L298驱动芯片的步进脉冲输入信号来自AT89C55P0端口,使能信号ENABLEA与ENABLEB并联接到AT89C55的P3.0、P3.1口,由程序控制实现步进电机的使能,从而避免电机线圈处于短路状态而烧坏驱动芯片。
4x4键盘阵列接AT89C55的P1端口,通过程序设计定义每个按键的具体功能。
LCD的数据端口DB0~DB7接AT89C55的P2端口,控制端口RS,RW,E分别接单片机的P3.5,P3.6,P3.7口。
相关的参数值、X/Y轴坐标值可以通过LCD以文本方式显示。
本文采用软硬件协同仿真的方法经过设计à测试à修正à再测试一次次迭代开发,在制作控制系统硬件电路之前即可实现对系统整机功能的测试。
待系统程序和硬件电路设计方案最终完善之后便可以实际制作如图5所示的硬件电路。
显然该种方法可以显著提高系统软硬件开发的成功率,从而有效降低系统的开发周期和开发成本。
(5)应用实例
图5即是根据图4进行硬件电路仿真的最终结果所制作的步进电机控制系统电路板。
该电路驱动X/Y轴步进电机通过滚珠丝杆带动二维工作台作联动,并由一只铅笔模拟加工刀具将所要加工的二维轨迹描绘出来。
图5步进电机控制系统硬件电路
图6二维模拟工作平台运动轨迹
步进电机在控制系统中具有广泛的应用。
它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。
有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用,一般需自己设计驱动器。
此介绍为从一日本产旧式打印机上拆下的步进电机而设计的驱动器。
该先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。
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.步进电机工作时序波形图
图3步进电机驱动器系统电路原理图
AT89C2051将控制脉冲从P1口的P1.4~P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。
使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。
图中L1为步进电机的一相绕组。
AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。
图3中的RL1~RL4为绕组内阻,50Ω电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。
D1~D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1~D4)而衰减掉,从而保护了功率管TIP122不受损坏。
在50Ω外接电阻上并联一个200μF电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。
与续流二极管串联的200Ω电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。
3.软件设计
该驱动器根据拨码开关KX、KY的不同组合有三种工作方式供选择:
方式1中断方式:
P3.5(INT1)为步进脉冲输入端,P3.7为正反转脉冲输入端。
上位机(PC机或单片机)与驱动器仅以2条线相连。
方式2串行通讯方式:
上位机(PC机或单片机)将控制命令发送给驱动器,驱动器根据控制命令自行完成有关控制过程。
方式3拨码开关控制方式:
通过K1~K5的不同组合,直接控制步进电机。
当上电或按下复位键KR后,AT89C2051先检测拨码开关KX、KY的状态,根据KX、KY的不同组合,进入不同的工作方式。
以下给出方式1的程序流程框图与源程序。
在程序的编制中,要特别注意步进电机在换向时的处理。
为使步进电机在换向时能平滑过渡,不至于产生错步,应在每一步中设置标志位。
其中20H单元的各位为步进电机正转标志位;21H单元各位为反转标志位。
在正转时,不仅给正转标志位赋值,也同时给反转标志位赋值;在反转时也如此。
这样,当步进电机换向时,就可以上一次的位置作为起点反向运动,避免了电机换向时产生错步。
图4方式1程序框图
方式1源程序:
MOV20H,#00H;20H单元置初值,电机正转位置指针
MOV21H,#00H;21H单元置初值,电机反转位置指针
MOVP1,#0C0H;P1口置初值,防止电机上电短路
MOVTMOD,#60H;T1计数器置初值,开中断
MOVTL1,#0FFH
MOVTH1,#0FFH
SETBET1
SETBEA
SETBTR1
SJMP$
;***********计数器1中断程序************
IT1P:
JBP3.7,FAN;电机正、反转指针
;*************电机正转*****************
JB00H,LOOP0
JB01H,LOOP1
JB02H,LOOP2
JB03H,LOOP3
JB04H,LOOP4
JB05H,LOOP5
JB06H,LOOP6
JB07H,LOOP7
LOOP0:
MOVP1,#0D0H
MOV20H,#02H
MOV21H,#40H
AJMPQUIT
LOOP1:
MOVP1,#090H
MOV20H,#04H
MOV21H,#20H
AJMPQUIT
LOOP2:
MOVP1,#0B0H
MOV20H,#08H
MOV21H,#10H
AJMPQUIT
LOOP3:
MOVP1,#030H
MOV20H,#10H
MOV21H,#08H
AJMPQUIT
LOOP4:
MOVP1
#070H
MOV20H,#20H
MOV21H,#04H
AJMPQUIT
LOOP5:
MOVP1,#060H
MOV20H,#40H
MOV21H,#02H
AJMPQUIT
LOOP6:
MOVP1,#0E0H
MOV20H,#80H
MOV21H,#01H
AJMPQUIT
LOOP7:
MOVP1,#0C0H
MOV20H,#01H
MOV21H,#80H
AJMPQUIT
;***************电机反转*****************
FAN:
JB08H,LOOQ0
JB09H,LOOQ1
JB0AH,LOOQ2
JB0BH,LOOQ3
JB0CH,LOOQ4
JB0DH,LOOQ5
JB0EH,LOOQ6
JB0FH,LOOQ7
LOOQ0:
MOVP1,#0A0H
MOV21H,#02H
MOV20H,#40H
AJMPQUIT
LOOQ1:
MOVP1,#0E0H
MOV21H,#04H
MOV20H,#20H
AJMPQUIT
LOOQ2:
MOVP1,#0C0H
MOV21H,#08H
MOV20H,#10H
AJMPQUIT
LOOQ3:
MOVP1,#0D0H
MOV21H,#10H
MOV20H,#08H
AJMPQUIT
LOOQ4:
MOVP1,#050H
MOV21H,#20H
MOV20H,#04H
AJMPQUIT
LOOQ5:
MOVP1,#070H
MOV21H,#40H
MOV20H,#02H
AJMPQUIT
LOOQ6:
MOVP1,#030H
MOV21H,#80H
MOV20H,#01H
AJMPQUIT
LOOQ7:
MOVP1,#0B0H
MOV21H,#01H
MOV20H,#80H
QUIT:
RETI
END
4.结论:
器经实验验证能驱动0.5N.m的步进电机。
将驱动部分的电阻、电容及续流二极管的有关参数加以调整,可驱动1.2N.m的步进电机。
该驱动器电路简单可靠,结构紧凑,对于I/O口线与单片机资源紧张的系统来说特别适用。
2.单片机的电机驱动接口电路设计
IO接口的电流不够维持达林顿的导通状态造成的,可以给大功率管加一个9018或9013的前级放大,最好不要直接使用单片机驱动,建议使用光耦。
达林顿管又称复合管。
它将二只三极管适当的连接在一起,以组成一只等效的新的三极管。
这等于效三极管的放大倍数是二者之积。
在电子学电路设计中,达林顿接法常用于功率放大器和稳压电源中。
达林顿电路有四种接法:
NPN+NPN,PNP+PNP,NPN+PNP,PNP+NPN.
前二种是同极性接法,后二种是异极性接法。
同极性接法,一楼楼主已经介绍过,这里说一下异极性接法。
以NPN+PNP为例。
设前一三极管T1的三极为C1B1E1,后一三极管T2的三极为C2B2E2。
达林顿管的接法应为:
C1B2应接一起,E1C2应接一起。
等效三极管CBE的管脚,C=E1,B=B1,E=E1(即C2)。
等效三极管极性,与前一三极管相同。
即为NPN型。
PNP+NPN的接法与此类同。
3.单片机对电机转向、转速的控制
如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个H桥,并且两个I/O口输出高低电频控制,现在就来说说一个转向的控制方式吧。
比如用P1口的P1.0,P1.1,P1.2三个I/O口接按键,P3.4口接电频输出,编个定时程序及按键程序,如果是快(全速运行),那就P3.4口直接输出高电频“1”;中(50%),那就让P3.4口0—50ms输出高电频“1”,50ms—100ms输出低电频“0”,后面就一直以50ms进行一次取反;慢(就用10%吧),0—40ns输出高电频“1”,41ns—400ns输出低电频“0”,这样为一个周期,后面就一直循环吧。
如果按键P1.0按下,执行方式1,全速运行,否则以默认方式运行;按键P1.1按下,执行方式2,改变占空比,以50%的速度运行,否则,不作改变;按键P1.2按下,执行方式3,改变占空比,以10%的速度运行,否则,不作改变。
当然,占空比及定时时间可以根据个人需要进行改变,这只跟定时程序有关了,定时程序跟按键程序这边就不说了,别忘了按键去抖,咔咔,不然可能会乱掉。
4.单片机对步进电机的正、反转控制
单4拍正转zheng[]={0x01,0x08,0x04,0x02}
单4拍反转fang[]={0x01,0x02,0x04,0x08}
双4拍正转zheng[]={0x09,0x0c,0x06,0x03}
双4拍反转fang[]={0x03,0x06,0x0c,0x09}
单双8拍正转zheng[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}
单双8拍反转fang[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}
*****************************************/
#include"reg51.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
bitfront_move,back_move;
ucharjzaj(void);//单4拍正转zheng[]={0x01,0x08,0x04,0x02};单4拍反转fang[]={0x01,0x02,0x04,0x08};
voidajcl(ucharjz);
voiddelay(uchardel);
ucharcodezheng[]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};
ucharcodefang[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
voidtimer0()interrupt1
{
staticucharjz;
TH0=0xfc;
TL0=0x18;
jz=jzaj();
if(jz)
ajcl(jz);
}
voidmain()
{
ucharcount=0;
TMOD=0x01;
TH0=0xFC;
TL0=0x18;
TR0=1;
ET0=1;
EA=1;
while
(1)
{
if(front_move)
{
P2=zheng[count];
delay(100);
count++;
if(count==8)count=0;
}
if(back_move)
{
P2=fang[count];
delay(100);
count++;
if(count==8)count=0;
}
}
}
ucharjzaj(void)
{
ucharhz,lz;
P1=0xf0;//置所有行为低电平,行扫描,列线输入(此时)
if((P1&0xf0)!
=0xf0)//判断是否有有键按下(读取列的真实状态,若第4列有键按下则P1的值会变成01110000),有往下执行
{
delay(10);//延时去抖动(10ms)
if((P1&0xf0)!
=0xf0)//再次判断列中是否是干扰信号,不是则向下执行
{
hz=0xfe;//逐行扫描初值(即先扫描第1行)
while((hz&0x10)!
=0)//行扫描完成时(即4行已经全部扫描完成)sccode为11101111停止while程序
{
P1=hz;//输出行扫描码
if((P1&hz)!
=hz)//***(P2&0xf0)!
=0xf0***也可这样本行有键按下(即P1(真实的状态)的高四位不全为1)
{
lz=(P1&0xf0)|0x0f;//列
while((P1&0xf0)!
=0xf0);
return((~hz)|(~lz));//返回行和列
break;//有按键返回提前退出循环
}
else//所扫描的行没有键按下,则扫描下一行,直到4行都扫描,此时sccode值为11101111退出while程序
hz=_crol_(hz,1);//行扫描码左移一位
}
}
}
else
return0;//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 步进 电机 控制系统 设计