朱學(xué)斌,孫 寧
(1魯東大學(xué)信息與電氣工程學(xué)院,山東煙臺264025;2煙臺臥龍園區(qū)發(fā)展有限公司,山東煙臺264004)
IAR visualSTATE是瑞典IAR公司開發(fā)的基于狀態(tài)機(jī)的嵌入式應(yīng)用設(shè)計、測試和實(shí)現(xiàn)的工具軟件[1]。本文用此軟件對過欠壓保護(hù)器進(jìn)行邏輯系統(tǒng)的狀態(tài)機(jī)建模,并利用其強(qiáng)大的仿真功能對邏輯進(jìn)行校驗(yàn),隨后自動生成標(biāo)準(zhǔn)兼容的C代碼,編寫API驅(qū)動接口函數(shù)[2],完成整個系統(tǒng)的軟件設(shè)計。該產(chǎn)品在多個現(xiàn)場成功運(yùn)行,表明此方法開發(fā)產(chǎn)品的有效性,周期也大大地縮短,代碼容易維護(hù)。
過欠壓保護(hù)器硬件原理圖如圖1所示。
圖中,電源穩(wěn)壓電路由電阻R4~R11、二極管D4~D7、12V齊納二極管Z1、限流電阻R1和擴(kuò)流三極管Q7等組成。其中,R4~R11起分壓作用,用來減少Q(mào)7的耐壓值;二極管D4~D7起整流作用;電解電容EC1~EC3起到濾波和電量存儲作用。串聯(lián)穩(wěn)壓電路輸出PowerH端的大約11.2 V電壓為大電流磁保持繼電器供電。另外再經(jīng)過穩(wěn)壓塊7805輸出VCC為單片機(jī)系統(tǒng)供電。
圖1 系統(tǒng)硬件圖
芯片U1B選擇的是Microchip公司8引腳單片機(jī) PIC12F617[3]。還有 3.5kB 的 Flash,128BRAM,具有對Flash自讀寫功能。由于整定次數(shù)較少,定值沒必要專門用EEPROM來存儲。采集電路由二極管 D7、D8、電阻 R12、R13、R17、電容 EC5 組成。其中,D7、D8半波整流,R17為采樣電阻,EC5起著平波作用。
繼電器驅(qū)動采用H橋電路完成,如圖2所示。其中,T1為大電流單線圈磁保持繼電器,分?jǐn)嚯娏髂苓_(dá)到63A。當(dāng)GP5為0,GP4為1時,三極管Q2、Q4導(dǎo)通,Q4集電極為低電平,這樣Q5導(dǎo)通,所以繼電器線圈左邊為低電位,右邊加了11.2V左右的電壓,繼電器合閘;同理,當(dāng)GP4為0,GP5為1時,繼電器線圈左邊為正,右邊為負(fù),繼電器分閘。
圖2 繼電器驅(qū)動電路
由于要求外加電壓在0~450 VAC范圍內(nèi),系統(tǒng)才能可靠的工作,考慮到電路板受空間限制,圖1中多個電阻采取串并聯(lián)的方式以減少電阻的功率。
過欠壓系統(tǒng)的功能為:系統(tǒng)上電默認(rèn)初始狀態(tài)為欠壓狀態(tài):①當(dāng)外部輸入電壓大于欠壓恢復(fù)定值(176 V)時,延時1分鐘(1分鐘內(nèi),外部電壓一旦小于欠壓值,定時器復(fù)位,以下同),則合閘,轉(zhuǎn)為正常運(yùn)行狀態(tài);②正常態(tài)時,當(dāng)外部輸入電壓大于過壓值(264 V)或小于欠壓值(154 V)時,延時1秒分閘,轉(zhuǎn)入故障態(tài);③過壓態(tài)時,當(dāng)外部輸入電壓低于過壓恢復(fù)值(242 V),延時1分鐘合閘轉(zhuǎn)為正常態(tài)。④另外該系統(tǒng)用戶可以自行修改4個保護(hù)定值,當(dāng)圖1的按鍵S1按下時,系統(tǒng)進(jìn)入整定態(tài)。
根據(jù)系統(tǒng)功能知該系統(tǒng)是個典型的基于事件響應(yīng)的邏輯控制系統(tǒng),可以用FSM(有限狀態(tài)機(jī))對其進(jìn)行建模。IAR visualSTATE支持并發(fā)與層次結(jié)構(gòu),可以軟件仿真復(fù)雜的邏輯,自行產(chǎn)生適合微控制器的代碼(ROM、RAM用量小),這樣可以大大縮小代碼編寫和調(diào)試時間,自己寫的代碼部分僅是輸入輸出有關(guān)的驅(qū)動部分。
系統(tǒng)總體狀態(tài)見圖3,分為運(yùn)行態(tài)和設(shè)置態(tài),其中運(yùn)行態(tài)為初始狀態(tài)。運(yùn)行態(tài)有2個并發(fā)域:SampleTimerAbout和RelayLed。處于運(yùn)行態(tài)時,當(dāng)自鎖按鍵按下時,在進(jìn)入整定態(tài)前,先給繼電器線圈加反向電壓A_RelayControl(2),所有定時器復(fù)位 Act_TimerCancel(65535),同時綠燈亮 A_Green_Red_LED(1)。處于設(shè)定態(tài),當(dāng)按鍵彈起時,轉(zhuǎn)入運(yùn)行態(tài)運(yùn)行。
圖3 總體狀態(tài)圖
按鍵按下時,進(jìn)入層次狀態(tài)機(jī)整定態(tài),內(nèi)部狀態(tài)見圖4。內(nèi)部有四個整定子狀態(tài):UnderSET、Under-ResumeSET、OverResumeSET和OverSET。欠壓整定部分分析:進(jìn)入欠壓整定態(tài),就立即定時Act_Timer-Start(272),其中272=28+24。當(dāng)32 ms的軟定時器8超時,產(chǎn)生E_PulseTime1事件,同時會產(chǎn)生動作A_RelayControl(3)讓繼電器線圈失電;當(dāng)1 min軟定時器4超時,產(chǎn)生事件E_GsetTO1,同時產(chǎn)生動作把欠壓定值寫到指定的flash區(qū)域(Act_WriteEE)和紅燈亮,提醒用戶欠壓整定完畢,隨后轉(zhuǎn)入欠壓恢復(fù)整定狀態(tài)。其余整定狀態(tài)類似,不再分析。
圖4 SetState狀態(tài)圖
SampleTimeAbout的狀態(tài)見圖5?,F(xiàn)選 Under-Process為例來分析:當(dāng)原狀態(tài)處在OverProcess時,若采集電壓低于欠壓定值就產(chǎn)生欠壓事件Eve_Under,取消 OverProcess內(nèi)的定時器,啟動 UnderProcess內(nèi)的1s定時器Act_TimerStart(Con_UnderBit0),同時置 UnderProcess標(biāo)志 Act_vS_CheckState(1),隨后轉(zhuǎn)入 UnderProcess狀態(tài);當(dāng)1s定時器超時,產(chǎn)生事件E_Filter1,引起自轉(zhuǎn)換,產(chǎn)生真正的欠壓信號Sig_Under驅(qū)動繼電器動作分閘;當(dāng)處于UnderProcess狀態(tài)若有外部事件欠壓恢復(fù)或過壓時,就轉(zhuǎn)入相應(yīng)過程狀態(tài),取消本過程定時器。
圖5 SampleTimeAbout狀態(tài)圖
RelayLed狀態(tài)圖見圖6。
圖6 RelayLed狀態(tài)圖
還是以欠壓為例,假設(shè)原狀態(tài)在NormalVoltage,當(dāng)內(nèi)部信號Sig_Under產(chǎn)生時,欠壓故障紅信號燈亮,繼電器線圈反向得電A_RelayControl(2)。同時分閘脈沖定時,隨后轉(zhuǎn)入狀態(tài)UnderVoltage;當(dāng)分閘脈沖時間到,產(chǎn)生自轉(zhuǎn)換事件E_PulseTime1,同時讓繼電器線圈失電。
本設(shè)計的軟件開發(fā)環(huán)境為Microchip公司的MPLAB IDE v8.8,編譯器為 PICC9.83,注意的是:IAR visualSTATE產(chǎn)生代碼中的變量SEMSys1消耗RAM較大。如果不指定其絕對地址,讓編譯器自行編譯,編譯不能通過,提示RAM空間不夠,指定變量絕對地址的語句為[4]:
SEMDATASys1 SEMSys1@0x40;
本文利用狀態(tài)機(jī)軟件VisualSTATE對過欠壓保護(hù)器進(jìn)行程序設(shè)計,它能自行產(chǎn)生狀態(tài)機(jī)代碼,只要簡單編寫有關(guān)輸入輸出的驅(qū)動接口函數(shù)即可。開發(fā)人員可以減少代碼的編寫量,把大量的時間放在整體設(shè)計上去,增加開發(fā)效率,縮短產(chǎn)品上市時間,而且便于日后軟件維護(hù),軟件也能自行產(chǎn)生開發(fā)文檔。
[1]IAR Systems,Inc.visualSTATE reference guide[EB/OL].[2014-05-10].http://www.iar.com/Products/IAR-visualSTATE/Userguides/
[2]IAR Systems,Inc.visualSTATE API guide[EB/OL].[2014-06-15].http://www.iar.com/Products/IAR-visualSTATE/Userguides/
[3]Microchip Technology Inc.PIC12F617 data sheet[EB/OL].[2014-04-8].http://ww1.microchip.com/downloads/en/DeviceDoc/41302D.pdf
[4]Microchip Technology Inc.HI-TECH C for PIC10/12/16 User's Guide.[EB/OL].[2014-07-08].http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=SW500010