1 PWM 控製原理
PWM(Pulse Width Modulation)即脈衝(chong) 寬度調製,它通過控製信號去調製方波脈衝(chong) 的寬度,從(cong) 而獲得控製的實現。
產(chan) 生PWM 信號可以由硬件方法和軟件方法實現。傳(chuan) 統的硬件模擬方法是把調製信號和載波(一般是三角波)同時接入運算放大器的兩(liang) 個(ge) 輸入端作比較而得到。而軟件的實現,特別是基於(yu) 單片機的軟件實現方法,主要是利用其內(nei) 部提供的定時器,通過改變定時器的定時初值獲得不同的脈衝(chong) 持續時間,如果把係統的控製信號和定時器的定時初值線性對應起來,就可獲得控製信號對脈寬調製的PWM 信號。所以這樣線性的對應過程就成為(wei) 這個(ge) 實現過程的關(guan) 鍵。控製信號的種類不同,采用不同的計算方法,又可以獲得不同的PWM,見文獻[3]。
2 在AT89C51中實現雙極型PWM的方法
51係列單片機提供了非常豐(feng) 富的資源,它除了擁有4個(ge) 通用並口和1個(ge) 串口外,還有外部中斷和內(nei) 部定時器等。而且,不同的型號還集成有不同的功能,比如AT89C51就在片內(nei) 集成了4 K 的ROM,這樣存儲(chu) 空間可以滿足一般的編程需要,而不必去構建程序存儲(chu) 器,既提高了工作效率和係統的穩定性,又降低了生產(chan) 成本。
基於(yu) AT89C51單片機的PWM 軟件實現的重要硬件支撐是該單片機內(nei) 部的定時器。在AT89C51內(nei) 實現PWM 的基本過程:首先選定脈衝(chong) 的頻率T,然後根據控製信號的變化範圍,這裏假設是(0~V),則可以求出t時刻通過控製信號V(t)的對應脈衝(chong) 的正、負脈衝(chong) 持續時間。這兩(liang) 個(ge) 時間長度在單片機裏是通過給定時器賦相應的初值而得,即定時器獲得這樣的定時初值後就在機器周期的同步下,從(cong) 這個(ge) 初值加1計數,定時器滿時則產(chan) 生相應時間長度的溢出中斷,再利用這個(ge) 中斷所響應的服務程序去控製單片機某一引腳相應的正、負電平極性的持續時間。如果上述過程連續進行,就可在這個(ge) 引腳獲得寬度隨控製信號V(t)大小變化的PWM方波信號。
AT89C51單片機每個(ge) 機器周期由6個(ge) 狀態組成,每個(ge) 狀態又有兩(liang) 個(ge) 時鍾周期,這樣一個(ge) 機器周期就等於(yu) 12個(ge) 時鍾周期,即機器頻率為(wei) 時鍾頻率的12分頻。通過對工作模式寄存器TMOD的賦值操作,把定時器設為(wei) 內(nei) 部定時狀態並選擇不同的定時方式。然後假設PWM 的周期T小於(yu) 定時器一次溢出時間,即T<2Nus,這裏的N為(wei) 定時器的位數。這樣就可以得到脈寬(脈衝(chong) 持續時間)twx定時初值Twx的關(guan) 係:
twx=(2N-Twx)×12/f us (1)
如果所用晶振為(wei) 12 MHz,定時器為(wei) 方式1,即為(wei) 16位定時(這時定時有比較大的計數範圍,用途更為(wei) 廣泛),這樣上式變為(wei) :
twx=(216 - Twx )us (2)
之後再根據功率器件的時間特性和工作的平均功率值,確定一個(ge) 合適的PWM 信號周期T,很顯然這個(ge) 周期T就是由高電平脈寬twh和低電平脈寬twl組成,即:
T=twh+ twl (3)
當調製PWM 脈寬的誤差信號V(f)(這個(ge) 信號一般是由傳(chuan) 感器采集後經過相關(guan) 處理後得到的誤差信號)的變化範圍是(0~V)或(-V~V)時,PWM脈寬與(yu) 誤差信號為(wei) 線性關(guan) 係(實際可能不是線性的,但一般可以忽略或者可以通過前級進行軟件補償(chang) ),可以從(cong) 單片機的1個(ge) 引腳得到PWM 信號,具體(ti) 的過程在相關(guan) 文獻已有敘述,見文獻[4]。
然而,單片機一般是單極型的,它的邏輯0對應的實際電平是0 V,邏輯1對應的實際電平是+5 V。嚴(yan) 格地說,在這種單片機上隻能夠輸出單極型的PWM 信號。采用AT89C51結合軟件編程實現雙極型PWM 控製的設計思想是這樣的:從(cong) AT89C51的一個(ge) 引腳得到正的單極型PWM 信號輸出,對另一個(ge) 引腳做相應的設計和定義(yi) ,讓它承擔對應的“負”極型PWM 信號的輸出。即當調製PWM 脈寬的誤差信號為(wei) 正時,對應的PWM 就從(cong) AT89C51單片機的一個(ge) 引腳輸出;當誤差信號為(wei) 負時,對應的PWM 就從(cong) 另外一個(ge) 引腳輸出,盡管這個(ge) 輸出信號的模擬電平也是正的,但它對應的是負值的誤差信號所產(chan) 生的PWM 輸出,又是驅動負極型功率器件,和負極型PWM 功能一樣,於(yu) 是可以把它等效為(wei) 負極型PWM;當誤差信號為(wei) 零時,相應的兩(liang) 個(ge) 引腳都沒有輸出,然後再把這兩(liang) 個(ge) 引腳接入PWM 功率驅動電路的輸入端。通過對誤差信號正負的判別,再利用AT89C51的兩(liang) 個(ge) 引腳就實現了雙極型的PWM。具體(ti) 電路如圖1所示。
下麵計算產(chan) 生雙極型PWM 所需的定時初值。實際上穩定工作時,隻有一個(ge) 引腳有輸出,即一般兩(liang) 個(ge) 引腳不會(hui) 同時輸出,所以可看作是兩(liang) 個(ge) 相對獨立的過程,可假設脈寬和誤差信號的線性對應關(guan) 係:
據此可求出定時初值與(yu) 誤差信號的關(guan) 係:
由(1)式有
把式(5)代入式(6)得:
當晶振頻率取12 MHz時,f=12。采用定時方式1,則可以得到即時的控製信號V(t)和定時初值在PWM 信號的一個(ge) 周期內(nei) 的關(guan) 係:
因為(wei) V和V(t)通過對誤差計算都可以得到,所以根據式(8)可以求出t時刻對應的PWM 一個(ge) 周期高低脈寬的定時初值(注意這裏的T的單位是us,頻率f的單位為(wei) MHz)。
3 Keil C下的程序實現
Keil C是基於(yu) 標準C的C51專(zhuan) 用高級編程語言,它具備標準C的強大靈活的編程能力,同時又相對增加了對C51單片機硬件資源的直接操作,故在Keil C下對C51的程序設計幾乎使人們(men) 可擺脫對C51底層寄存器等硬件的煩瑣操作,編程效率顯著提高,並且程序運行速度和所占空間和匯編差別不大。這裏利用定時器T0的方式1,采用其時間溢出中斷,中斷號為(wei) 1,具體(ti) 程序流程如圖2所示。
圖2 PWM信號實現的軟件流程
E -誤差控製器;TH0-T0定時器高位;TL0-T0定時器低位;Twh、Twl-定時器初值
4 結語
單片機硬件發展很快,出現了16位、32位等多位機,但今後一段時期C51係列的8位機將仍占主流。通過適當的軟件開發,可以挖掘其內(nei) 在價(jia) 值,這樣既降低了生產(chan) 成本,又鍛煉了個(ge) 人的軟件開發能力。
參考文獻:
[1] 李朝青.原理及接口技術[M].北京:北京航空航天大學出版社,1999.
[2] 孫傳(chuan) 友.測控係統原理與(yu) 設計[M].北京:北京航空航天大學出版社,2002.
[32 張運波.PWM 信號的軟件實現方法[J].微型計算機信息,2002,8(10)