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