您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于89S51的单片机直流电机控制器的设计
-1-基于AT89S51的单片机直流电机控制器设计一、设计目的:1、了解PWM控制技术、2、了解PID调节、3、直流电机的特性及调速方式二、系统功能:1、本设计是要利用89S51单片机控制PWM调速电路实现小功率直流电机的转速调节。而本系统必须符合以下几点要求:2、在(1000—5500)转/分内对直流电机进行任意调速,最小调速级差为1转/分。3、电机能在所设速度下稳定运转,运转速度与设定速度之差小于±20转/分。4、电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调±5%内。5、电机能进行正反转控制。三、系统设计硬件设计本设计在硬件电路上共分为6个部分,单片机部分、按键输入、PWM斩波电路、测速电路、转向调节电路以及模拟负载。3.1单片机部分及其接口电路1234ABCD4321DCBATitleNumberRevisionSizeBDate:4-Apr-2007SheetofFile:E:\资料\毕业设计\毕业设计.ddbDrawnBy:EA/VP31X119X218RESET9INT012INT113T014T115P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.732P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728RD17WR16PSEN29ALE/P30TXD11RXD10VCC40IC3R11310kC10310uRESETC30104C31100u/25VC3347u/16VVin1GND2Vout37805D14001C10130X020MC10230+5+5+12+5图1单片机部分原理图本设计采用的是AT89S51单片机,因为它是宽电压供电,工作电压范围为5.5V-3.4V,比起一般51系列单片机的5.5V-4.5V更能有效的避免电源抖动所带来的问题。晶振选用石英晶振,频率为20MHz,比起传统的12MHz能有更快的处理速度。在第9脚-RST,复位脚外,加了一个复位按键和复位电路,复位原理为:第一次上电时,+5V通过-2-给电容充电,于是此时电容相当于短路,+5V直接加到RST脚上,单片机自动复位。过了极短的时间,电容充电完毕,此时电容则相当于开路,于是RST脚被电阻R113拉为低,单片机开始正常工作。当RESET键按下时,+5V通过按键加到RST脚上,单片机复位,RESET键弹起之后,RST脚重新被R113拉为低,单片机开始正常工作。单片机供电方面,采用的是12V直流通过7805三端稳压器稳压到5V,给单片机和显示部分供电。3.2按键输入电路1234ABCD4321DCBA-NEXTFUNC+P1.4P1.2P1.3P1.1图2按键部分原理图在本设计中,按键输入比较简单,就是在按键信号输入I/O口与地线间串接一按键。在按键没有按下的情况下,I/O口悬空,所以为高(由于单片机的I/O口是有内部上拉电路的,所以当其悬空时,内部将其上拉为高);当按键按下后,地线的把I/O口的电平拉低,单片机便可识别有键按下。3.3PWM驱动电路1234ABCD4321DCBA9012PNPC4104C3100uD3DIODE8050NPNR191K+12R203.3KMOTORP1.1R2110k+5-3-首先简单介绍一下PWM的工作原理:如图所示,R21为P1.1口的上拉电阻,R20为限流电阻。当P1.1口为低时,8050的基极电平被拉低,此时8050截止,所以9012的基极为高,9012截止,电机两端没有电压。当P1.1口为高时,8050基极电压也为高,于是8050导通,8050的集电极电压为低,此时9012的基极也为低,9012导通,+12V加到电机两端,电机开始转动。所以,当P1.1口为高时,电机两端电压也为高;P1.1口为低时,电机两端电压也为低。于是当P1.1口产生PWM信号输出时,电机两端会产生同样的PWM波形,从而达到调节电机转速的目的。关于上拉电阻的选取,上拉电阻的选取取决于两方面,一方面是能否保护单片机I/O口不过流,第二方面就是能否提供给负责所需大小的电流。首先我们分析保护I/O口方面,P1~P3口能承受的灌电流(输入电流)最大能达到6mA,所以上拉电阻的阻值必须大于5V/6mA=0.8K,而我们选用的是10K电阻,远远大于0.8K,所以能有效的保护单片机I/O口;再来看看10K的上拉电阻能否提供所需要的电流呢?假设电机工作电流为100mA(事实上远小于),9012的放大倍数按60倍计算的话,那么9012的基极,也就是8050的集电极最少得提供1.6mA的电流才能使9012达到饱和。如果按8050能放大100倍的话,也就是说8050的基极至少得提供16μA的电流才能使8050饱和,事实上,10K的上拉电阻,加上I/O口的限流电阻,能提供(5-0.7)V/13.3K=350μA,远大于所需要的16μA,所以完全能提供足够的电流。再看看串接在9012的基极和8050的集电极间的电阻R19。它的作用是限流,假如不加这个电阻,那么当单片机口为高时,8050,9012均饱和,此时可以认为12V直接对地短路(虽然有9012的be结和8050的ce结,它们会产生零点几伏的压降,但是它们没有限流的作用,还是可以认为电源直接对地短路),所以加上此电阻很有必要。图中D3二极管的作用:在这个PWM电路中,此二极管名为续流二极管,他的作用就是续流和消除反电势。电机内部的转子是由线圈绕成的,所以可以看成是一个电感元件,在突然断电时,反电势很大,将近12V的两倍以上,如果不加续流二极管的话,9012很可能被击穿,由于负的反电压的产生,使电机两端的直流平均电压接进0V,电极不会转动,只会不停地颤动并发出呜呜的声音,其本身也会有危险。而加了续流二极管后,反向电势通过二极管和电机重新形成回路,消除了反电势,且能使电机上电流不中断,维持正常运转。3.4测速电路先介绍光电开关,如图5所示,光电开关分为2个部分,一个部分用来发送,另一部分负责接收。发送部分V2是一个发光二极管,而接收部分V1则是一个光敏NPN三极管。当光路通畅时,V1的基极能接收到V2发出的光,于是V1的be上就会有电流产生,V1导通,集电极输出为低;当光路被阻隔时,V1截止,所以集电极输出为高。从图5可以看出,为配和软件编成需要,本系统加了一个起反向作用三极管,也就是说,V1集电极输出为高时,V3导通,于是V3的集电极输出为低;反之,V1集电极输出为低时,V3集电极的输出就为高。-4-1234ABCD4321DCBAV1V2R25510R2210K+5R2310KR2410KV3npnINT1光电开关图5测速电路原理图要注意的就是几个电阻阻值的选取:R25:一般发光二极管的正向压降2V,驱动电流5mA左右,而电流最大不能超过20mA,所以选取510Ω的电阻作为其限流电阻,一来保证不会过流烧坏发光管,二来也不会因电流太小而使光电开关不能正常工作。R22:此电阻串接在电源与三极管V1的集电极,它的选取直接影响到三极管是否能达到饱和状态,我们知道,因光照所产生的光电电流很小,大概只有几微安的样子,所以集电极电流不能太大,否则管子不能达到饱和。假设发光二极管正常工作需要的电流为5μA,那么三极管的放大倍数为100倍的话,集电极电流就不能超过0.5mA,所以R22的大小选取为10K,此时若基极有光照时,集电极能正常拉低到地。R24:为V3的集电极电阻,同时也为单片机INT1口的上拉电阻。作用为保证V3和单片机I/O口不会过流,所以选用10K就能达到要求。-5-2.6转向调节电路1234ABCD4321DCBAA-+MOTORJ1-1CBJ1-2CKJ1-2CBJ1-1CKJ1-2COMJ1-1COMJ2RB1DB4148VCCBGB9014RC1KA-+M2VA正转绿VB反转红RD1KRE1KPWM输入J0R*VCC图6转向调节电路原理图图6中,MOTOR两端的J1-1和J1-2分别为继电器的两组开关,J2则为继电器的线包开关,当拨动开关J0打向左边,J0悬空,则三极管9014基极为高,三极管导通,J2吸合,J1-1CB与J1-2CB接通,电机正转;当拨动开关J0打向右边时,J0接地,于是9014基极为低,三极管截止,J2松开,J1-1CK与J1-2CK接通,电机反转。而指示方面,是将测速同轴电动机当成发电机使用,如图所示接一红一绿两个发光二极管,正转时,绿灯亮;反转时,红灯亮。并且亮度随着转速的增加而增加,非常直观。3.软件设计3.1编程环境采用的是C语言编程,利用KEILμvision2进行编译和仿真,使用STC专用下载板将HEX文件烧录到89C52单片机中。3.2系统基本参数及流程本设计采用的是20M晶振,12分频,所以每个指令周期为T=0.6μS。中断方面,本程序一共用了3个中断源:定时器0,定时器2以及外部中断1,它们的优先级分别为:定时器0、外部中断1为高优先级,定时器2为低优先级。另外还用了计数器1,用做计算脉冲宽度,与外部中断1一起构成测速系统。3.3按键程序按键的程序方面,主要是一个消抖动程序和,消抖动程序是非常有必要的,因为在平时没有按下键的时候,有可能会从电源或者其他地方突然产生一个尖峰电压,打在单片机检测按键的I/O口上,令单片机误以为有键按下了;或者是当人按下按键时候,如果手抖动,就会引起按键的接触不良,从而可能在很短时间内通-断多次,而导致单片机的处理错误。3.4流程图-6-主程序入口系统初始化设置中断设置堆栈设置:,库宏定义定义变量设置函数声明,sbit,While(1)设置速度是否大于是否小于speed_set6000,1500YESSpeed_set=1500No判断和的差值是否大于最低精度speed_setspeed20PiPI()time0_set调节子程序控制斩波宽度YesNoTime0_set970150是否大于或是否小于Time0_set=970Time0_set=150小于150大于970NoPWM(0)调速中断子程序定时器中断测速中断子程序外部中断(1)送斩波宽度送实际转速Time0_setSpeed显示中断子程序定时器中断显示设定转速和实际转速(2)设定速度图7系统流程图-7-3.5PWM程序因为电机调速是本次设计的最主要任务之一,所以PWM程序也是程序中最重要的一环。PWM的调速原理是通过调节一个斩波周期中的脉冲占空比来调节电机功率而达到调速目的。本设计中,PWM的斩波周期为1ms,那也就是说斩波频率为1KHz,在理论上能达到1‰线性可调,也就是能以0.1%的调节精度来调节PWM占空比。PWM调速子程序是放在定时器0中断中进行的,中断设置如下://------T0-----------T0用作斩波ET0=1;//中断允许位time0_set=300;time0_tmp=65536-(time0_set)*fosc/12;//TH0=(time0_tmp/256);TL0=(time0_tmp%256);TF0=0;//CLRTF0TR0=1;//SETBTR0PT0=1;//高优先级可以看出,T0的中断级别为高,因为PWM的脉冲宽度就是在中断程序里设定,如果此时被其他更高级别的中断打断,那么脉冲宽度将不准确,从而导致控制转速失败。所以将其设为高的话,就不存在被打断的问题了。下面是PWM的中断子程序:voidtime0_int(void)interrupt1{TH0=(time0_tmp/256);TL0=(time0_tmp%256);if(cut==1){time0_tmp=65536-time0_set*20/12;cut=0;}else{time0_tmp=65536-(time0-time0_set)*20/12;cut=1;}}程序中,cut为PWM信号输出口,也就是P1.1口,每进入一次中断,cut口就反向一次,而每次中断计时都
本文标题:基于89S51的单片机直流电机控制器的设计
链接地址:https://www.777doc.com/doc-2567988 .html