简易直流电动机控制器设计

一 设计目的

本设计是要利用89C52单片机PWM 调速电路实现小功率直流电机的转速调节。本系统必须符合以下几点要求:

(1)在(1000-5500)转/分内对直流电机进行任意调速,最小调速级差为1转/分。

(2)电机能再所设速度下稳定运转,运转速度与设定速度之差小于±20转/分。

(3)电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调±5%内。

下面,本文将从硬件和软件两方面按系统功能要求进行设计。

二 方案设计

2.1单片机部分器件接口电路

图1 单片机接口电路

本设计采用的是STC 的89C52单片机,选用STC 的单片机是因为它是宽电压供电,工作电压范围为5.5V--3.4V ,比起一般51系列单片机的5.5V--4.5V 更能有效的避免电源抖动所带来的问题。晶振选用石英晶振,频率为20MHz ,比起传统的12MHz 能更快的处理速度。

在第九脚RST ,复位脚为,加了一个复位按键和违法电路,复位原理为:

第一次上到是,+5V通过给电容充电,于是此时电容相当于短路,+5V直接加到RST 上,单片机自动复位。过了极短的时间,电容充电完毕,此时电容则相当于开路,于是RST 脚被电阻R113拉为低,单片机开始正常工作。

当RESET 键按下时,+5V通过按键加到RST 脚,单片机复位,RESET 键弹起之后,RST 脚重新被R113拉为低,单片机开始正常工作。

单片机供电方面,采用的是12V 直流通过7805三端稳压器稳压到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集电极电压为低,此时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的基极至少得提供16uA 的电流才能使8050饱和,事实上,10K

的上拉电阻,加上I/O口的限流电阻,能提供(5-0.7)V/13.3K=350uA,远大于所需要的16uA ,所以完全能提供足够的电流。

再看看串接在9012的基极和8050的集电极间的电阻R19。它的作用是限流,假如不加这个电阻,那么当单片机口为高时,8050,,912均饱和,此时可以认为12V 之间对地短路(虽然有9012的BE 结,会产生零点几伏的压降,但是它们没有限流的作用,还是可以认为电源之间对地短路),所以加上次电阻很有必要。

图中D3二级管的作用:

在这个PWM 电路中,此二极管为续流二极管,作用是续流和消除反电动势。电机内部的转子是由线圈绕成的,所以可以看成是一个电感元件,在突然断电时,反电动势很大,将近12V 的两倍以上,如果不加续流二极管的话,9012很可能被击穿,由于负的反电压的产生,使电机两端的直流平均电压接近0V ,电机不会转动,只会不停的颤动并发出呜呜的声音,器本身也会有危险。而加了续流二极管后,反向电势通过二极管和电机重新形成回路,消除了反电动势,且能是电机上电流不中断,维持正常运转。

2.4 测速电路

先介绍光电开关,如图,光电开关分为两个部分,一部分用来发送,另一部分负责接收。发生部分V2是一个发光二级管,而接收部分V1是一个光敏NPN 三极管。当光路通畅是,V1的基极能接收到V2发出的光,于是V1的BE 上就会有电流的产生,V1导通,集电极输出为低,当光路被阻隔时,V1截止,所以集电极输出为高。

从图中可以看出,为配合软件编程的需要,本系统加了一个起反向作用的三极管,也就是说,V1集电极输出为高时,V3导通,于是V3的集电极输出为低;反正,V1集电极输出为低,V3集电极输出为高。

这里要注意的就是几个大字阻值的选取:

R25:一般发光二极管的正向压降2V ,驱动电流5mA 左右,而电流最大不能超过20mA, 所以选取510 的电阻作为其限流电阻,一来保证不会过流烧坏发光管,二来也不会因电流太小而使光电开关不能正常工作。

R22:此电阻串接在电源与三极管V1的集电极,它的选取之间影响到三极管是否能达到饱和状态,我们知道,因光照所产生的光电电流很小,大概只有几微安的样子,所以集电极电流不能太大,否则管子不能达到饱和。

假设发光二极管正常工作需要的电流为5uA ,那么三极管的放大倍数为100倍的话,集电极电流就不能超过0.5mA ,所以R22大小选取为10K, 此时若基极有光照时,集电极能正常拉低到地。

R24:为V3的集电极电阻,调速也为单片机INT1口的上拉电阻。作用为保证V3和单片机I/O口不会过流,所以选用10K 就能达到要求。

图4 测速电路

三 软件设计

3.1 编程环境

