淺談利用單片機(jī)設(shè)計(jì)PWM脈沖信號(hào)發(fā)生器
簡(jiǎn)單的說(shuō),PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。理論上講就是電壓或電流源以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的,通的時(shí)候就是電源被加到負(fù)載上,斷的時(shí)候就是供電被斷開(kāi)的時(shí)候,所以PWM信號(hào)仍然是數(shù)字的。要想達(dá)到這樣一種脈寬調(diào)制效果,模擬電壓和電流時(shí)可以直接控制。例如音響的音量控制,在簡(jiǎn)單的模擬電路中,它的控制是由連接了一個(gè)可變電阻的旋鈕來(lái)實(shí)現(xiàn)的,其過(guò)程是擰動(dòng)旋鈕,電阻值變小或變大,流過(guò)該電阻的電流也隨之增加來(lái)減小,從而改變驅(qū)動(dòng)揚(yáng)聲器的電流值,那么聲音也就相應(yīng)變大或變小。從這個(gè)例子來(lái)看,模擬控制是直觀而簡(jiǎn)單的,但是并不是所有的模擬電路都是可行并且經(jīng)濟(jì)的,其中很重要的一點(diǎn)就是模擬電路容易隨時(shí)間漂移,它的調(diào)節(jié)過(guò)程就很困難,為了解決問(wèn)題就要增加很多的電路,使得電路變得復(fù)雜并且昂貴。除此之外,模擬電路中許多的元器件會(huì)發(fā)熱,也就相對(duì)提高了電路的功耗,并且對(duì)噪聲也敏感,任何干擾或噪聲都會(huì)改變電流值的大小。
綜上所述,通過(guò)數(shù)字方式來(lái)控制模擬電路可以大幅度降低系統(tǒng)的成本和功耗,而單片機(jī)I/O口的數(shù)字輸出可以很簡(jiǎn)單地發(fā)出一個(gè)脈沖波,在配以外部元器件就可以調(diào)節(jié)脈沖波的占空比,完成PWM的功能。本文主要介紹利用89S52系列的單片機(jī),控制某個(gè)I/O口中一個(gè)管腳的數(shù)字輸出,生成相應(yīng)周期的脈沖波,并利用按鍵控制其占空比的調(diào)節(jié),包括了占空比自小到大和自大到校的順序及倒序可調(diào),其調(diào)節(jié)范圍廣,操作簡(jiǎn)便,各元器件間的干擾較小,對(duì)模擬電路的控制十分有效。
1.PWM波的生成
PWM波既為數(shù)字輸出,就是其幅值只有高電平(ON)和低電平(OFF)之分,所以只要使單片機(jī)中作為PWM波輸出端的那個(gè)管腳輸出“1”和“0”,并且搭配不同的時(shí)間段,就可以形成不同周期的PWM波。舉例說(shuō)明:若要生成周期為10ms的脈沖,就可以利用單片機(jī)編程指令控制其輸出端輸出“1”,并且保持一段時(shí)間tp,然后再輸出“0”,同樣使其保持一段時(shí)間tr,兩種數(shù)字輸出保持的時(shí)間必須要滿足,現(xiàn)就已生成10ms周期的脈沖波,而PWM波與該脈沖波的區(qū)別就是還要能夠調(diào)節(jié)占空比。占空比是指正半周脈寬占整個(gè)周期的比例,即高電平保持時(shí)間于周期的比值,該比值為百分?jǐn)?shù)(),因此在周期一定的情況下,調(diào)節(jié)占空比就是調(diào)節(jié)高電平保持的時(shí)間。
2.應(yīng)用編程
本文介紹的PWM波是利用單片機(jī)定時(shí)中斷去確定脈沖波的周期,并且通過(guò)兩個(gè)按鍵自增和自減某個(gè)變量送至中斷中,通過(guò)此變量去分配高低電平各自占用的時(shí)間,形成不同的占空比,即假設(shè)一個(gè)周期滿額比例值為10,則高電平保持時(shí)間的比例為該變量值,那么低電平保持時(shí)間的比例就是10減去該變量值。
如圖1所示為單片機(jī)的外部接線圖,其中省略了單片機(jī)最小系統(tǒng),此圖即可利用89SC52單片機(jī)設(shè)計(jì)出滿足周期為10ms、初始占空比為50%、占空比調(diào)節(jié)范圍為0~100%的PWM脈沖信號(hào)發(fā)生器。占空比調(diào)節(jié)范圍是指高電平保持時(shí)間為0~10ms,那么低電平保持時(shí)間就是10ms~0。P0.7腳為PWM波輸出口,作為PWM脈沖信號(hào)發(fā)生器可連接其它電路,本文僅連接示波器去觀察波形的占空比變化情況,P2.0腳為自增按鈕控制端,每按一次高電平保持時(shí)間增加1ms,P2.1腳為自減按鈕控制端,每按一次高電平保持時(shí)間減少1ms。圖2所示為初始50%占空比的波形圖以及20%、40%、60%和80%占空比的波形圖,以此看出PWM的變化。
89C52單片機(jī)生成PWM波C語(yǔ)言程序:
#define uint unsigned int
sbit pwm=P0^7;
sbit k1=P2^0;
sbit k2=P2^1;
bit bz;//定義一個(gè)按鍵是否松開(kāi)的標(biāo)志位
uchar b;
uchar m=5;//m為控制占空比的變量,初始占空比50%
void delay(uint i)
{while(i--);}
void dingshi() interrupt 1//定時(shí)中斷
{TL0=(65536-1000)%256; //1ms初始化
TH0=(65536-1000)/256;
b++;
if(b==10) b=0; //10ms周期定時(shí)
if(b
{EA=1;ET0=1;
TMOD=0x01;//定時(shí)0工作在方式1,1ms中斷1次
TL0=(65536-1000)%256;
TH0=(65536-1000)/256;
TR0=1;//開(kāi)中斷
while (1)
{if((k1==0)&&(bz==0)) {delay(1110);if(k1==0){bz=1;m++;if(m==11) m=10;}}//每按一次占空比自增10%
if((k2==0)&&(bz==0)) {delay(1110);if(k2==0){bz=1;m--;if(m==255) m=0;}}//每按一次占空比自減10%
if((k1==1)&&(k2==1)) bz=0;//判斷按鍵是否松開(kāi)}}
綜合硬件設(shè)計(jì)和軟件設(shè)計(jì)可以看出,利用單片機(jī)數(shù)字輸出方式可以很簡(jiǎn)單的完成脈沖寬度的調(diào)制,無(wú)須通過(guò)對(duì)模擬電路各元器件參數(shù)的計(jì)算進(jìn)行調(diào)節(jié),并且可以隨時(shí)調(diào)整輸出不同周期的脈沖波,利用該方法設(shè)計(jì)的PWM脈沖信號(hào)發(fā)生器可以很廣泛。但是此設(shè)計(jì)也有一些缺點(diǎn),其占空比只能按10%的比例調(diào)節(jié),調(diào)節(jié)精度還有待提高。
參考文獻(xiàn)
【1】何立民,張俊謨.單片機(jī)中級(jí)教程:第2版[M].北京:北京航空航天大學(xué)出版社,2002.
【2】吳金戌,沈慶陽(yáng),郭庭吉.8051單片機(jī)實(shí)踐與應(yīng)用[M].北京:人民郵電出版社,2003.
【3】賀小光,藍(lán)諷,陳敬艷.PWM可調(diào)直流穩(wěn)壓控制電源電路的設(shè)計(jì)研究[J].東北師大學(xué)報(bào)
評(píng)論