1、毕业设计基于单片机的步进电机控制系统设计目 录基于单片机的步进电机控制系统设计任务书2课题介绍、主要内容、主要器件、主要资料及参考文献、预期设计(论文)成果2一.基于单片机的步进电机控制系统设计6摘要61.1课程设计目的61.2 课程设计说明61.3 步进电机的变频调速71.4系统软硬件协同设计81.5 应用实例10二.单片机的电机驱动接口电路设计18 1.1 .软件设计18三.单片机对电机转向、转速的控制18四.单片机对步进电机的正、反转控制 18五.利用单片机实现对步进电机的运动控制211 引言 21 2 系统总体结构设计 213 系统硬件电路设计 22六.结束语 301基于单片机的步进电
2、机控制系统设计摘要:本文应用单片机、步进电机驱动芯片、字符型LCD和键盘阵列,构建了集步进电机控制器和驱动器为一体的步进电机控制系统。二维工作台作为被控对象通过步进电机驱动滚珠丝杆在X/Y轴方向联动。文中讨论了一种以最少参数确定一条圆弧轨迹的插补方法和步进电机变频调速的方法。步进电机控制系统的开发采用了软硬件协同仿真的方法,可以有效地减少系统开发的周期和成本。最后给出了步进电机控制系统的应用实例。 关键词: 步进电机控制系统,插补算法,变频调速,软硬件协同仿真1.1 课程设计目的1、熟悉和掌握单片机的结构和工作原理。2、掌握单片机的接口技术和相关外围芯片的特性及控制方法。3、掌握以单片机为核心
3、的电路设计的基本方法和技术,了解有关电路参数的计算方法。4、通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。5、通过完成一个包括电路设计和程序开发的完整过程,为今后从事相关工作打下基础。1.2 课程设计说明(1) 作为一种数字伺服执行元件,步进电机具有结构简单、运行可靠、控制方便、控制性能好等优点,广泛应用在数控机床、机器人、自动化仪表等领域。为了实现步进电机的简易运动控制,一般以单片机作为控制系统的微处理器,通过步进电机专用驱动芯片实现步进电机的速度和位置定位控制。(2) 圆弧插补改进算法逐点比较插补算法因其算法简单、易实现且最大误差不超过一个脉冲当量,在步进电机的位置控制中应
4、用的相当广泛1。圆弧插补中,为了确定一条圆弧的轨迹,可采用:给出圆心坐标、起点坐标和终点坐标;给出半径、起点和终点坐标;给出圆弧的三点坐标等。在算法实现时这些参数若要存放在单片机内部资源有限的数据存储器(RAM)中,如果要经过复杂的运算才能确定一段圆弧,不但给微处理器带来负担,而且要经过多步运算,往往会影响到算法的精确度。因此选取一种简单且精确度高的插补算法是非常必要的。本文提出了一种改进算法:在圆弧插补中,无论圆弧在任何位置,是顺圆或是逆圆,都以此圆弧的圆心作为原点来确定其他坐标。因此只须给出圆弧的起点坐标和圆弧角度就可以确定该圆弧。如果一个轴坐标用4个字节存储(如12.36),而角度用2个
5、字节存储(如45),则只需要10个字节即可确定一段二维的圆弧。较之起其他方法,最多可节省14个存储单元。现以第I象限逆圆弧为例,计算其终点坐标。如图1所示,(X0,Y0)为圆弧的起点坐标,(Xe,Ye)为圆弧的终点坐标,为圆弧的角度。 圆弧半径: 终点坐标: 终点坐标相对X轴的角度:本系统要求输入的角度精确到1度,输入坐标的分辨率是0.01,单片机C语言的浮点运算能精确到0.000001,按照上面的公式算出的终点坐标1%,能够满足所要求的精确,虽存在误差,但这个误差小于度。(3) 步进电机的变频调速 虽然步进电机具有快速启停能力强、精度高、转速容易控制的特点,但是在实际运行过程中由于启动和停止
6、控制不当,步进电机仍会出现启动时抖动和停止时过冲的现象,从面影响系统的控制精度。尤其是步进电机工作在频繁启动和停止时,这种现象就更为明显2。为此本文提出了一种基于单片机控制的步进电机加减速离散控制方法。加减速曲线如图2 所示,纵坐标是频率 f,单位为脉冲/秒或步/秒。横坐标时间 t,单位为秒。步进电机以 f0 启动后加速至 t1 时刻达到最高运行频率 f,然后匀速运行,至 t2 时刻开始减速,在 t5 时刻电机停转,总的步数为 N。其中电机从静止加速至最高运行频率和从最高运行频率至停止至是步进电机控制的关键,通常采用匀加速和匀减速方式。图2 时间与频率的函数图 图3 离散化的时间变频图采用单片
7、机对步进电机进行加减速控制,实际上就是改变输出脉冲的时间间隔,可采用软件和硬件两种方法。软件方法依靠延时程序来改变脉冲输出的频率,其中延时的长短是动态的,该方法因为要不停地产生控制脉冲,占用了大量的CPU时间;硬件方法是依靠单片机内部的定时器来实现的,在每次进入定时中断后,改变定时常数(定时器装载值),从而升速时使脉冲频率逐渐增大,减速时使脉冲频率逐渐减小。这种方法占用CPU时间较少,是一种效率比较高的步进电机调速方法。考虑到单片机资源(字长)和编程的方便,不需要每步都计算定时器装载值。如图3所示,采用离散方法将加减速曲线离散化。离散化后速度是分台阶上升的,而且每上升一个台阶都要在该台阶保持一
8、段时间,以克服由于步进电机转子转动惯量所引起的速度滞后。只有当实际运行速度达到预设值后才能急速加速,实际上也是局部速度误差的自动纠正。(4) 系统软硬件协同设计 对于51系列单片机的软件开发,传统的方法是在PC机上采用Keil等开发工具进行程序设计、编译、调试,待程序调试通过之后生成目标文件下载至单片机硬件电路再进行硬件调试3。这种方法只有硬件电路完成之后才能进行系统功能测试,若此时发现硬件电路存在设计问题且必须进行修改时就会显著影响系统开发的成本和周期。为此,本文采用了系统软硬件协同仿真的开发方法,使得硬件电路实现前的功能测试成为可能。同时硬件电路的软件化仿真为硬件电路的设计与实现提供了有力
9、的保障。其中在Keil uVision2集成开发环境下,实现步进电机控制系统的程序设计、编译、调试,并最终生成目标文件 .hex,而由英国Proteus Labcenter electronics公司所提供的EDA工具Proteus则利用该目标文件 .hex 实现对步进电机控制系统硬件电路功能的测试。 图4 步进电机控制系统硬件电路仿真如图4所示,单片机AT89C55司职步进电机控制器,通过运行在Keil uVision2 环境下所开发的程序来控制两个步进电机驱动芯片L298,从而实现对AXIS_X / AXIS_Y两轴步进电机的联动控制。L298驱动芯片的步进脉冲输入信号来自AT89C55
10、P0端口,使能信号ENABLE A与ENABLE B并联接到AT89C55的P3.0、P3.1口,由程序控制实现步进电机的使能,从而避免电机线圈处于短路状态而烧坏驱动芯片。4 x 4键盘阵列接AT89C55的P1端口,通过程序设计定义每个按键的具体功能。LCD的数据端口DB0DB7接AT89C55的P2端口,控制端口RS, RW, E分别接单片机的P3.5, P3.6, P3.7口。相关的参数值、X/Y轴坐标值可以通过LCD以文本方式显示。本文采用软硬件协同仿真的方法经过设计测试修正再测试一次次迭代开发,在制作控制系统硬件电路之前即可实现对系统整机功能的测试。待系统程序和硬件电路设计方案最终完
11、善之后便可以实际制作如图5所示的硬件电路。显然该种方法可以显著提高系统软硬件开发的成功率,从而有效降低系统的开发周期和开发成本。(5) 应用实例图5即是根据图4进行硬件电路仿真的最终结果所制作的步进电机控制系统电路板。该电路驱动X/Y轴步进电机通过滚珠丝杆带动二维工作台作联动,并由一只铅笔模拟加工刀具将所要加工的二维轨迹描绘出来。图5步进电机控制系统硬件电路 图6 二维模拟工作平台运动轨迹步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。 有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用,一般需自己设计驱动器
12、。此介绍为从一日本产旧式打印机上拆下的步进电机而设计的驱动器。该先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。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号齿之间磁力线的作用
13、,使转子转动,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将控制脉冲从
14、P1口的P1.4P1.7输出,经74LS14反相后进入9014,经9014放大后控制光电开关,光电隔离后,由功率管TIP122将脉冲信号进行电压和电流放大,驱动步进电机的各相绕组。使步进电机随着不同的脉冲信号分别作正转、反转、加速、减速和停止等动作。图中L1为步进电机的一相绕组。AT89C2051选用频率22MHz的晶振,选用较高晶振的目的是为了在方式2下尽量减小AT89C2051对上位机脉冲信号周期的影响。图3中的RL1RL4为绕组内阻,50电阻是一外接电阻,起限流作用,也是一个改善回路时间常数的元件。D1D4为续流二极管,使电机绕组产生的反电动势通过续流二极管(D1D4)而衰减掉,从而保护
15、了功率管TIP122不受损坏。在50外接电阻上并联一个200F电容,可以改善注入步进电机绕组的电流脉冲前沿,提高了步进电机的高频性能。与续流二极管串联的200电阻可减小回路的放电时间常数,使绕组中电流脉冲的后沿变陡,电流下降时间变小,也起到提高高频工作性能的作用。3.软件设计该驱动器根据拨码开关KX、KY的不同组合有三种工作方式供选择:方式1 中断方式:P3.5(INT1)为步进脉冲输入端,P3.7为正反转脉冲输入端。上位机(PC机或单片机)与驱动器仅以2条线相连。方式2 串行通讯方式:上位机(PC机或单片机)将控制命令发送给驱动器,驱动器根据控制命令自行完成有关控制过程。方式3 拨码开关控制
16、方式:通过K1K5的不同组合,直接控制步进电机。当上电或按下复位键KR后,AT89C2051先检测拨码开关KX、KY的状态,根据KX、KY 的不同组合,进入不同的工作方式。以下给出方式1的程序流程框图与源程序。在程序的编制中,要特别注意步进电机在换向时的处理。为使步进电机在换向时能平滑过渡,不至于产生错步,应在每一步中设置标志位。其中20H单元的各位为步进电机正转标志位;21H单元各位为反转标志位。在正转时,不仅给正转标志位赋值,也同时给反转标志位赋值;在反转时也如此。这样,当步进电机换向时,就可以上一次的位置作为起点反向运动,避免了电机换向时产生错步。图4 方式1程序框图方式1源程序:MOV
17、 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,LOOP6
18、JB 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,
19、#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
20、P1,#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 QUI
21、TLOOQ7: MOV P1,#0B0HMOV 21H,#01HMOV 20H,#80HQUIT: RETIEND4.结论:器经实验验证能驱动0.5N.m的步进电机。将驱动部分的电阻、电容及续流二极管的有关参数加以调整,可驱动1.2N.m的步进电机。该驱动器电路简单可靠,结构紧凑,对于I/O口线与单片机资源紧张的系统来说特别适用。2. 单片机的电机驱动接口电路设计IO接口的电流不够维持达林顿的导通状态造成的,可以给大功率管加一个9018或9013的前级放大,最好不要直接使用单片机驱动,建议使用光耦。达林顿管又称复合管。它将二只三极管适当的连接在一起,以组成一只等效的新的三极管。这等于效三极管的
22、放大倍数是二者之积。在电子学电路设计中,达林顿接法常用于功率放大器和稳压电源中。 达林顿电路有四种接法: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. 单片机对电机转向、转速的控制如果只
23、有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个H桥,并且两个I/O口输出高低电频控制,现在就来说说一个转向的控制方式吧。比如用P1口的P1.0,P1.1,P1.2三个I/O口接按键,P3.4口接电频输出,编个定时程序及按键程序,如果是快(全速运行),那就P3.4口直接输出高电频“1”;中(50%),那就让P3.4口050ms输出高电频“1”,50ms100ms输出低电频“0”,后面就一直以50ms进行一次取反;慢(就用10%吧),040ns输出高电频“1”,41ns400ns输出低电频“0”,这样为一个周期,后面就一直循环吧。如果按键P1.0按下,执行方式1,全速运行,否则以默认
24、方式运行;按键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拍正转
25、zheng=0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03单双8拍反转 fang=0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09*/#includereg51.h#includeintrins.h#define uchar unsigned char#define uint unsigned intbit front_move,back_move;uchar jzaj(void); /单4拍正转 zheng=0x01,0x08,0x04,0x02; 单4拍反转 fang=0x01,0x02,0x04,0x08;void ajcl(
26、uchar jz);void delay(uchar del); uchar code zheng=0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03;uchar code fang=0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09;void timer0() interrupt 1static uchar jz;TH0=0xfc;TL0=0x18;jz=jzaj();if(jz)ajcl(jz);void main()uchar count=0;TMOD=0x01;TH0=0xFC;TL0=0x18;TR0=1;ET0=1;EA=1;
27、while(1)if(front_move)P2=zhengcount;delay(100);count+;if(count=8) count=0;if(back_move)P2=fangcount;delay(100);count+;if(count=8) count=0;uchar jzaj(void)uchar hz,lz;P1=0xf0; /置所有行为低电平,行扫描,列线输入(此时)if(P1&0xf0)!=0xf0) /判断是否有有键按下(读取列的真实状态,若第4列有键按下则P1的值会变成0111 0000),有往下执行delay(10); /延时去抖动(10ms)if(P1&0xf
28、0)!=0xf0) /再次判断列中是否是干扰信号,不是则向下执行hz=0xfe; /逐行扫描初值(即先扫描第1行) while(hz&0x10)!=0) /行扫描完成时(即4行已经全部扫描完成)sccode为1110 1111 停止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值为1110 1111 退出while程序hz=_crol_(hz,1);/行扫描码左移一位elseretur
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1