陳靈方,秦翠蘭,王立強(qiáng),張 鵬
(新疆理工學(xué)院,新疆 阿克蘇 843100)
運(yùn)用PWM原理進(jìn)行調(diào)速是直流電機(jī)調(diào)速的主要方式之一?,F(xiàn)代汽車中大量采用了電氣設(shè)備,如自動雨刷、自動燈光、自動落鎖、電子駐車等機(jī)構(gòu),為了使車輛部件機(jī)構(gòu)達(dá)到更好的人機(jī)工程學(xué)和性能要求,這些電子設(shè)備大多含有可進(jìn)行直流調(diào)速的驅(qū)動器件[1]。電動汽車兩擋變速器中,換擋過程采用直流電機(jī)作為換擋動作驅(qū)動器,在變速器的換擋性能試驗中通過改變換擋電機(jī)轉(zhuǎn)速來實現(xiàn)不同工況下?lián)Q擋過程的品質(zhì)優(yōu)化,而換擋電機(jī)的轉(zhuǎn)速調(diào)節(jié)采用PWM直流調(diào)速。本研究基于89C52RC單片機(jī)的定時器功能來實現(xiàn)直流電機(jī)的調(diào)速系統(tǒng)設(shè)計。
在圖1a中,如果將開關(guān)S按照周期T進(jìn)行反復(fù)閉合與斷開,每次閉合時間為ton,電機(jī)兩端的電壓也將呈現(xiàn)周期性變化,如圖1b所示。
圖1 PWM電壓等效原理Fig.1 PWM voltage equivalence principle
此時電機(jī)兩端的等效電壓為:
通過上式可以看出,PWM直流電機(jī)調(diào)速實質(zhì)是變電壓調(diào)速,通過控制時間ton即可實現(xiàn)電動機(jī)兩端的等效電壓調(diào)整,從而實現(xiàn)電動機(jī)調(diào)速[2]。
系統(tǒng)采用89C52RC單片機(jī)作為主控芯片,選用ULN2003達(dá)林頓管驅(qū)動芯片直接驅(qū)動直流電機(jī),硬件電路原理如圖2所示。
圖2 電路原理Fig.2 Circuitry principle
電路中,鍵KEY1為加速按鍵,鍵KEY2為減速按鍵,分別接在P3.0和P3.1端口,低電平有效。由P2.0產(chǎn)生PWM波形,經(jīng)ULN2003驅(qū)動芯片后驅(qū)動直流電機(jī)運(yùn)行。
基于51系列單片機(jī)的PWM脈寬調(diào)制有兩種方式實現(xiàn)[3]:一種是通過程序計時的方式產(chǎn)生,此種方法程序邏輯直觀,但程序在執(zhí)行過程中不能執(zhí)行其他操作,否則會引起脈寬周期的劇烈變化,造成脈寬調(diào)制波精度不高;另一種是通過單片機(jī)定時器功能實現(xiàn),在定時器功能開啟期間不影響單片機(jī)進(jìn)行鍵盤掃描等操作,產(chǎn)生的脈寬調(diào)制波精度高,單片機(jī)執(zhí)行效率高。本設(shè)計采用單片機(jī)定時器功能,為了更加直觀精確控制程序流程,采用匯編語言進(jìn)行編程來實現(xiàn)高精度的PWM調(diào)速[4],程序流程如圖3所示。
圖3 PWM直流電機(jī)調(diào)速程序流程Fig.3 Flow of PWM DC motor speed regulation program
在本系統(tǒng)中,通用寄存器R0存儲脈寬定時數(shù)據(jù),鍵KEY1或鍵KEY2通過鍵盤掃描程序檢測是否被按下,若被按下則增加或減小通用寄存器R0的值,每次脈寬調(diào)節(jié)及時將R0的值傳送給TL0,使T0的定時器計數(shù)初值發(fā)生改變,實現(xiàn)脈寬的調(diào)節(jié)。
對于直流電機(jī)來說,要保持電機(jī)穩(wěn)定的調(diào)速性能,PWM頻率需大于1 kHz[5]。對于采用51系列單片機(jī)定時器功能輸出PWM波形,需要單片機(jī)的定時周期不能大于1 ms,若單片機(jī)采用12 MHz晶振,則機(jī)器周期為1 μs,定時器計數(shù)要小于1000。
單片機(jī)定時器T1用來控制PWM的周期(頻率),采用方式2,即自動重裝8位定時器,最大計數(shù)值為255,滿足直流電機(jī)PWM調(diào)速的頻率要求。系統(tǒng)的理論P(yáng)WM頻率為:
單片機(jī)定時器T1的工作方式采用方式2,定時器T0的工作方式均采用方式1,PWM波的周期由定時器T1來實現(xiàn),脈寬由定時器T0來控制,如圖4所示。
圖4 中斷流程Fig.4 Interrupt flow
從圖4可知,脈寬ton必須小于周期T,考慮到單片機(jī)的指令執(zhí)行時間,ton的值要比周期T小幾個機(jī)器周期,以便單片機(jī)完成定時器初始化、中斷響應(yīng)等操作,防止ton的值接近周期T時,出現(xiàn)T0計時中斷出現(xiàn)在下一個T1計時周期的情況,造成脈寬調(diào)制精度降低。在一個PWM波周期內(nèi)的時間分布如圖5所示。
圖5 單片機(jī)定時器中斷時間分配Fig.5 MCU timer interrupt time allocation
匯編程序如下:
TT0:CLR TR0;1個機(jī)器周期
CLR P2.0;1個機(jī)器周期
MOV TH0,#0FFH;1個機(jī)器周期
MOV TL0,R0;控制調(diào)制脈寬,1個機(jī)器周期
RETI ;2個機(jī)器周期
TT1:SETB P2.0 ;1個機(jī)器周期
SETBTR0;1個機(jī)器周期
RETI ;2個機(jī)器周期
以上程序中,單片機(jī)定時器T0的計時初值要比T1至少大6個機(jī)器周期。
程序在中斷執(zhí)行過程中需等待單片機(jī)正在執(zhí)行的指令執(zhí)行結(jié)束才能響應(yīng)中斷,如果中斷響應(yīng)遇到乘除法運(yùn)算(占空比計算需要用到乘除法運(yùn)算)則需等待的時間最長(4個機(jī)器周期),造成PWM波的周期與理論上存在誤差。
由PWM的等效電壓計算可知PWM的占空比為:
當(dāng)PWM為最小脈寬時,即理論占空比η=0,即ton為0。此時TH0=0FFH、TL0=0FFH,即R0寄存器的值為0FFH,T0定時器高8位和低8位初值均為255,只需經(jīng)過一個機(jī)器周期就會產(chǎn)生T0的定時中斷。在T1中斷服務(wù)程序中,T1一個定時周期內(nèi)程序運(yùn)行時間如表1所示。
表1 PWM為最小脈寬時T1一個定時周期內(nèi)程序運(yùn)行時間
通過表1可知,在PWM為最小脈寬、T0產(chǎn)生中斷時,單片機(jī)正在執(zhí)行T1的定時器中斷程序結(jié)束并啟動T1,因此并不會立馬執(zhí)行T0中斷服務(wù)程序,T0中斷響應(yīng)將在T1中斷服務(wù)程序結(jié)束后在T1下一個的定時周期內(nèi)響應(yīng)。經(jīng)分析T0的定時器中斷程序?qū)⒃?~10個機(jī)器周期內(nèi)執(zhí)行(包含T0的定時器中斷程序結(jié)束并跳轉(zhuǎn)2個機(jī)器周期和跳轉(zhuǎn)T0的定時器中斷程序3~8個機(jī)器周期),這也造成了單片機(jī)產(chǎn)生PWM波脈寬在最小值時的不精確。
當(dāng)PWM為最大脈寬時,即理論占空比η=100%,即ton=T。此時TH0=0FFH、TL0=00H,即R0寄存器的值為00H,T0定時器計數(shù)256個機(jī)器周期后才會產(chǎn)生T0的定時中斷,此時T0的計時周期與T1的計時周期相同,但在程序執(zhí)行過程中會出現(xiàn)T0不在當(dāng)前T1計時周期內(nèi)中斷程序,而出現(xiàn)在第二個T1計時周期內(nèi),這會造成PWM波形的嚴(yán)重不精確,在實際實驗中會導(dǎo)致直流電機(jī)在逐漸接近100%占空比時,突然出現(xiàn)轉(zhuǎn)速下降。為消除以上不良情形的出現(xiàn),定時器T0和T1中斷程序運(yùn)行時間邏輯在T1一個定時周期內(nèi)應(yīng)如表2所示。
表2 PWM為最大脈寬時T1一個定時周期內(nèi)程序運(yùn)行時間
通過表2可知,在PWM為最大脈寬時,要保證T0中斷在T1中斷之前響應(yīng),就要在T0中斷初值設(shè)置時考慮跳轉(zhuǎn)T1的定時器中斷程序和執(zhí)行T1的定時器中斷程序的時間(跳轉(zhuǎn)T1中斷程序3~8個機(jī)器周期,P2.0口置位1個機(jī)器周期,啟動T0的定時器1個機(jī)器周期),共計5~10個機(jī)器周期。本系統(tǒng)中有進(jìn)行乘除法運(yùn)算,因此跳轉(zhuǎn)中斷程序可按照最大值10個機(jī)器周期計算,需要將定時器T0的初值TL0增加10,此時定時器T0的初值設(shè)為TH0=0FFH、TL0=0AH,即定時器T0的初值低8位為10,這樣就保障了T1中斷會在T0中斷結(jié)束后產(chǎn)生。在PWM為最大脈寬時,T1定時器也存在中斷響應(yīng)跳轉(zhuǎn)時間等,影響PWM波形的精度。
在實際進(jìn)行程序設(shè)計和占空比計算時,由于兩個定時中斷優(yōu)先級相同,只需要保證在每個PWM周期內(nèi),定時器T0一定要先于T1產(chǎn)生中斷就可以正常運(yùn)行??山迫≡赑WM脈寬大時的定時周期作為脈寬周期,此時理論上TL0=00H,在實際程序設(shè)計中為了讓T0中斷先于T1中斷發(fā)生,便于單片機(jī)計算占空比,將TL0設(shè)置為06H(TL0=06H),這樣單片機(jī)需要在250個機(jī)器周期后產(chǎn)生中斷,可認(rèn)為250個機(jī)器周期就是一個PWM周期。占空比計算公式可改為:
式中,@TL0為TL0的當(dāng)前值,即R0寄存器的當(dāng)前值。
對于51單片機(jī)來說,本身并無浮點運(yùn)算能力,因此以上對占空比計算公式的改進(jìn)有利于計算。由于占空比為百分?jǐn)?shù),因此百分號前邊數(shù)字完全可以看作為十進(jìn)制數(shù),在計算時分別求出各位數(shù)字即可。匯編程序如下:
MOV A,R0 ;
MOV R1,#10 ;
MOV R2,#4;
DIV A,R1;百位和十位存入累加器A,余數(shù)放入R1
MUL A,R2 ;
MOV R2,#4;
MUL R1,R2;
MOV R2,#10 ;
DIV R1,R2 ;提取進(jìn)位
ADD A,R1 ;
MOV R5,A
MOV A,#100
SUBB A,R5 ;累加器A中存放的數(shù)據(jù)為占空比
MOV R1,#10
DIV A,R1;累加器A中存放的數(shù)據(jù)為占空比的十位數(shù)據(jù),R1中存放的數(shù)據(jù)為占空比的個位數(shù)據(jù)
獲得占空比的各位數(shù)字后,經(jīng)過LCD或多段數(shù)碼管按位進(jìn)行字符輸出即可。
為驗證系統(tǒng)的可行性,實現(xiàn)既定功能,采取軟件仿真進(jìn)行系統(tǒng)仿真,使用Proteus 8.9軟件對系統(tǒng)進(jìn)行仿真,如圖6所示。運(yùn)用仿真軟件的示波器功能,圖6分別展示了占空比為10%、50%、92%時的PWM波形。雖然示波器輸出的PWM波形在理論占空比為0和100%兩種情況下示波器顯示均不是一條直線,但輸出系統(tǒng)的PWM波形經(jīng)仿真測試可調(diào)可控,系統(tǒng)產(chǎn)生的的PWM波形符合預(yù)期系統(tǒng)要求。
圖6 PWM波形圖Fig.6 PWM waveform diagram
基于89C52RC單片機(jī)的定時器功能實現(xiàn)PWM直流電機(jī)調(diào)速,設(shè)計了程序流程,通過分析定時器中斷的執(zhí)行過程,得到影響PWM精度的主要原因,確定了定時器參數(shù),計算了PWM的占空比。在每個PWM周期內(nèi),兩個定時器中斷按照正確順序產(chǎn)生就可保證PWM波的精度,系統(tǒng)才能正常運(yùn)行,運(yùn)用軟件仿真驗證該系統(tǒng)的可行性。但在實際系統(tǒng)的設(shè)計與測試中發(fā)現(xiàn),不同的PWM波頻率等因素會影響電動機(jī)的機(jī)械性能,電動機(jī)在低占空比的情況下不能克服自身摩擦力矩而處于靜止?fàn)顟B(tài)。針對以上問題,未來需在此設(shè)計基礎(chǔ)上進(jìn)行研究改進(jìn)。