简易直流电动机控制器设计_第1页
简易直流电动机控制器设计_第2页
简易直流电动机控制器设计_第3页
简易直流电动机控制器设计_第4页
简易直流电动机控制器设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一 设计目的 本设计是要利用89C52单片机PWM调速电路实现小功率直流电机的转速调节。本系统必须符合以下几点要求:(1) 在(1000-5500)转/分内对直流电机进行任意调速,最小调速级差为1转/分。(2) 电机能再所设速度下稳定运转,运转速度与设定速度之差小于20转/分。(3) 电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调5%内。 下面,本文将从硬件和软件两方面按系统功能要求进行设计。二 方案设计2.1单片机部分器件接口电路 图1 单片机接口电路本设计采用的是STC的89C52单片机,选用STC的单片机是因为它是宽电压供电,工作电压范围为5.5V-3.4V,比起一般5

2、1系列单片机的5.5V-4.5V更能有效的避免电源抖动所带来的问题。晶振选用石英晶振,频率为20MHz,比起传统的12MHz能更快的处理速度。在第九脚RST,复位脚为,加了一个复位按键和违法电路,复位原理为:第一次上到是,+5V通过给电容充电,于是此时电容相当于短路,+5V直接加到RST上,单片机自动复位。过了极短的时间,电容充电完毕,此时电容则相当于开路,于是RST脚被电阻R113拉为低,单片机开始正常工作。当RESET键按下时,+5V通过按键加到RST脚,单片机复位,RESET键弹起之后,RST脚重新被R113拉为低,单片机开始正常工作。单片机供电方面,采用的是12V直流通过7805三端稳

3、压器稳压到5V,给单片机和显示部分供电。2.2 按键输入电路 图2 按键输入电路本设计中,按键输入比较简单,就是在按键信号输入I/O口与地线间串接一按键。在按键没有按下的情况下,I/O口悬空,所以为高;当按键按下后,地线的把I/O口的店铺拉低,单片机便可识别有键按下。2.3 PWM驱动电路 图3 PWM驱动电路首先简单介绍一下PWM工作原理:如图所示,R21为P1.1口的上拉电阻,R20为限流电阻。当P1.1口为低时,8050基极电压被拉低,此时8050截止,所以9012基极为高,9012截止,电机两端没有电压。当P1.1口为高时,8050基极电压也为高,于是8050导通,8050集电极电压为

4、低,此时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电阻

5、的上拉电阻能否提供所需要的电流呢?假设电机工作电流为100mA(事实上远小于),9012的放大倍数按60倍计算的话,那么9012的基极,也就是8050的集电极最少得提供1.6mA的电流才能使9012达到饱和。如果按8050能放大100倍的话,也就是说8050的基极至少得提供16uA的电流才能使8050饱和,事实上,10K的上拉电阻,加上I/O口的限流电阻,能提供(5-0.7)V/13.3K=350uA,远大于所需要的16uA,所以完全能提供足够的电流。再看看串接在9012的基极和8050的集电极间的电阻R19。它的作用是限流,假如不加这个电阻,那么当单片机口为高时,8050,,912均饱和,此

6、时可以认为12V之间对地短路(虽然有9012的BE结,会产生零点几伏的压降,但是它们没有限流的作用,还是可以认为电源之间对地短路),所以加上次电阻很有必要。图中D3二级管的作用:在这个PWM电路中,此二极管为续流二极管,作用是续流和消除反电动势。电机内部的转子是由线圈绕成的,所以可以看成是一个电感元件,在突然断电时,反电动势很大,将近12V的两倍以上,如果不加续流二极管的话,9012很可能被击穿,由于负的反电压的产生,使电机两端的直流平均电压接近0V,电机不会转动,只会不停的颤动并发出呜呜的声音,器本身也会有危险。而加了续流二极管后,反向电势通过二极管和电机重新形成回路,消除了反电动势,且能是

