Keil C是基于標(biāo)準(zhǔn)C內(nèi)核的第三方語(yǔ)言,利用它可以很方便高效地實(shí)現(xiàn)對(duì)C51系列單片機(jī)的高級(jí)編程。C51是目前使用最普遍的8位單片機(jī),價(jià)格低廉。它與軟件編程結(jié)合,可以比較方便地滿(mǎn)足眾多功能要求,甚至取代一些復(fù)雜的硬件電路,簡(jiǎn)化硬件設(shè)計(jì),并提高系統(tǒng)的可靠性和降低成本。基于這個(gè)思想,本文提出了一種在 C51單片機(jī)上軟件實(shí)現(xiàn)相對(duì)復(fù)雜的雙極型PWM 的新方法。 1 PWM 控制原理 PWM(Pulse Width Modulation)即脈沖寬度調(diào)制,它通過(guò)控制信號(hào)去調(diào)制方波脈沖的寬度,從而獲得控制的實(shí)現(xiàn)。 產(chǎn)生PWM 信號(hào)可以由硬件方法和軟件方法實(shí)現(xiàn)。傳統(tǒng)的硬件模擬方法是把調(diào)制信號(hào)和載波(一般是三角波)同時(shí)接入運(yùn)算放大器的兩個(gè)輸入端作比較而得到。而軟件的實(shí)現(xiàn),特別是基于單片機(jī)的軟件實(shí)現(xiàn)方法,主要是利用其內(nèi)部提供的定時(shí)器,通過(guò)改變定時(shí)器的定時(shí)初值獲得不同的脈沖持續(xù)時(shí)間,如果把系統(tǒng)的控制信號(hào)和定時(shí)器的定時(shí)初值線性對(duì)應(yīng)起來(lái),就可獲得控制信號(hào)對(duì)脈寬調(diào)制的PWM 信號(hào)。所以這樣線性的對(duì)應(yīng)過(guò)程就成為這個(gè)實(shí)現(xiàn)過(guò)程的關(guān)鍵。控制信號(hào)的種類(lèi)不同,采用不同的計(jì)算方法,又可以獲得不同的PWM,見(jiàn)文獻(xiàn)[3]。 2 在AT89C51中實(shí)現(xiàn)雙極型PWM的方法 51系列單片機(jī)提供了非常豐富的資源,它除了擁有4個(gè)通用并口和1個(gè)串口外,還有外部中斷和內(nèi)部定時(shí)器等。而且,不同的型號(hào)還集成有不同的功能,比如 AT89C51就在片內(nèi)集成了4 K 的ROM,這樣存儲(chǔ)空間可以滿(mǎn)足一般的編程需要,而不必去構(gòu)建程序存儲(chǔ)器,既提高了工作效率和系統(tǒng)的穩(wěn)定性,又降低了生產(chǎn)成本。 基于AT89C51單片機(jī)的PWM 軟件實(shí)現(xiàn)的重要硬件支撐是該單片機(jī)內(nèi)部的定時(shí)器。在AT89C51內(nèi)實(shí)現(xiàn)PWM 的基本過(guò)程:首先選定脈沖的頻率T,然后根據(jù)控制信號(hào)的變化范圍,這里假設(shè)是(0~V),則可以求出t時(shí)刻通過(guò)控制信號(hào)V(t)的對(duì)應(yīng)脈沖的正、負(fù)脈沖持續(xù)時(shí)間。這兩個(gè)時(shí)間長(zhǎng)度在單片機(jī)里是通過(guò)給定時(shí)器賦相應(yīng)的初值而得,即定時(shí)器獲得這樣的定時(shí)初值后就在機(jī)器周期的同步下,從這個(gè)初值加1計(jì)數(shù),定時(shí)器滿(mǎn)時(shí)則產(chǎn)生相應(yīng)時(shí)間長(zhǎng)度的溢出中斷,再利用這個(gè)中斷所響應(yīng)的服務(wù)程序去控制單片機(jī)某一引腳相應(yīng)的正、負(fù)電平極性的持續(xù)時(shí)間。如果上述過(guò)程連續(xù)進(jìn)行,就可在這個(gè)引腳獲得寬度隨控制信號(hào)V(t)大小變化的PWM方波信號(hào)。 AT89C51單片機(jī)每個(gè)機(jī)器周期由6個(gè)狀態(tài)組成,每個(gè)狀態(tài)又有兩個(gè)時(shí)鐘周期,這樣一個(gè)機(jī)器周期就等于12個(gè)時(shí)鐘周期,即機(jī)器頻率為時(shí)鐘頻率的12分頻。通過(guò)對(duì)工作模式寄存器TMOD的賦值操作,把定時(shí)器設(shè)為內(nèi)部定時(shí)狀態(tài)并選擇不同的定時(shí)方式。然后假設(shè)PWM 的周期T小于定時(shí)器一次溢出時(shí)間,即T<2Nus,這里的N為定時(shí)器的位數(shù)。這樣就可以得到脈寬(脈沖持續(xù)時(shí)間)twx定時(shí)初值Twx的關(guān)系: twx=(2N-Twx)×12/f us (1) 如果所用晶振為12 MHz,定時(shí)器為方式1,即為16位定時(shí)(這時(shí)定時(shí)有比較大的計(jì)數(shù)范圍,用途更為廣泛),這樣上式變?yōu)椋?br />twx=(216 - Twx )us (2) 之后再根據(jù)功率器件的時(shí)間特性和工作的平均功率值,確定一個(gè)合適的PWM 信號(hào)周期T,很顯然這個(gè)周期T就是由高電平脈寬twh和低電平脈寬twl組成,即: T=twh+ twl (3) 當(dāng)調(diào)制PWM 脈寬的誤差信號(hào)V(f)(這個(gè)信號(hào)一般是由傳感器采集后經(jīng)過(guò)相關(guān)處理后得到的誤差信號(hào))的變化范圍是(0~V)或(-V~V)時(shí),PWM脈寬與誤差信號(hào)為線性關(guān)系(實(shí)際可能不是線性的,但一般可以忽略或者可以通過(guò)前級(jí)進(jìn)行軟件補(bǔ)償),可以從單片機(jī)的1個(gè)引腳得到PWM 信號(hào),具體的過(guò)程在相關(guān)文獻(xiàn)已有敘述,見(jiàn)文獻(xiàn)[4]。 然而,單片機(jī)一般是單極型的,它的邏輯0對(duì)應(yīng)的實(shí)際電平是0 V,邏輯1對(duì)應(yīng)的實(shí)際電平是+5 V。嚴(yán)格地說(shuō),在這種單片機(jī)上只能夠輸出單極型的PWM 信號(hào)。采用AT89C51結(jié)合軟件編程實(shí)現(xiàn)雙極型PWM 控制的設(shè)計(jì)思想是這樣的:從AT89C51的一個(gè)引腳得到正的單極型PWM 信號(hào)輸出,對(duì)另一個(gè)引腳做相應(yīng)的設(shè)計(jì)和定義,讓它承擔(dān)對(duì)應(yīng)的“負(fù)”極型PWM 信號(hào)的輸出。即當(dāng)調(diào)制PWM 脈寬的誤差信號(hào)為正時(shí),對(duì)應(yīng)的PWM 就從AT89C51單片機(jī)的一個(gè)引腳輸出;當(dāng)誤差信號(hào)為負(fù)時(shí),對(duì)應(yīng)的PWM 就從另外一個(gè)引腳輸出,盡管這個(gè)輸出信號(hào)的模擬電平也是正的,但它對(duì)應(yīng)的是負(fù)值的誤差信號(hào)所產(chǎn)生的PWM 輸出,又是驅(qū)動(dòng)負(fù)極型功率器件,和負(fù)極型PWM 功能一樣,于是可以把它等效為負(fù)極型PWM;當(dāng)誤差信號(hào)為零時(shí),相應(yīng)的兩個(gè)引腳都沒(méi)有輸出,然后再把這兩個(gè)引腳接入PWM 功率驅(qū)動(dòng)電路的輸入端。通過(guò)對(duì)誤差信號(hào)正負(fù)的判別,再利用AT89C51的兩個(gè)引腳就實(shí)現(xiàn)了雙極型的PWM。具體電路如圖1所示。 
下面計(jì)算產(chǎn)生雙極型PWM 所需的定時(shí)初值。實(shí)際上穩(wěn)定工作時(shí),只有一個(gè)引腳有輸出,即一般兩個(gè)引腳不會(huì)同時(shí)輸出,所以可看作是兩個(gè)相對(duì)獨(dú)立的過(guò)程,可假設(shè)脈寬和誤差信號(hào)的線性對(duì)應(yīng)關(guān)系: 
據(jù)此可求出定時(shí)初值與誤差信號(hào)的關(guān)系: 
由(1)式有 
把式(5)代入式(6)得: 
當(dāng)晶振頻率取12 MHz時(shí),f=12。采用定時(shí)方式1,則可以得到即時(shí)的控制信號(hào)V(t)和定時(shí)初值在PWM 信號(hào)的一個(gè)周期內(nèi)的關(guān)系: 
因?yàn)閂和V(t)通過(guò)對(duì)誤差計(jì)算都可以得到,所以根據(jù)式(8)可以求出t時(shí)刻對(duì)應(yīng)的PWM 一個(gè)周期高低脈寬的定時(shí)初值(注意這里的T的單位是us,頻率f的單位為MHz)。 3 Keil C下的程序?qū)崿F(xiàn) Keil C是基于標(biāo)準(zhǔn)C的C51專(zhuān)用高級(jí)編程語(yǔ)言,它具備標(biāo)準(zhǔn)C的強(qiáng)大靈活的編程能力,同時(shí)又相對(duì)增加了對(duì)C51單片機(jī)硬件資源的直接操作,故在Keil C下對(duì)C51的程序設(shè)計(jì)幾乎使人們可擺脫對(duì)C51底層寄存器等硬件的煩瑣操作,編程效率顯著提高,并且程序運(yùn)行速度和所占空間和匯編差別不大。這里利用定時(shí)器T0的方式1,采用其時(shí)間溢出中斷,中斷號(hào)為1,具體程序流程如圖2所示。  圖2 PWM信號(hào)實(shí)現(xiàn)的軟件流程
E -誤差控制器;TH0-T0定時(shí)器高位;TL0-T0定時(shí)器低位;Twh、Twl-定時(shí)器初值 4 結(jié)語(yǔ) 單片機(jī)硬件發(fā)展很快,出現(xiàn)了16位、32位等多位機(jī),但今后一段時(shí)期C51系列的8位機(jī)將仍占主流。通過(guò)適當(dāng)?shù)能浖_(kāi)發(fā),可以挖掘其內(nèi)在價(jià)值,這樣既降低了生產(chǎn)成本,又鍛煉了個(gè)人的軟件開(kāi)發(fā)能力。 |