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接于控制端即可。