7、电机上电流不中断,维持正常运转。2.4 测速电路先介绍光电开关,如图,光电开关分为两个部分,一部分用来发送,另一部分负责接收。发生部分V2是一个发光二级管,而接收部分V1是一个光敏NPN三极管。当光路通畅是,V1的基极能接收到V2发出的光,于是V1的BE上就会有电流的产生,V1导通,集电极输出为低,当光路被阻隔时,V1截止,所以集电极输出为高。从图中可以看出,为配合软件编程的需要,本系统加了一个起反向作用的三极管,也就是说,V1集电极输出为高时,V3导通,于是V3的集电极输出为低;反正,V1集电极输出为低,V3集电极输出为高。这里要注意的就是几个大字阻值的选取:R25:一般发光二极管的正向压降

8、2V,驱动电流5mA左右,而电流最大不能超过20mA,所以选取510的电阻作为其限流电阻,一来保证不会过流烧坏发光管,二来也不会因电流太小而使光电开关不能正常工作。R22:此电阻串接在电源与三极管V1的集电极,它的选取之间影响到三极管是否能达到饱和状态,我们知道,因光照所产生的光电电流很小,大概只有几微安的样子,所以集电极电流不能太大,否则管子不能达到饱和。假设发光二极管正常工作需要的电流为5uA,那么三极管的放大倍数为100倍的话,集电极电流就不能超过0.5mA,所以R22大小选取为10K,此时若基极有光照时,集电极能正常拉低到地。R24:为V3的集电极电阻,调速也为单片机INT1口的上拉电

9、阻。作用为保证V3和单片机I/O口不会过流,所以选用10K就能达到要求。 图4 测速电路三 软件设计3.1 编程环境由于汇编语言程序可读性和可移植性都较差,采用汇编语言编写单片机应用程序不但周期长,而且调试和排错也比较困难。为了提高编制单片机应用程序的效率,改善程序的可读性、可移植性,采用高级语言无疑是移植更好的选择。C语言是一种同样的计算机程序设计语言,既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也比较强,许多以往只能采用汇编语言来解决的问题现在都可以改用C语言解决。所以,本设计采用的是C语言编程,利用KEIL uvision4进行编译和仿真,使用专用下载板将HE

10、X文件烧录到89C52单片机中。3.2 系统基本参数及流程本设计采用的是20M晶振,12分频,所以每个指令周期为T=0.6us,中断方面,本程序一共用了3个中断源:定时器0,定时器2及外部中断1,它们的优先级为:定时器0、外部中断1为高优先级,定时器2为低优先级。另外还用了计数器1,用作计算脉冲宽度,与外部中断1一起构成测速系统。3.3 按键程序按键程序方面,主要是一个消抖动程序。消抖动程序是非常必要的,因为在平时没有按下键的时候,有可能会从电源或者其他地方突然产生一个尖峰电压,打在单片机检测按键的I/O口上,令单片机误以为有键按下了;或者是当人按下按键时候,如果手抖动,就会引起按键的接触不良

11、,从而可能在很短时间内通断多次,而导致单片机的处理错误。消抖动程序就是针对这方面来设计的,具体是:当单片机检测到某一个按键按下了,就延时100ms,在这100ms里不停的检测,如果中间检测到按键弹起了,则判为干扰,不进行处理,如果100ms之后还是按下的话,那么就可以确定此键确实是被按下了,然后就进行相应的处理。一般人按一下按键都有个200ms,所以延时100ms已经足够了。程序流程图如下: PI调节程序PI()控制斩波宽度tiame0_set库宏定义,sbit定义变量设置,函数声明系统初始化设置:中断设置,堆栈设置设置速度speed_set 是否大于6000,是否小于1500Speed_se

12、t=1500判断speed_set和speed的差值是否大于最低精度20固定速度Time0_set是否大于970或是否小于150Time0_set=970Time_set0=150测试外部中断子程序(外部中断1)PWM调速中断子程序(定时器0中断)显示中断子程序(定时器2中断)显示设定转速和实际转速3.4PWM程序因为电机调速是本次设计的最主要的任务,所以PWM程序也是程序中最重要的一环。PWM的调速原理是通过调节一个斩波周期中的脉冲占空比来调节电机功率而达到调速目的。本设计中,PWM的斩波周期为1ms,那也就是说斩波频率为1KHz,在理论上能达到1%。线性可调,也就是能以0.1%的调节精度来

