《电机与拖动》综合实践指导老师: xxx
年级专业 12 自动化 x 班
姓名学号 xxxxxx 2012
xxxxxx 2012
2015 年 6 月 27 日
题目及要求
设计题目:直流电动机PWM脉宽调速系统设计
设计内容:
1、PWM产生电路;
2、直流电机驱动电路;
3、直流电机实现正转、反转、加速、减速、制动的功能;
4、转速测量及显示电路;
5、控制电路及软件设计;
设计要求:
1、直流电机的调速有单象限,二象限和四象限三种工作形式。要求选择四象限
工作形式进行设计;
2、选用额定电压为12V,额定电流为1A的他励直流电动机作为调速对象。要求
进行调速实验;
3、画出电动机正反转电动状态、能耗制动、反接制动、改变电枢电压调速机械
特性图;
目录
1.系统设计方案 (4)
1.1方案一:PWM波调速 (4)
1.2方案二:晶闸管调速 (4)
1.3方案确定 (4)
2.系统硬件设计 (4)
2.1 系统硬件电路图 (4)
2.1.1系统总电路图 (4)
2.1.2电源电路 (5)
2.1.3驱动电路 (6)
2.1.4转速测量及显示电路 (8)
2.1.5按键控制电路 (9)
2.2元器件选择及清单: (10)
3. 系统四象限运行原理 (10)
4.系统软件设计 (12)
4.1主程序设计 (12)
4.2 中断服务程序设计 (12)
5.系统仿真 (13)
6.实验与调试 (15)
7.结论与总结 (15)
参考文献 (16)
附录程序 (16)
1.系统设计方案
1.1方案一:PWM 波调速
采用由达林顿管组成的H 型PWM 电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H 型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM 调速技术。我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生PWM 脉冲的软件实现上比较方便。且对于直流电机,采用软件延时所产生的定时误差在允许范围。同时,L298是基于H 桥电路的数字集成IC ,采用L298可使驱动电路变得更加简单可靠。 1.2方案二:晶闸管调速
晶闸管可控整流器供电的直流调速系统(V-M 系统)。通过调节触发装置GT 的控制电压c U 来移动触发脉冲的相位,即可改变整流电压d U ,从而实现平滑调速。晶闸管整流装置不仅在经济性和可靠性上都有很大提高,而且在技术性能上也显示出较大的优越性;晶闸管可控整流器的功率放大倍数在410以上,其门极电流可以直接用晶体管来控制,不再像直流发电机那样需要较大功率的放大器。在控制作用的快速性上,变流机组是秒级,而晶闸管整流器是毫秒级,这将大大提高系统的动态性能。但是由于晶闸管的单向导电性,它不允许电流反向,给系统的可逆运行造成困难;晶闸管对过电压、过电流和过高的du dt 与di dt 都十分敏感,若超过允许值会在很短的时间内损坏器件。另外,由谐波与无功功率引起电网电压波形畸变,殃及附近的用电设备,造成“电力公害”,因此必须添置无功补偿和谐波滤波装置。 1.3方案确定
鉴于方案一调速特性优良、调整平滑、调速范围广、而且电路结构简单,成本较低,因此本设计采用方案一。
2.系统硬件设计
2.1 系统硬件电路图 2.1.1系统总电路图
根据所确定的方案,可作出系统结构框图如下:
实际硬件电路图如下:
图2 硬件电路图
2.1.2电源电路
(1)芯片介绍
电子产品中常见到的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。故名思义,三端IC 是指这种稳压用的集成电路只有三条
引脚输出,分别是输入端、接地端和输出端。
(2)电路原理图
本系统需要12V、5V两种电源,因此电源电路采用7805用12V电源产生5V 电压,电路图如下:
图3 电源电路
2.1.3驱动电路
(1)L298内部H桥原理
L298内部H桥电路,电路得名于“H桥驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠。如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。
要使电机运转,必须使对角线上的一对三极管导通。如图所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。
图4 H桥驱动电路
另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向,上图反方向)。
(2)L298的逻辑功能
当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;;IN1与IN2相同时,电机快速停止。当使能端为低电平时,电动机停止转动。
图5 L298驱动电路
2.1.4转速测量及显示电路
本系统采用市面上常见的光电传感器构成速度采集模块,用纸片自制一个脉
冲采集器,剪出相应的地方镂空并贴在电机上,当电机每转一次,光电传感器会接收到相应的脉冲。 (1)测速原理
在规定时间T 内,对位置脉冲信号是个数m 进行计数,从而得到转速的测量值
n =
T
P m 60
P 是每个周期所含有的信号脉冲数,适用于高速运行时的测速,低速时精度较低。在本系统中,在T=5s 时间内,对外部中断0计数为m,而电机一转可得脉冲个数P=12;则电机每分钟的转速中n=m 。 (2)LCD1602液晶显示屏
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文
字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
图6 显示电路
2.1.5按键控制电路
用STC89C52单片机的P1口作按键扫描电路,首先P1口置高,当键按下时,可检测到P1口被置低,从而单片机执行对应的函数。如图:P1.0—P1.4,分别控制电机实现正转、反转、加速、减速、急停的功能。
图7 按键控制电路
2.2元器件选择及清单:
表1 元件清单:
3. 系统四象限运行原理
直流电机的机械特性方程式的一般形式:
其中U-额定电压;Ra-电枢电动势;Rc-电枢回路串入的电阻值。
当按规定正方向用曲线表示机械特性时,电动机的固有机械特性即认为机械特性位于直角坐标的四个象限之中。在一、三象限内为电动运行状态;二、四象限内为制动状态。
四象限调速表示电机电机可实现四象限内运行。本系统是通过双极式PWM 变
换器实现的。双极式PWM 变换器调节占空比>50%;<50%或等于50%分别实现电机的正转、反转和停转。
PWM (脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM 可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。在PWM 驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断
T n T ΦC C R R ΦC U
n T e e β-=+-=
02
c a
开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。
图8 PWM原理
设电机始终接通电源时,电机转速最大为Vmax设占空比为D= t1 / T,则
电机的平均速度为V
a = V
max
* D,其中V
a
指的是电机的平均速度;V
max
是指电机在
全通电时的最大速度;D = t1 / T是指占空比。
由上面的公式可见,当我们改变占空比D = t1 / T时,就可以得到不同的
电机平均速度V
d ,从而达到调速的目的。严格来说,平均速度V
d
与占空比D并
非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。
在本设计中,使用单片机的P2.5、P2.6口作为PWM波发生器,当P2.5为1,P2.6为0,电机制动并正转;当P2.5为0,P2.6为1时,电机制动并反转;PWM 波的频率为1Khz,用单片机的定时器0计数,通过改变占空比实现电机的调速。
图9 PWM发生电路
4.系统软件设计
软件由1个主程序和2个定时器中断程序,1个外部中断计数程序组成。
4.1主程序设计
主程序是一个循环程序,其主要思路是,先设定好占空比初始值,给PWM发生电路改变波形的占空比,进而控制电机的转速。其程序流程图如图所示。主程序是一个循环程序,其主要思路是由单片机P0口进行键盘扫描,根据按键输入信息选择进行操作的函数,进行控制电机。
图10 主程序框图
4.2 中断服务程序设计
速度显示程序中是由外部中断0和定时中时断1两者的中断服务程序组成的。其
中外部中断0仅用来对外部脉冲进行计数。而定时中断1用来实现每5s计算速度并显示在1602液晶模块上。以下是定时中断1服务程序框图:
图11 定时中断1服务子程序框图
5.系统仿真
仿真软件选择Proteus ,在Proteus中画出系统电路图,当程序在Keil C 中调试通过后,会生成以hex为扩展名的文件,这就是系统能够在Proeus中成功进行仿真的文件。将些文件加载到单片机仿真系统中,验证是否能完成对直流电机的速度调节。
PWM是占空比,图中显示的是50%,STEP是指在按加速、减速键时改变的占空比大小的百分数,SP EED是通过测速显示的速度大小,每2秒计算并刷新一次。
图12 显示仿真
当按下K1键时,电机开始工作。按下K2键,以达到改变电机转向的目的。若需要加快电机的转速,则按下K3键,直到电机转速适中;相反,需要减慢电机的转速时,则按下K4键,当电机不工作时,则按下K5键。
图13 正转波形图
图14 反转波形图:
图15 加速前后波形图(以正转为例):
图16 减速前后波形图(以反转为例):
6.实验与调试
在实验方面,本课程设计经过多次试验,得出电机的基本转速为
表2所示。
7.结论与总结
在直流电机调速系统的设计中,完成的是硬件设计、制作及调试实验,同
时完成软件设计方面的工作。在硬件设计中主要工作是:设计硬件的结构框图,完成硬件的设计。如电源电路、驱动电路、接收放大电路设计及制作。在选择构成系统电路的元器件时,应着重考虑其是否会影响系统的稳定性。在硬件的制作过程中,应尽量减小电源的波动对系统的影响。
通过本设计,较系统地掌握有关单片机控制的设计思想和设计方法,主要对PWM控制原理、51系列单片机的结构、功能、及内部资源,LCD显示器等的了解,并对其进行测试和加以应用的知识得到学习。
受时间和经验限制,本系统有不足和需改进的地方:
本系统只考虑了电机的速度控制的输出,没有反馈,没有考虑负载的情况,以后可以从系统反馈方面来考虑系统整体的设计。
参考文献
[1]郭天祥,新概念51单片机C语言教程.电子工业出版社,2009
[2]宋庆环,才卫国,高志,89C51单片机在直流电动机调速系统中的应用[M]。唐山学院,2008.4
[3]王东峰,单片机C语言应用100例.电子工业出版社,2009
[4]王兆安,电力电子技术. 机械工业出版社,2005
附录程序
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="PWM:000% STEP:0";
uchar code table1[]="SPEED:000 r/min";
sbit rs=P2^0;
sbit lcden=P2^1;
sbit k1=P1^0; //正转;
sbit k2=P1^1; //反转;
sbit k3=P1^2; //加速;
sbit k4=P1^3; //减速;
sbit k5=P1^4; //制动;
sbit IN1 = P2^5;//PWM输出1;
sbit IN2 = P2^6; //PWM输出2;
sbit ENA = P2^7; //L298使能;
uchar count,num,i,num1,aa,n,pulse;
uchar flag,step,duty,step_change; //flag:正反转标志位;step:档位;duty: 占空比
void delay(z) //延时z 毫秒;
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //lcd写地址;
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date) //lce写数据;
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_init() //lcd初始化;
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15 ;num++)
{
write_date(table[num]);
delay(20);
}
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delay(20);
}
}
void motor_forward() //电机正转设置档位及标志位;{
step=3;
flag=1;
IN1=1;
IN2=0;
}
void motor_reverse() //电机反转设置档位及标志位;{
step=3;
flag=0;
IN2=1;
IN1=0;
}
void speed_inc() //电机加速档位加1;
{
if(step!=6)
step++;
else step=6;
}
void speed_dec() //电机减速档位减1;
{
if(step!=0)
step--;
else step=0;
}
void motor_stop() //电机制动;
{
step=0;
}
void dispose() //根据档位输出PWM波;
{
uchar bai,shi,ge;
if(step<2)
count=step;
else
count=2*(step-1);
if(step_change==1) //显示档位和占空比;
{
duty=count*10;
bai=duty/100;
shi=duty%100/10;
ge=duty%10;
write_com(0x80+4);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
write_com(0x80+14);
write_date(0x30+step);
}
if(count!=0) //一个PWM波周期10ms,定时器中断一次0.1ms { // 根据占空比及正反转标志位输出PWM波形;
if(flag==1)
{
if(i==count)
{
IN1=0;
}
if(i==10)
{ i=0;
IN1=1;
}
}
if(flag==0)
{
if(i==count)
{
IN2=0;
}
if(i==10)
{ i=0;
IN2=1;
}
}
}
else
{
IN1=0;
IN2=0;
}
}
void key_scan() //键盘扫描;
{
uchar key_down;
P1=0xff;
step_change=0;
if((P1&0x1f)!=0x1f)
{
delay(10);
if((P1&0x1f)!=0x1f)
{
key_down=P1&0x1f;
switch(key_down)
{
case 0x1e: motor_forward();break;
case 0x1d: motor_reverse();break;
case 0x1b: speed_inc();break;
case 0x17: speed_dec();break;
case 0x0f: motor_stop();break;
}
}
step_change=1;