江南大学单片机课程设计步进电机.docx
《江南大学单片机课程设计步进电机.docx》由会员分享,可在线阅读,更多相关《江南大学单片机课程设计步进电机.docx(16页珍藏版)》请在冰豆网上搜索。
江南大学单片机课程设计步进电机
江南大学
物联网工程学院
课程设计报告
课程名称:
单片机原理及应用
设计题目:
步进电机控制
班级:
姓名:
学号:
指导教师:
评分:
2012年6月28日
目录
一、设计要求2
1、设计目的及要求2
2、实验设备及说明2
二、工作原理2
1、单片机工作原理2
2、步进电机工作原理4
3、LED数码管显示原理5
4、按键工作原理6
5、系统工作原理6
三、程序设计8
1、程序设计原理8
2、系统工作流程图:
9
3、程序代码:
10
四、设计总结14
1、设计特点14
2、设计总结14
五、参考文献15
一、设计要求
1、设计目的及要求
通过具体小型测试系统设计,实践单片机系统设计、上机调试及再设计的全过程,以加深对单片机内部结构、原理功能和指令系统的进一步理解,并进一步学习单片机开发系统的原理与应用以及一些外围芯片的接口和编程调试方法与技巧,初步掌握单片机系统的硬、软件设计技术及调试技巧。
设计要求:
(1)电机转速可以平稳控制
(2)通过键盘和显示器可以设置电机的转速
(3)显示电机的速度趋势
2、实验设备及说明
名称
型号
数量
RZ-51V20单片机开发板
RZ-51/AVR2009DEMO
1
PC机
1
Usb转串口线、电源线
2
表1实验设备
二、工作原理
1、单片机工作原理
89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
在单片机控制步进电机设计中,单片机直接控制的有LED数码管、键盘,及驱动电机芯片ULN2003A。
2、步进电机工作原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
图2步进电机硬件原理图
28BYJ-48硬件特性:
1.额定电压:
12VDC(另有电压:
5V、6V、24V)
2.减速比:
1/64(另有减速比:
1/16、1/32)
3.步距角:
5.625°/64
4.驱动方式:
4相8拍
5.直流电阻:
200Ω±
6.空载牵入频率:
≥600Hz
7.空载牵出频率:
≥1000Hz
8.牵入转矩:
≥34.3mN.m(120Hz)
本设计采用四相四拍设计,即A-B-C-D-A,调速范围为1~13rad/min。
由于单片机带负载能力弱,则步进电机有ULN2003A芯片作为驱动,而单片机直接控制该芯片。
3、LED数码管显示原理
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
如:
显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。
LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。
小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。
发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。
常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
数码管动态显示界面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
4、按键工作原理
图4按键原理图
当按键没有被按下时,P1口高四位和P3口读数都为高电平。
当有按键按下时,则该键位变为低电平,其中开关键K1、K2控制单片机外部中断,则不需要通过程序扫描读数。
而K5、K6则需要在主函数中扫描读数得到键值。
5、系统工作原理
本设计共分为四个模块:
控制模块、显示模块、步进电机、按键模块。
控制模块为80C51单片机,显示模块是MT03641BR四位LED数码管,按键模块共有4个按键,其中两个按键与单片机外部中断INT0、INT1相连。
单片机与UNL2003A芯片由5V电源供电,系统原理图如下:
三、程序设计
1、程序设计原理
已知单片机与步进电机硬件参数,可以求出在四相四拍控制下,该电机转动一周所需脉冲数为2048个,如果每分钟转动1圈时,每个脉冲周期为29297μs。
通过Excel计算,可得转速由每分钟1~13转的脉冲周期,从而给定时器1定时。
脉冲周期如下表。
Vrad/min
Ts/rad
TH1
TL1
singlestep/μs
1
60
8D
8F
29296.875
2
30
C6
C7
14648.4375
3
20
D9
DA
9765.625
4
15
E3
63
7324.21875
5
12
E9
1C
5859.375
6
10
EC
ED
4882.8125
7
8.5714285
EF
A6
4185.267857
8
7.5
F1
B1
3662.109375
9
6.6666666
F3
48
3255.208333
10
6
F4
8E
2929.6875
11
5.4545454
F5
98
2663.352273
12
5
F6
76
2441.40625
13
4.6153846
F7
32
2253.605769
表2TH1、TL1初值表
将TH1、TL1以查表的形式输出。
控制电机的方式为四相四拍,由单片机P1口第四位输出,顺序为A-B-C-D-A。
LED数码管显示的方式为由P2口第四位扫描进行段选,再由P0口输出信号点亮LED进行位选。
由于数码管、键盘、步进电机的控制分别运用了定时器0中断、外部中断、定时器1中断,所以初始化的时候首先开启中断。
为了避免中断的冲突,需设置中断优先级。
这里将控制步进电机的定时器1及键盘控制的外部中断设置为优先中断,从而避免了与显示中断的冲突。
2、系统工作流程图:
3、程序代码:
StartEndbit01H;起动机停止标志
MinSpdEQU1;启动转速
MaxSpdEQU14;最高转速+1
SpeedDATA23H;转速计
DjCountDATA24H;控制电机输出值,初始为0EH
DispBufDATA8H;显示缓冲区
ORG0000H
AJMPMAIN
ORG000BH
JMPDISP;定时器0中断入口
ORG001BH
JMPDJZD;定时器1中断入口
ORG0003H
JMPStartStop;键盘K1中断入口
ORG0013H
JMPKeySty;键盘K2中断入口
ORG0030H
;--------------------------------------------------
;-----------主程序---------------------------------
MAIN:
MOVSP,#5FH
MOVP1,#0FFH
MOVDjCount,#11111110B
MOVSpeed,#MinSpd;起始转速送入计数器
CLRStartEnd;停转状态
MOVTMOD,#00010001B
MOVTH0,#0F4H
MOVTL0,#48H
MOVTH1,#0FFH
MOVTL1,#0FFH;同上,赋定时器处置
MOVIE,#0FFH;开中断
SETBPT1
SETBPX1;同上,设置中断优先级
SETBIT0
SETBIT1;同上,以边沿方式触发
LOOP:
ACALLKEY;键盘程序
ACALLKEYPROC;调用键盘程序
M_NEXT1:
MOVA,Speed
MOVB,#10
DIVAB
MOVDispBuf+1,B;最低位个位
MOVB,#10
DIVAB
MOVDispBuf+2,B;求十位
MOVDispBuf+3,A;求百位
JBStartEnd,M_NEXT2
MOVP0,#0FFH
MOVP1,#0FFH
M_NEXT2:
AJMPLOOP;主程序结束
;------------------------------------------
;-----------延时1ms--------------------
D1MS:
MOVR2,#0AH
LOOP1_1MS:
MOVR1,#18H
LOOP2_1MS:
NOP
NOP
DJNZR1,LOOP2_1MS
DJNZR2,LOOP1_1MS
RET
;--------------------------------------
;------------键位功能实现-------------
KEYPROC:
JNBACC.4,UpSpd;分析键的代码,某位被按下,则该位为1
JNBACC.5,DowSpd
AJMPKEY_RET
StartStop:
SETBStartEnd;启动
SETBTR1;启动电机
SETBTR0;开始显示转速
RETI
KeySty:
CLRStartEnd;停止
CLRTR1;关闭电机
CLRTR0;关闭显示
RETI
UpSpd:
INCSpeed
MOVA,Speed
CJNEA,#MaxSpd,K1;到了最多的次数?
DECSpeed;是则减去1,保证下次仍为该值
K1:
AJMPKEY_RET
DowSpd:
MOVA,Speed
CJNEA,#MinSpd,K2;到了最小的次数?
INCSpeed;是则加1,保证下次仍为该值
K2:
DECSpeed
KEY_RET:
RET
;---------------------------------------------------
;--------------获取键值程序-------------------------
KEY:
MOVA,P1;将P1值送A
MOVA,P1;将P1值送A
ANLA,#30H
KEY_NEXT:
RET
;---------------------------------------------------
DJZD:
PUSHACC
PUSHPSW;保护现场
MOVA,Speed
SUBBA,#MinSpd
MOVDPTR,#DjH
MOVCA,@A+DPTR;查表,赋定时器1初值
MOVTH1,A
MOVA,Speed
SUBBA,#MinSpd
MOVDPTR,#DjL
MOVCA,@A+DPTR
MOVTL1,A
MOVA,DjCount
JNBACC.3,D_NEXT1
JMPD_NEXT2
D_NEXT1:
MOVDjCount,#01111111B
MOVA,DjCount
D_NEXT2:
RLA;左移
MOVDjCount,A;回存
CPLA
ORLA,#0F0H
MOVP1,A
POPPSW
POPACC
RETI
;--------------------------------------------
;--------------定时器1初始值--------------------
DjH:
DB8DH,0C6H,0D9H,0E3H,0E9H,0ECH,0EFH,0F1H,0F3H,0F4H,0F5H,0F6H,0F7H
DjL:
DB8FH,0C7H,0DAH,63H,1CH,0EDH,0A6H,0B1H,48H,8EH,98H,76H,32H
;---------------------------------------------
;----------------显示程序---------------------
DISP:
MOVTH0,#0F4H
MOVTL0,#48H
PUSHACC
PUSHPSW;同上,保护现场
MOVA,#0
MOVDPTR,#BITTAB
MOVCA,@A+DPTR
MOVP2,A;(个位)位选
MOVA,DispBuf+1
MOVDPTR,#DISPTAB
MOVCA,@A+DPTR
MOVP0,A;段选
ACALLD1MS;调用延时1ms程序
MOVA,#1
MOVDPTR,#BITTAB
MOVCA,@A+DPTR
MOVP2,A;(十位)位选
MOVA,DispBuf+2
MOVDPTR,#DISPTAB
MOVCA,@A+DPTR
MOVP0,A;段选
ACALLD1MS
MOVA,#2
MOVDPTR,#BITTAB
MOVCA,@A+DPTR
MOVP2,A;(百位)位选
MOVA,DispBuf+3
MOVDPTR,#DISPTAB
MOVCA,@A+DPTR
MOVP0,A;段选
ACALLD1MS
POPPSW
POPACC
RETI
;--------------------------------------------
;-------------------显示功能表----------------
BITTAB:
DB0BFH,0DFH,0EFH;位选
DISPTAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;段选
;-----------------------------------------------
END
四.设计总结
1、设计特点
(1)该设计运用汇编语言编写,系统执行效率高。
(2)由于显示、按键及步进电机都由中断控制,响应速度高,不必执行复杂的扫描程序减少了程序占用的内存。
(3)用定时器定时,及查表赋初值,使转速精度高,转速可调范围广。
(4)中断优先级的设置使可靠性高。
(5)速度越大,定时器1定时时间越少,容易干扰LED显示。
2、设计总结
我通过基于单片机的步进电机控制器设计,实践单片机系统设计、上机调试及再设计的全过程,以加深对单片机内部结构、原理功能和指令系统的进一步理解,并进一步学习单片机开发系统的原理与应用以及一些外围芯片的接口和编程调试方法与技巧,初步掌握单片机系统的硬、软件设计技术及调试技巧。
老师课程上没有讲过步进电机的设计,不过课程设计需要用单片机,在设计之前,我好好复习了课本,全面梳理了一下51系列单片机的系统框图、功能和应用、指令系统以及扩展的知识点,对这次课程设计需要的硬件进行了预算和统计。
硬件原理图设计还是比较简单。
首先就是选择显示模式—LED数码管显示。
相对于液晶显示而言,LED数码管显示很熟悉也很简单,于是我选用了LED数码管显示。
接着就是步进电机的原理图设计,大致想法是:
用P3口中断去控制电机的启动/停止和调速。
通过不断调试与反复修改设计的硬件连线图大致是:
单片机P1口输出控制步进电机,用排线连接到步进电机扩展板IOP口,步进电机接到点阵&步进电机扩展板的步进电机接口。
然后就是确定工作原理:
单片机上电,定时器初始化:
显示初始数据和设定速度,步进电机停机等待启动按钮按下;运行中,能随时改变速度,通过循环实现步进电机平稳可控工作。
最后剩下的工作就是软件设计了。
按照一般的设计思路,我尝试着按照步骤来设计。
先是画好了程序框图,经过不断改进,得到了原始的程序流程图。
软件设计的时候我运用了汇编语言,上网查过步进电机控制的资料后,不断的上机调试,不断的修改,不断地和同学交流,最后,得到了正确的程序。
这次单片机课程设计不仅复习巩固了学到的知识,还扩展了知识。
通过这次课程设计,我们从纯理论的人是上升到了实践认识,锻炼了创造能力,独立思考能力,动手能力和整合能力,过程虽然很曲折和艰难,但是结果还是很令人满意。
通过这次的实践,巩固了对单片机的功能应用、原理和指令系统的掌握,复习了protel99SE原理图的制作,熟悉了上机调试的全过程。
五、参考文献
[1]丁元杰编著《单片微机原理与应用》,北京:
机械工业出版社2005.7。