13、调节PWM占空比。PWM调速子程序是放在定时器0中断中进行的。可以看出,T0的中断级别为高,因为PWM的脉冲宽度就是在中断程序里设定,如果此时被其他更高级别的中断打断,那么脉冲宽度将不准确,从而导致控制转速失败。所以将其设为高的话,就不存在被打断的问题了。下面是PWM的中断子程序:程序中,cut为PWM信号输出口,也就是P1.1口,每进入一次中断,cut口就反向一次,而每次中断计时都有time0_set确定,time0_set也就是脉冲宽度,有外部赋给,范围从150-970,其值没增加1,电机转速就增加6圈/分,所以可以算出精度1%。而实际上,我们选用的误差范围为20圈/分,精度为3%。但比起

14、一般单片机自带的PWM输出口的1%线性可调精度高多了。 图5 PWM输出波形图1中为PWM输出波形图,A为占空比为95%时的波形,B为50%时的,C为5%时的波形。从图中可以得出,当PWM输出A的波形时,电机将以全速运转;而输出B时,电机则以50%的速度运转;而当输出C时,电机转动速度将非常慢,而且伴随着很大的噪音和震动,可以感觉出电机内部的运转不连续。3.5测速系统程序测速是本设计的另外一个重点。本设计中调速系统的工作原理为:利用电机轴上带的圆盘的缺口,引起光电开关产生高电平脉冲,单片机就采集次脉冲的宽度,加以计算,得出其实时速度。具体实现如下:平时缺口不在光电开关时,光电开关处于断开状态,

15、输入到单片机电平为低,当圆盘的缺口的其中一边刚运转到令光电开关接通时,单片机INT1口电平跳变为高,此时计数器1以内部时钟信号为周期开始计数,然后当圆盘转到缺口的另一边刚好令光电开关断开时,单片机INT1口此时一个下降沿信号,计数停止,并进入INT1中断子程序,在中断里把脉冲宽度转存出来并经过运算,就可得出实时速度值。所以,测速程序得用到一个外部中断INT1,以及一个计数器1。TOMD=10010001,前四位用于控制盒确定定时器/计数器1的功能和工作模式:第八位为门控位CATE,当GATE=1时,定时器/计数器1的启动要有外部中断引脚和TP1位共同控制。只有当中断引脚INT1为高时,且TR1

16、置1才能计数器工作。第四位和第五位为01,则说明计数器1工作在方式1:全16位计数器,总共能计数65536个时钟脉冲,也就是最多能计时39ms。外部中断1中断服务子程序如下:函数中,TH1_1,TL1_1就是存放计数器1的计数值的缓冲区,当它们从TH1和TL1中取得数值之后,TH1和TL1随即被清零,为下一次计数做好准备。这段函数的意思就是,将测得的连续6个不为零的脉冲宽度取平均值,以消除偶然的稳定因素,使转速显示更加稳定。3.6 PID 调节程序PID调节计算公式如下:YK=KP*EK+K1*EK2YK:要输出的数据增量EK:设定值和实测值的差值EK1:上次的EK值EK2:EK-EK1的差值

17、KP:比例系数(本程序中设KP=1.6)KI:积分系数(本程序中设KI=1.5)由于在本电机调速系统中,仅使用PI调节便足以达到理想的精度和超调量,所以就不必加上微分项。凑试的经过就是先将KI项设为0,然后将KP设为1,如果系统稳定,就按每次+0.1往上加,结果表明,在KP=1.7的时候,调速系统失控,电机一直保持全速运转,所以为了使调节速度达到最大,就将KP设为1.6,但是此时系统非常不稳定,速度值一直在1000转上下跳动,于是将KI设为2,系统马上稳定下来,在按每次-0.1的差值往下减,经过多次尝试,得出KI=1.5为最佳积分值。此时,系统处于最佳运行状态,实验中表现为:电机原来速度为20

