摘 要:針對單片機應用系統實時性強,干擾因素較多的特點,本文介紹了幾種實用的抗干擾措施,在硬件抗干擾方面闡述了供電系統的設計、電路板的合理布局以及輸入輸入干擾的抑制,軟件方面給出了軟冗余技術、軟件陷阱技術以及“看門狗”技術的幾個實例。
關鍵詞:抗干擾 單片機 硬件 軟件
1. 引言
單片機應用系統的抗干擾設計是系統設計的重要內容之一,抗干擾性能的好壞將決定系統能否在復雜的電磁環境下穩定可靠地工作,從而決定了系統的實際使用價值。特別是在各種實時控制的遠距離系統中,由于現場環境惡劣,干擾因素較多,系統不可避免地要受到其他電磁設備的干擾,若僅按常規設計就很難保證系統的正常運行。因此,抗干擾問題是設計者必須充分考慮和解決的,下面從硬件和軟件兩個方面談談抗干擾設計。
2. 硬件抗干擾設計
2.1 供電系統
為了防止從電源系統引入干擾,首先采用交流穩壓器保證供電系統的穩定性,防止電源的過壓和欠壓。其次,電源濾波和退耦是抑制電源干擾的主要方式,可將電源變壓器的初級隔離起來,使混入初級的噪聲干擾不致進入次級;使用隔離變壓器濾掉高頻噪聲,低通濾波器濾掉工頻干擾。
當系統中使用繼電器、磁帶等電感設備時,數據采集的供電電路應與繼電器的供電電路分開,以避免在供電線路之間的干擾,即如圖1所示。
對單片機系統的主機部分使用單獨的穩壓電路,必要時輸入、輸出供電分別采用DC-DC模塊,避免各個部分之間的干擾。
[align=center]

圖1 分別供電的系統示意圖[/align]
2.2 印制電路板
① 注意合理布置印制電路板上的器件,遵循器件之間電氣干擾小和易于散熱的原則。
② 電路板要合理劃分,模擬電路區、數字電路區、功率驅動區等要盡量分開,地線不能相混,要分別和電源端的地線相連。
③ 布線時盡量不要構成環路,特別避免沿印制電路板周圍做成環路,不要出現長段的窄線并行,旁路電容的引線不能很長;單元電路的輸出和輸入應當用地線隔開;電源線和地線的走向盡量和數據傳輸的方向一致,并加寬寬度提高電路板的抗干擾能力。
④ 原則上每個IC都要加去耦電容,并靠近IC的電源腳和接地腳。
2.3 輸入輸出干擾的抑制
輸入輸出信號加上光電耦合器隔離,可以將主機部分和前向、后向通道及其他部分切斷電路的聯系,有效地防止干擾進入主機系統。
在單片機實時系統信號的長線傳輸過程中,要注意使用雙絞線,提高系統的抗噪聲能力。同時對傳輸線要進行阻抗匹配,可以在傳輸線的始端串聯電阻、末端并聯電阻,以實現匹配,提高系統的抗干擾能力。
3. 軟件抗干擾設計
為了提高測控系統的可靠性,僅靠硬件抗干擾措施是不夠的,還需采用適當的軟件抗干擾技術,軟件抗干擾技術是當輸入信號受干擾后去偽求真或系統受干擾后使系統恢復正常運行的一種輔助方法。對抑制輸入信號的干擾主要采用數字濾波技術,通過軟件去除噪聲對數據采集結果的影響。系統受干擾后會使得程序失控,失控原因大都可以歸結為程序計數器PC的內容發生變化,引起程序“跑飛”或陷入死循環,CPU執行了一系列錯誤的指令從而導致系統失控,,可以采用軟件冗余、軟件陷阱和“看門狗”技術等使程序納入正規。
3.1 軟件冗余技術
MCS-51所有指令都不超過三個字節,且多為單字節指令,指令由操作碼和操作數組成,操作碼指明CPU完成什么樣的操作,單字節指令僅有操作碼,隱含操作數。CPU受到干擾后,PC內容發生變化,當程序彈飛到某一單字節指令時,便自動納入正規。當“跑飛”到某一雙字節或三字節指令時,若恰恰在取指令時刻落到其操作數上,CPU就將操作數當作操作碼來執行,引起程序混亂。因此軟件設計應多采用單字節指令,并在關鍵的地方人為的插入一些單字節指令NOP,或將有效的單字節指令重寫,這稱作指令冗余。在實際軟件設計中,往往在雙字節和三字節指令之后插入兩個NOP指令,可以保證程序“跑飛”后其后面的指令不會拆散,后面的程序可以正常運行。在那些對程序流向起決定作用的指令,如RET、RETI、ACALL、LJMP、JZ、JNC等之前也插入2條NOP指令,可保證跑飛的程序迅速進入正確的控制軌道。
3.2 軟件陷阱技術
軟件冗余技術適用于干擾后PC指向不正確的程序區,當跑飛程序進入非程序區(如EPROM未使用的空間)或表格區時,使用冗余指令的措施已不再適用,可采用軟件陷阱的辦法攔截跑飛程序,將其迅速引向一個指定的位置,執行一段對程序運行出錯的處理程序。軟件陷阱可采用以下形式:
NOP
NOP
LJMP ERROR ;ERROR為指定地址,安排有出錯處理程序
軟件陷阱可安排在下面幾個區域。
①未使用的中斷向量區。
當干擾使未使用的中斷開放,并激活這些中斷時,就會引起系統程序的混亂,如果在這些地方設置陷阱,就能及時捕捉到錯誤中斷。
②未使用的EPROM區。
假設使用了一片2764,但程序并沒有用完這個2764區域,這些非程序區可以用0000020000數據填滿,020000是指令LJMP 0000H的機器碼,當跑飛程序進入此區后,便會迅速自動進入正確軌道。
③數據表格區。
由于表格中內容和檢索值有一一對應關系,在表格中安排陷阱將會破壞其連續性和對應關系,應在表格區的尾部設置軟件陷阱。
④程序區。
前面已介紹,跑飛的程序在用戶程序內部跳轉時可用指令冗余技術加以解決,也可以設置軟件陷阱,更有效地抑制程序跑飛。程序設計常采用模塊化設計,模塊化的程序是由一序列執行指令構成的,一般不能在這些指令串中間任意安排陷阱,否則正常執行的程序也可能被抓走,可以將陷阱指令分散放置在各模塊之間的空余單元中。正常程序中不執行這些陷阱指令,但當程序跑飛一旦進入陷阱區,馬上將程序拉回正確軌道。陷阱的多少視用戶程序的大小而定,一般每1K字節有幾個陷阱就夠了。
⑤非EPROM芯片空間
MCS-51有64K程序系統空間,一般除了EPROM芯片占用的地址外,還剩余大片未編程的EPROM空間。當PC跑飛進入這些空間時,讀入數據為0FFH,對51系列而言,相當于指令MOV R7,A,將修改R7的內容。
當CPU讀程序存儲器時,會產生一個PSEN的低電平信號,可利用該信號和EPROM的地址譯碼信號產生選通信號,引起一個空閑的中斷,在中斷服務程序中設置軟件陷阱,將跑飛程序拉入正規。圖2是一個實例。
[align=center]

圖2 非EPROM區程序陷阱實例[/align]
3.3 “看門狗”技術
PC受到干擾引起程序失控,有可能使程序進入“死循環”,指令冗余和陷阱技術都不能解決這個問題,通常采用“看門狗”技術(Watchdog)。該技術就是不斷監視程序循環運行的時間,若發現時間超過已知的循環設定時間,即認為進入死循環,然后強迫程序返回到0000H入口地址,在0000H安排出錯處理程序,使系統納入正規。“看門狗”技術既可由硬件實現,也可以由軟件來實現,二者還可以結合使用。
在實際應用中,有各種專用芯片例如MAX813\815等能夠完成“看門狗”功能,這些芯片集成了電壓監控電路、備用電池和切換電路以及Watchdog電路,功能齊全,應用非常廣泛。在實時測控系統中,為了根據系統的需要來設定定時時間,也可采用圖3所示8254構成的“看門狗”電路,該電路使用8254的一個計數器,工作在方式1,定時時間可以由程序設定。
[align=center]

圖3 8254構成的“看門狗”電路[/align]
由圖3可以看出,無論8254輸出端OUT有正的上升沿還是系統上電復位的上升沿都將使系統復位,但兩者的含義是不同的。方式1的特點是OUT端輸出負脈沖的寬度為寫入8254的計數初值,在8254計數期間,若GATE端有重觸發信號,則重新裝入計數初值計數,亦即輸出保持為低電平。因此可設定8254的計數初值,使其輸出負脈沖的寬度稍大于程序正常運行的時間,然后在程序運行的適當位置上設置指令,使P1.0口向8254發來觸發脈沖,這樣當程序正常運行時,OUT端一直輸出低電平,若程序“跑飛”后P1.0口不能正常送來觸發信號,則計時時間到后,OUT端變為高電平,形成復位脈沖,使系統復位。由D觸發器7474構成的電路是用來區別是上電復位還是失控后的自動恢復復位的。
4. 結論
單片機實際應用系統抗干擾的根本在于硬件結構,軟件抗干擾起到的是補充作用,在系統設計時只有二者兼顧,相互結合、互補才能達到較好的抗干擾效果。
參考文獻
[1] 孫傳友. 測控系統原理與設計[J]. 北京:北京航空航天大學出版社, 2004.4
[2] 艾玲梅. 單片機測控系統抗抗干擾技術[J]. 陜西工學院學報,2003.6