江蘇信息職業(yè)技術(shù)學(xué)院 周 蕓
多路PWM信號(hào)產(chǎn)生方案設(shè)計(jì)
江蘇信息職業(yè)技術(shù)學(xué)院 周 蕓
在裝載機(jī)控制系統(tǒng)的設(shè)計(jì)中,必須對(duì)裝載機(jī)動(dòng)臂、鏟斗的運(yùn)動(dòng)進(jìn)行控制,包括動(dòng)臂的上升、下降和鏟斗的裝載、卸載。在單片機(jī)控制下的裝載機(jī)利用電液比例控制來(lái)實(shí)現(xiàn)對(duì)動(dòng)臂、鏟斗的運(yùn)動(dòng)控制,系統(tǒng)最終的被控對(duì)象是比例電磁閥(共4個(gè))。因此,裝載機(jī)控制系統(tǒng)需要產(chǎn)生4路PWM(脈沖寬度調(diào)制)信號(hào),用來(lái)驅(qū)動(dòng)各對(duì)應(yīng)比例電磁閥,分別實(shí)現(xiàn)對(duì)動(dòng)臂上升、下降和鏟斗裝載、卸載的控制。通過(guò)調(diào)節(jié)PWM輸出波形的占空比還可以改變動(dòng)臂和鏟斗的運(yùn)動(dòng)速度。
1.80C196KB單片機(jī)內(nèi)部HSO簡(jiǎn)介。某裝載機(jī)控制系統(tǒng)的設(shè)計(jì)基于80C196KB單片機(jī),其內(nèi)部的高速輸出器(HSO)功能強(qiáng)大,可以為系統(tǒng)產(chǎn)生多路PWM信號(hào)。通過(guò)軟件編程控制HSO通道的輸出,就可以得到所需要的PWM波形。
HSO可以按程序設(shè)定的時(shí)間觸發(fā)某一事件,CPU的使用開(kāi)銷(xiāo)很小,故速度很高。允許被觸發(fā)的事件包括啟動(dòng)A/D轉(zhuǎn)換,復(fù)位定時(shí)器2,設(shè)置4個(gè)軟件定時(shí)器標(biāo)志和接通多達(dá)6根輸出線(HSO.0~HSO.5)等。其中,HSO CAM陣列是HSO的核心部分,它由8個(gè)23位的寄存器組成,每個(gè)寄存器的7位用于存放事件輸出命令,其余16位用于存放事件觸發(fā)的時(shí)間。在程序中把命令和預(yù)定觸發(fā)時(shí)間寫(xiě)入CAM陣列,就相當(dāng)于設(shè)定了某一事件。每一個(gè)狀態(tài)周期,來(lái)自定時(shí)器(作為HSO的時(shí)間基準(zhǔn))的時(shí)間與CAM中一個(gè)預(yù)定的時(shí)間進(jìn)行比較。比較結(jié)果相符,說(shuō)明觸發(fā)某一事件的時(shí)間已到,就讀出CAM中的這一項(xiàng)內(nèi)容,并產(chǎn)生該事件的觸發(fā)信號(hào),同時(shí)清除該項(xiàng)數(shù)據(jù)內(nèi)容。
2.利用HSO中斷來(lái)產(chǎn)生連續(xù)的PWM信號(hào)。HSO同一時(shí)刻最多可以掛號(hào)8個(gè)事件,且當(dāng)事件被觸發(fā)時(shí)允許發(fā)生中斷。HSO可以產(chǎn)生2種中斷,分別對(duì)應(yīng)不同的中斷向量:HSO執(zhí)行中斷(2006H),產(chǎn)生于執(zhí)行HSO命令而使HSO的6個(gè)輸出腳(HSO.0~HSO.5)中任何一個(gè)工作時(shí);軟件定時(shí)器中斷(200AH),產(chǎn)生于執(zhí)行其他HSO命令時(shí),包括4個(gè)軟件定時(shí)器命令、T2復(fù)位命令和A/D轉(zhuǎn)換啟動(dòng)命令。
對(duì)HSO編程可以按預(yù)定的時(shí)間產(chǎn)生中斷,即所謂的軟件定時(shí)器。HSO允許有4個(gè)軟件定時(shí)器同時(shí)工作,預(yù)定時(shí)間一到,HSO就對(duì)軟件定時(shí)器標(biāo)志置1,使軟件定時(shí)器中斷。因此,在同一時(shí)間窗口(8個(gè)狀態(tài)周期)內(nèi)發(fā)生多重軟件定時(shí)器中斷是可能的。
每產(chǎn)生一路PWM信號(hào)需要在CAM中設(shè)置3個(gè)事件,一個(gè)正跳變、一個(gè)負(fù)跳變和一個(gè)脈沖周期正跳變。前兩個(gè)事件只負(fù)責(zé)HSO某個(gè)輸出腳輸出高、低電平的狀態(tài),不需要產(chǎn)生中斷;但CAM陣列中的所有事件一經(jīng)觸發(fā)就立即清除,所以要連續(xù)產(chǎn)生PWM波形必須在第三個(gè)周期事件發(fā)生后重新設(shè)置上述3個(gè)事件,因此第3個(gè)事件的觸發(fā)應(yīng)允許中斷,并在其中斷服務(wù)子程序中完成重置任務(wù)。只要在設(shè)置完第3個(gè)周期事件后開(kāi)中斷,通過(guò)周期性的中斷就可以在HSO輸出腳產(chǎn)生一系列連續(xù)的PWM波形。此外,還可以利用軟件定時(shí)器中斷,軟件定時(shí)器的定時(shí)時(shí)間值即為PWM信號(hào)的周期。在軟件定時(shí)器中斷服務(wù)子程序中設(shè)置兩個(gè)事件——一個(gè)正跳變和一個(gè)負(fù)跳變,也可以達(dá)到相同的輸出效果。
采用上述方法產(chǎn)生PWM信號(hào)時(shí),選定時(shí)器1作為HSO的時(shí)間基準(zhǔn)。在12 MHz晶振下,定時(shí)器1的每一個(gè)計(jì)數(shù)值代表1.33 μs,最大計(jì)數(shù)數(shù)值為216-1=65 535,相當(dāng)于87 ms,所以能夠產(chǎn)生PWM波形的頻率范圍為11~375 kHz。實(shí)際需要的PWM頻率為幾百赫茲,在這個(gè)范圍內(nèi)是可實(shí)現(xiàn)的。
該裝載機(jī)控制系統(tǒng)共要求產(chǎn)生4路PWM信號(hào),需占用4個(gè)HSO通道,每個(gè)通道都用上面的方法產(chǎn)生相互獨(dú)立的PWM信號(hào)。這對(duì)CPU而言相當(dāng)于增加了4個(gè)中斷源,并且執(zhí)行每一路PWM波形輸出時(shí)會(huì)產(chǎn)生頻繁的中斷,這在很大程度上會(huì)降低CPU的工作效率,甚至影響到CPU執(zhí)行其他監(jiān)控子程序和其他一些操作;另外,前面提及的HSO同一時(shí)刻最多可以掛號(hào)8個(gè)事件,而實(shí)現(xiàn)1路PWM信號(hào)輸出就需要3個(gè)事件,顯然不可能實(shí)現(xiàn)4路PWM信號(hào)的同時(shí)輸出。雖然在實(shí)際應(yīng)用中4路同時(shí)輸出的情況不會(huì)出現(xiàn),但不得不考慮4路PWM信號(hào)交替產(chǎn)生過(guò)程中可能存在的CAM寄存器組不夠用的情況,這就影響到正常的PWM信號(hào)輸出,降低了系統(tǒng)控制的可靠性。
為此,可以利用80C196KB單片機(jī)的新增功能——CAM鎖定:即在HSO命令寄存器中增加CAM鎖定(LOCK)位D7,當(dāng)把一條命令寫(xiě)入HSO CAM中時(shí),若同時(shí)設(shè)置CAM鎖定位為1,可以使該命令保持在CAM中,否則產(chǎn)生一次HSO觸發(fā)的事件就會(huì)把CAM中相應(yīng)命令清除掉。
利用CAM鎖定功能可以周期性地產(chǎn)生PWM波形,而不需要頻繁的HSO中斷,大大減小了CPU的使用開(kāi)銷(xiāo),減輕了CPU的負(fù)擔(dān)。
CAM鎖定功能必須靠設(shè)置IOC2.6=1來(lái)選通。為了從CAM中清除被鎖定的事件,可以向CAM清除位IOC2.7寫(xiě)入1,這將清除CAM寄存器組的全部?jī)?nèi)容。這里沒(méi)有辦法單獨(dú)清除1項(xiàng)被鎖定的命令。
3.基于CAM鎖定功能的多路PWM產(chǎn)生方案。利用HSO復(fù)位定時(shí)器2(T2)的命令,用T2作為HSO的時(shí)間基準(zhǔn),T2CLK為T(mén)2的時(shí)鐘源,可以產(chǎn)生周期性的事件,事件發(fā)生周期由用戶選定。程序中設(shè)置好T2的復(fù)位時(shí)間,并安排PWM波形正跳變這一事件發(fā)生于T2復(fù)位的時(shí)刻,而負(fù)跳變這一事件發(fā)生于T2復(fù)位前的某個(gè)時(shí)刻(該事件決定了PWM的占空比),將這兩個(gè)事件和T2復(fù)位事件都鎖定在CAM中,則一路PWM信號(hào)將周期性地產(chǎn)生,其重復(fù)周期就是T2的復(fù)位周期。
由于要以T2為HSO的時(shí)間基準(zhǔn),但HSO的時(shí)間分辨率為8個(gè)狀態(tài)周期[12 MHz晶振時(shí)為(1/6 MHz)×8=1.33 μs],所以限制了T2的最高時(shí)鐘頻率也必須為每8個(gè)狀態(tài)周期一次,即T2的時(shí)鐘源輸入至少為CLKOUT的8分頻輸出。此外,T2實(shí)質(zhì)是一個(gè)采用外部時(shí)鐘的16位計(jì)數(shù)器,由于外部時(shí)鐘的正跳沿和負(fù)跳沿處T2都會(huì)計(jì)數(shù),所以要想每8個(gè)狀態(tài)周期T2計(jì)數(shù)值增1,時(shí)鐘輸入周期必須為16個(gè)狀態(tài)周期(即至少為16分頻)。
PWM信號(hào)的周期TPWM=T2計(jì)數(shù)值(M)×8個(gè)狀態(tài)周期(1.33μs)。其中 T2的計(jì)數(shù)值M決定了PWM波形的分辨位數(shù)A(M=2A-1)。當(dāng)要求產(chǎn)生的PWM信號(hào)的周期為2 ms時(shí),M=1 508,A=10。這一點(diǎn)說(shuō)明該方案完全可以產(chǎn)生所要求的PWM信號(hào)。
4.如果懶得抄原題,也可以根據(jù)需要將原題裁剪下來(lái)粘貼到錯(cuò)題本上,但不宜太多,以免日積月累錯(cuò)題本顯得太厚重;
實(shí)際要求的4路PWM信號(hào)是相互獨(dú)立,互不影響的,所以當(dāng)請(qǐng)求產(chǎn)生某一路PWM信號(hào)時(shí),必須向CAM寫(xiě)入3個(gè)事件的鎖定命令;當(dāng)請(qǐng)求產(chǎn)生多路PWM信號(hào)時(shí),考慮到4路PWM信號(hào)的頻率相同,所以那幾路可以共用一個(gè)T2復(fù)位事件,隨后請(qǐng)求的幾路PWM只要再各自追加2個(gè)事件就可以了。事實(shí)上,實(shí)際運(yùn)行時(shí)最多有2路PWM會(huì)同時(shí)輸出:一路控制動(dòng)臂的運(yùn)動(dòng),另一路控制鏟斗的裝載或卸載,故同一時(shí)刻關(guān)于PWM的鎖定命令最多占用5個(gè)CAM寄存器。這一點(diǎn)說(shuō)明本方案實(shí)現(xiàn)多路PWM信號(hào)輸出也是可行的。
但這種方案也存在問(wèn)題——無(wú)法單獨(dú)清除1項(xiàng)被鎖定的命令。例如當(dāng)要停止某一路PWM輸出時(shí),應(yīng)該清除對(duì)應(yīng)的CAM中被鎖定的項(xiàng),這時(shí)必須通過(guò)設(shè)置IOC2.7=1來(lái)實(shí)現(xiàn),同時(shí)也把整個(gè)CAM內(nèi)容全部清除掉了,因此所有要繼續(xù)執(zhí)行的命令必須重新設(shè)置,包括那些未鎖定的命令。
4.方案缺點(diǎn)。對(duì)于上面討論的CAM清除問(wèn)題,顯然在沖洗和重新裝入CAM命令的過(guò)程中,可能會(huì)漏掉執(zhí)行某些命令,所以必須考慮已裝載的CAM命令的備份、記憶問(wèn)題,因此沒(méi)有足夠的軟件開(kāi)銷(xiāo)是很難解決這些問(wèn)題的。同時(shí)也使得改變PWM信號(hào)輸出這一軟件控制過(guò)程變得復(fù)雜化且易出錯(cuò)。
從單片機(jī)資源的占用來(lái)看,基于HSO的多路PWM信號(hào)產(chǎn)生方案使用4個(gè)獨(dú)立的HSO通道,執(zhí)行PWM信號(hào)輸出功能,僅實(shí)現(xiàn)單一地對(duì)動(dòng)臂、鏟斗的控制。這部分功能其實(shí)只是整個(gè)控制系統(tǒng)的一小部分,但其在軟、硬件方面都占用較多的資源。此外,這種方案很大程度上限制了HSO在其他功能上的應(yīng)用,沒(méi)有充分發(fā)揮HSO獨(dú)特而強(qiáng)大的功能,更不利于進(jìn)一步擴(kuò)展系統(tǒng)的監(jiān)控任務(wù)。因此,可以考慮用硬件來(lái)實(shí)現(xiàn)多路PWM信號(hào)輸出的設(shè)計(jì)方案。
1. M66240簡(jiǎn)介。M66240是一種可編程的PWM發(fā)生器,它內(nèi)部包含有一個(gè)16位的預(yù)分頻器和一個(gè)PWM計(jì)數(shù)器,可以實(shí)現(xiàn)4通道PWM信號(hào)產(chǎn)生的獨(dú)立控制。
M66240有3種PWM輸出模式,其中模式0和2通過(guò)對(duì)M66240編程實(shí)現(xiàn)周期性PWM信號(hào),而模式1下必須依據(jù)外部觸發(fā)信號(hào)來(lái)產(chǎn)生非周期性PWM信號(hào)。所以只有模式0和2滿足要求。下面介紹這2種模式。
模式0:PWM計(jì)數(shù)器既可以用作16位,也可用作8位,區(qū)別僅在于PWM波形的分辨精度不同。該模式下一個(gè)PWM波形固定包含(2A-1)(A=8,16)個(gè)計(jì)數(shù)脈沖,設(shè)置PWM波形高電平持續(xù)時(shí)間的計(jì)數(shù)值M,就可以得到周期性輸出的設(shè)定占空比的PWM波形。
模式2:PWM波形的產(chǎn)生原理同模式0,不過(guò)需要同時(shí)設(shè)置高電平持續(xù)時(shí)間的計(jì)數(shù)值 M和低電平持續(xù)時(shí)間的計(jì)數(shù)值N,才可以得到周期性輸出的PWM波形。
可以看到在這種模式下,允許產(chǎn)生周期較大的PWM波形,并且PWM的周期和占空比調(diào)節(jié)更加自由,可以靈活產(chǎn)生各種PWM波形。
2.方案實(shí)現(xiàn)。采用M66240產(chǎn)生PWM信號(hào)時(shí),把單片機(jī)時(shí)鐘輸出CLKOUT引腳的2分頻時(shí)鐘信號(hào)作為它的外部時(shí)鐘源。例如單片機(jī)系統(tǒng)使用12 MHz晶振,則M66240的基準(zhǔn)工作頻率f(XIN)= 6 MHz。在該基準(zhǔn)工作頻率下,計(jì)算2種模式下PWM的周期,計(jì)算結(jié)果見(jiàn)表1。
表 1 2種模式下PWM的周期
這里要求的PWM周期是“ms”級(jí)的,一般取為1~2 ms,所以模式0(A=8)或模式2都可以。
模式0時(shí),設(shè)置PWM計(jì)數(shù)器為8位,由T(μs)= [(L+1)/ f(XIN)] ×(28-1)可得T=2 ms時(shí),預(yù)分頻器計(jì)數(shù)值L=46;雖然每個(gè)PWM包含了12 000個(gè)外部時(shí)鐘脈沖,但PWM的分辨率也只有8位。
模式2時(shí),為提高PWM的分辨率,取定L=0,由T(μs)=[(L+1)/f(XIN)]×(M+N)可得T=2 ms時(shí),M+N=12 000,這時(shí)PWM的分辨位數(shù)可以達(dá)到13位。再根據(jù)PWM的占空比可以分別確定M,N的值。一旦要改變PWM占空比,需要同時(shí)修改M,N兩個(gè)計(jì)數(shù)值。
3. M66240與單片機(jī)的接口設(shè)計(jì)。將M66240當(dāng)做單片機(jī)系統(tǒng)的一個(gè)外部I/O設(shè)備來(lái)用,CPU只作為它的一個(gè)軟件伺服系統(tǒng),通過(guò)軟件指令獨(dú)立設(shè)置各個(gè)通道的PWM信號(hào)周期、占空比,該芯片就會(huì)自動(dòng)產(chǎn)生PWM信號(hào),而不再受CPU控制(除非要改變PWM波形的特性)。M66240與單片機(jī)的接口電路如圖1所示。
硬件電路設(shè)計(jì)中,3-8譯碼器74LS138的輸出Y3作為M66240的片選信號(hào);單片機(jī)的寫(xiě)信號(hào)WR控制其寫(xiě)控制端,實(shí)現(xiàn)單片機(jī)對(duì)M66240的寫(xiě)入操作;同時(shí)設(shè)置P1.4這路I/O口線作為它的命令/數(shù)據(jù)選通信號(hào);它的8位數(shù)據(jù)口則直接與單片機(jī)的數(shù)據(jù)總線接口;由單片機(jī)系統(tǒng)向M66240提供時(shí)鐘信號(hào),即將時(shí)鐘輸出信號(hào)CLKOUT用作其外部時(shí)鐘源,作為系統(tǒng)的時(shí)鐘基準(zhǔn);4路PWM輸出就是對(duì)動(dòng)臂、鏟斗的控制信號(hào)。
4.軟件設(shè)計(jì)。主要是對(duì)M66240的編程。要控制M66240的不同通道產(chǎn)生PWM波形,只要設(shè)置各通道對(duì)應(yīng)的預(yù)分頻器計(jì)數(shù)值和PWM計(jì)數(shù)器的計(jì)數(shù)值即可,可通過(guò)向M66240寫(xiě)入不同的命令或數(shù)據(jù)來(lái)實(shí)現(xiàn)。單片機(jī)控制M66240輸出的軟件流程如圖2所示。
對(duì)M66240的編程一共要用到3種操作命令:Command1,設(shè)定PWM輸出模式和各路的外部觸發(fā)輸入,同時(shí)設(shè)置高電平寬度的輸出極性。Command2,在一個(gè)字節(jié)的基礎(chǔ)上,向各通道的預(yù)分頻器和PWM計(jì)數(shù)器中指定的16位寄存器寫(xiě)數(shù)據(jù)。從第二字節(jié)開(kāi)始的后續(xù)字節(jié)作為數(shù)據(jù)值被寫(xiě)入預(yù)分頻器和PWM計(jì)數(shù)器。Command3,用于啟動(dòng)和中止PWM計(jì)數(shù)器的工作。
從對(duì)上述幾種方案的分析可以看到,HSO中斷的最大缺點(diǎn)是頻繁的中斷導(dǎo)致CPU執(zhí)行效率降低;CAM鎖定的最大缺點(diǎn)是軟件編程復(fù)雜,需要較多的軟件資源;采用專(zhuān)用PWM發(fā)生器芯片的缺點(diǎn)則是耗用一定的硬件資源,成本較高。
事實(shí)上,這幾種方案在不同的場(chǎng)合需求下也是各有長(zhǎng)處的:HSO中斷適用于產(chǎn)生單路PWM信號(hào),且要求PWM信號(hào)的頻率在輸出允許范圍內(nèi);CAM鎖定適用于在單片機(jī)控制功能單一,而要求產(chǎn)生多路同周期PWM信號(hào)的場(chǎng)合,且這多路PWM信號(hào)的輸出有一定規(guī)律(如要求2~3路同時(shí)輸出等),從而可盡量減少軟件編程的復(fù)雜度;專(zhuān)用PWM發(fā)生器適用于單片機(jī)控制功能復(fù)雜,而又要求產(chǎn)生多路PWM信號(hào)的場(chǎng)合,直接利用硬件電路來(lái)產(chǎn)生PWM信號(hào),不僅實(shí)時(shí)性好、輸出可靠、準(zhǔn)確,而且占用CPU資源少,提高了CPU的執(zhí)行效率。