18、00,当设置为4500转时,可以在2秒之内迅速上升并稳定于450020,而超调量也仅为+300转/分,出现在第一次上升的时候,下来之后便趋于稳定了。四 参数测试及性能分析本系统拥有测试的方法是策略缺口所引起的脉冲宽度值,由于使用计数器,所以必然存在一个溢出问题,单片机的晶振频率为20MHz,所以一个机器周期为0.6us,一个16位计数器最多能计数216个机器周期,所以最初能计数216*0.6us的时间,也就是39.3ms,就是说,当缺口的一边触发了计数器,但是在39.3ms的时间内还不能转到另外一边是计数器停止,那么计数器将溢出,单片机就自动识别速度为0,那么此时的速度就将无法识别。PWM的斩

19、波控制精度:PWM频率为1KHz,电机最大速度为6000转/分,此时对应PWM占空比为100%。当转速稳定时,在PI调节的作用下,真实转速和设定转速的差值控制在20rad/min,也就是说误差范围在3%以内。下面是速度变化时的超调量的表格和其对应的超调曲线图:控制超调量,是由程序中的PI()函数控制的,从表中和图中我们能看出,速度处于上升时候的稳定性明显比下降时的要好,尤其是速度从5000下降到3000的时候,超调量竟然达到700。分析原因的话,可能是由于惯性作用所导致的这种情况:由于电机的转子和外接轮盘具有很大的惯性,特别是再速度很快的时候,而下降的时候,控制器是让其速度自由滑落,所以当速度

20、达到设定值得时候,还具有很大惯性,所以就会引起比较大的超调量。五 总结在设计中,使用89C52单片机输出PWM信号实现对小功率直流电机进行调速,系统有按键设定转速,通过光电开关测速,将测得的速度反馈给单片机,经PI运算后输出PWM信号确定斩波调压电路,然后控制电机形成闭环控制。本本还对本系统的超调量、控制精度、控制速度等方面做了详细的分析。通过这次设计,对单片机的指令结构,接口电路,C语言的编程技巧,以及和电机控制相关的知识都有了更深的理解。同时也深刻体会到了基础知识的重要性,比如电路基础里面的L,C电路及暂态构成,电子技术里的三极管放大,高等数学里的微积分等等。掌握固定的基础知识,是对学习新

21、技术的保障,更是开发的前提。参考文献【1】电动机的单片机控制 王晓明 北京航空航天大学出版社【2】MCS-51系列单片机原理与接口技术 李玉峰、倪虹 霞 人民邮电出版社【3】80C51系列单片机C语言设计完全手册 求是科技 人民邮电出版社【4】51单片机C语言应用程序设计实例精讲 戴佳、戴卫恒 电子工业出版社附录1程序清单#include<reg52.h>#indlude<intrins.h>void clear_shake() if(nn=0) n=0; if(nn1=0) nn=1; if(shake=0&&n>=100)/shake就是被按下

22、的键 shake=1; nn1=1; nn=0; Void time0_int(void) interrupt 1 TH0=(time0_tmp/256); TLO=(time0_tmp%256); if(cut=1) time0_tmp=65536-time0_set*20/12; cut=0; else time0_tmp=65536-(time0_set)*20/12; cut=1; void out1_int(void) interrupt 2 IE1=0; EX1=0; TR1=0; TH1_1=TH1; TL1_1=TL1; TH1=0 TL1=0; M=1;void getwid

23、th_1() TH1=0; TL1=0; Int n=0; Int n1=n; while(INT1=1&&(n-n1)<30)/n为每1ms+2 if(INT1=0) TR1=1;/计数器1打开 Else goto out;/IE1=0;/中断请求标志EX1=1;/外部中断1启动n=0;n1=n;while(m=0&&(n-n1)<30)if(m=0)/m=1,则已经进入out_int1中断,若等于0,则说明30ms延时已过TH1_1=0;TL1_1=0;out:IE1=0;/中断请求标志M=0;EX1=0;/外部中断允许位TR1=0;width_1=(TH1_1*256+TL1_1);/timepr=脉冲宽度/usvoid getwidth() int gw,gw1; width=0; gw1=0; for(gw=0;gw<6;gw+) GG:getwidth_1(); If(width_1!=0) Widthbufgw=width_1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论