由于汇编语言程序可读性和可移植性都较差,采用汇编语言编写单片机应用程序不但周期长,而且调试和排错也比较困难。为了提高编制单片机应用程序的效率,改善程序的可读性、可移植性,采用高级语言无疑是移植更好的选择。C 语言是一种同样的计算机程序设计语言,既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也比较强,许多以往只能采用汇编语言来解决的问题现在都可以改用C 语言解决。

所以,本设计采用的是C 语言编程,利用KEIL uvision4进行编译和仿真,使用专用下载板将HEX 文件烧录到89C52单片机中。

3.2 系统基本参数及流程

本设计采用的是20M 晶振,12分频,所以每个指令周期为T=0.6us,

中断方面,本程序一共用了3个中断源:定时器0,定时器2及外部中断1,它

们的优先级为:定时器0、外部中断1为高优先级,定时器2为低优先级。另外还用了计数器1,用作计算脉冲宽度,与外部中断1一起构成测速系统。

3.3 按键程序

按键程序方面,主要是一个消抖动程序。消抖动程序是非常必要的,因为在平时没有按下键的时候,有可能会从电源或者其他地方突然产生一个尖峰电压,打在单片机检测按键的I/O口上,令单片机误以为有键按下了;或者是当人按下按键时候,如果手抖动,就会引起按键的接触不良,从而可能在很短时间内通断多次,而导致单片机的处理错误。

消抖动程序就是针对这方面来设计的,具体是:当单片机检测到某一个按键按下了,就延时100ms ,在这100ms 里不停的检测,如果中间检测到按键弹起了,则判为干扰,不进行处理,如果100ms 之后还是按下的话,那么就可以确定此键确实是被按下了,然后就进行相应的处理。一般人按一下按键都有个200ms ,所以延时100ms 已经足够了。

程序流程图如下:

3.4PWM 程序

因为电机调速是本次设计的最主要的任务,所以PWM 程序也是程序中最重要的一环。

PWM 的调速原理是通过调节一个斩波周期中的脉冲占空比来调节电机功率而达到调速目的。本设计中,PWM 的斩波周期为1ms ,那也就是说斩波频率为1KHz ,在理论上能达到1%。线性可调,也就是能以0.1%的调节精度来调节PWM 占空比。

PWM 调速子程序是放在定时器0中断中进行的。可以看出,T0的中断级别为高,因为PWM 的脉冲宽度就是在中断程序里设定,如果此时被其他更高级别的中断打断,那么脉冲宽度将不准确,从而导致控制转速失败。所以将其设为高的话,就不存在被打断的问题了。

下面是PWM 的中断子程序:

程序中,cut 为PWM 信号输出口,也就是P1.1口,每进入一次中断,cut 口就反向一次,而每次中断计时都有time0_set确定,time0_set也就是脉冲宽度,有外部赋给,范围从150-970,其值没增加1,电机转速就增加6圈/分,所以可以算出精度1%。而实际上,我们选用的误差范围为 20圈/分,精度为3%。但比起一般单片机自带的PWM 输出口的1%线性可调精度高多了。

图5 PWM 输出波形

图1中为PWM 输出波形图,A 为占空比为95%时的波形,B 为50%时的,C 为5%时的波形。从图中可以得出,当PWM 输出A 的波形时,电机将以全速运转;而输出B 时,电机则以50%的速度运转;而当输出C 时,电机转动速度将非常慢,而且伴随着很大的噪音和震动,可以感觉出电机内部的运转不连续。

3.5测速系统程序

测速是本设计的另外一个重点。本设计中调速系统的工作原理为:利用电机轴上带的圆盘的缺口,引起光电开关产生高电平脉冲,单片机就采集次脉冲的宽度,加以计算,得出其实时速度。具体实现如下:

平时缺口不在光电开关时,光电开关处于断开状态,输入到单片机电平为低,当圆盘的缺口的其中一边刚运转到令光电开关接通时,单片机INT1口电平跳变为高,此时计数器1以内部时钟信号为周期开始计数,然后当圆盘转到缺口的另一边刚好令光电开关断开时,单片机INT1口此时一个下降沿信号,计数停止,并进入INT1中断子程序,在中断里把脉冲宽度转存出来并经过运算,就可得出实时速度值。

所以,测速程序得用到一个外部中断INT1,以及一个计数器1。

TOMD=10010001,前四位用于控制盒确定定时器/计数器1的功能和工作模式: 第八位为门控位CATE ,当GATE=1时,定时器/计数器1的启动要有外部中断引脚和TP1位共同控制。只有当中断引脚INT1为高时,且TR1置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*EK2

YK :要输出的数据增量

EK :设定值和实测值的差值

