单片机课程设计报告
步进电机控制设计
日期: 20##.6.18-6.21
目录
1、概要
2、课程设计目的及要求
3、整体系统分析
4、硬件系统分析
5、软件系统分析
6、调试结果
7、结论
附一:元器件清单
附二:源程序
1、概要
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,它的的驱动电路根据控制信号工作,控制信号由单片机产生。
本次课程设计主要采用AT89S52芯片,用汇编语言编写出电机的正转、反转、加速、减速、停止程序,通过单片机、电机的驱动芯片ULN2004以及相应的按键实现以上功能,并且步进电机的工作状态要用相应的发光二极管显示出来。控制系统主要由硬件设计和软件设计两部分组成。其中,硬件设计包括单片机的最小系统模块、电源模块、控制模块、步进电机ULN2003A驱动模块、彩灯显示模块5个功能模块的设计。并且通过仿真控制系统对硬件、软件进行了调试和改善,实现了上述功能。本系统具有智能性、实用性及可靠性的特点。
2. 课程设计目的及要求
2.1 课程设计目的
l 增进对单片机的感性认识,加深对单片机理论方面的理解;
l 掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O口、A/D转换等;
l 了解和掌握单片机应用系统的软硬件设计过程及实现方法。
2.2 课程设计要求
l 设计一个步进电机控制器,要求用多个按键控制电机的启动/停止、加速、减速、反转等控制功能。
l 用彩灯显示电机的转动状态,如加速就控制彩灯快速闪烁,减速则控制彩灯慢速闪烁等。
3. 整体系统分析
3.1步进电机控制工作原理
步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4 个方面。从结构上看 ,步进电机分为三相、四相、五相等类型 ,本次设计的是四相电机。四相步进电机的工作方式有单四拍、双四拍和单双八拍3 种 。
3.1.1步进电机的启停控制
步进电机由于其电气特性,运转时会有步进感 ,即振动感。为了使电机转动平滑 ,减小振动 ,可在步进电机控制脉冲的上升沿和下降沿采用细分的梯形波 ,可以减小步进电机的步进角 ,提高电机运行的平稳性。在步进电机停转时 ,为了防止因惯性而使电机轴产生顺滑 ,则需采用合适的锁定波形 ,产生锁定磁力矩 ,锁定步进电机的转轴 ,使步进电机的转轴不能自由转动。
3.1.2步进电机的转向控制
如果给定工作方式正序换相通电 ,步进电机正转。若步进电机的励磁方式为单四拍,即 A -B –C - D。如果按反序通电换相 ,即则电机就反转。
3.1.3步进电机的速度控制
如果给步进电机发一个控制脉冲 ,它就转一步 ,再发一个脉冲 ,它会再转一步。2 个脉冲的间隔越短 ,步进电机就转得越快。调整送给步进电机的脉冲频率 ,就可以对步进电机进行调速。
3.1.4步进电机的换向控制
步进电机换向时 ,一定要在电机减速停止或降到突跳频率范围之内再换向 ,以免产生较大的冲击而损坏电机。换向信号一定要在前一个方向的最后一个脉冲结束后以及下一个方向的第1 个脉冲前发出。对于脉冲的设计主要要求要有一定的脉冲宽度(一般不小于5μs)、脉冲序列的均匀度及高低电平方式。在某一高速下的正、反向切换实质包含了减速→换向→加速3 个过程。
3.2系统设计思路
我们本次设计的步进电机控制系统主要有单片机89S52、ULN2003A步进电机驱动芯片、四相永磁式步进电机、LED显示管及其其他相关元件组成。可以通过开关来控制系统的启/停工作,并通过LED显示管的工作状态显示步进电机的正、反转和前进、后退的状态。其总体设计框图1所示:
图1 系统设计框图
4. 硬件系统设计
4.1主要元件简介
4.1.1 AT89S52单片机
AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O 口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU在掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
图2. AT89S52引脚图
4.1.2 ULN2003A驱动芯片
ULN2003 是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它 能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来 处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。
图 3. ULN2003A引脚图
4.2模块分析
4.2.1 时钟晶振电路
时钟电路是整个系统的心脏,控制着步进电机工作节奏。单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。89S52单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式. 图4中的外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30PF左右,晶振频率选12MHz。
图4 时钟电路
4.2.2 复位电路
为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。复位操作有两种情况,即上电复位和手动(开关)复位。本系统采用上电复位方式。
图5 复位电路
4.2.3 步进电机驱动电路
本设计采用ULN2003A芯片。ULN2003 是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它 能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来 处理的数据。ULN2003A 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。
其中1B、2B、3B、4B分别与P1.0、P1.1、P1.2、P1.3相接
图6 电机驱动电路
4.2.4 显示电路
由于系统显示的内容比较简单,所以显示选用发光二级管既方便又经济。当步进电机开始工作的时候,发光二极管发光;当步进电机不工作时,发光二极管不发光;当步进电机加速运行时,发光二级管快速闪烁;当步进电减速运行时,发光二极管减速闪烁。
图7 显示电路
4.2.5 系统总电路
综合以上各模块,可得到总电路图:
图8 电路总体仿真图
5.软件系统设计
按硬件图连接好电路以后,开始用汇编语言写程序,并运行程序,程序编写程序流程图:(源程序见附录)
主程序流程图
键盘处理程序流程图
6.调试结果
完成焊接任务后,接着就要对系统进行调试了。
连接并检查完基本线路后,我们将程序烧写到芯片上,但是开始我们设计的程序却烧写不上,我们以为是我们焊接的电路出现了问题,但检查后电路没问题,之后才知道我们用的芯片烧写器不行,换了个烧写器后程序便能够正确烧写进去了。然后就按下各个开关按键进行测试,最后电机和显示器都基本上按照设计要求工作了。最后的调试之所以能够如此顺利,与我们之前遇到的一系列问题和我们组员的辛勤付出是密不可分,最终电机能按要求转起来了就是对我们最好的鼓励!
7.总结
本次单片机课程设计可谓是困难重重,在设计制作的过程中确实遇到了很多问题,有的通过我们组员的努力最终解决了,有的最后没有解决。
其中最大的一个问题就是软件程序的编写,在我们确定设计方案后,就开始用汇编语言编写程序了,在我们开始自己编写之前,通过网络查阅了一些相关的资料,也参考了一些其他成功的程序。但在我们编好之后,在进行计算机仿真测试的时候,总是不成功,不是电源通不上电,就是电机的转动状态不受控制,不能实现加速、减速、正反转等问题,最后,我们只好寻找指导老师寻求指导帮助。在这一点上我们没有做成功,心中难免有些许遗憾。
其中遇到的另一个问题就是我们在进行调试时,程序不能烧写到芯片上,不过通过我们用排除法一步步排查后发现是由于烧写器功能的缺失,并不是硬件和软件问题,换了个烧写器后问题也就迎刃而解了。
通过本次课程设计,我们深深体会到了理论知识学习的重要性,如果没有扎实的理论知识作为奠基,那么在今后的实践运用中就像是无头之蝇,没有一点头绪,不知从何入手,最终只能求助于他人,被动地进行工作。不管对以后的工作还是学习都起不到积极的促进作用。在本次课程设计活动中,我们团队也体会到了分工协作的重要性,主要负责写程序,焊接电路,负责撰写设计报告,每个组员分工明确,遇到个人难以解决的问题就一起商量讨论,组员之间既独立又不失联系协作,极大的提高了工作效率。这点是值得我们在今后的工作和学习中好好运用的。
附一: 元器件清单
附二:源程序
ORG 00H
START: MOV DPTR , #TAB1
MOV R0, #03H
MOV R1 , #4H
MOV R4, #00H
MOV P1, #03H
WAIT: MOV P1 , R0
MOV P0, #0FFH
JNB P0.4,TIZ
JNB P0.0,POS
JNB P0.1,NEG
SJMP WAIT
POS : MOV A,R4
MOVC A,@A+DPTR
ACALL DELAY
INC R4
AJMP KEY
NEG: MOV R4,#6
MOV A,R4
MOVC A,@A+DPTR
MOV P1,A
ACALL DELAY
AJMP KEY
KEY: MOV P0,#0FFH
JB P0.4,ZZ1
AJMP TIZ
TIZ: MOV P1,#00H
SETB P0.5
SETB P0.6
AJMP KEY
ZZ1: JB P0.0,FZ1
CJNE R4,#8,LOOPZ
MOV R4,#0
LOOPZ: MOV A,R4
MOVC A,@A+DPTR
MOV P1,A
SETB P2.1
CPL P2.0
JNB P0.2,JIASUZ
JNB P0.3,JIANSUZ
ACALL DELAY
INC R4
AJMP KEY
FZ1:
JB P0.1,KEY
CJNE R4,#255,LOOPF
MOV R4,#8
LOOPF: DEC R4
MOV A,R4
MOVC A,@A+DPTR
MOV P1,A
SETB P2.0
CPL P2.1
JNB P0.2,JIASUF
JNB P0.3,JIANSUF
ACALL DELAY
AJMP KEY
DELAY:MOV A,R1
MOV R6,A
DD1: MOV R5,#6H
DD2:MOV R7,#0
DD3:DJNZ R7,DD3
DJNZ R5,DD2
DJNZ R6,DD1
RET
JIASUZ:
ACALL DELAY1
CJNE R1,#02,L1
JMP L2
L1: DEC R1
L2: JMP LOOPZ
JIANSUZ:ACALL DELAY1
CJNE R1,#08H,L3
JMP L4
L3: INC R1
L4: JMP LOOPZ
JIASUF:
ACALL DELAY1
CJNE R1,#02H,L5
JMP L6
L5: DEC R1
L6: JMP LOOPF
JIANSUF:ACALL DELAY1
CJNE R1,#08H,L7
JMP L8
L7: INC R1
L8: JMP LOOPF
DELAY1:
MOV R6,#20H
DD4: MOV R5,#02H
DD5: MOV R7,#0
DD6: DJNZ R7,DD6
DJNZ R5,DD5
DJNZ R6,DD4
RET
TAB1:DB 02H ,06H,04H,0CH
DB 08H,09H,01H,03H
END