pwm的直流电机调速课程设计
一、课程设计的主要目标任务
直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域中得到了广泛的应用。从控制的角度来看,直流调速还是交流拖动系统的基础。早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能[2]。采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率。
传统的控制系统采用模拟元件,虽在一定程度上满足了生产要求,但是因为元件容易老化和在使用中易受外界干扰影响,并且线路复杂、通用性差,控制效果受到器件性能、温度等因素的影响,故系统的运行可靠性及准确性得不到保证,甚至出现事故。
目前,直流电动机调速系统数字化已经走向实用化,伴随着电子技术的高度发展,促使直流电机调速逐步从模拟化向数字化转变,特别是单片机技术的应用,使直流电机调速技术又进入到一个新的阶段,智能化、高可靠性已成为它发展的趋势。
二、课程设计系统方案选取
1. 直流电动机运行原理
脉宽调制技术是利用数字输出对模拟电路进行控制的一种有效技术,尤其是在对电机的转速控制方面,可大大节省能量,PWM 控制技术的理论基础为:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需 3 要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。 直流电动机的转速n 和其他参量的关系可表示为
图1:直流电机原理图
U N -I a R 式中 Ua ——电枢供电电压(V ; Ia ——电枢电流(A ); Ф—a )n =
—励磁磁通(Wb ); e Ra ——电枢回路总电阻(Ω); CE ——电势系数, ,p 为电磁对数,a 为电枢并联支路数,N 为导体数。 由式(1)可以看出,式中Ua 、Ra 、Ф三个参量都可以成为变量,只要改变其中一个参量,就可以改变电动机的转速,所以直流电动机有三种基本调速方法:(1)改变电枢回路总电阻Ra ;;(2)改变电枢供电电压Ua ;(3)改变励磁磁通Ф。
如图1所示:
改变直流电机电枢绕组两端电源电压U 大小就可以调节直流电机转速的大小; 改变直流电机电枢绕组两端电源电压U 方向就可以改变直流电机转速方向。 C Φ
方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。
方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对电动机的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。
方案三:采用由三极管组成的H 型PWM 电路。用单片机控制三极管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H 型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM 调速技术。
兼于方案三调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案三。
2. PWM 调速原理
图1为PWM 降压斩波器的原理电路及输出电压波形。在图1a 中,假定晶体 管V 1先导通T 1,秒(忽略V 1的管压降,这期间电源电压Ud 全部加到电枢上) ,然
后关断T 2秒(这期间电枢端电压为零) 。如此反复,则电枢端电压波形如图1b 中
所示。电动机电枢端电压Ua 为其平均值。
图1 PWM降压斩波器原理电路及输出电压波形
a) 原理图 b)输出电压波形
U a =
式(3)中 T 1T U d =1U d =αU d (3) T 1+T 2T
T 1T =1 (4) T 1+T 2T α=
α为一个周期T 中,晶体管V1导通时间的比率,称为负载率或占空比。使用下面三种方法中的任何一种,都可以改变α的值,从而达到调压的目的:
(1)定宽调频法:T1保持一定,使T2在0~∞范围内变化;
(2)调宽调频法:T2保持一定,使T1在0~∞范围内变化
(3)定频调宽法:T1+T2=T保持一定,使T ,在0~T 范围内变化。
不管哪种方法,α的变化范围均为0≤α≤l ,因而电枢电压平均值Ua 的调节范围为0~Ud ,均为正值,即电动机只能在某一方向调速,称为不可逆调速。当需要电动机在正、反向两个方向调速运转,即可逆调速时,就要使用图1—2a 所示的桥式(或称H 型) 降压斩波电路。
3. PID调节
PID 控制的直流电动机调速控制原理图如下:
图3:电动机调速控制原理图
基于PID 的电动机调速控制程序流程图如下:(扩展功能)
图4:基于PID 的电动机调速控制程序流程图
6. 数据处理
速度检测一般有三种方法:M 法测速、T 法测速、M/T法测速。
1.M 法测速:是在规定时间T c 内[12],对位置脉冲信号是个数m 1进行计数,从
而得到转速的测量值,
n =60m 1 P N T c
P N 是每个位置周期所含有的信号脉冲数,适用于高速运行时的测速,低速时精度较低
2.T 法测速:测出相邻两个位置信号的间隔时间来计算转速的一种方法,而时间的测量是借助计数器对已知频率的时钟脉冲计数实现的,设时钟频率f ,两个位置脉冲间的时钟脉冲个数为m 2, 则电机转子位置脉冲信号的周期T 为
T = m 26060f n = = Tp N p N m 2f
P N 是每个位置周期所含有的信号脉冲数,适用于低速运行时的测速,高速时
每个位置周期的时钟脉冲数m 2小,测得的精度较低
3.M/T法综合了以上两种方法的优点,既可在低速段可靠的测速,又在高速段具备较高的分辨能力,因此在较宽的转速范围内都有很好的检测精度。即在稍大于规定时间T c 的某一时间T d 内,分别对位置信号的脉冲个数m 1和高频时钟脉
冲个数m 2进行计数。于是:n = 60m 1f p N m 2
由于调速关系本文采用M/T法测速以使测速的准确性,即在100个PWM 周期内电机所转的转数,
n = 60m1
其中f = 100,m 2 = 100,PN = 1
三、系统硬件设计(芯片的选取、原理图等)
1. 续流二极管IN4002 PLC 、变频器、伺服驱动器等等设备的晶体管输出,如果要连接感性负载(例如中间继电器),一定不要搞忘接一个反向的续流二极管。当输出断开时,继电器线圈两端会产生感生电动势,如果没有续流二极管,产生的电压可能高于输出晶体管的反向击穿电压。笔者实测,HH54P 那样的微型中间继电器线圈回路断开时产生的电压大概为50V 以下,不加反向续流二极管也可以,不过原则上最好加上,以避免损坏输出晶体管的可能。最大周期性方向
峰值电压:100V
最大有效值电压:70V
最大直流闭锁电压:100V [1]
2.H 桥驱动电路的设计
电路得名于“H桥式驱动电路”是因为它的形状酷似字母H 。4个三极管组
成H 的4条垂直腿,而电机就是H 中的横杠。H 桥电路的“H”的意思是它实际电路在电路图上是一个字幕H 的样式。如下图:
H 桥是如何控制电机的呢, 举个例子:你手里拿着一节电池,用导线将马达和电池两端对接,马达就转动了;然后如果你把电池极性反过来会怎么样呢?没有错,马达也反着转了。
如图:
当Q1和Q4导通时电流从左上方流过电机流向右下方,电机的旋转方向认为正转的话;当Q2和Q3同时导通时电流从右向上方流过电机流向左下方,电机反转。
注意:千万不能将同一侧的两个三极管同时导通,否则会烧坏电路。 如果你将两个高位电路或者两个低位电路
同时接
图3-6 电机反转 通,你
的马达
会自动转
制动。这是因为当没有电源供给时,马达在自由转动的情况下是处于发电状态,同位的电路接通,相当于将马达的两端“短接”,那么马达会因为短路而相当与接了一个无限大功率的电炉即一个很大的负载,所以马达就会产生“电”制动;当你把马达两端悬空后,它就恢复自由了。
为了以避免马达的反电动势的危害,我们仍然需要在晶体管两端接二极管,因为马达线圈在电路开闭瞬间产生的反向电动势通过会高过电源,这样对晶体管和电路会有很大的影响甚至烧毁零件。如图在两端接入二极管后
图3-7 加入二极管的H 桥
L298内置两个H 桥,每个桥提供1A 的额定工作电流,和最大3A 的峰值电流。它能驱动的马达不超过可乐罐大小。
图3-8 H桥驱动电路的设计
3. 脉冲信号的获得
霍尔传感器是对磁敏感的传感元件,常用于开关
信号采集的有CS3020、CS3040、OH3144等,这种传
感器是一个3端器件,外形与三极管相似,只要接
上电源、地,即可工作,输出通常是集电极开路(OC )
门输出,工作电压范围宽,使用非常方便。如图1
所示是CS3144的外形图,将有字面对准自己,三根
引脚从左向右分别是Vcc ,地,输出。
使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出[11]。如果在圆周上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。这种传感器不怕灰尘、油污,在工业现场应用广泛。
电机驱动电路
显示电路
四、系统软件设计(程序流程图的设计)
五、系统仿真结果
仿真软件选择Proteus ,在Proteus 中画出系统电路图,当程序在Keil C 中调试通过后,会生成以hex 为扩展名的文件,这就是使系统能够在Proeus 中成功进行仿真的文件。将些文件加载到单片机仿真系统中,验证是否能完成对直流电机的速度调节。若不成功,则重新回到软件调试步骤,进行软件调试。找出错误所在,更正后重新运行系统。硬件仿真电路的设计完全按照论文设计方案进行。在仿真的过程中也遇到了很多问题,比如元件选择、电路设计等,在元件选择方面,有的芯片是我以前学习的时候所没有遇到过的,所以在寻找和使用的过程中也遇到很多麻烦,但经过自己的努力,并借鉴从互联网上找到的资料,我逐渐掌握这些元件的使用方法和原理,为系统设计和仿真提供了良出的基础。另外,在
进行仿真的时候,也经常出现程序没有错误了,但是仿真通不过的情况,这些大部分原因是在管脚定义上,很多系统仿真的问题都出在这。经过这段时间的努力,使我对仿真软件以及系统设计电路有了更深一步的认识,也为系统的成功奠定了基础
六、系统实物调试
虽说在protues 上仿真时能正常运行了,硬件的制作完成后,结合硬件又发
现了很多问题。
(1) 因为单片机的问题,使复位电路上的电容烧坏,单片机运行出错。
(2) 因为程序算法问题,在电机转动时,出现显示跳动情况。(采取多次
取值滤波)
(3) 按键问题(用吸管换下好的按键)
(4)
PCB 板子铜线虚断。(用焊锡在铜线上覆盖一遍。)
(5)PCB 板子有飞线直接连接不方便(为了方便,硬件板与板这件用杜
邦线相连)
七、结论
从原理图的设计,电路板的焊接到写课程设计论文,在这个过程中我们也
遇到了很多的困难,如成员间分工不明确,程序大家都不熟悉等。这次课程设计给我最大的体会就是有很多东西如果不是自己亲自动手,只在书本上是学不到的,设计初期要考虑周到,否则后期会带来很多不必要的麻烦。虽然可能会多花 一些时间,但这比空想要有效的多。做事情一定要细心,更要耐心,遇到问题要慢慢去检查,然后仔细分析后再解决;除此之外,还要有合作精神,注重团队合作,和合作者一起做,相互鼓励,互相弥补不足之处,很多难点的突破都来自于
与同学的交流,交流使自己获得更多信息,开拓了思路,这样很多事情就成了。
本次设计把理论应用到了实践中,同时通过设计,也加深了自己对理论知
识的理解和掌握,在解决困难的过程中,获得了许多专业方面的知识, 拓展了视野。提高了理论水平和实际的动手能力,学会了解决问题的方法,激发了我们的探索精神。这样的课程设计是很好的锻炼机会, 通过实验设计使我深入了解到课程设计在大学学习的重要性,课程设计增强了我们的实践动手能力,也为大四后学期的毕业设计提供了宝贵的经验。
参考文献
7.1主要书目:
电路与电子技术基础——数字电子技术基础 浙江科学技术出版社 李青 总主编
电路电子实验指导书 中国计量学院电工电子实验中心
机电工程训练教程——电子技术实训 清华大学出版社
朱朝霞 主编 杨其华 主审
7.2另外从互联网下载了部分图片及资料
单片机原理. 接口技术及应用(含C51)》 主编 杨学昭 王云东
西安电子科技大学出版社
《电子技术基础》(模拟部分) 主编 康华光
高等教育出版社
#include
#include
#define NOP() _nop_();
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit EN=P1^2;
uint huonum,huonum1;
uint start,fanxiang;
uint timenum1,timenum2,timenum3,A1,A2,A3,A4;
uint speed=100;
int SetPoint;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//***************************************************** void delay(uchar z) //延时MS
{
uchar a,b;
for(a=z;a>0;a--)
for(b=100;b>0;b--);
}
//***************************************************** void initEA() //中断初始化
{
TMOD|=0X11;
TH0=(65535-100)/256;
TL0=(65535-100)%256;
EA=1;
ET0=1;
TR0=1;
IT0=1;
EX0=1;
P1=0;
P0=0xff;
IN1=1;
IN2=0;
}
//***************************************************** void display1(uchar C1,uchar C2,uchar C3,uchar C4)//显示速度 {
if(timenum3==10)
{
P0=0xff;
P2=0xef;
P0=table[C1];
// delay(5);
}
if(timenum3==20)
{
P0=0xff;
P2=0xdf;
P0=table[C2];
// delay(5);
}
if(timenum3==30)
{
P0=0xff;
P2=0xbf;
P0=table[C3];
// delay(5);
}
if(timenum3==40)
{
P0=0xff;
P2=0x7f;
P0=table[C4];
timenum3=0;
}
}
//***************************************************** void keyscan() //键盘扫描
{
if(key1==0)
{
delay(5); if(key1==0) { start++; if(start>1) start=0; } while(!key1); } if(key2==0) { delay(5); if(key2==0) { if(speed=20) speed=speed-10; } while(!key3); } if(key4==0) { delay(5); if(key4==0) { fanxiang++; } while(!key4); } if(fanxiang==0) { IN1=1; IN2=0; }
if(fanxiang==1)
{
IN1=0;
IN2=1;
}
if(fanxiang>1)
{
fanxiang=0;
}
if(start==1)
TR0=1;
if(start==0)
{TR0=0;
EN=0;
}
}
//***************************************************** void count()//分配数值,在数码管上显示
{
A1=huonum1/1000;
A2=huonum1%1000/100;
A3=huonum1%100/10;
A4=huonum1%10;
delay(10);
P0=0xff;
}
//***************************************************** void moto()//控制电机PWM 输出与数码管定时器显示 {
TH0=(65535-100)/256;
TL0=(65535-100)%256;
timenum3++;
timenum2++;
timenum1++;
if(speed>=190)
speed=190;
if(speed
speed=10;
if(timenum2
EN=1;
if(timenum2==200)
timenum2=0;
if(timenum2>speed)
EN=0;
if(timenum1==10000)
{
// timenum3++;
huonum1=huonum;
huonum=0;
timenum1=0;
}
display1(A1,A2,A3,A4);
}
//***************************************************** void main() //主函数
{
initEA();
while(1)
{
count();
keyscan();
}
}
//***************************************************** void timer0() interrupt 1 //定时器0显示,输出PWM 波 {
moto();
}
//***************************************************** void int0() interrupt 0//中断1 计算霍尔元件信息
{
huonum++;
}