- 相關(guān)推薦
用89C51和8254-2實際步進式PWM輸出
摘要:介紹一種新型PWM輸出的方式。它是用89C51作為主控部分,用8254-2可編程定時器/計數(shù)器來實現(xiàn)1Hz~3kHz步進式PWM的輸出;具有分辨率高、反應(yīng)速度快及占用CPU時間少的優(yōu)點。關(guān)鍵詞:8254-289C51脈寬調(diào)制(PWM)分辨率
引言
脈寬調(diào)制(PWM)技術(shù)最初是在無線電技術(shù)中用于信號的調(diào)制,后來在電機調(diào)速中得到了很好的應(yīng)用。本設(shè)計中要求輸出PWM從1Hz~3kHz步進式遞增,單步為1Hz。由于89C51的時鐘最大能取24MHz,單指令周期為0.5μs,計數(shù)頻率為×106Hz。當輸出2999Hz和3000Hz時,若采用89C51內(nèi)部計數(shù)器來計數(shù),根本無法區(qū)別。因為計數(shù)頻率為2MHz,單指令周期0.5μs,而要輸出2999Hz時,計數(shù)應(yīng)為666.889;輸出3000Hz時,計數(shù)誚為666.887。因此在本設(shè)計中,采用外部定時器/計數(shù)器8254-2。因為8254-2最高計數(shù)頻率可達10MHz,能滿足以上設(shè)計的要求,另外采用8254-2的工作方式3可輸出方波。當定時器/計數(shù)器8254-2以方式3工作時,在計數(shù)的過程中輸出有一半時間為高,另一半時間為低。所以,若計數(shù)值為N,則其輸出在前N/2時可輸出高電平,后N/2時可輸出低電平,不需要用軟件來控制高低電平的轉(zhuǎn)換,但8254-2計數(shù)范圍有一定的限制,在采用二進制計數(shù)時,范圍為0000~9999,最大計數(shù)為10000。此外,為了使分辨率達到要求,還需要考慮程序指令所占用的時間,尤其是在輸出高頻時,分辨率尤為重要。
1硬件設(shè)計
1.18254可編程定時器/計數(shù)器[1]簡介
Intel公司的8254是8253的改進型,操作方式及引腳與8253完全相同。它的改進主要反映在2方面:①8254的計數(shù)頻率更高,可由直流至6MHz;8254-2可高達10MHz。②8254多個1個讀回命令(寫至控制器的寄存器),其格式如圖1所示。
這個命令可以令3個通道的計數(shù)器都鎖存(8253要3個通道的計數(shù)值都鎖存,需寫入3個命令)。另外,8254中的每個計數(shù)器都有1個狀態(tài)字可由讀回命令令其鎖存,然后由CPU讀取。狀態(tài)字的格式如圖2所示。其中D5~D0即為寫入此通道的控制字的相應(yīng)部分。D7反映了該計數(shù)器的輸出引腳。輸出(OUT)為高電平,D7=1;輸出為低電平,D7=0。D6反映時間常數(shù)寄存器中的計數(shù)值是否已經(jīng)寫入了計數(shù)單元中。當向通道寫入控制字以及計數(shù)值后,狀態(tài)字節(jié)中的D6=1;只有當計數(shù)值寫入計數(shù)單元后,D6=0。
本設(shè)計選擇8254-2的方式3工作。方式3是一種方波速率發(fā)生器。在這種方式中,當CPU設(shè)置控制字后,輸出將為高,在寫完計數(shù)值后就自動開始計數(shù),輸出保持為高;當計數(shù)到一半計數(shù)值時,輸出變?yōu)榈,直至計?shù)到0,輸出又變高,重新開始計數(shù)。若在計數(shù)期間寫入個新的計數(shù)值,并不影響現(xiàn)行的計數(shù)過程。但是若在方波半周期結(jié)束前和新計數(shù)值寫入后收到GATE脈沖,計數(shù)器將在下一個CLK脈沖時裝入新的計數(shù)值并以這個計數(shù)值開始計數(shù)。否則,新的計數(shù)值將在現(xiàn)行半周期結(jié)束時裝入計數(shù)器。
1.2PWM輸出的硬件設(shè)計
本設(shè)計選用可編程定時器/計數(shù)器8254-2,其最高計數(shù)頻率可達10MHz;充分利用8254-2的3個定時器/計數(shù)器,采取頻率的分頻輸出,并且不需要外部的信號源輸入,硬件電路簡化;通過軟件的處理可以實現(xiàn)連續(xù)(1Hz~3kHz)PWM波的輸出。本設(shè)計中將要輸出的PWM波分為3段,分別由8254-2中的3個定時/計數(shù)器輸出,門控由P2.2、P2.3、P2.4分別加以控制。在1~20Hz的輸出時,采用定時器0,計數(shù)頻率為104Hz,最大計數(shù)為104,最小計數(shù)為500符合要求,21~200Hz的輸出中,采用定時器1,計數(shù)頻率為105Hz,最大計數(shù)為4762,最小計數(shù)為500;在201Hz~3kHz的輸出中,采有定時器2,計數(shù)頻率為107Hz,最大計數(shù)為49751,滿足二進制計數(shù)的范圍,最小計數(shù)為3333。這些計數(shù)值可由單片機89C51[2]送給8254-2的數(shù)據(jù)輸入端,通過除法運算來得到這些計數(shù)值,由除法運算得到商。所得到的商去程序指令占用的時間即為所需要的計數(shù)值。采用8254-2的3個定時器的輸出經(jīng)過1個或門作為CD4046鎖相環(huán)的輸入,同時經(jīng)過1個非門進入89C51的INT1口,申請下降沿中斷;CD4046鎖相環(huán)輸出所需的PWM。
為了防止程序進入死循環(huán),增加了外部的硬件看門狗定時器IMP813L[3],其內(nèi)部的看門狗定時器監(jiān)控UP/UC的工作。如果在1.6s內(nèi)未檢測到其工作,內(nèi)部的定時器將使看門狗輸出WDO處于低電平狀態(tài),WDO將保持低電平直到在WDI檢測到UP/UC的工作。將WR和WDO連接可使看門狗超時產(chǎn)生復位。
具體硬件電路如圖3所示。
2軟件設(shè)計
軟件主要由3部分組成:主程序、鍵盤掃描程序、中斷處理程序。主程序流程如圖4所示。
主要地址分配如表1所列。
表1地址分配
30H~31H顯示頻率的高、低8位32H~34H計數(shù)時鐘頻率的高、中、低8位35H~36H8254-2所需計數(shù)值的高、低8位37H~38H緩存顯示頻率的高、低8位(十六進制)40H~43H顯示緩存區(qū)地址(BCD數(shù))
(1)中斷處理過程
當89C51檢測到有INT1中斷時,進入中斷處理程序中,首先檢測30H和31H中的內(nèi)容是否大于20;若不大于20,則門控為P2.2,選中8254-2,選擇計數(shù)器0、方式3、16位二進計數(shù),送上次計算出來的這次所需要的計數(shù)值給8254-2,將104送入32H、33H中作為除法運算中的被除數(shù),而30H、31H的內(nèi)容作為除法運算中的除數(shù),調(diào)用除法運算子程序?qū)⑺玫纳趟腿?2H、33H,余數(shù)放在35H、36H中。比較余數(shù)是否大于除數(shù)的一半,若大于除數(shù)的一半則所得的商加1,否則商不變放在32H、33H中。假設(shè)程序指令所占用的時間為X/200(其中X為中斷程序中單指令周期的個數(shù)),將32H、33H中的內(nèi)容減去X/200,即為下次所要送入8254-2的計數(shù)值,放在35H、36H中,返回中斷;若大于20,則門控為P2.3,選中8254-2,選擇計數(shù)器1、方式3,送上次計算出來的這次所需的計數(shù)值給8254-2,將105送入32H、33H、34H中作為除法運算中的被除數(shù),而30H、31H中的內(nèi)容作為除法運算中的除數(shù),調(diào)用除法運算子程序,將所得的商送入32H、33H中,余數(shù)放在35H、36H中。比較余數(shù)是否大于除數(shù)的一半,若大于除的一半則所得的商加1,否則商不變。假設(shè)程序指令所占用的時間為X/20,將32H、33H中的內(nèi)容減去X/20即為下次所要送入8254-2的計數(shù)值,放在35H、36H中,返回中斷,若大于200,則門控為P2.4,選中8254-2,選擇計數(shù)器2、方式3、二進制計數(shù),送上次計算出來的這次所需的計數(shù)值給8254-2,將107送入32H、33H、34H中作為除法運算中的被除數(shù),而30H、31H中的內(nèi)容作為除法運算中的除數(shù),調(diào)用除法運算子程序,將所得的商送入32H、33H中,余數(shù)放在35H、36H.比較余數(shù)是否大于除數(shù)的一半,若大于除數(shù)的一半則所得的商加1,否則商不變?nèi)朐?2H、33H中。假設(shè)程序指令令所占用的時間為X*5,將32H、33H中的內(nèi)容減去5X,即為下次所要送入8254-2的計數(shù)值,放在35H、36H中,返回中斷。
。2)設(shè)置軟件陷阱
當程序進入到非程序區(qū),只要在非程序區(qū)設(shè)置攔截措施,使程序進入陷阱,然后強迫程序回到初始狀態(tài)。如對CPU的RST指令對應(yīng)的字節(jié)碼為0FFH,如果不用的程序存儲區(qū)預先寫入0FFH,則當程序因干擾而“飛”到該區(qū)域執(zhí)行代碼時,就相當于執(zhí)行1條RST指令,從而達到系統(tǒng)復位的目的。
結(jié)束語
采用89C51控制PWM分段,8254-2步進式輸出1Hz~3kHz的PWM,可以通過軟件編程的方法提高分辨率。在有些特殊場合只靠單片機內(nèi)部的定時器或模擬電路無法精確輸出1Hz~3kHz,單步為1Hz的PWM波形時,此設(shè)計就顯出其明顯的優(yōu)越性,而且它占用的CPU時間短。此設(shè)計的結(jié)構(gòu)簡單、成本低、可靠性好、抗干擾能力強,可在控制和測量中得到應(yīng)用。
【用89C51和8254-2實際步進式PWM輸出】相關(guān)文章:
《用括線和問號表示的實際問題》的教學反思11-25
步進電機的選用08-06
用實際行動熱愛學校08-16
DSP和PBL3717A構(gòu)成的步進電機的控制系統(tǒng)08-06
用“平均分”解決實際問題08-16
用除法解決實際問題(二)08-16
用除法解決實際問題(一)08-16