楊 宇
(昆明冶金高等專(zhuān)科學(xué)校電氣與機(jī)械學(xué)院,云南 昆明 650033)
PWM是英文Pulse Width Modulation(脈沖寬度調(diào)制)的縮寫(xiě),它是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種技術(shù),通過(guò)改變矩形波的占空比來(lái)獲得不同的平均電壓,占空比是指高電平持續(xù)時(shí)間在1個(gè)矩形波周期時(shí)間內(nèi)的百分比。PWM的應(yīng)用很廣,它可以控制燈光的亮度、控制直流電機(jī)的轉(zhuǎn)速、輸出語(yǔ)音信號(hào)等。
用單片機(jī)來(lái)實(shí)現(xiàn)PWM實(shí)際上是在單片機(jī)的某個(gè)引腳輸出一系列的矩形波,其周期一般是固定的,而其高電平、低電平所占用的時(shí)間是可以調(diào)整的,即通過(guò)改變占空比在單片機(jī)引腳上輸出不同的電壓平均值。在實(shí)際的應(yīng)用中,經(jīng)常使用51單片機(jī)來(lái)實(shí)現(xiàn)PWM。有的51單片機(jī)具有硬件的PWM模塊,可以通過(guò)配置相關(guān)的特殊功能寄存器來(lái)實(shí)現(xiàn)PWM;而有的51單片機(jī)并不具有硬件的PWM模塊,需要通過(guò)軟件算法來(lái)實(shí)現(xiàn)PWM。該文主要針對(duì)不具有硬件PWM的51單片機(jī),提出2種實(shí)現(xiàn)PWM的控制算法。
該文以51單片機(jī)對(duì)直流電動(dòng)機(jī)的調(diào)速控制為例來(lái)論述2種實(shí)現(xiàn)PWM的控制算法。該例中51單片機(jī)采用AT89C51,通過(guò)驅(qū)動(dòng)芯片L298連接AT89C51和直流電動(dòng)機(jī),AT89C51的引腳P2.0、P2.1、P1.7分別連接L298的輸入端1(IN1)、輸入端2(IN2)、使能端ENA。L298的輸出端1(OUT1)和輸出端2(OUT2)連接直流電動(dòng)機(jī)的2個(gè)接線(xiàn)端。當(dāng)使能端ENA為1,引腳P2.0和P2.1分別輸出1和0時(shí),直流電動(dòng)機(jī)正轉(zhuǎn);引腳P2.0和P2.1均輸出1或0時(shí)直流電動(dòng)機(jī)停止。硬件原理圖見(jiàn)如圖1。

圖1 AT89C51驅(qū)動(dòng)直流電動(dòng)機(jī)硬件原理圖
PWM是一個(gè)與延時(shí)有關(guān)的概念,而單片機(jī)具有軟件和定時(shí)器2種延時(shí)方法,所以我們可以基于圖1的硬件原理圖來(lái)分析2種實(shí)現(xiàn)PWM的控制算法:軟件延時(shí)的方法和定時(shí)器中斷的方法。
該方法利用單片機(jī)的軟件延時(shí)函數(shù)來(lái)控制一個(gè)PWM信號(hào)周期中高低電平的持續(xù)時(shí)間,以到達(dá)PWM信號(hào)所需的占空比。實(shí)例程序見(jiàn)圖2,程序中的delayms()是用戶(hù)自定義的軟件延時(shí)函數(shù),電機(jī)正轉(zhuǎn)和停止時(shí)都要調(diào)用該函數(shù)來(lái)控制電機(jī)正轉(zhuǎn)和停止的持續(xù)時(shí)間,對(duì)該函數(shù)所賦的實(shí)參決定了持續(xù)的時(shí)間。在電機(jī)正轉(zhuǎn)和停止的實(shí)參之和不變的情況下,成比例的增大電機(jī)正轉(zhuǎn)的實(shí)參可以控制電機(jī)的轉(zhuǎn)速成比例的增大,反之,成比例的減小電機(jī)正轉(zhuǎn)的實(shí)參可以控制電機(jī)的轉(zhuǎn)速成比例的減小,這樣就可以實(shí)現(xiàn)對(duì)直流電動(dòng)機(jī)的速度控制。

圖2 軟件延時(shí)方法的程序
該方法利用單片機(jī)的定時(shí)器中斷以及中斷的次數(shù)來(lái)控制1個(gè)PWM信號(hào)周期中高低電平的持續(xù)時(shí)間,以到達(dá)PWM信號(hào)所需的占空比。實(shí)例程序圖3,該程序只用到51單片機(jī)內(nèi)部的2個(gè)定時(shí)器中的定時(shí)器1,定時(shí)器1每定時(shí)1次的時(shí)間為100 μs,定時(shí)時(shí)間每到1次在中斷程序中讓中斷次數(shù)標(biāo)志time加1,并且根據(jù)中斷次數(shù)標(biāo)志time的值來(lái)決定PWM信號(hào)的周期和占空比,第一個(gè)if語(yǔ)句中的time值決定周期,第二個(gè)if語(yǔ)句中的time值決定電機(jī)正轉(zhuǎn)的時(shí)間,else語(yǔ)句對(duì)應(yīng)的time值決定電機(jī)停止的時(shí)間。該例中設(shè)定的PWM信號(hào)周期為1 ms,電機(jī)正轉(zhuǎn)時(shí)間為200 μs,電機(jī)停止時(shí)間為800 μs。在PWM信號(hào)周期不變的情況下,成比例的增大電機(jī)正轉(zhuǎn)的時(shí)間可以控制電機(jī)的轉(zhuǎn)速成比例的增大,反之,成比例的減小電機(jī)正轉(zhuǎn)的時(shí)間可以控制電機(jī)的轉(zhuǎn)速成比例的減小,這樣就可以實(shí)現(xiàn)對(duì)直流電動(dòng)機(jī)的速度控制。

圖3 定時(shí)器中斷方法的程序
以上2種方法都能夠?qū)崿F(xiàn)PWM控制,但兩者都有其優(yōu)缺點(diǎn)。軟件延時(shí)的方法程序設(shè)計(jì)簡(jiǎn)單,但控制的精確度沒(méi)有定時(shí)器中斷的方法高,特別是當(dāng)主程序中除了PWM控制還有其它功能程序時(shí),例如鍵盤(pán)掃描、顯示等操作,因?yàn)閱纹瑱C(jī)的CPU(中央處理器)需要花費(fèi)額外的時(shí)間去執(zhí)行其它操作,這樣就會(huì)影響PWM控制的精確度。定時(shí)器中斷的方法由于CPU和定時(shí)器是并行工作,并且每次定時(shí)時(shí)間到都會(huì)進(jìn)入中斷服務(wù)程序進(jìn)行PWM的高低電平處理,即使主程序中有其它功能程序,仍然能保證較高的PWM控制精度。定時(shí)器中斷的方法程序設(shè)計(jì)相對(duì)繁瑣,特別是在中斷服務(wù)程序中不能編寫(xiě)太過(guò)復(fù)雜的語(yǔ)句,這樣也會(huì)影響PWM的控制精度。