PWM在控制中使用非常广泛,可以以数字量对模拟电路进行控制。这里对PWM的原理进行讲述,并举例说明PWM的重要应用。
1、PWM简介
采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。
PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才真正得到应用。随着电力电子技术、微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论、非线性系统控制思想的应用,PWM控制技术获得了空前的发展。通俗的说PWM是采用数字量对模拟量进行合成的方法。
数字量是怎么样对模拟量进行合成的呢?请看下例:
用PWM波代替正弦冲半波:
上图中用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。这两种波作用于电路时,所产生的效果基本相同。
2、PWM的应用
基于面积相等的原理实际上可以对任意波形进行合成,再如下图:
图中a波形作用于LED上,表现为光强的递增变化,b波形采用PWM对a进行合成。在某一段时间内两种波形的面积是相同的,因此b作用于LED上时,效果与a是相同的。b波以一定频率的等幅不等宽的脉冲序列出现,脉冲宽度递增。
PWM的单片机实现如下:
#include
#define uchar unsigned char
/*—————————————————————————————-
以程序用于说明PWM的实现
——————————————————————————————-*/
/**
程序思路说明:
关于频率和占空比的确定,对于12M晶振,
假定PWM输出频率为1KHZ,这样定时中断次数 *
设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;
由于设定中断时间为0.01ms,这样*
可以设定占空比可从1-100变化。即0.01ms*100=1ms
*/
/**
TH0和TL0是计数器0的高8位和低8位计数器,
计算办法:TL0=(65536-C)%256;
TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;
TMOD是计数器*
工作模式选择,0X01表示选用模式1,它有16位计数器,
最大计数脉冲为65536,最长时 间
为1ms*65536=65.536ms
**/
#define V_TH0 0XFF
#define V_TL0 0XF6
#define V_TMOD 0X01
void init_sys(void); /系统初始化函数/
void Delay5Ms(void);
unsigned char ZKB1,ZKB2;
void delay(unsigned int time)
{
while(time—);
}
void main (void)
{
init_sys();
ZKB1=40; /占空比初始值设定/
ZKB2=60; /占空比初始值设定/
while(1)
{
if (!P1_1) //如果P1.1为低电平,增加占空比
{
delay(50000);
if(!P1_1)
{
ZKB1++;
ZKB2=100-ZKB1;
}
}
if(!P1_2) //如果P1.2为低电平,减少占空比
{
delay(50000);
if (!P1_2)
{
ZKB1--;
ZKB2=100-ZKB1;
}
}
/对占空比值限定范围/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;
}
}
/系统初始化函数/
void init_sys(void)
{
/定时器初始化/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}
/中断函数/
void timer0(void) interrupt 1 using 2
{
static uchar click=0; /中断次数计数器变量/
TH0=V_TH0; /恢复定时器初始值/
TL0=V_TL0;
++click;
if (click>=100) click=0;
if (click<=ZKB1)
/当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整/
P1_3=0;
else
P1_3=1;
if (click<=ZKB2)
P1_4=0;
else
P1_4=1;
}
以上是PWM的简单应用,用得更多的是采用它进行直流电机调速,其实就是把波形作用于电机驱动电路的使用端,有必要对电机驱动电路进行介绍。
1)H桥式电机驱动电路:
上图所示为一个典型的直流电机控制电路。电路得名于“H桥式驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠(上图及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。电路中,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。
要使电机运转,必须使对角线上的一对三极管导通。例如,如上图所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。
上图所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。 当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向)。
2)使能控制与方向逻辑
驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。上图所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了4个与门和2个非门。4个与门同一个“使能”导通信号相接,这样,用这一个信号就能控制整个电路的开关。而2个非门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只
有一个三极管能导通。(与前面的示意图一样,上图所示也不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正常工作的。)
具有使能控制和方向逻辑的H桥电路采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号。如果DIR-L信号为0,DIR-R信号为1,并且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电机(如上图所示);如果DIR-L信号变为1,而DIR-R信号变为0,那么Q2和Q3将导通,电流则反向流过电机。
实际使用的时候,用分立件制作H桥式是很麻烦的,好在现在市面上有很多封装好的H桥集成电路,接上电源、电机和控制信号就可以使用了,在额定的电压和电流内使用非常方便可靠。比如常用的L293D、L298N、TA7257P、SN754410等。
3)L298电机驱动芯片介绍
L298是一种高电压,高电流电机驱动集成电路,内置双路全桥驱动,可以同时驱动两个直流电机,通过外部控制信号与PWM,可以实现电机的调向与调速,也可以驱动一个步进电机。
芯片封装
引脚定义
编号
名称
功能描述
1,15
Sense A Sense B
在此引脚与地之间接采样电阻,用来调节负载电流
2,3
Out1 Out2
桥式电路A的的输出端,接电机
4
Vs
输出端电源供给
5,7
Input 1 Input2
桥式电路A的控制端
6,11
Enable A Enable B
桥式电路A与B的使能端
8
GND
地
9
VSS
逻辑控制地
10,12
Input 3 Input4
桥式电路B的控制端
13,14
Out3 Out4
桥式电路B的的输出端,接电机
-
NC
不接
将上面的PWM例程产生的波形作用于电机的使能端上,就可以实现电机的调速。至于方向的控制,只需两个IO接于控制端即可。