摘 要:單片機(jī)在嵌入式系統(tǒng)應(yīng)用中,抗干擾性能是系統(tǒng)可靠性的重要指標(biāo),抗干擾設(shè)計(jì)是單片機(jī)系統(tǒng)研制中不可忽視的一個(gè)重要內(nèi)容。本文根據(jù)筆者在實(shí)際工作中的體會(huì),就單片機(jī)在嵌入式系統(tǒng)應(yīng)用中的抗干擾問題進(jìn)行探討,并給出了排錯(cuò)設(shè)計(jì)、容錯(cuò)設(shè)計(jì)的一些方法和措施。
關(guān)鍵詞:單片機(jī) 嵌入式系統(tǒng) 抗干擾 容錯(cuò) 可靠性
隨著科學(xué)技術(shù)的迅速發(fā)展,單片機(jī)在各個(gè)領(lǐng)域中的應(yīng)用越來越廣泛。在眾多的應(yīng)用系統(tǒng)中共同面臨的一個(gè)問題,就是它在應(yīng)用系統(tǒng)中的可靠性,這就要求我們?cè)谠O(shè)計(jì)時(shí)應(yīng)根據(jù)現(xiàn)場(chǎng)具體情況,在硬件設(shè)計(jì)、線路板設(shè)計(jì)、軟件設(shè)計(jì)等方面來采取相應(yīng)的抗干擾措施。
一、抗電源干擾的措施
大部分單片機(jī)嵌入式系統(tǒng)都采用市電電源供電,在應(yīng)用系統(tǒng)中一個(gè)很重要的干擾就來自電源。市電的各種干擾,如雷電、大容量感性負(fù)載的起停等,都會(huì)造成電源瞬間欠壓、過載,產(chǎn)生浪涌、下陷、尖峰等干擾,但我們可采取如下有效抗干擾措施。
1.用壓敏電阻抑制尖峰、浪涌
壓敏電阻兩端的電壓如超過其限定值時(shí),電流會(huì)迅速增大,呈短路狀態(tài),利用這一特點(diǎn),可以用它吸收瞬間的尖峰、浪涌電壓。壓敏電阻并聯(lián)在電源變壓器的初、次級(jí),加入壓敏電阻后,電源干擾造成單片機(jī)程序失控的可能性減小。壓敏電壓的計(jì)算公式為:VIMA=1.56×32×V~(V~:交流電壓有效值)
2.濾波器抑制高頻干擾
市電中含有多種高次諧波,它們很容易經(jīng)電源進(jìn)入單片機(jī)系統(tǒng),另外一些射頻發(fā)射、電磁波等也會(huì)由電源線感應(yīng)反饋入單片機(jī)系統(tǒng)造成干擾,因此在電源電路中加入低通濾波電路讓50 Hz市電基波通過,抑制掉高頻信號(hào)。此外在電源變壓器的初次級(jí)之間均用屏蔽層隔離,減少其分布電容,提高抗共模干擾的能力。圖1中列出了幾種不同形式的濾波電路。
二、印刷電路板的抗干擾設(shè)計(jì)
印刷電路板是單片機(jī)應(yīng)用系統(tǒng)中器件、信號(hào)、電源線的高密度集合體,印刷電路板設(shè)計(jì)的好壞對(duì)抗干擾能力的影響很大。
1.電源線、地線的設(shè)計(jì)
在單片機(jī)應(yīng)用系統(tǒng),接地是抑制干擾的重要方法。線路板上既有邏輯電路,又有模擬電路,兩者的地線要分別與電源端地線相連。低頻電路的地線盡量采用單點(diǎn)并聯(lián)接地,高頻電路宜采用多點(diǎn)串聯(lián)接地。接地線如果很細(xì),接地電位則隨電流的變化而變化,使系統(tǒng)抗噪聲性能變壞,因此應(yīng)加粗接地線條,使它能通過3倍于印刷電路板上的允許電流。
電源線與地線應(yīng)盡量靠近走線以減少所包圍的環(huán)路面積,從而減少外界磁場(chǎng)對(duì)環(huán)路切割而產(chǎn)生的電場(chǎng)干擾,同時(shí)也減少環(huán)路對(duì)外電磁輻射。電源線、地線的走向與數(shù)據(jù)傳遞方向一致也有助于增強(qiáng)抗噪聲能力。
2.一些特殊措施
在印刷電路板的各個(gè)關(guān)鍵部位配置去耦電容應(yīng)視為印刷電路板設(shè)計(jì)的一項(xiàng)常規(guī)做法。原則上每個(gè)集成電路芯片都應(yīng)安置一個(gè)0.01μF的瓷片電容排除射頻耦合干擾,電容引線不能太長,應(yīng)緊靠芯片的電源線、地線。如印刷電路空隙小裝不下時(shí),可每4~10個(gè)芯片安置一個(gè)1~10μF的限噪聲用的電容鉭電容。線路板布局時(shí),應(yīng)使單片機(jī)的振蕩晶體盡量放在單片機(jī)兩引腳近端。
三、程序運(yùn)行失常的對(duì)策
前面所介紹的抗干擾措施僅是盡量減少干擾,提高系統(tǒng)運(yùn)行的可靠性,但在惡劣的工作環(huán)境下程序長期運(yùn)行仍可能失控:PC值指向操作數(shù),將操作數(shù)作為指令碼執(zhí)行;PC值超出應(yīng)用程序區(qū),將非程序區(qū)中的隨機(jī)數(shù)作為指令碼運(yùn)行。不管何種情況,都會(huì)造成程序的非正常運(yùn)行或死機(jī)。看門狗就是在程序跑飛或死機(jī)時(shí),對(duì)系統(tǒng)進(jìn)行重新置位或復(fù)位,使系統(tǒng)恢復(fù)正常運(yùn)行的一種專用電路。常用的看門狗有2種:軟件狗和硬件狗。
1.硬件看門狗
所謂硬件狗,就是一個(gè)能發(fā)出“復(fù)位”信號(hào)的計(jì)數(shù)器或定時(shí)器電路。圖2是一個(gè)硬件看門狗電路。其工作原理是:P1.0作為看門狗的“喂狗”信號(hào)定時(shí)給出一脈沖,設(shè)其脈沖間隔為△t<tw<2△t,當(dāng)程序正常運(yùn)行時(shí),每隔△t輸出一脈沖觸發(fā)CC4098單穩(wěn)電路,使始終為低電平,若程序一旦出現(xiàn)異常,不能在tw時(shí)間內(nèi)送出一“喂狗”脈沖,產(chǎn)生一正脈沖,使單片機(jī)系統(tǒng)復(fù)位,使其能重新正常運(yùn)行。
現(xiàn)在已有許多更先進(jìn)的集電源監(jiān)視和“看門狗”于一身的新型芯片,如MAX705、MAX706、MAX813L等,有的還具備掉電檢測(cè)、備用電池自動(dòng)切換功能。
2.軟件看門狗
軟件狗實(shí)際上就是通常所說的軟件陷井。它是在程序存儲(chǔ)器的空余地址中全部填上1條跳轉(zhuǎn)指令,一旦程序跑飛,只要程序指針指向這些地址,便立即被強(qiáng)行跳轉(zhuǎn)至程序開頭或其他指定地址處,從而使程序繼續(xù)正常運(yùn)行。
四、軟件中的抗干擾措施
提高系統(tǒng)可靠性的方法有排錯(cuò)設(shè)計(jì)和容錯(cuò)設(shè)計(jì)。前面提到的排錯(cuò)設(shè)計(jì)并不能將干擾完全解決。而容錯(cuò)就是允許系統(tǒng)發(fā)生故障,借助冗余技術(shù)使其自動(dòng)抵消,在故障存在的情況下也能使系統(tǒng)正常運(yùn)行。下面介紹一下常用的幾種軟件容錯(cuò)方法。
1.?dāng)?shù)據(jù)采集誤差的軟件對(duì)策
對(duì)于實(shí)時(shí)數(shù)據(jù)采集系統(tǒng),為了消除傳感通器中的干擾信號(hào),在硬件上常采取模擬濾波器對(duì)信號(hào)實(shí)現(xiàn)頻率濾波,也可以用CPU的運(yùn)算控制功能也可以實(shí)現(xiàn)頻率濾波,這就是數(shù)字濾波(軟件濾波)。對(duì)一點(diǎn)數(shù)據(jù)連續(xù)采樣多次,計(jì)算其平均值,以平均值作為點(diǎn)的采樣結(jié)果,這樣可以減少系統(tǒng)的隨機(jī)干擾對(duì)采集結(jié)果的影響。根據(jù)干擾造成采樣數(shù)據(jù)偏大或偏小的情況,對(duì)一個(gè)采樣點(diǎn)連續(xù)采集多個(gè)信號(hào),對(duì)采樣值進(jìn)行比較,取中值作為該點(diǎn)的采集結(jié)果。還可利用軟件完成RC低通濾波器的算法,實(shí)現(xiàn)用軟件方法代替硬件RC濾波器。一階遞推數(shù)字濾波公式為
式中:Q為數(shù)字濾波器時(shí)間常數(shù);
Yn為第n次采樣時(shí)的濾波輸出;
Xn為第n次采樣時(shí)的濾波輸入。
2.時(shí)間冗余
在程序的適當(dāng)位置設(shè)置若干檢查點(diǎn),在每一個(gè)檢查點(diǎn)保存程序在該檢查點(diǎn)之前正確運(yùn)行而得到的全部信息及標(biāo)志。如果故障是暫時(shí)性的,則程序卷回到上一檢查點(diǎn)開始重新執(zhí)行,這樣可以完全消除錯(cuò)誤,其框圖如圖3所示。但它只能檢出而不能消除永久性故障,用時(shí)間換取可靠性。
3.N版本程序設(shè)計(jì)
N版本程序設(shè)計(jì),是為某一個(gè)確定功能而獨(dú)立編制的幾個(gè)程序同時(shí)運(yùn)行,其結(jié)果是通過這些獨(dú)立程序的運(yùn)行結(jié)果經(jīng)多數(shù)表決而得到的,其結(jié)構(gòu)框圖如圖4所示。N版本程序設(shè)計(jì)中,特別強(qiáng)調(diào)N版本,因?yàn)槿绻鞒绦虿捎昧讼嗤慕Y(jié)構(gòu)、相同的算法,就有可能產(chǎn)生相同的錯(cuò)誤而使多數(shù)表決失敗。
N版本程序設(shè)計(jì)中包含了程序設(shè)計(jì)上的冗余,用效率換取可靠性,能容忍設(shè)計(jì)錯(cuò)誤的能力,還能屏蔽某些類型的暫時(shí)性硬件故障。
數(shù)據(jù)的冗余保護(hù)也是N版本程序設(shè)計(jì)思想的應(yīng)用。將重要數(shù)據(jù)同時(shí)存入幾個(gè)不相鄰的存儲(chǔ)單元,由于不相鄰存儲(chǔ)單元因干擾而被同時(shí)改寫的可能性很小,即使有一兩個(gè)存儲(chǔ)單元出錯(cuò)也能得到正確的數(shù)據(jù)。
4.棄權(quán)規(guī)則
就是當(dāng)程序運(yùn)行或繼續(xù)運(yùn)行的某些必要條件未能具備時(shí),放棄對(duì)這些條件的要求,不是產(chǎn)生等待、中斷、出錯(cuò)或停機(jī),而是采用跳過、轉(zhuǎn)移、N-1、默認(rèn)等方式保證程序繼續(xù)運(yùn)行,這些方法只適用于屏蔽暫時(shí)故障,所以要求同時(shí)產(chǎn)生報(bào)警輸出,以便確定是否需要人為干預(yù)來消除永久故障。棄權(quán)規(guī)則首先要不影響程序的正確性和適應(yīng)用性。
(1)跳過
在不影響控制系統(tǒng)正常運(yùn)行的前提下,跳過條件不具備而導(dǎo)致故障的模塊向下執(zhí)行,這是軟件失效運(yùn)行的形式之一。所謂軟件失效運(yùn)行就是在故障發(fā)生時(shí)先把故障模塊從系統(tǒng)中斷開,再對(duì)系統(tǒng)的其余模塊進(jìn)行重構(gòu),使系統(tǒng)能繼續(xù)運(yùn)行,但功能降低,即降級(jí)運(yùn)行??煽啃缘奶岣呤且阅承┕δ艿膿p失為代價(jià)的。
(2)N-1方式
N-1方式是基于控制程序的循環(huán)執(zhí)行特性,即采用上一次循環(huán)(第N-1次)的數(shù)據(jù)代替本次循環(huán)(第N次)所需的卻未出現(xiàn)或未具備的數(shù)據(jù)。這種方法特別適用于緩變的被控對(duì)象。例如某次控制輸出被判斷為不合理,則利用上次循環(huán)的輸出來代替它。
(3)默認(rèn)
默認(rèn)也是棄權(quán)規(guī)則形式之一,與跳過不同的是采用預(yù)先置入的合理?xiàng)l件代替未具備的條件,即默認(rèn)條件存在。例如將非法輸入的操作指令默認(rèn)的無輸入,繼續(xù)原操作。
總之,棄權(quán)規(guī)則的目的是使工作在實(shí)時(shí)方式的控制系統(tǒng)保證連續(xù)運(yùn)行,以確保被控系統(tǒng)長期穩(wěn)定工作,雖然系統(tǒng)的功能有可能降低。
控制系統(tǒng)常用的軟件容錯(cuò)方法很多,還有非正常性規(guī)則、失效保險(xiǎn)設(shè)計(jì)等,在此就不不一一介紹。排錯(cuò)設(shè)計(jì)和容錯(cuò)設(shè)計(jì)的方法也很多,要根據(jù)現(xiàn)場(chǎng)情況選擇適當(dāng)?shù)姆椒āR陨辖榻B的抗干擾措施是在長期實(shí)踐中摸索出的一些經(jīng)驗(yàn),在此提出僅供參考。