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