步进电机课程设计.docx
《步进电机课程设计.docx》由会员分享,可在线阅读,更多相关《步进电机课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
步进电机课程设计
目录
摘要I
第1章绪论1
1.1课题描述1
1.2任务1
1.3要求1
第2章硬件方案设计2
2.1硬件分析2
2.2硬件电路图3
第3章软件设计分析5
3.1主程序分析5
3.2电机程序分析5
3.3数码管显示程序分析6
3.4中断程序分析7
3.5键值处理分析7
第4章仿真分析9
4.1proteus简介9
4.2仿真结果10
第5章课程设计总结11
参考文献12
附录一(源程序)13
附录二(个人总结)21
第1章绪论
1.1课题描述
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机广泛应用于ATM机、喷绘机、刻字机、写真机、喷涂设备、医疗仪器及设备、计算机外设及海量存储设备、精密仪器、工业控制系统、办公自动化、机器人等领域。
1.2任务
(1)用四位数码管显示步进电机的步数。
(2)通过L298输入序列驱动使步进电机转动。
(3)实现步进电机的正转与反转控制。
(4)实现步进电机的加速与减速控制。
(5)实现步进电机的开始与停止、暂停与继续的切换控制。
(6)实现步进电机的清零控制。
1.3要求
(1)以单片机为控制核心,运用模电、数电知识实现方案设计、电路的设计、程序设计,并在PROTEUS电子设计平台实现仿真
(2)课程设计论文内容正确,结构合理
第2章硬件方案设计
2.1硬件分析
(1)数码管显示屏模块设计
图2.1数码管显示示意图
上图数码管要显示的数据接P0口,通过P0口数据读取,控制要显示的数字。
P3.4——P3.7控制数码管的位显示,分别从左到右显示(如P3.4控制左边第一位显示,P3.7控制最后一位显示),作用是控制位显示,P3口复位为高电平,数码管会关闭。
(2)驱动控制模块设计
图3.2步进电机驱动示意图
步进电机的驱动电路主要是用L298芯片来驱动,驱动电路和显示电动机旋转状态的模块图如图3.2所示。
L298芯片SENSB、SENSA、GND各脚接地,VS接12V电压,VCC接5V电压。
通过P1.0到P1.3输入步进电机转动脉冲序列到步进电机驱动芯片L298四个输入端,再从L298四个输出端控制步进电机转动。
L298输入端接5KΩ电阻保护L298驱动芯片不被烧坏。
(3)按键模块设计
图3.3按键模块示意图
该键盘由4行4列16个按钮组成,L0到L3接P2.0到P2.3,H0到H3接P2.4到P2.7,按钮实现转数的输入控制,以及转动方式控制与速度控制、暂停与继续,开始与停止控制。
2.2硬件电路图
步进电机由驱动模块、数码管显示、和按键模块组成。
其总电路如图3.4所示:
图2.2步进电机总电路示意
键盘由4行4列16个按钮组成,L0到L3接P2.0到P2.3,H0到H3接P2.4到P2.7,按钮实现转数的输入控制,其中H0—H3接一个与门,再接到单片机P3.3口实现外部中断,通过按键,实现中断,单片机读入按键,并作相应的处理来控制步进电机和数码管显示,实现步进电机的正转与反转,暂停与继续,开始与停止,加速与减速和清零的控制。
当单片机接收到控制指令并作相应的处理后,协调处理数码管显示和步进电机的转动。
通过P0口把要转动的步数显示出来,数码管显示位由P3.4—P3.7控制,输入要显示的数字到P0口,再开启位显示,显示出要执行的步数。
通过P1.0—P1.3输入步进电机转动序列,P1.0—P1.3接步进电机驱动芯片L298的输入端,步进电机接步进电机驱动芯片L298的输出端,实现步进电机的转动。
第3章软件设计分析
3.1主程序分析
主程序流程图如图3.1所示:
图3.1主程序流程示意图
开始将R1,25H,26H分别设为正转/反转,开始/停止,暂停/继续的标志位,将数码管显示的3个单元20H,21H,22H清零,再给定时器赋初值。
开启中断后,调用电机程序,看步进电机的转动情况,再调用数码管显示程序显示步进电机转动的步数,显示完后程序重新开始。
3.2电机程序分析
电机程序流程图如图3.2所示:
图3.2电机主程序流程示意图
进入电机程序后,先判断开始/停止标志单元25H是否为开始转动标志,若不转动怎返回主程序,若转动则判断暂停/继续标志26H单元是否为暂停标志,若为暂停标志则返回主程序,否则判断是正转还是反转,相应的调用正反转转动的序列,完后返回主程序。
3.3数码管显示程序分析
数码管显示程序流程图如图3.3所示:
图3.3数码显示程序流程示意图
开始将转动步数R6的值除以100,得到百位显示的数值存到20H单元,接着讲除以100后的余数除以十得到十位显示的数值存到21H单元,余数为个位的数值存到22H单元中,然后开启显示将个位,十位,百位的数值在数码管上显示出来。
3.4中断程序分析
中断程序流程图如图3.4所示:
图3.4中断程序流程示意图
进入中断程序后,首先将A入栈,将计算键值的R2,R3清零,然后扫描键盘,扫描键盘时,R2标记行,R3标记列。
判断是哪个键按下去了,再调用延迟,判断是否是抖动,消除抖动后,将R2的值乘以4再加上R3的值就是键值,将键值存到R7中,调用键值处理程序,处理完后,将A出栈。
3.5键值处理分析
键值处理流程图如图3.5所示:
图3.5键值处理流程示意图
进入键值处理程序后,先将键值给A,如果键值等于0,1,2,4,5,6,8,9,10,12。
则将键值赋给22H单元,若显示值R6大于26则返回,若R6等于25则输入的数值不能超过5然后将R6乘以十再加上22H单元的值就为显示的步数,若R6小于25则将R6乘以十再加上22H单元的值就为显示的步数;若键值等于3则将正反转标志单元R1高四位和低四位互换;若键值等于7则将R6清零,使转动步数为零;若键值等于11,则将R5减一使延迟减短,若键值等于13则将开始停止标志单元25H高四位和低四位互换;如果键值等于14则将暂停/继续标志单元26H的高四位和低四位互换;若键值等译15则将R5加一使延迟加长,完后返回中断。
第4章仿真分析
4.1proteus简介
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
它具有完善的电路仿真功能。
ProSPICE混合仿真:
基于工业标准SPICE3F5,实现数字/模拟电路的混合仿真。
超过27000个仿真器件:
可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件;
多样的激励源:
包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入;
丰富的虚拟仪器:
13种虚拟仪器,面板操作逼真,如示波器、逻辑分析仪、信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等; 生动的仿真显示:
用色点显示引脚的数字电平,导线以不同颜色表示其对地电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动;
高级图形仿真功能(ASF):
基于图标的分析可以精确分析电路的多项指标,包括工作点、瞬态特性、频率特性、传输特性、噪声、失真、傅立叶频谱分析等,还可以进行一致性分析;
在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:
*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
4.2仿真结果
该程序通过按键进行步进电机的转数设置,以及转动方式控制与速度控制、暂停与继续,开始与停止控制。
通过键盘输入数字确定转数,按开始按钮启动步进电机,通过正/反转按钮控制转动方式,清零按钮将转数清零,加速与减速按钮控制转动的速度。
其运行仿真效果如图4.1所示。
图4.1步进电机正常运行仿真图
第5章课程设计总结
通过这次课程设计使我们充分的理解了单片机原理及步进电机的基本原理,熟悉了汇编语言编程和proteus仿真软件的使用并能用数码显示管进行显示,以及行列扫描的应用。
同时进一步掌握了中断的应用,及与门的使用。
此次课程设计的设计过程也是我们对单片机的温习过程,熟悉了数字电子技术基础以及对模拟电子技术基础进行了全面的巩固,加深了对电子技术的理解与应用。
在此次设计过程中,我们也遇到过很多困难,查阅过一些资料和某些指令的用法。
虽然此次的程序不是很完美,没有加入一些更完善,更复杂的功能,但是总体还是一个比较能体现单片机各知识点能力的课题了。
在刚开始编程的时候,我们感到有点无从下手,但经过对题目的详细分析和思考之后,画出详细的流程图,我们就知道具体应该做什么,怎么做了。
经过几天的研究和编程,我们完成了这个程序。
同时这次课程设计,我们学到了很多东西,这是在课堂上无法做到的。
同时,非常感谢我的老师和同学对我们的细心指导与帮助,使我们对问题的了解更深,理解更透彻!
参考文献
[1]李泉溪.单片机原理与应用实例仿真.北京:
北京航空航天大学出版社,2009.8.
[2]江世明.基于proteus的单片机应用技术.北京:
电子工业出版社,2009.
[3]胡宴如、耿苏燕.模拟电子技术基础.北京:
高等教育出版社,2008.5.
[4]张克农.数字电子技术基础.北京:
高等教育出版社,2009.11.
附录一(源程序)
ORG0000H
LJMPMAIN1
ORG000BH
LJMPTIME
ORG0013H
LJMPZD
ORG0100H
MAIN1:
MOVR0,#0
MOVR4,#0
MOV66H,#10
MOVR1,#0FH
MOV25H,#0FH
MOV26H,#0FH
MOVR5,#10
MOVTH0,#0E0H
MOVTL0,#0F0H
MAIN:
MOV20H,#00H
MOV21H,#00H
MOV22H,#00H
MOV23H,#00H;显示值为0
MOVP2,#0F0H
MOVP1,#0;步进电机不转动
MOVP3,#00001000B
MOV60H,#11111110B
SETBEX1
SETBIT1
SETBET1
SETBET0
SETBIT0
SETBEX0
SETBEA
MOVTMOD,#01H
SETBTR0
LCALLDIANJI
MOVR2,#00H
LCALLLED
LJMPMAIN
;程序初始化
DIANJI:
MOVA,25H
CJNEA,#0F0H,BAC
MOVA,26H
CJNEA,#0FH,BAC
CJNER6,#0,BBBB
MOV25H,#0FH
LJMPBAC
BBBB:
DECR6
CJNER1,#0F0H,ZZZZ
MOVDPTR,#BACK
LJMPAAAAA
ZZZZ:
MOVDPTR,#FORW
AAAAA:
MOVA,R0
MOVCA,@A+DPTR
CJNEA,#0H,GO
MOVR0,#0
LJMPBAC
GO:
MOVP1,A
DDDLLL:
LCALLLED
CJNER4,#0FFH,DDDLLL
MOVR4,#0
INCR0
BAC:
RET
;电机转动程序
LED:
MOVB,#100
MOVA,R6
DIVAB
MOV20H,A
MOVA,B
MOVB,#10
DIVAB
MOV21H,A
MOV22H,B;算出各数码管显示的值
MOVDPTR,#TAB
MOVA,22H
MOVCA,@A+DPTR
MOVP0,A
SETBP3.7
CLRP3.6
CLRP3.5
CLRP3.4
LCALLPP1
CLRP3.7
MOVA,21H
MOVCA,@A+DPTR
MOVP0,A
CLRP3.7
SETBP3.6
CLRP3.5
CLRP3.4
LCALLPP1
CLRP3.6
MOVA,20H
MOVCA,@A+DPTR
MOVP0,A
CLRP3.7
CLRP3.6
SETBP3.5
CLRP3.4
LCALLPP1
CLRP3.5
RET
;数码管显示模块
ZD:
PUSHACC
MOVA,60H
ZD1:
CLREA
SETBP3.3
MOVR3,#00H
MOVP2,A
JNBP2.4,AA
INCR3
JNBP2.5,BB
INCR3
JNBP2.6,CC
INCR3
JNBP2.7,DD
RLA
INCR2
CJNER2,#4,ZD1
LJMPYUD
AA:
LCALLPP1
JNBP2.4,DL
LJMPYUD
BB:
LCALLPP1
JNBP2.5,DL
LJMPYUD
CC:
LCALLPP1
JNBP2.6,DL
LJMPYUD
DD:
LCALLPP1
JNBP2.7,DL
LJMPYUD
DL:
MOVA,R2
MOVB,#4
MULAB
ADDA,R3
MOVR7,A
LCALLSZCL
YUD:
POPACC
MOVP2,#0F0H
SETBEA
RETI
;中断程序
SZCL:
MOVA,R7
CJNEA,#0,Y00
LJMPY0
Y00:
CJNEA,#1,Y11
LJMPY1
Y11:
CJNEA,#2,Y22
LJMPY2
Y22:
CJNEA,#3,Y33
MOVA,R1
SWAPA
MOVR1,A
LJMPY3
Y33:
CJNEA,#4,Y44
LJMPY4
Y44:
CJNEA,#5,Y66
LJMPY5
Y66:
CJNEA,#6,Y77
LJMPY6
Y77:
CJNEA,#7,Y99
MOVR6,#0
RET
Y99:
CJNEA,#8,Y100
LJMPY8
Y100:
CJNEA,#9,Y101
LJMPY9
Y101:
CJNEA,#10,Y102
LJMPY10
Y102:
CJNEA,#11,Y103
MOVA,R5
SUBBA,#1
MOVR5,A
LJMPY3
Y103:
CJNEA,#12,Y36
LJMPY12
Y36:
CJNEA,#13,Y37
MOVA,25H
SWAPA
MOV25H,A
CJNEA,#0FH,GHJ
MOVR6,#0
GHJ:
MOV26H,#0FH
LJMPY3
Y37:
CJNEA,#14,Y38
MOVA,26H
SWAPA
MOV26H,A
LJMPY3
Y38:
MOVA,R5
ADDA,#1
MOVR5,A
Y3:
RET
Y0:
MOV22H,#1
LJMPRRT
Y1:
MOV22H,#2
LJMPRRT
Y2:
MOV22H,#3
LJMPRRT
Y4:
MOV22H,#4
LJMPRRT
Y5:
MOV22H,#5
LJMPRRT
Y6:
MOV22H,#6
LJMPRRT
Y8:
MOV22H,#7
LJMPRRT
Y9:
MOV22H,#8
LJMPRRT
Y10:
MOV22H,#9
LJMPRRT
Y12:
MOV22H,#0
RRT:
CLRC
CJNER6,#25,BJ
MOVA,22H
CJNEA,#6,LLLL
RET
LLLL:
JCPPP
RET
BJ:
JCPPP
RET
PPP:
MOVA,R6
MOVB,#10
MULAB
ADDA,22H
MOVR6,A
RET
;数据处理
PP1:
MOV58H,#255
PP2:
DJNZ58H,PP2
RET
TIME:
MOVTH0,#0E0H;计时程序
MOVTL0,#0F0H
DJNZ66H,LP0
MOV66H,R5
MOVR4,#0FFH
LP0:
RETI
TAB:
DB40H,79H,24H,30H,19H
DB12H,02H,78H,00H,10H;显示数据
FORW:
DB01H,09H,08H,0CH,04H,06H,02H,03H,00H
BACK:
DB01H,03H,02H,06H
DB04H,0CH,08H,09H,00H
END
附录二(个人总结)
本次课程设计我和段庆龙负责编写程序。
我主要负责按键模块和按键处理,还有定时中断部分(步进电机转动基频率)步进电机转动。
通过本次课程设计,我温习了单片机和汇编语言,把我忘记的知识重新拾回来,更加巩固了单片机的一些知识。
更让我学到不少课堂上我们学不到的东西,理论和实际有着大不相同。
本次设计程序代码是各个模块分别测试,一个模块一个模块的测试,最后把各个模块组合,最终完成程序。
在编写程序的过程中,遇到了太多太多的问题,特别是在步进电机转动程序的频率设计的时候,频率太高和太低步进电机都不转动,经过大量的试探,才最终确定转动的基频率,然后通过加减改变频率,才能够明显的看出步进电机的转动的快慢。
还有就是在仿真的时候发现当按键很多次中断时中断有问题,经过几天查看资料书和同学的帮助,终于发现问题并解决问题。
这种经验书本上是不可能教到你的,让我清楚的了解到,书本上的知识都是死的,都是理想化的,忽略了很多实际因素,或者涉及。
不全面只有经过实践,才能真正的深入了解知识。
我们今后学习要注重实践,学以致用。