计算机控制技术课程设计---直流电机PWM调速系统-工艺夹具.doc
《计算机控制技术课程设计---直流电机PWM调速系统-工艺夹具.doc》由会员分享,可在线阅读,更多相关《计算机控制技术课程设计---直流电机PWM调速系统-工艺夹具.doc(25页珍藏版)》请在冰点文库上搜索。
计算机控制技术课程设计
题 目:
直流电机PWM调速系统
专 业:
08自动化01班
姓 名:
学 号:
指导老师:
2011年12月27日
目 录
目 录 -1-
摘 要 -2-
1、设计目的 1
2、设计功能、要求 1
3、硬件设计 1
3.1、原理图设计 1
3.2、器件清单 2
3.3、各元器件作用说明 2
3.4、工作过程说明 2
4、软件设计 3
4.1、设计思路 3
4.2、工作原理图 4
4.3、流程图 4
4.4、程序清单 4
5、仿真结果 9
5.1、仿真环境说明 9
5.2、程序编译结果 9
5.3、软件仿真结果 9
5.4、仿真结果说明 12
6、设计总结 12
7、参考文献 12
摘 要
本设计主要是利用AT89C51单片机设计直流电机PWM调速系统(脉宽调制的全称为:
PulseWidthModulator),系统同时带有模拟测速功能。
利用汇编语言编写程序,通过Proteus软件进行仿真验证设计。
设计中还用到了外部晶振、六位LED数码管作为速度显示,外接四个按键作为功能设定。
按下启动按键进入启动显示、调速系统进入等待状态,按下正转功能键,电机正转;按下反转功能键,电机反转;按下停止功能键,电机由自身阻力减速到停止,这时会停止显示,显示屏熄灭,系统进入等待状态,如果按下启动按键将重新启动。
经过一系列的测试验证,设计能满足各项要求,经过长时间的运行测试程序都能正常地运行,没出现错误。
可应在实际中应用,能满足日常直流电机的调速。
关键字 单片机;直流电机;PWM调速;
直流电机PWM调速系统
1、设计目的
利用单片机设计直流电机PWM调速系统,加深对以单片机为代表的计算机控制技术的熟悉程度,把学习到的理论知识应用到实际中,把单片机的知识系统地联系起来,增强动手能力,为以后的设计、工作做准备。
也是对这学期计算机控制的学习的一次检验。
2、设计功能、要求
占空比采用可调电阻输入模拟电压,或拨码开关的方式输入;驱动电路可用达林顿晶体管驱动器ULN2803;检测电机转速,并显示(用压控振荡器(可用555电路构成)来模拟直流电机的运行,对压控振荡器输出的脉冲进行计数,可换算出转速);在Proteus下仿真。
3、硬件设计
3.1、原理图设计
原理图的设计主要的问题是一些器件的选用,其中以振荡器的选用最为繁琐,因为对很多器件不时十分熟悉,接硬件电路的时候会遇到很多的小问题,一般只能从网上查找答案,或者是不断地尝试,尝试每个接口应该怎样接,结合平时的经验以及器件的一些共通点。
硬件原理图如下:
图1.电路原理图
3.2、器件清单
器件名称
数值、型号
数量
原理图中标号
电阻
10kΩ
2
R1、R2
电容
1nF
2
C1、C2
单片机
AT89C51
1
U1
三极管
2N1711
4
Q1,Q2,Q5,Q6
三极管
2N2905
2
Q3,Q4
8路电阻
300
1
RESPACK-8
晶振
\
1
CRYSTAL
按键
拨码
4
启动、正转、反转、停止
LED显示屏
6位
1
D1
拨码按键
SW-SPDT
8
SW1-SW8
3.3、各元器件作用说明
电容C2,C3以及晶振CRYSTAL用来为单片机提供外部晶振。
拨码开关用于输入占空比,可以提供8位二进制精度的输入。
电机驱动电路上的晶体管用于控制电机的正反转通电方向。
显示屏D1用于显示模拟测量的电机转速,与占空比输入成一定的关系。
“启动”按键用来启动系统,使系统进入等待状态,显示屏显示“0000P”,等待“正转”或者“反转”按键按下;按下“正转”按键后,电机开始以占空比设定的正脉冲时间进行正向转动,占空比设定越大转速越快,反之,则越小;按下“反转”即电机反方向转动。
“停止”按键用来停止电机的通电以及显示屏的显示,按下“停止”按键后,电机将按自身惯性滑行,显示屏则熄灭,无显示内容。
3.4、工作过程说明
正转:
启动系统,按下“启动”按键后,显示屏显示“0000P”,系统处于等待状态,电机未通电;按下“正转”按键后,电机开始正向转动,显示屏也会显示采集到的脉冲对应的转速,但由于电机启动到设定的转速需要一定的时间,所以电机上自带的转速表并不会马上显示到设定速度,但显示屏由于是测量输出脉冲的,所以一开始显示的就是设定速度。
反转:
启动系统,按下“启动”按键后,显示屏显示“0000P”,系统处于等待状态,电机未通电;按下“反转”按键后,电机开始反方向转动,情况基本上和正转的一样,就是电机速度显示会是负的。
停止:
系统处于“等待”、“正转”、“反转”状态时按下“停止”按键,电机即停止通电、显示屏熄灭,电机自由滑动到停止。
占空比调整:
只需将拨码开关拨到高电平或者低电平一侧上,即能组成8位二进制精度的占空比输入,调节可在任何时候,只要启动电机即可生效。
4、软件设计
4.1、设计思路
总思路是利用功能性子程序的方法,将系统分开不同的功能,分别利用子程序来完成,这样可以方便调试,思路也可以很清晰。
主程序主要是判断“启动”、“正转”、“反转”、“停止”功能键的按下与否,其它的事务调用子程序完成即可,主程序大部分都是在调用子程序。
初始化子程序完成初始化功能,将各数据寄存器清零,将显示码表的首地址赋给DPTR指针,开定时器0、外中断1以及计数器1,设定相应的设置。
速度脉冲采集子程序完成速度的采集,此程序是参考书本上第九章的速度测量表设计的,通过探测P3.3的脉冲周期,在一个周期内读入外中断1口上的脉冲个数,用来作为速度显示。
速度计算子程序完成速度数据的存储以及0速度时的赋值,原本想利用一除法程序来完成速度的计算的,但由于比较复杂,而且时间上也不允许,所以最后唯有用比较简单的模拟方法模拟速度的测量,其原理是一样的,只是没对采集到的脉冲进行处理,直接用来显示,基本能满足模拟的要求。
显示子程序实现速度数值的显示,由于是动态显示,所以要不断地执行显示程序,而且很容易就会出现闪烁,一开始想用静态显示的,但由于静态显示用到的锁存器较多,而且对动态显示已经非常熟悉,所以最后就用了动态显示,也是对以前学单片机的复习吧。
定时器0中断子程序起到最主要的作用——电机控制脉冲的输出,定时时间为1ms,将这1ms分成255个时间段,按占空比设定的比值输出相应时间的正脉冲、负脉冲,控制电机的速度,由于电机的速度只是与占空比有关系,定时器的定时时间长短并不影响电机转速的控制。
延时子程序用于显示子程序的位与位之间的显示延时,让每一位都显示一定的时间,以让人眼能察觉。
启动系统
停止
电机按设定方向、占空比转动
4.2、工作原理图
图2.工作原理图
4.3、流程图
开始
否
启动键按下?
是
调用初始化子程序
调用脉冲采集子程序
调用速度计算子程序
显示时钟时
调用显示子程序
是
置正转标志位
正转按键按下?
是
否
置反转转标志位
反转按键按下?
否
停止按键按下?
否
图3.主程序流程图
4.4、程序清单
SPEED1 EQU 0031H ;速度高位
SPEED EQU 0032H ;速度低位
DUTY EQU 0033H ;占空比存储数据,正脉冲时间
DUTYN EQU 0034H ;占空比存储数据,负脉冲时间
DISDATA EQU 0035H ;高八位显示数存储
DISDATA2EQU 0036H ;低八位显示数存储
ORG 0000H
AJMP MAIN
ORG 000BH ;定时器0中断入口
AJMP SBR1
;====================主程序========================================
ORG 0100H
MAIN:
CLR EA ;停止按键按下后关所有中断
MOV P3,#0FFH ;输出停止控制字
MOV P2,#0
WAIT:
JNB P2.4,WAIT ;等待启动按键按下
BEGIN:
ACALL START ;初始化
LOOP:
DJNZ 37H,SPE
MOV 37H,#50
ACALL GET ;速度脉冲采集
ACALL CAL ;速度计算
SPE:
ACALL DIS ;速度显示
JNB P2.5,M1 ;正转按键转正转
SETB 01H ;置正转标志位
CLR 02H ;清反转标志位
AJMP HERE
M1:
JNB P2.6,HERE ;
SETB 02H ;置反转标志位
CLR 01H ;清正转标志位
HERE:
JB P2.7,MAIN ;停止按键按下,返回判断启动是否按下
AJMP LOOP
;==========初始化子程序=============================================
START:
MOV DPTR,#TAB;
MOV DUTY,#0
MOV DUTYN,#0
MOV A,#0
MOV R0,#0
MOV R1,#0
MOV R2,#0
MOV R3,#0
MOV R4,#0
MOV 20H,#0
MOV 37H,#50
MOV SPEED,#0
MOV SPEED1,#0
MOV DISDATA,#0
MOV DISDATA2,#0
MOV IE,#82H ;定时器0允许,中断允许
MOV TMOD,#11010001B;设定时器0为定时,计数器1计数,门控位为1
MOV TL0,#0CH ;定时1ms
MOV TH0,#0FEH
SETBTR0
SETBPT0
SETB ET1 ;开定时器1
SETB PT1 ;设优先级
RET
;===========速度脉冲采集子程序=======================================
GET:
MOV TL1,#0
MOV TH1,#0
JB P3.3,GE1
AJMP GRE
GE1:
JB P3.3,GE1 ;
SETB TR1 ;
GE2:
JNB P3.3,GE2
GE3:
JB P3.3,GE3
CLR TR1 ;
MOV SPEED,TL1 ;低位
MOV SPEED1,TH1 ;高位
GRE:
RET
;==========速度计算子程序============================================
CAL:
MOV R6,SPEED ;速度脉冲数低位
MOV R7,SPEED1 ;速度脉冲数高位
CJNE R6,#0,CAL3 ;速度为零时
CAL3:
CJNE R7,#0,CAL1 ;
MOV DISDATA,#0 ;存储显示高位,赋零
MOV DISDATA2,#0 ;存显示低位
AJMP CRE
CAL1:
MOV DISDATA,SPEED1 ;存储显示高位
MOV DISDATA2,SPEED ;存显示低位
CRE:
RET
;=============显示子程序============================================
DIS:
MOV R2,#8 ;位选码
MOV A,DISDATA
SWAPA ;显示高八位数据的高四位
ANL A,#0FH
MOVCA,@A+DPTR
MOV P2,R2
MOV P0,A
ACALLDELAY
INC R2
MOV A,DISDATA ;显示高八位的低四位
ANL A,#0FH
MOVCA,@A+DPTR
MOV P2,R2
MOV P0,A
ACALLDELAY
INC R2
MOV A,DISDATA2 ;
SWAPA ;显示低八位数据的高四位
ANL A,#0FH
MOVCA,@A+DPTR
MOV P2,R2
MOV P0,A
ACALLDELAY
INC R2
MOV A,DISDATA2 ;显示低八位的低四位
ANL A,#0FH
MOVCA,@A+DPTR
MOV P2,R2
MOV P0,A
ACALLDELAY
INC R2
MOV P2,R2
MOV P0,#73H ;显示P
ACALLDELAY
DRE:
RET
;=============定时器0中断子程序======================================
SBR1:
JB 01H,RIGHT ;正转标志位置一转到正转
JB 02H,LEFT
AJMPSRE ;如果正反转都没按下,即无动作返回
RIGHT:
MOV A,R0 ;正转
JZ RIS1
SETBP3.0 ;输出反转正脉冲控制字
CLR P3.1
DJNZR0,SRE ;定时次数未够转到S2
RIS1:
MOV A,R1
JZ RS5
SETBP3.1 ;输出反转负脉冲控制字
DJNZR1,SRE ;输出负脉冲次数未够转S2继续输出,够即重新赋值到R0,R1
RS5:
MOV P1,#0FFH
MOV A,P1
CJNEA,DUTY,RS4;判断读入数据与上一次是否相同
AJMPRS3
RS4:
MOV DUTY,A ;存正脉冲数值
MOV A,#0FFH
CLR C
SUBBA,DUTY
MOV DUTYN,A ;存负脉冲数值
RS3:
MOV R0,DUTY
MOV R1,DUTYN
AJMPSRE
LEFT:
MOV A,R0 ;反转
JZ LS1
SETBP3.1 ;输出反转正脉冲控制字
CLR P3.0
DJNZR0,SRE ;定时次数未够转到S2
LS1:
MOV A,R1
JZ LS5
SETBP3.0 ;输出反转负脉冲控制字
DJNZR1,SRE ;输出负脉冲次数未够转S2继续输出,够即重新赋值到R0,R1
LS5:
MOV P1,#0FFH
MOV A,P1
CJNEA,DUTY,LS4;判断读入数据与上一次是否相同
AJMPLS3
LS4:
MOV DUTY,A ;存正脉冲数值
MOV A,#0FFH
CLR C
SUBBA,DUTY
MOV DUTYN,A ;存负脉冲数值
LS3:
MOV R0,DUTY
MOV R1,DUTYN
SRE:
MOV TL0,#0CH ;重新赋初值,定时1ms
MOV TH0,#0FEH
RETI
;=========延时子程序================================================
DELAY:
MOV 60H,#30
D2:
MOV 61H,#20
D1:
DJNZ61H,D1
DJNZ60H,D2
RET
;=============共阳八段显示码=========================================
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ; [0-7]共阴
DB 7FH,6FH,77H,7FH,39H,3FH,79H,71H ; [8-F]
DB 73H ; P
END
5、仿真结果
5.1、仿真环境说明
仿真环境为:
MicrosoftwindowsXP操作系统下利用PROTEUS软件中的智能原理图输入系统进行仿真。
5.2、程序编译结果
程序编译直接利用PROTEUS软件自带的编译器,编译结果如下图:
5.3、软件仿真结果
在单片机中装入编译好的程序后开始仿真。
启动状态:
正转状态:
正转状态
反转状态:
停止状态:
5.4、仿真结果说明
按键的识别需要一定的时间,尤其是“正转”、“反转”、“停止”三个按键,需要等待系统识别后再松开,否则可能会导致不能实现该功能。
由于显示屏没设定符号显示标志,所以正反转的转速显示都是一个样,当然,可以通过电机自带的转速表去验证正反转功能是否实现。
6、设计总结
本次设计是对这一学期来微型计算机控制技术的学习的一次总体应用,本次设计的实用性很强,设计成果只需稍作完善就可以在生活实际中应用,当然社会上这方面的技术已经很成熟。
本设计使我获益良多,对以后在实际中的应用提供了很好的经验。
7、参考文献
[1]周美娟、肖来胜.《单片机技术及系统设计》[M].清华大学出版社.2007.
[2]潘新民、王燕芳.《微型计算机控制技术》 [M].电子工业出版社.2010.
[3]于海生等.《微型计算机控制技术》[M].清华大学出版社.1999.3
[4]金以慧.《过程控制》[M].清华大学出版社.1993