預付費三相電度表的抗干擾設計
抗干擾問題是從事單片機設計的工程技術人員都將碰到一個大難題,單片機的工作可靠90%取決于抗干擾設計,不同系統的工作環境不同,干擾源不同,抗干擾所采取的措施就有所不同。
例如,工業用電度表的安裝環境較差,通常的干擾源有:電網電壓的波動,大型用電設備(如:天車`電爐`大電機`電焊機等)的啟停,高壓設備和電磁開關的電磁輻射等等。較強的干擾很容易造成IC卡電度表控制系統出現軟件故障,使程序因干擾而脫離正常運行順序或飛出程序可執行區而進入死循環失去控制,如不能快速脫離此狀態,恢復程序的運行,電度表將無法正常工作。若干擾竄入計量采樣脈沖,將會導致計量失誤,造成單片機誤動作而失去計量的準確性。因此必須采取有效措施遏制干擾的竄入,保證電度表可靠地運行。以IC卡預付費三相電度表為例,闡述針對不同干擾源所采取的抗干擾措施。
電源的抗干擾設計
單片機的電源中存在著交流干擾和直流干擾。在工業現場中,由于生產負荷的變化`大型用電設備的啟停,常常造成電源電壓的波動,有時還會產生50~4000V持續幾個毫微秒的尖峰脈沖,很容易造成“程序失控”或“死機”,對此,采用無源四端網絡的抗尖峰干擾抑制器可以很好地將尖峰干擾抑制掉。對交流電轉換成直流電后所竄入的干擾信號,我們采用小型直流開關電源。直流開關電源是一種采用脈沖寬度調制型電源,它省去了傳統的工頻變壓器,具有體積小`重量輕`效率高`電網電壓范圍寬`輸出電壓穩定等特點,并對電網上的高頻脈沖干擾有較強的隔離能力,可以抑制直流干擾。
采用開關電源并不能保證萬無一失,當電網電壓波動超過±10%時,開關電源的輸出也會產生波動。為了防止電網電壓的波動而造成開關電源電壓的波動,并導致CPU的誤動作和數據丟失等問題,采用美國TI公司的電源電壓監視器TL7705設計了電源電壓監視電路(如圖1所示)。該電路能隨時監測電源電壓的變化,一旦發現電源故障,能及時可靠地使單片機復位,禁止對RAM的操作,避免數據破壞。被監測的電壓由TL7705的SENSE(7)腳引入,4.6V~20V,可由RS 來設定。當被監測電壓為4.75V時,RS 為200Ω左右。CS 和RS 構成RC 延時網絡,延長響應時間,以降低噪聲影響和器件靈敏度。綜合以上措施,可以有效地抑制電源干擾的竄入。
計量采樣脈沖的抗干擾設計
計量采樣脈沖輸出接到單片機的中斷引腳,MCS-51單片機的中斷觸發方式有電平觸發和邊沿觸發兩種方式。IC卡預付費三相電度表的采樣脈沖在工業現場工作時有尖峰干擾,很容易造成計量失誤,為此我們采用了邊沿觸發中斷與查詢電平相結合的方式,即在硬件上設計成中斷引腳與某一1/0引腳相連(如圖1所示),將中斷設置為邊沿觸發方式,當CPU響應中斷后,在中斷處理程序的開始,經延時適當的時間(大于干擾脈沖寬度而小于*小的計量脈沖寬度)查詢此1/0腳電平是否符合要求,這種措施能有效地去除尖峰脈沖對計量采樣脈沖的干擾。
程序失控的處理
單片機竄入強干擾后,程序計數器PC的數值可能會改變,破壞程序的正常運行,造成一些誤動作,甚至導致程序“死循環”,從而引起嚴重的后果。在IC卡預付費三相電度表中采取了如下幾個措施來解決程序失控的問題。
1 用WATCHDOG監控程序的運行
通常的硬件WATCHDOG在系統受到干擾而不能正常運行時,只發出一個復位脈沖,如果遇到長時間連續的干擾,這種WATCHDOG電路就束手無策。我們采用74LS123制作了一個WATCHDOG電路,在程序正常運行時,CPU通過一根1/0接口線定時防問該電路,使其不能發出復位脈沖。若系統受到連續干擾時,此電路會不斷產生復位信號,直到系統正常工作時為止,因而能抵抗長時間的連續干擾。CPU訪問該電路的程序如下:
CLR P1.3
NOP
NOP
SETB P1.3
設置軟件陷阱
當程序失控而彈飛時,我們在彈飛區域(一般為轉移指令后,如:LCALL RET RETI JC JNC等,未使用的中斷向量區,未使用的大片ROM空間等)設置軟件陷阱,即設計一段專門處理程序執行時出錯的程序,以保證彈飛的程序能迅速納入正確控制軌道。軟件陷阱及出錯處理程序如下:
NOP NOP LJMP ERR ERR:CLR EA;關中斷
MOV DPTR,#ERRI;準備返回地址
PUSH DPL PUSH DPH
RETI;****中斷激活標志 ERRI:CLR A;準備復位地址
PUSH ACC PUSH ACC;壓入復位地址 RETI;**低級中斷激活標志
系統復位的處理
在單片機實時控制系統中,大多數系統有它自己特定的運行要求。一旦系統復位后,就不允許改變以前的狀態而重新開始運行,但可以采取下述措施:
定時(如:每一個循環周期)將運行過程中的重要數據寫入RAM中保護起來;
對外設的動作控制,設立動作標志,并將該標志與重要數據一并寫入PAM中保護起來;
硬件上設計一掉電保護電路。系統復位后,用備用電池給RAM供電,使重要數據不被破壞;
復位重新啟動時,將重要數據和動作標志從PAM中讀出,再據此做出判斷,發出動作指令。這樣就保證了狀態的連續性,而不至造成控制現場的混亂。