1、目 录目 录- 1 -摘 要- 2 -1、设计目的12、设计功能、要求13、硬件设计13.1、原理图设计13.2、器件清单23.3、各元器件作用说明23.4、工作过程说明24、软件设计34.1、设计思路34.2、工作原理图34.3、流程图44.4、程序清单45、仿真结果95.1、仿真环境说明95.2、程序编译结果95.3、软件仿真结果95.4、仿真结果说明116、设计总结117、参考文献118、附件:电路图12摘 要本设计主要是利用AT89C51单片机设计直流电机PWM调速系统,系统同时带有模拟测速功能。利用汇编语言编写程序,通过Proteus软件进行仿真验证设计。设计中还用到了外部晶振、六位
2、LED数码管作为速度显示,外接四个按键作为功能设定。按下启动按键进入启动显示、调速系统进入等待状态,按下正转功能键,电机正转;按下反转功能键,电机反转;按下停止功能键,电机由自身阻力减速到停止,这时会停止显示,显示屏熄灭,系统进入等待状态,如果按下启动按键将重新启动。经过一系列的测试验证,设计能满足各项要求,经过长时间的运行测试程序都能正常地运行,没出现错误。可应在实际中应用,能满足日常直流电机的调速。关键字 单片机;直流电机;PWM调速;13直流电机PWM调速系统1、设计目的利用单片机设计直流电机PWM调速系统,加深对以单片机为代表的计算机控制技术的熟悉程度,把学习到的理论知识应用到实际中,
3、把单片机的知识系统地联系起来,增强动手能力,为以后的设计、工作做准备。也是对这学期计算机控制的学习的一次检验。2、设计功能、要求占空比采用可调电阻输入模拟电压,或拨码开关的方式输入;驱动电路可用达林顿晶体管驱动器ULN2803;检测电机转速,并显示(用压控振荡器(可用555电路构成)来模拟直流电机的运行, 对压控振荡器输出的脉冲进行计数,可换算出转速);在Proteus下仿真。3、硬件设计3.1、原理图设计原理图的设计主要的问题是一些器件的选用,其中以振荡器的选用最为繁琐,因为对很多器件不时十分熟悉,接硬件电路的时候会遇到很多的小问题,一般只能从网上查找答案,或者是不断地尝试,尝试每个接口应该
4、怎样接,结合平时的经验以及器件的一些共通点。硬件原理图如下:图1.电路原理图3.2、器件清单器件名称数值、型号数量原理图中标号电阻10k2R1、R2电容1nF2C1、C2单片机AT89C511U1三极管2N17114Q1, Q2, Q5, Q6三极管2N29052Q3, Q48路电阻3001RESPACK-8晶振1CRYSTAL按键拨码4启动、正转、反转、停止LED显示屏6位1D1拨码按键SW-SPDT8SW1-SW83.3、各元器件作用说明电容C2, C3以及晶振CRYSTAL用来为单片机提供外部晶振。拨码开关用于输入占空比,可以提供8位二进制精度的输入。电机驱动电路上的晶体管用于控制电机的
5、正反转通电方向。显示屏D1用于显示模拟测量的电机转速,与占空比输入成一定的关系。“启动”按键用来启动系统,使系统进入等待状态,显示屏显示“0000P”,等待“正转”或者“反转”按键按下;按下“正转”按键后,电机开始以占空比设定的正脉冲时间进行正向转动,占空比设定越大转速越快,反之,则越小;按下“反转”即电机反方向转动。 “停止”按键用来停止电机的通电以及显示屏的显示,按下“停止”按键后,电机将按自身惯性滑行,显示屏则熄灭,无显示内容。3.4、工作过程说明正转:启动系统,按下“启动”按键后,显示屏显示“0000P”,系统处于等待状态,电机未通电;按下“正转”按键后,电机开始正向转动,显示屏也会显
6、示采集到的脉冲对应的转速,但由于电机启动到设定的转速需要一定的时间,所以电机上自带的转速表并不会马上显示到设定速度,但显示屏由于是测量输出脉冲的,所以一开始显示的就是设定速度。反转:启动系统,按下“启动”按键后,显示屏显示“0000P”,系统处于等待状态,电机未通电;按下“反转”按键后,电机开始反方向转动,情况基本上和正转的一样,就是电机速度显示会是负的。停止:系统处于“等待”、“正转”、“反转”状态时按下“停止”按键,电机即停止通电、显示屏熄灭,电机自由滑动到停止。占空比调整:只需将拨码开关拨到高电平或者低电平一侧上,即能组成8位二进制精度的占空比输入,调节可在任何时候,只要启动电机即可生效
7、。4、软件设计4.1、设计思路总思路是利用功能性子程序的方法,将系统分开不同的功能,分别利用子程序来完成,这样可以方便调试,思路也可以很清晰。主程序主要是判断“启动”、“正转”、“反转”、“停止”功能键的按下与否,其它的事务调用子程序完成即可,主程序大部分都是在调用子程序。初始化子程序完成初始化功能,将各数据寄存器清零,将显示码表的首地址赋给DPTR指针,开定时器0、外中断1以及计数器1,设定相应的设置。速度脉冲采集子程序完成速度的采集,此程序是参考书本上第九章的速度测量表设计的,通过探测P3.3的脉冲周期,在一个周期内读入外中断1口上的脉冲个数,用来作为速度显示。速度计算子程序完成速度数据的
8、存储以及0速度时的赋值,原本想利用一除法程序来完成速度的计算的,但由于比较复杂,而且时间上也不允许,所以最后唯有用比较简单的模拟方法模拟速度的测量,其原理是一样的,只是没对采集到的脉冲进行处理,直接用来显示,基本能满足模拟的要求。显示子程序实现速度数值的显示,由于是动态显示,所以要不断地执行显示程序,而且很容易就会出现闪烁,一开始想用静态显示的,但由于静态显示用到的锁存器较多,而且对动态显示已经非常熟悉,所以最后就用了动态显示,也是对以前学单片机的复习吧。定时器0中断子程序起到最主要的作用电机控制脉冲的输出,定时时间为1ms,将这1ms分成255个时间段,按占空比设定的比值输出相应时间的正脉冲
9、、负脉冲,控制电机的速度,由于电机的速度只是与占空比有关系,定时器的定时时间长短并不影响电机转速的控制。延时子程序用于显示子程序的位与位之间的显示延时,让每一位都显示一定的时间,以让人眼能察觉。启动系统停止电机按设定方向、占空比转动4.2、工作原理图图2.工作原理图 4.3、流程图开始 否 启动键按下? 是 调用初始化子程序 调用脉冲采集子程序 调用速度计算子程序 显示时钟时调用显示子程序 是 置正转标志位 正转按键按下? 是 否 置反转转标志位 反转按键按下? 否 停止按键按下? 否 图3.主程序流程图 4.4、程序清单SPEED1 EQU 0031H ;速度高位SPEED EQU 0032
10、H ;速度低位DUTY EQU 0033H ;占空比存储数据,正脉冲时间DUTYN EQU 0034H ;占空比存储数据,负脉冲时间DISDATA EQU 0035H ;高八位显示数存储DISDATA2 EQU 0036H ;低八位显示数存储ORG 0000HAJMP MAINORG 000BH ;定时器0中断入口AJMP SBR1;=主程序=ORG 0100HMAIN: CLR EA ;停止按键按下后关所有中断 MOV P3,#0FFH ;输出停止控制字 MOV P2,#0WAIT: JNB P2.4,WAIT ;等待启动按键按下BEGIN: ACALL START ;初始化LOOP: DJ
11、NZ 37H,SPE MOV 37H,#50 ACALL GET ;速度脉冲采集 ACALL CAL ;速度计算SPE: ACALL DIS ;速度显示 JNB P2.5,M1 ;正转按键转正转 SETB 01H ;置正转标志位 CLR 02H ;清反转标志位 AJMP HEREM1: 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
12、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 SETB TR0 SETB PT0 SETB ET1 ;开定时器1 SETB PT1 ;设优先级 RET;=速度脉冲采集子程
13、序=GET: MOV TL1,#0 MOV TH1,#0 JB P3.3,GE1 AJMP GREGE1: JB P3.3,GE1 ; SETB TR1 ;GE2: JNB P3.3,GE2GE3: 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 ;存储显示高位,赋零 M
14、OV DISDATA2,#0 ;存显示低位 AJMP CRECAL1: MOV DISDATA,SPEED1 ;存储显示高位 MOV DISDATA2,SPEED ;存显示低位 CRE: RET;=显示子程序=DIS: MOV R2,#8 ;位选码 MOV A,DISDATA SWAP A ;显示高八位数据的高四位 ANL A,#0FH MOVC A,A+DPTR MOV P2,R2 MOV P0,A ACALL DELAY INC R2 MOV A,DISDATA ;显示高八位的低四位 ANL A,#0FH MOVC A,A+DPTR MOV P2,R2 MOV P0,A ACALL DEL
15、AY INC R2 MOV A,DISDATA2 ; SWAP A ;显示低八位数据的高四位 ANL A,#0FH MOVC A,A+DPTR MOV P2,R2 MOV P0,A ACALL DELAY INC R2 MOV A,DISDATA2 ;显示低八位的低四位 ANL A,#0FH MOVC A,A+DPTR MOV P2,R2 MOV P0,A ACALL DELAY INC R2 MOV P2,R2 MOV P0,#73H ;显示P ACALL DELAYDRE: RET;=定时器0中断子程序= SBR1: JB 01H,RIGHT ;正转标志位置一转到正转 JB 02H,LEF
16、T AJMP SRE ;如果正反转都没按下,即无动作返回RIGHT: MOV A,R0 ;正转 JZ RIS1 SETB P3.0 ;输出反转正脉冲控制字 CLR P3.1 DJNZ R0,SRE ;定时次数未够转到S2RIS1: MOV A,R1 JZ RS5 SETB P3.1 ;输出反转负脉冲控制字 DJNZ R1,SRE ;输出负脉冲次数未够转S2继续输出,够即重新赋值到R0,R1RS5: MOV P1,#0FFH MOV A,P1 CJNE A,DUTY,RS4 ;判断读入数据与上一次是否相同 AJMP RS3RS4: MOV DUTY,A ;存正脉冲数值 MOV A,#0FFH C
17、LR C SUBB A,DUTY MOV DUTYN,A ;存负脉冲数值 RS3: MOV R0,DUTY MOV R1,DUTYN AJMP SRELEFT: MOV A,R0 ;反转 JZ LS1 SETB P3.1 ;输出反转正脉冲控制字 CLR P3.0 DJNZ R0,SRE ;定时次数未够转到S2LS1: MOV A,R1 JZ LS5 SETB P3.0 ;输出反转负脉冲控制字 DJNZ R1,SRE ;输出负脉冲次数未够转S2继续输出,够即重新赋值到R0,R1LS5: MOV P1,#0FFH MOV A,P1 CJNE A,DUTY,LS4 ;判断读入数据与上一次是否相同 A
18、JMP LS3LS4: MOV DUTY,A ;存正脉冲数值 MOV A,#0FFH CLR C SUBB A,DUTY MOV DUTYN,A ;存负脉冲数值 LS3: MOV R0,DUTY MOV R1,DUTYNSRE: MOV TL0,#0CH ;重新赋初值,定时1ms MOV TH0,#0FEH RETI;=延时子程序=DELAY:MOV 60H,#30D2: MOV 61H,#20D1: DJNZ 61H,D1 DJNZ 60H,D2 RET;=共阳八段显示码=TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ; 0-7共阴DB 7FH,6FH,77H
19、,7FH,39H,3FH,79H,71H ; 8-FDB 73H ; PEND5、仿真结果5.1、仿真环境说明仿真环境为:Microsoft windows XP操作系统下利用PROTEUS软件中的智能原理图输入系统进行仿真。5.2、程序编译结果程序编译直接利用PROTEUS软件自带的编译器,编译结果如下图:5.3、软件仿真结果在单片机中装入编译好的程序后开始仿真。 启动状态:正转状态:反转状态:停止状态:5.4、仿真结果说明按键的识别需要一定的时间,尤其是“正转”、“反转”、“停止”三个按键,需要等待系统识别后再松开,否则可能会导致不能实现该功能。由于显示屏没设定符号显示标志,所以正反转的转
20、速显示都是一个样,当然,可以通过电机自带的转速表去验证正反转功能是否实现。6、设计总结本设计是一项比较大的“工程”,之前都没有做过这么复杂的设计,可能是对单片机的兴趣比较大,做起来只是感觉繁琐,难度就感觉不是很大。本设计是完全由本人完成,每一条连线、每一条程序、每一个字、每一张图都是本人独立完成,也投入了比较多的时间,但感觉很值得。从这次设计中也学到了很多东西,对单片机的了解更深入了,对Proteus软件的使用也更熟练了。本来想用C语言编写程序的,但由于之前一直都是用汇编,而且对两种语言的互换还不是很熟练,所以还是用了汇编,虽然繁杂一点,但感觉还不是很“笨拙”。本次设计是对这一学期来微型计算机控制技术的学习的一次总体应用,可以体现出对单片机控制的掌握程度,尤其是编程方面。本次设计的实用性很强,设计成果只需稍作完善就可以在生活实际中应用,当然社会上这方面的技术已经很成熟,对PWM调速方面技术的提高并没太大价值。本设计使我获益良多,对以后把单片机在实际中的应用提供了很好的实践经验。7、参考文献1周美娟、肖来胜.单片机技术及系统设计 M.清华大学出版社.2007.2潘新民、王燕芳.微型计算机控制技术 M.电子工业出版社.2010.8、附件:电路图