EK1:上次的EK 值

EK2:EK-EK1的差值

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为最佳积分值。

此时,系统处于最佳运行状态,实验中表现为:电机原来速度为2000,当设置为4500转时,可以在2秒之内迅速上升并稳定于4500±20,而超调量也仅为+300转/分,出现在第一次上升的时候,下来之后便趋于稳定了。

四 参数测试及性能分析

本系统拥有测试的方法是策略缺口所引起的脉冲宽度值,由于使用计数器,所以必然存在一个溢出问题,单片机的晶振频率为20MHz ,所以一个机器周期为0.6us ,一个16位计数器最多能计数2^16个机器周期,所以最初能计数2^16*0.6us的时间,也就是39.3ms ,就是说,当缺口的一边触发了计数器,但是在39.3ms 的时间内还不能转到另外一边是计数器停止,那么计数器将溢出,单片机就自动识别速度为0,那

么此时的速度就将无法识别。

PWM 的斩波控制精度:PWM 频率为1KHz ,电机最大速度为6000转/分,此时对应PWM 占空比为100%。

当转速稳定时,在PI 调节的作用下,真实转速和设定转速的差值控制在±20rad/min,也就是说误差范围在±3%以内。

下面是速度变化时的超调量的表格和其对应的超调曲线图:

控制超调量,是由程序中的PI ()函数控制的,从表中和图中我们能看出,速度处于上升时候的稳定性明显比下降时的要好,尤其是速度从5000下降到3000的时候,超调量竟然达到700。分析原因的话,可能是由于惯性作用所导致的这种情况:由于

电机的转子和外接轮盘具有很大的惯性,特别是再速度很快的时候,而下降的时候,控制器是让其速度自由滑落,所以当速度达到设定值得时候,还具有很大惯性,所以就会引起比较大的超调量。

五 总结

在设计中,使用89C52单片机输出PWM 信号实现对小功率直流电机进行调速,系统有按键设定转速,通过光电开关测速,将测得的速度反馈给单片机,经PI 运算后输出PWM 信号确定斩波调压电路,然后控制电机形成闭环控制。本本还对本系统的超调量、控制精度、控制速度等方面做了详细的分析。

通过这次设计,对单片机的指令结构,接口电路,C 语言的编程技巧,以及和电机控制相关的知识都有了更深的理解。同时也深刻体会到了基础知识的重要性,比如电路基础里面的L,C 电路及暂态构成,电子技术里的三极管放大,高等数学里的微积分等等。掌握固定的基础知识,是对学习新技术的保障,更是开发的前提。

参考文献

【1】《电动机的单片机控制》 王晓明 北京航空航天大学出版社

【2】《MCS-51系列单片机原理与接口技术》 李玉峰、倪虹 霞 人民邮电出版社

【3】《80C51系列单片机C 语言设计完全手册》 求是科技 人民邮电出版社

【4】《51单片机C 语言应用程序设计实例精讲》 戴佳、戴卫恒 电子工业出版社

附录1

程序清单

#include

#indlude

void clear_shake()

