如何使用軟件編程產(chǎn)生PWM?
PWM是什么
脈寬調(diào)制(Pulse Width Modulation)是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù),廣泛應(yīng)用在從測量、通信到功率控制與變換的許多領(lǐng)域中。PWM控制在汽車上也有較多應(yīng)用,比如:電動汽車充電電路CP端子信號(功率握手用),燃油泵功率控制電路、電機調(diào)速。
PWM控制的基本原理可以概括為:通過對逆變電路開關(guān)器件的通斷進行控制,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來代替所需要的波形(如正弦波)。也就是說,在輸出波形的半個周期中,通過產(chǎn)生多個脈沖,并使各脈沖的等值電壓與所需波形相對應(yīng),從而實現(xiàn)對輸出電量的精確控制。
模擬電路&數(shù)字電路
【1】模擬電路
模擬信號的值可以連續(xù)變化,其時間和幅度的分辨率都沒有限制。9V電池就是一種模擬器件,因為它的輸出電壓并不精確地等于9V,而是隨時間發(fā)生變化,并可取任何實數(shù)值。
模擬電壓和電流可直接用來進行控制,如對汽車收音機的音量進行控制。在簡單的模擬收音機中,音量旋鈕被連接到一個可變電阻。擰動旋鈕時,電阻值變大或變小;流經(jīng)這個電阻的電流也隨之增加或減少,從而改變了驅(qū)動揚聲器的電流值,使音量相應(yīng)變大或變小。
盡管模擬控制看起來可能直觀而簡單,但它并不總是非常經(jīng)濟或可行的。其中一點就是,模擬電路容易隨時間漂移,因而難以調(diào)節(jié)。模擬電路還有可能嚴(yán)重發(fā)熱,其功耗相對于工作元件兩端電壓與電流的乘積成正比。模擬電路還可能對噪聲很敏感,任何擾動或噪聲都肯定會改變電流值的大小。
【2】數(shù)字電路
通過以數(shù)字方式控制模擬電路,可以大幅度降低系統(tǒng)的成本和功耗。此外,許多微控制器和DSP已經(jīng)在芯片上包含了PWM控制器,這使數(shù)字控制的實現(xiàn)變得更加容易了。 簡而言之,PWM是一種對模擬信號電平進行數(shù)字編碼的方法。
PWM信號仍然是數(shù)字的,因為在給定的任何時刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時候即是直流供電被加到負(fù)載上的時候,斷的時候即是供電被斷開的時候。只要帶寬足夠,任何模擬值都可以使用PWM進行編碼(這里指的是PWM直接控制負(fù)責(zé))。
圖片
上圖顯示了三種不同的PWM信號。a是一個占空比為10%的PWM輸出,即在信號周期中,10%的時間通,其余90%的時間斷。b和c顯示的分別是占空比為50%和90%的PWM輸出。這三種PWM輸出編碼的分別是強度為滿度值的10%、50%和90%的三種不同模擬信號值。例如,假設(shè)供電電源為9V,占空比為10%,則對應(yīng)的是一個幅度為0.9V的模擬信號。
圖片
通訊與控制
PWM 的一個優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進行數(shù)模轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強到足以將邏輯1 改變?yōu)檫壿? 或?qū)⑦壿? 改變?yōu)檫壿? 時,也才能對數(shù)字信號產(chǎn)生影響。對噪聲抵抗能力的增強是PWM 相對于模擬控制的另外一個優(yōu)點,而且這也是在某些時候?qū)WM 用于通信的主要原因。
作為一個具體的例子,我們來考察一種用PWM 控制的制動器。簡單地說,制動器是緊夾住某種東西的一種裝置。許多制動器使用模擬輸入信號來控制夾緊壓力(或制動功率)的大小。加在制動器上的電壓或電流越大,制動器產(chǎn)生的壓力就越大。可以將PWM 控制器的輸出連接到電源與制動器之間的一個開關(guān)。要產(chǎn)生更大的制動功率,只需通過軟件加大PWM 輸出的占空比就可以了。如果要產(chǎn)生一個特定大小的制動壓力,需要通過測量來確定占空比和壓力之間的數(shù)學(xué)關(guān)系(所得的公式或查找表經(jīng)過變換可用于控制溫度、表面磨損等等)。
硬件設(shè)置產(chǎn)生PWM
許多微控制器內(nèi)部都包含有PWM 控制器。例如,Microchip 公司的PIC16C67 內(nèi)含兩個PWM 控制器,每一個都可以選擇接通時間和周期。占空比是接通時間與周期之比;調(diào)制頻率為周期的倒數(shù)。執(zhí)行PWM 操作之前,這種微處理器要求在軟件中完成以下工作:
軟件編程產(chǎn)生PWM
51單片機內(nèi)部沒有PWM控制器,需要通過軟件編程來實現(xiàn),程序如下。
K1 EQU P1.0
K2 EQU P1.1
ORG 0000H
AJMP MAIN
ORG 0040H
MAIN:
MOV SP,#60H
MOV R1,#3
MOV R2,#4
MOV R3,#0
MOV TH0,#0FFH
MOV TL0,#9CH
MOV TH1,#3CH
MOV TL1,#0B0H
MOV TMOD,#11H;16位定時器/計數(shù)器
MOV IE,#8FH
SETB IT0
SETB IT1
SETB TR0
SETB TR1
LOOP:
MOV A,R1
JB K2,S1
CALL DELAY
JB K2,S1
CJNE A,#9,PWMINC
CALL LED
SJMP LOOP
PWMINC:
INC R1
SJMP LOOP
S1:
JB K1,S2
CALL DELAY
JB K1,S2
CJNE A,#1,PWMDEC
CALL LED
SJMP LOOP
PWMDEC:
DEC R1
S2: SJMP LOOP
ORG 000BH
AJMP TIME0
ORG 0100H
TIME0:
MOV A,#9
SUBB A,R2
JNC DONE
INC R2
SJMP LOOP1
DONE: MOV R2,#1
LOOP1: CLR C
MOV A,R2
SUBB A,R1
JNC LOOP2
SETB P1.6
SJMP OUT1
LOOP2: CLR P1.6
OUT1: RETI
ORG 0003H
LJMP IN0
ORG 1000H
IN0:
INC R3
RETI
LED:
CPL P1.2
RET
DELAY:
MOV R7,#100
DE: MOV R6,#100
DJNZ R6,$
DJNZ R7,DE
RET