在單片機(jī)的應(yīng)用系統(tǒng)中,系統(tǒng)的抗干擾技術(shù)是系統(tǒng)可靠性的重要方面。一個系統(tǒng)的正確與否,不僅取決于系統(tǒng)的設(shè)計思想和方法,同時還取決于系統(tǒng)的抗干擾措施,不然勢必會出現(xiàn)原理正確而系統(tǒng)穩(wěn)定性差,甚至不能實(shí)施,使得耗費(fèi)了大量錢財和時間研制出來的控制系統(tǒng)成為一種擺設(shè),電腦變成了“煩惱”。正因如此,抗干擾技術(shù)的研究越來越引起大家的高度重視。
以下為筆者在多年單片機(jī)控制系統(tǒng)設(shè)計和應(yīng)用中拾取的一些抗干擾的經(jīng)驗(yàn)體會。
一、單片機(jī)系統(tǒng)軟件的抗干擾
一般來講,竄入微機(jī)測控系統(tǒng)的干擾,其頻譜往往很寬,采用硬件抗干擾措施,只能抑制某個頻率段的干擾,仍有一些干擾會進(jìn)入系統(tǒng)。因此,除了采取硬件抗干擾方法外,還要采取軟件抗干擾措施。
1.模擬輸入信號抗干擾
疊加在系統(tǒng)模擬輸入信號上的噪聲干擾,會導(dǎo)致較大的測量誤差。但由于這些噪聲的隨機(jī)性,可以通過數(shù)字濾波技術(shù)剔除虛假信號,求去真值。常用方法如下:
(1)算術(shù)平均濾波法算術(shù)平均濾波法就是連續(xù)取n個值進(jìn)行采樣,然后求其平均值。該方法適應(yīng)于對一般具有隨機(jī)性干擾的信號進(jìn)行濾波。這種濾波法的特點(diǎn)是:n值較大時,信號的平滑度好,但靈敏度低;當(dāng)n值較小時,平滑度低,但靈敏度高。
(2)遞推平均濾波法
該方法是把n個測量數(shù)據(jù)看成一個隊(duì)列,隊(duì)列的長度為n,每進(jìn)行一次新的測量,就把測量結(jié)果放入隊(duì)尾,而扔掉原來隊(duì)首的一次數(shù)據(jù)。計算n個數(shù)據(jù)的平均值。對周期性的干擾,此方法有良好的抑制作用,平滑度高,靈敏度低。但對偶發(fā)脈沖的干擾抑制作用差。
(3)防脈沖干擾平均值濾波法
在脈沖干擾比較嚴(yán)重的場合,如果采用一般的平均濾波法,則干擾將會“平均”到結(jié)果中去,故平均值法不易消除由于脈沖干擾而引起的誤差。為此,在n個采樣數(shù)據(jù)中,取掉最大值和最小值,然后計算n-2個數(shù)據(jù)的算術(shù)平均值。為了加快測量速度,n一般取值為4。
2.“死機(jī)”現(xiàn)象的克服
當(dāng)干擾通過總線或其他口線作用到cpu時,就會造成程序計數(shù)器pc值的改變,引起程序混亂,使系統(tǒng)失控。因此,在設(shè)計單片機(jī)系統(tǒng)時,如何發(fā)現(xiàn)cpu受到干擾,并盡可能無擾地使系統(tǒng)恢復(fù)到正常工作狀態(tài)是軟件設(shè)計應(yīng)考慮的主要問題。
無論何種控制系統(tǒng),一般講,死機(jī)現(xiàn)象都是不允許的。克服死機(jī)現(xiàn)象最有效的辦法就是采用單片機(jī)工加了硬件看門狗電路后仍然有死機(jī)現(xiàn)象,分析原因,可能有以下方面:
(1)因?yàn)槟撤N原因,程序混亂后,看門狗電路雖然發(fā)出了復(fù)位脈沖,但在程序剛剛正常還來不及發(fā)出一個脈沖信號,此時程序再次被干擾,而這時看門狗電路已處于穩(wěn)態(tài),不能再發(fā)出復(fù)位脈沖。
(2)程序進(jìn)入死循環(huán),在該死循環(huán)中,恰好又有看門狗監(jiān)視i/o口上操作的指令。而該i/o口仍有脈沖信號輸出,看門狗檢測不到這種異常情況。
(3)在有嚴(yán)重干擾時,中斷方式控制字有時會受到破壞,導(dǎo)致中斷關(guān)閉。
可見,只用硬件看門狗電路是無法確保單片機(jī)正常工作的。因此,可采用以下方法作為補(bǔ)充。
(1)軟件“看門狗”的應(yīng)用
選用定時器t0作為看門狗,將t0的中斷定義為最高級中斷。看門狗啟動后,系統(tǒng)必須及時刷新t0的時間常數(shù)。
(2)指令冗余技術(shù)
①nop的使用
在8031單片機(jī)指令系統(tǒng)中所有指令都不超過3個字節(jié)。因此,在程序中連續(xù)插入3條nop指令,有助于降低程序計數(shù)器發(fā)生錯誤的概率。
②重要指令冗余
對于程序流向起決定作用的指令(如ret,reti,acall,ljmp,jz等)和某些對系統(tǒng)工作狀態(tài)有重要作用的指令(如setbea等)的后面,可重復(fù)寫下這些指令,以確保這些指令的正確執(zhí)行。
(3)軟件陷阱法
單片機(jī)系統(tǒng)程序跑飛意味著cpu執(zhí)行不正確流程程序。而當(dāng)亂飛程序進(jìn)入非程序區(qū),采用冗余技術(shù)無法使程序納入正確軌道,此時可采用軟件陷阱法,攔截亂飛程序。軟件陷阱就是用引導(dǎo)指令(如ljmp)將撲獲到的亂飛程序引向復(fù)位入口地址0000h,在此對程序進(jìn)行出錯處理,使其納入正軌。
①軟件陷阱格式
nop
nop
ljmp0000h
②軟件陷阱安排未使用的中斷區(qū);
未使用的大片rom空間;
程序區(qū);
中斷服務(wù)程序區(qū)。
3.系統(tǒng)復(fù)位特征
單片機(jī)應(yīng)用系統(tǒng)采用看門狗電路后,在一定程度上解決了系統(tǒng)死機(jī)現(xiàn)象,但是每次發(fā)生復(fù)位都使系統(tǒng)執(zhí)行初始化,這在干擾較強(qiáng)的情況下仍不能正常工作。同時系統(tǒng)雖然沒有死機(jī),但工作狀態(tài)頻繁改變,這同樣是不能容忍的。
理想的復(fù)位特征應(yīng)該是:系統(tǒng)可以鑒別是首次上電復(fù)位(又稱冷起動),還是異常復(fù)位(又稱熱啟動)。首次上電復(fù)位則進(jìn)行全部初始化,異常復(fù)位則不需要進(jìn)行全部初始化,測控程序不必從頭開始執(zhí)行,而應(yīng)故障部位開始。
(1)上電標(biāo)志的設(shè)定方法
①sp建立上電標(biāo)志。
②psw.5建立上電標(biāo)志。
③內(nèi)ram建立上電標(biāo)志。
(2)軟件復(fù)位與中斷激活標(biāo)志
當(dāng)系統(tǒng)執(zhí)行中斷服務(wù)程序時,來不及執(zhí)行reti指令而受干擾跳出該程序后,程序亂飛過程中由軟件陷阱或軟件“看門狗”將程序引向0000h,顯然這時中斷激活標(biāo)志并未清除,這樣就會使系統(tǒng)熱啟動時,不管中斷標(biāo)志是否置位,都不會響應(yīng)同級中斷的請求。因此,由軟件陷阱或“看門狗”捕獲的程序一定要完成清除 msc-51系列中中斷激活標(biāo)志,才能消除系統(tǒng)熱啟動后不響應(yīng)中斷的隱患。
(3)程序失控后恢復(fù)運(yùn)行的方法
一般來說,主程序是由若干個功能模塊組成,每個功能模塊入口設(shè)置一個標(biāo)志,系統(tǒng)故障復(fù)位后,可根據(jù)這些標(biāo)志選擇進(jìn)入相應(yīng)的功能模塊。這一點(diǎn)對一些自動化生產(chǎn)線的控制系統(tǒng)尤為重要。
總之,微機(jī)測控系統(tǒng)由于受到嚴(yán)重干擾而發(fā)生程序亂飛、陷入死循環(huán)以及中斷關(guān)閉等故障。系統(tǒng)通過冗余技術(shù)、軟件陷阱技術(shù)和“看門狗”技術(shù)等,使程序重新進(jìn)入0000h單元,納入正軌。因故障而進(jìn)入0000h后,系統(tǒng)要執(zhí)行上電標(biāo)志判定、ram數(shù)據(jù)檢查與恢復(fù)、清除中斷激活標(biāo)志等一系列操作,決定入口地址。
4.睡眠抗干擾
在實(shí)際應(yīng)用中,強(qiáng)干擾的來源往往是系統(tǒng)本身,例如被控負(fù)載的中斷狀態(tài)變化等。而這種干擾是可預(yù)知的,在軟件設(shè)計時可采取適當(dāng)措施避開。當(dāng)系統(tǒng)接通或斷開大功率負(fù)載時,暫停一切數(shù)據(jù)采集等工作。待干擾過后,再恢復(fù)進(jìn)行。這比單純在硬件上采取抗干擾措施要好的多。8031單片機(jī)中有一個電源控制寄存器 pcon。當(dāng)pcon.0=1時,8031單片機(jī)進(jìn)入等待工33作狀態(tài)。這時單片機(jī)時鐘被封鎖,所有i/o口引腳均保持進(jìn)入等待工作方式前的狀態(tài),內(nèi)部時鐘仍然繼續(xù)供給中斷系統(tǒng)定時/計數(shù)器和串行口、8031單片機(jī)現(xiàn)場(棧指針、程序計數(shù)器pc、狀態(tài)字psw、累加器acc、內(nèi)部ram)和其他特殊功能寄存器內(nèi)容保持不變。中斷退出和硬件復(fù)位均可使8031單片機(jī)退出睡眠狀態(tài)。
二、單片機(jī)系統(tǒng)中硬件抗干擾設(shè)計
一個好的電路設(shè)計,應(yīng)在設(shè)計過程中充分考慮抗干擾性的要求。分析系統(tǒng)中可能引起干擾的部件,采取必要的硬件抗干擾措施,抑制干擾源、切斷干擾傳播途徑。
1.抑制干擾源常用措施
(1)給繼電器線圈增加續(xù)流二極管,消除斷電時產(chǎn)生的反電動勢。
(2)在繼電器接點(diǎn)兩端并接火花抑制電路,(一般為rc串聯(lián)電路,電阻一般為幾~幾十kω,電容為0.01μf)減小電火花影響。
(3)給電機(jī)加濾波電路,注意電容、電感連線要盡量靠近電機(jī)。
(4)電路板上每個ic要并接一個0.01~0.1μf高頻電容,減小ic對電源的影響。注意高頻電容的布線應(yīng)靠近電源端,并盡量短,否則等于增大了電容的等效串聯(lián)電阻,會影響濾波效果。
(5)避免90°折線,減小高頻噪聲發(fā)射。
(6)在可控硅兩端并接rc抑制電路,減小可控硅噪聲。
2.切斷干擾傳播途徑措施
(1)充分考慮電源對單片機(jī)的影響。給單片機(jī)電源加濾波電路,減小電源噪聲對單片機(jī)的干擾。
(2)若用單片機(jī)的i/o口來控制電機(jī)等噪聲器件,在i/o口與噪聲源之間應(yīng)加ⅱ形濾波電路,或進(jìn)行光電隔離。
(3)注意晶振布線。晶振與單片機(jī)引腳盡量靠近,用地線把時鐘區(qū)隔離起來,晶振外殼接地并固定。
(4)電路板合理分區(qū),如數(shù)字信號、模擬信號盡可能使干擾源與敏感器件遠(yuǎn)離。
(5)用地線將數(shù)字區(qū)與模擬區(qū)隔離,數(shù)字地與模擬地分離,最后接在一點(diǎn)接于電源地。
(6)單片機(jī)和大功率器件的地線要單獨(dú)接地,以減小相互之間的干擾。
(7)在單片機(jī)i/o口、電源線、電路板連線等關(guān)鍵地方使用抗干擾元件,如磁環(huán)、電源濾波器、屏蔽罩等。
3.提高敏感器件的抗干擾性能
提高敏感器件的抗干擾性能是指從敏感器件考慮盡量減小對干擾噪聲的拾取,以及從不正常狀態(tài)盡快恢復(fù)的方法。常用措施:
(1)布線時盡量減少回路面積,降低感應(yīng)噪聲;
(2)布線時電源線與地線盡量粗。除減小壓降外,更重要的是降低耦合噪聲;
(3)對單片機(jī)的閑置i/o,不能懸空,應(yīng)接地或電源,其他ic的閑置口一樣;
(4)加單片機(jī)硬件看門狗電路;
(5)滿足要求的前提下,盡量降低單片機(jī)晶振和選用低速數(shù)字電路;
(6)ic器件盡量直接焊在電路板上,少用ic座。