{

if(nn==0)

{n=0;}

if(nn1==0)

{

nn=1;

if(shake==0&&n>=100)//shake就是被按下的键

{

shake=1;

nn1=1;

nn=0;

}

}

V oid 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 getwidth_1()

{

TH1=0;

TL1=0;

Int n=0;

Int n1=n;

while(INT1==1&&(n-n1)

{}

if(INT1==0)

TR1=1;//计数器1打开

Else

goto out;

//IE1=0;//中断请求标志

EX1=1;//外部中断1启动

n=0;

n1=n;

while(m==0&&((n-n1)

{}

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=脉冲宽度/us

}

void getwidth()

{

int gw,gw1;

width=0;

gw1=0;

for(gw=0;gw

{

GG:getwidth_1();

If(width_1!=0)

Widthbuf[gw]=width_1;

else

goto GG;

}

Width=(widthbuf[0]+widthbuf[1]+widthbuf[2]+widthbuf[3]+widthbuf[4]+widthbuf[5])/6; void PI()

{

EK1=EK;

EK=speed_set-speed;

EK2=EK-EK1;

if(PIn==0)

{

EK2=1000;

PIn++;

}

YK=KP*EK+KI*EK2;

}

V oid main()

{int time0_set,time0_tmp;

//-------------T0------------------T0用作斩波

ET0=1;//中断允许位

time0_set=300;

time0_tmp=65536-(time0_set)*fosc/12;

TH0=(time0_tmp/256);

TL0=(time0_tmp%256);

TF0=0;//CLR TF0

TR0=1;//SETB TR0

PT0=1;//高优先级

//-------------外部中断1----------------- 用作测速

IT1=1;//为跳沿触发方式,引脚INT1上的电平从高到低的负跳变有效

IE1=0;//中断请求标志

EX1=0;//外部中断1允许位

PX1=0;//为高优先级

//--------------T1----------------------------T1用做计数

TH1=0;

TL1=0;

TF1=0;//中断请求位

TR1=0;//计数器1关闭

ET1=0;//禁止T1溢出中断

IE=0XAA;//

TMOD=0X91;//

char_shake();

time0_int();

getwidth()

getwidth_1();

out1_int();

PI();

}

元件清单

电阻 10K 5个

3.3K 1个 1K 1个 510 1个

有极电容 100u 1个 10u 1个 电容 30pF 2个 104 1个 晶振 20M 1个 按钮 5个

9012 1个

8050 1个

光敏三极管(NPN) 1个三极管(NPN) 1个二极管 1个

发光二极管 1个 电机 1个

电源 5V 1个 12V 1个

原理图

实物图


相关文章

  • 自动化毕业设计论文题目
  • 自动化专业 毕 业 设 计 论 文 题 目 目 录 第1-100个自动化毕业设计论文题目 ..................................................................................................... 3 第 ...

  • 简易直流电子负载
  • 简易直流电子负载 张良 毛伟 周旭 摘要:本设计是以场效应晶体管电压转换电流原理为核心,以硬件反馈实现恒流为基础,以单片机控制为中心的高精度作品.此次设计为恒流源法直流电子负载.本系统中电压和电流的测量都采用高精度运放对电压和电流分别采样处理,再利用12位高精度ICL 7135输入口进行电压和电流检 ...

  • 直流电子负载的制作
  • 直流电子负载的制作(F) 曲阜师范大学杏坛学院 王联联 司明杰 李道波 专家点评:该作品采用LM317恒压和OP07恒流电路控制电压和电流的恒定. 电路设计简单合理,作品操作简单,容易控制.可简单.快捷.可靠对电源.变 压器.蓄电池等电子设备进行输出特性的测试,在实际测试中,各项指标符合技 术要求. ...

  • 简易测谎仪设计
  • 简易测谎仪设计 摘 要 由于电子技术的特性,电子设备对电源电路的要求就是能够提供持续稳定.满足负载要求的电能,而且通常情况下都要求提供稳定的直流电能.提供这种稳定的直流电能的电源就是直流稳压电源.直流稳压电源在电源技术中占有十分重要的地位.另外,很多电子爱好者初学阶段首先遇到的就是要解决电源问题,否 ...

  • 正弦信号发生器
  • ML2035 正 弦 信 号 发 生 器 设 计 学 号:0628030086 姓 名: 专业班级:06通信工程3班 指导老师:李亚 2008年12月29日 目 录 一.选题的意义..................................2 二. 总体方案----------------- ...

  • 电子报合订本1987索引
  • 为什么影电需要良好的天线????107 20吋彩色显像管代换一例????139 牡丹14吋影电显像管代换????143 彩色像管损坏一例????????35 彩色显像管损坏的教训??????35 遥控彩电使用注意????????163 彩色遥控关机电路????????60 简单实用的电视遥控关机电路 ...

  • 基于单片机的简易电子秤的设计_毕业论文
  • 摘 要 论文题目 简易电子秤的设计 摘 要 随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求,为了改变传统称重工具在使用上存在的问题,在本设计中将智能化.自动化用在了电子秤系统中.此电子秤很大程度上满足了应用需求,具有很大的应用前景. 本文以单片机MCS-51系列的AT89C51 ...

  • 电气自动化毕业设计题目
  • 基于单片机的数字温度计设计 基于单片机的小型电动机控制系统设计 全自动洗衣机的PLC控制 自动送料装车系统设计 自动门控制装置设计 开关电源的原理和设计 声控开关及其功能的扩展 抢答器的制作 欠压过压保护系统设计 电子万年历的制作 触摸延时开关制作 语音迎客送客门铃 红外无线报警器设计 音乐电子门铃 ...

  • 20**年南邮毕业设计选题
  • 南京邮电大学高等教育自学考试(专接本) 毕业设计选题范围 毕 业 设 计 题 目 题目1:简易电子称设计 指导教师:薛波(江苏理工学院) 要求: 研究并设计一个由单片机控制的电子称,包括单片机主控电路.电源电路.信号放大电路.A/D转换电路.LCD显示电路.按键电路以及报警电路. 1.独立电源:+5 ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn