步进电机的单片机实现.docx
《步进电机的单片机实现.docx》由会员分享,可在线阅读,更多相关《步进电机的单片机实现.docx(25页珍藏版)》请在冰豆网上搜索。
![步进电机的单片机实现.docx](https://file1.bdocx.com/fileroot1/2023-2/2/60863e4d-d967-4c7e-8d89-44ce4f94d938/60863e4d-d967-4c7e-8d89-44ce4f94d9381.gif)
步进电机的单片机实现
单片机课程设计报告
步进电机控制
姓名:
班级:
学号:
指导老师:
日期:
华南农业大学工程学院
摘要
步进电动机由于用其组成的开环系统既简单、廉价,又非常可行,因此在打印机等办公自动化设备以及各种控制装置等众多领域有着极其广泛的应用。
本文介绍的是一种基于单片机的步进电机的系统设计,用汇编语言编写出电机的正转、反转、加速、减速、停止程序,通过单片机、电机的驱动芯片ULN2003A以及相应的按键实现以上功能,并且步进电机的工作状态要用相应的发光二极管显示出来。
本文内容介绍了步进电机以及单片机原理、该系统的硬件电路、程序组成,同时对软、硬件进行了调试,同时介绍了调试过程中出现的问题以及解决问题的方法。
该设计具有思路明确、可靠性高、稳定性强等特点,通过调试实现了上述功能。
关键词:
步进电机;脉宽调制;驱动机构;单片机;转动
目录
1方案比较与选择...........................................................1
1.1方案目标...............................................................1
1.2设计方案比较与选择.....................................................21.2.1单片机控制电路.......................................................2
1.2.2步进电机的驱动........................................................3
1.2.3按键电路设计..........................................................3
1.2.4状态显示模块..........................................................3
2电路设计与原理分析.......................................................4
2.1电路设计...............................................................4
2.2电路原理分析...........................................................5
2.2.1按键部分.............................................................5
2.2.2驱动部分.............................................................5
2.2.3状态显示部分.........................................................6
2.2.4时钟部分.............................................................6
3软件设计................................................................7
3.1查键部分...............................................................8
3.2前进部分...............................................................8
3.3后退部分................................................................9
3.4加速部分...............................................................10
3.5减速部分..............................................................11
4电路板制作、焊接.........................................................12
4.1电路板制作.............................................................13
4.2电路焊接...............................................................13
5调试与检测出错及处理方法.................................................13
5.2程序编译时的错误与解决方法.............................................13
5.2步进电机转动错误及解决方法.............................................13
6课程设计心得.............................................................13
Abstract..................................................................15
参考文献............................................................................16附件1源代码.......................................................................17
附件2元器件清单..................................................................22
1方案比较与选择
1.1方案目标
设计一个步进电机驱动控制系统,要求有正反转控制和八级速度控制,而且在启动、停止、转向的的时候均有加/减速控制,能较好的消除振荡与失步现象。
并且用数码管和LED灯作为显示模块显示出当前电机运转状态。
其功能实现流程如图1所示。
图1程序执行流程框图
为实现此功能,本设计分为软件和硬件两部分,硬件电路方面主要由:
电源部分、按键部分、驱动部分、状态指示部分、时钟部分组成,各部分之间关系如图2所示。
图2模块关系图
1.2设计方案比较与选择
1.2.1单片机控制电路
方案
(1):
用AT89C52作为单片机控制电路,科反复擦写,并且其功能强大,能应用于较复杂的控制场合。
但AT89C52外围电路接线复杂;需要用并行编程器下载程序,并且每次烧写程序都需要握手操作,极不方便。
方案
(2):
而AT89S52有低功耗高性能体积小的特点,并且适用于常规编程器,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
另外,AT89S52支持ISP下载,并且可以通过AT89S52系统板预留ISP下载接口,实现在线烧写程序。
方案(3):
STC89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的STC89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
STC89S52支持ISP下载,并且可以通过STC89S52系统板预留ISP下载接口,实现在线烧写程序。
综合比较上述两种方案,应选择方案(3),单片机最小系统模块采用STC89S52。
1.2.2步进电机的驱动
方案
(1):
使用UCN5804B芯片。
UCN5804B芯片适用于四相步进电机的单极性驱动,它最大能输出1.5A电流、3.5V电压。
内部集成有驱动电路,上电自行复位,可以控制转向和输出使能。
电路更简单,编程更简便。
UCN5804B芯片驱动电路如图1所示。
其中4、5、12、13脚为接地引脚,1、3、6、8脚为输出引脚,电动机各相的接线如图1所示,14脚是控制电机的转向,其中低电平为正转,高电平为反转,11脚是步进脉冲的输入端,9、10脚决定工作方式:
00为双四拍、01为八拍、10为单四拍、11为禁止。
但UCN5804B芯片市场需求不高,而且其驱动电压需要28V,28V电压得到并不方便。
方案
(2):
使用ULN2003A芯片。
ULN2003A是高耐压、大电流、内部由七个硅NPN达林顿管组成的驱动芯片。
ULN2003A的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003A工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
ULN2003A的输出结构是集电极开路的,所以要在输出端接一个上拉电阻,在输入低电平的时候输出才是高电平。
在驱动负载的时候,电流是由电源通过负载灌入ULN2003A的。
ULN2003A芯片适用于四相步进电机的单极性驱动,而且单片机控制简单,能实现较容易,器件常用,电源只需+5V,功能实现可行性较好
综合比较上述两种方案,ULN2003A芯片更常用,而且电源只需+5V,故选择方案二,四相步进电机的驱动芯片采用ULN2003A。
1.2.3按键电路设计
方案
(1):
使用矩阵方式排布的键盘。
矩阵键盘可以节省I/O口,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
方案
(2):
使用独立方式排布的键盘。
也就是一个一个按键占用一个I/O口,简单容易实现。
而此次设计只用到了四个按键,故可采用独立按键,即方案
(2)。
1.2.4状态显示模块
方案
(1):
使用一般的数码管作为显示模块的一部分。
显示信息详细具体,具有比较高的可读性,但是电路连接复杂。
方案
(2):
使用发光二极管作为显示模块的一部分。
反应的信息有限但是直观,而且电路实现简单。
本次设计选用发光二极管作为显示部分,即采用方案
(2)。
2电路设计与原理分析
2.1电路设计
为实现所设计的步进电机的控制,电路图如图3所示,由电源部分、按键部分、驱动部分、状态指示部分、时钟部分组成。
本系统采用外部中断方式,p0口作为信号的输入部分,p1口为发光二极管显示部分,p2口作为电机的驱动部分。
图3原理图
2.2电路原理分析
2.2.1按键部分
本次设计选用的是单片机的P0口来控制信号的输入,所以把按键开关和P0口连接起来,当按下开关S1时,相当于给P0.0口一个低电平;当按下开关S2时,相当于给P0.1口一个低电平;当按下开关S3时,相当于给P0.2口一个低电平;当按下开关S4时,相当于给P0.3口一个低电平;当按下开关S5时,相当于给P0.4口一个低电平。
然后通过单片机实行相应的操作。
如图4所示。
图4按键部分电路
2.2.2驱动部分
此电路是步进电机的驱动部分,我选用的是ULN2003芯片来驱动的,ULN2003系列是一款高耐压,大电流达林顿管驱动器,包含7个NPN达林顿管。
如图5所示。
图5驱动部分电路
2.2.3状态显示部分
状态显示用P1口控制发光二极管的显示,如果相应端口是低电平,相应的发光二极管就会亮,用它来表示步进电机所处的状态。
如图6所示。
图6状态显示电路
2.2.4时钟部分
时钟电路是计算机的心脏,它控制着计算机的工作节奏,可以通过提高时钟频率来提高CPU的速度,本次设计采用的晶振为12MHz。
如图7所示。
图7时钟部分电路
3软件设计
与其它的微处理器一样,开发步进电机驱动系统控制程序也需要一套完整的软件和硬件开发工具。
近年来,随着以51单片机为内核的单片机的不断发展和普及,国外的一些公司纷纷推出了以51单片机为基础的集成开发环境。
本次课程设计选用的单片机是STC89S52。
系统分为电机正转、电机反转、电机加速与电机减速的几部分组成,其主程序框图如图8所示。
图8主程序框
3.1查键部分
查键程序用于判断P0.1口与P0.2口的值,当p0.1口为0时,电机转动,当p0.1口为1时,继续判断p0.2口的值,p0.2口为0时,电机反转。
如图9所示。
图9查键部分流程图
3.2前进部分
系统初始化之后,前进子程序motor_ffw用于给P2口送不同的值,根据电机转动的相序,使电机正向转动,P2口的值分别为0x08,0x04,0x02,0x01。
流程图如图10所示。
图10前进部分流程图
3.3后退部分
电机反转原理与正转相似,此时P2口的值分别为0x01,0x02,0x04,0x08。
流程图如图11所示。
图11后退部分流程图
3.4加速部分
当电机正转或反转的时候,按下加速键,调用加速子程序motor_up,使电机每转动一步的延时时间变短,从而实现电机的加速。
流程图如图12所示。
图12加速部分流程图
3.5减速部分
电机正转或反转的时候,按下减速键,调用减速子程序motor_down通过改变电机每转动一步的延时时间,使时间变长,从而实现电机减速。
流程图如图13所示。
图13减速部分流程图
4电路板制作、焊接
4.1电路板制作
电路板的制作过程为:
(1)电路图原理图设计;
(2)PCB板图设计(元器件位置、连接图等);
(3)线路打印;
(4)将PCB板图复制在PCB板上;
(5)曝光,时间约为900S;
(6)腐蚀、漂洗;
(7)开孔;
(8)打磨;
其中,电路原理图的设计以及布线在AltiumDesigner中完成。
设计电路时需要绘制PCB版,由于对元器件规格没有很深刻的理解,很多元器件的封装选择有误,而且有些元器件的封装软件库里并没有,需要自己更新库,寻找对应的封装。
由于电路比较复杂,元器件比较多,摆放位置比较紧凑,在使用软件进行自动布线时效果不理想,于是改为手动布线,不过这花费了大量时间。
在完成电路原理图后为保证电路设计以及布线没有出错,需在Proteus中进行仿真。
但在仿真过程中,遇到的主要问题为Proteus的元件库中没有要使用的芯片或器件模型,解决此问题主要有三种方法,分别是:
一.上网找别人做好的库,较普遍的原件的库都可以找到,这是我们利用现有资源的一种方式;二.找一个有相同的引脚和封装的元件代替,这样也可以;三.自己制作元器件的原理图和封装。
由于本设计所使用的芯片均为较多人使用的芯片,网上存在足够的库,因此在这个问题的解决方法中,我们选择了第一个方法。
完成了PCB板图的设计工作后,在打印线路之前,要注意先调整好线路的粗细以及为要打孔的位置留出足够空位,以防止打孔过程对打印线路的磨折,增加后续调试过程的难度。
转印时,由于印刷设备比较老旧,印板后出现线路模糊,需要用油性笔修补。
溶解后出来的效果也并不理想,出现几处断线。
腐蚀、漂洗过程中,要注意个人的保护,戴上工作手套并不要在溶液附近嬉闹,注意不要打翻溶液以免受伤。
开孔这一步骤需要操作者高度的集中精神,切记不能操之过急,必须让钻头逐步深入待打的孔中,并且在钻头与PCB板有接触后,不能移动PCB板,否则很容易造成钻头折断并伤人。
4.2电路焊接
焊接时有些地方焊盘比较小,增加了焊接的难度,经常出现虚焊。
有些元器件的规格和PCB板上画好的不同,需要用线引出来。
调试电路时,经过仔细排查,发现电路板上有些铜线断路了,用焊锡连上就解决了。
由于电路板没有外壳保护,在调试过程中经常出现这个地方调试好了,那个地方的电容又不小心弄断线了,大大增加了调试的难度。
有些时候焊盘完全脱落,需要用焊锡引到铜线上。
5调试与检测出错及处理方法
5.1程序编译时的错误与解决方法
把编好的程序(包括正反转程序、停止程序、显示程序等)合理安排好结合到一起进行编译。
由于编译只能检查是否存在语法错误,所以还要看是否存在逻辑错误。
程序修改好以后,当显示编译0错误,0警告的时候,这说明已经没有语法错误了,是否有逻辑错误还要看接上电路板通过仿真以后,步进电机能否正常转动,显示是否正常。
5.2步进电机转动错误及解决方法
步进电机一开始不能正常转动,以为是电路焊接有问题,为了防止再次出现虚焊,首先将电路板用万用表检查了一遍,没问题。
程序也是正确的。
后来仔细看了步进电机工作原理,原来步进电机要正常实现正反转,四个相序必须弄清。
把电机接上电源,用高电平分别接触电机的引线,每接触一下电机就会向前或向后转动一下,经过几次试验,终于搞清了电机的四个相序,排列顺序分别是1—A,2—C,3—B,4—D。
弄清了相序,把电路板重新布线,焊接好,结果电机能够正常转动了。
6课程设计心得
本次课程设计能够实现步进电机的启停、正反转以及速度的调节,通过本次课程设计加强了我们对软件编程和硬件设计的掌握,并且熟悉了ULN2003等芯片。
步进电机在控制系统中具有广泛的应用。
它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等,所以说步进电机有着广阔的市场和远大的发展前景。
另外,在完成本次课程设计的过程中,我们都感觉到理论上的东西还是跟实际有一定的差距。
课本上的东西只有应用到实际中才能发挥其作用。
在提高我们动手能力的同时,通过组员中的分工合作,合理安排,培养了我们的团队协作精神。
在这个过程中,当我们遇到问题时,经过组员的思考解决问题。
锻炼我们遇到困难,积极思考,努力寻找解决办法的能力。
最后,在完成本次课程设计的过程中,虽然我们通过书本对这些知识有了一定的了解,但是不难发现只有书本上的知识是远远不够的。
从画图到仿真,很多都需要我们自己查找资料,自学去完成。
因此,通过本次课程设计不但可以巩固我们书本上的知识,同时可以拓展我们的课外知识,对以后的发展有一定的帮助。
Abstract
Steppermotorduetotheuseofthecompositionoftheopen-loopsystemissimple,cheap,andverypractical,soitisusedwidelyinmanyfieldsofprinterandotherofficeautomationequipmentandvariouscontroldevice.
ThispaperintroducesasystemdesignofsteppingmotorbasedonSCM,usingassemblylanguagetowritethemotorforward,reverse,acceleration,deceleration,stopprogram,throughthemicrocontroller,motordrivechipULN2003Aandcorrespondingkeysofachievingtheabovefunctions,andtheworkstateofsteppermotorwiththecorrespondingLEDdisplay.Thispaperintroducesthecontentsofsteppingmotorandsingle-chipmicrocomputerprinciple,thehardwarecircuitofthesystem,programcomposition,whilethesoft,hardwaredebugging,andintroducesthedebuggingprocessproblemsandsolutionstotheproblem.Hastheadvantagesofclear,highreliability,strongstability,thedesign,thefunctionsareachievedthroughdebugging.
Keywords:
steppermotor;PWM;drivingmechanism;MCU;rotation
参考文献
[1]张友德.单片微型机原理、应用与实验[M].上海:
复旦大学出版社,2005.
[2]袁任光,张伟武.电动机控制电路选用与258实例[M].北京:
机械工业出版社,2005.
[3]房玉明,杭柏林.基于单片机的步进电机开环控制系统[J].电机与控制应用,2006,33(4):
64-64.
[4]韩利虎.浅谈步进电机的基本原理[J].内蒙古石油化工,InnerMongoliaPetrochemicalIndustry,2007,(11):
109.
[5]张巍.浅谈单片机控制步进电机[J].安防科技,2006,(3):
25.
[6]乔璐.,景林,韩英桃.一种实用的步进电动机驱动器设计[J].微特电机,2005,(10):
29-31.
附件1源程序清单
#include//51芯片管脚定义头文件
#include//内部包含延时函数_nop_();
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeled1[8]={0x01,0x02,0x04,0x08,0x10};
ucharcodeled2[8]={0x10,0x08,0x04,0x02,0x01};
ucharcodeFFW[8]={0x08,0x0c,0x04,0x06,0x02};
ucharcodeREV[8]={0x09,0x01,0x03,0x02,0x06};
ucharcodemax[4]={0x08,0x04,0x02,0x01};
ucharcodemin[4]={0x01,0x02,0x04,0x08};
sbitK2=P0^1;//正转
sbitK3=P0^2;//反转
sbitK4=P0^3;//加速
sbitK1=P0^0;//停止
sbitK5=P0^4;//减速
uintTime1,Time2;
ucharflag,direction;
ucharii=0;
ucharcount;
voiddelay(uintt)
{
uintk;
while(t--)
{
for(k=0;k<70;k++);
}
}
voidmotor_stop(void)
{
P2=0xf0;
}
voidmotor_ffw(ucharx)//前进
{
uchari;
i=0;
for(i=0;i<4;i++)//一个周期转30度
{