軟件抗干擾技術(shù)及其在單片機(jī)上的應(yīng)用
1引言
本文引用地址:http://m.butianyuan.cn/article/148973.htm微機(jī)測(cè)控系統(tǒng)中,對(duì)軟件有以下幾個(gè)方面的基本要求:
(1)可維護(hù)性:要求盡可能地采用模塊化設(shè)計(jì),程序流程清晰明了,最大限度地控制使用和調(diào)用嵌套次數(shù);
(2)可理解性:軟件源代碼應(yīng)注意加注提示內(nèi)容,一般應(yīng)不少于整個(gè)代碼行數(shù)的60%,使其易于理解和閱讀,便于修改和補(bǔ)充;
(3)實(shí)時(shí)性:隨著集合度和運(yùn)算速度的提高,實(shí)時(shí)性已經(jīng)成為測(cè)試系統(tǒng)對(duì)軟件的普遍要求,在工程應(yīng)用軟件設(shè)計(jì)中,采用匯編語(yǔ)言要比采用高級(jí)語(yǔ)言更具有實(shí)時(shí)性;
(4)準(zhǔn)確性:系統(tǒng)要求在進(jìn)行大量運(yùn)算時(shí),要選取合適的算法,以便控制最后結(jié)果的精度;
(5)可靠性:可靠性是測(cè)控軟件最重要的指標(biāo)之一,他要求兩方面的內(nèi)容:一方面是運(yùn)行參數(shù)環(huán)境發(fā)生變化時(shí)(如電壓在規(guī)定范圍內(nèi)出現(xiàn)較大波動(dòng)),軟件都能可靠運(yùn)行并得出正確的結(jié)果,也就是軟件的自適應(yīng)性;另一方面是在工作環(huán)境惡劣,干擾環(huán)境復(fù)雜嚴(yán)重的情況下,軟件必須保證可靠運(yùn)行,這對(duì)測(cè)控軟件尤為重要。為了保證以上兩方面的要求,就必須使用多種抗干擾技術(shù)。
2.1簡(jiǎn)介
軟件抗干擾技術(shù)是當(dāng)系統(tǒng)受干擾后,使系統(tǒng)恢復(fù)正常運(yùn)行或輸入信號(hào)受干擾后去偽存真的一種輔助方法。此技術(shù)屬于一種被動(dòng)抗干擾措施,但是由于軟件抗干擾設(shè)計(jì)靈活,節(jié)省硬件資源,操作起來方便易行,所以軟件抗干擾技術(shù)越來越受到人們的重視。
軟件抗干擾技術(shù)主要研究的方面:
(1)采取軟件的方法對(duì)疊加在模擬輸入信號(hào)上的噪聲進(jìn)行抑制,以讀取真正有用的信息,如數(shù)字濾波器;
(2)在程序受到干擾跑飛的情況下,采取措施使程序回到正常的軌道上來,常見的抗干擾技術(shù)有:軟件攔截技術(shù)(軟件陷阱等);輸人口信號(hào)重復(fù)檢測(cè)方法;輸出口數(shù)據(jù)刷新;數(shù)字濾波;
(3)程序具有自檢功能。
2.2軟件攔截技術(shù)
2.2.1NOP指令使用
單片機(jī)中最容易受到干擾的是內(nèi)部程序計(jì)數(shù)器--PC的值,當(dāng)受到干擾時(shí),PC值被改變,CPU誤將程序從正確位置跳轉(zhuǎn)到無意義區(qū)域,導(dǎo)致程序運(yùn)行出錯(cuò)。
目前常用的方法是在對(duì)程序走向有重要作用的指令(RET,LCALL,SJMP,JC,LJMP,ACALL等)之前加人2~3個(gè)單字節(jié)的NOP指令,當(dāng)失控的程序遇到該指令后得到調(diào)整,使接下來的程序得以正常執(zhí)行。從實(shí)際使用過程中總結(jié)可知,應(yīng)盡量多的使用NOP指令,而且發(fā)現(xiàn)NOP指令成對(duì)使用時(shí),能起到比較滿意的抗干擾效果。
2.2.2軟件陷阱
(1)未使用的中斷區(qū)
對(duì)于未使用的中斷源因干擾而開放,從而直接影響軟件的正常工作的中斷源,采用的方法一般是在對(duì)應(yīng)的中斷服務(wù)地址入口處設(shè)置軟件陷阱,使其跳轉(zhuǎn)到程序入口,通常的軟件陷阱設(shè)置如下面的程序:0RG0003H
LJMP0000H;主程序入口
而在實(shí)際使用中,此種處理方法并不合適,特別是在系統(tǒng)聯(lián)試中,突然重新執(zhí)行程序的情況應(yīng)盡量避免。實(shí)際處理應(yīng)該是讓其進(jìn)入一個(gè)信息處理程序,并顯示相關(guān)信息。這樣做既可以使程序捕捉到錯(cuò)誤的中斷后,及時(shí)離開,又可以根據(jù)相關(guān)信息快速定位便于試驗(yàn)順利進(jìn)行。
如程序所示,只有定時(shí)器T0中斷開放,對(duì)于可能影響程序的中斷,如外部中斷、定時(shí)器T1中斷,在其中斷地址人口,均加上了軟件陷阱,使其跳轉(zhuǎn)到ER38這個(gè)故障處理程序,從而避免程序的跑飛,也便于判斷程序的走向。
(2)未使用的EPROM空間
當(dāng)裝載軟件程序的存儲(chǔ)芯片為27C64,其地址空間為0000H~1FFFFH,一般程序很少能夠用完,可填充FF。而FFH是MOVR7,A的機(jī)器碼,當(dāng)程序亂入非程序區(qū)后,不僅無法轉(zhuǎn)入正軌,而且還會(huì)破壞R7的內(nèi)容,因此在實(shí)際使用過程對(duì)未使用的EPROM空間應(yīng)全部填充為0,因?yàn)槌绦驈?fù)位入口地址為0000H,當(dāng)跑飛的程序指針跳至無程序處,可以讓其重新指向主程序入口,可以起到防跑飛的功能。
(3)程序區(qū)
為了保證可靠的運(yùn)行,以及一旦發(fā)生跑飛,不但使其有出口而且便于判斷,實(shí)際應(yīng)用中在整個(gè)程序中設(shè)置了若干軟件陷阱,當(dāng)程序進(jìn)入陷阱后,讓其強(qiáng)制進(jìn)入一個(gè)指定地址執(zhí)行一段專門對(duì)程序出錯(cuò)進(jìn)行處理的程序。通過試驗(yàn)驗(yàn)證和使用中的經(jīng)驗(yàn)總結(jié),在外場(chǎng)軟件編寫中,軟件陷阱的設(shè)置,主要是在正常的程序流程中,在認(rèn)為較為重要的程序段中,隨機(jī)設(shè)置若干個(gè)故障信息顯示程序區(qū),一方面是完成正常的故障信息的顯示,另一方面就是在程序跑飛的情況下,通過故障信息的顯示,可以快速判斷跑飛',的程序段,從而使程序步入正軌。程序流程如圖1所示。
2.2.3輸入口信號(hào)重復(fù)檢測(cè)方法
對(duì)于重要開關(guān)量輸入信號(hào)的檢測(cè),實(shí)際應(yīng)用中一般采用3次或5次重復(fù)檢測(cè)的方法,即對(duì)接口中的輸人數(shù)據(jù)信息進(jìn)行重復(fù)進(jìn)行3次或5次檢測(cè),若結(jié)果完全一致則認(rèn)為是真的輸入信號(hào),若多次測(cè)試結(jié)果不一致,即可以停止檢測(cè)顯示故障信息,又可以重復(fù)進(jìn)行再檢測(cè)。
對(duì)于軟件測(cè)量而言,輸入量干擾大多數(shù)是疊加到有效信號(hào)上的一系列作用時(shí)間短的尖脈沖,但是頻率不一致,因此應(yīng)在相鄰的檢測(cè)之間應(yīng)有一定的時(shí)間間隔。理論上可以是等時(shí)間段的,而在實(shí)際使用過程中,由于外部環(huán)境比較復(fù)雜,等時(shí)間段只能濾除某個(gè)頻段的干擾,為了濾除盡可能多的干擾,間隔時(shí)間應(yīng)為不等的時(shí)間段,但是對(duì)數(shù)據(jù)影響較大的尖峰,通過觀察其波形可知,其作用的時(shí)間寬度在幾十到幾百μs之間,所以把濾波時(shí)間限定ms級(jí)上。在經(jīng)過使用和驗(yàn)證,此方法可以有效地保證軟件可靠運(yùn)行。需要注意的是,對(duì)于軟件時(shí)序要求比較嚴(yán)格場(chǎng)合,延時(shí)查詢時(shí)間不宜過長(zhǎng),查詢次數(shù)一般以3次為宜。
程序流程如圖2所示。
2.2.4輸出端口數(shù)據(jù)刷新
開關(guān)量輸出軟件抗干擾技術(shù)主要采用的方法是重復(fù)輸出,這是提高輸出端口穩(wěn)定性的有效措施之一。外場(chǎng)設(shè)備的微機(jī)系統(tǒng)為51單片機(jī)系統(tǒng),采用了8155,8255可編程I/O擴(kuò)展芯片,理論上只在上電啟動(dòng)時(shí),進(jìn)行初始化一次即可。但是在實(shí)際使用中發(fā)現(xiàn),由于干擾等原因,可使芯片的工作控制字遭到破壞,從而使系統(tǒng)輸入輸出狀態(tài)混亂的情況時(shí)有發(fā)生,因此,在讀取重要信號(hào)之前,先對(duì)8155,8255進(jìn)行初始化操作,通過一段時(shí)間軟件運(yùn)行,穩(wěn)定度大大提高,但是狀態(tài)混亂情況仍有發(fā)生,經(jīng)過分析數(shù)據(jù)特點(diǎn)和系統(tǒng)要求后,認(rèn)為8155、8255允許多次設(shè)置狀態(tài)字、控制字等,而且對(duì)系統(tǒng)并無不良影響。因此,在實(shí)際應(yīng)用中,用到8255和8155之前均首先進(jìn)行初始化操作,然后再進(jìn)行狀態(tài)的讀取和寫入。通過長(zhǎng)時(shí)間試驗(yàn)和聯(lián)試,不再出現(xiàn)此類問題,軟件運(yùn)行穩(wěn)定可靠。另外應(yīng)注意,在重復(fù)設(shè)置8255,8155芯片時(shí),一定要將其工作方式、控制字一起設(shè)置,方可確保軟件可靠工作。程序流程如圖3所示。
2.2.5數(shù)字濾波
為了克服干擾對(duì)A/D轉(zhuǎn)換結(jié)果的影響,可根據(jù)情況采取相應(yīng)的數(shù)字濾波技術(shù)。數(shù)字濾波的方法很多,如有中值濾波法、平均值濾波法等,經(jīng)過對(duì)不同濾波法的實(shí)際使用和試驗(yàn)驗(yàn)證,認(rèn)為采用防脈沖干擾平均值濾波法,抗干擾效果比較明顯。
普通的平均值濾波,在干擾十分嚴(yán)重的場(chǎng)合,所得到的平均值中干擾的成分仍比較大,不易消除由于脈沖干擾而引起的誤差。而防脈沖干擾平均值濾波是在采集的N個(gè)數(shù)據(jù)中,去掉數(shù)據(jù)中的最大值和最小值,然后計(jì)算N-2個(gè)數(shù)據(jù)的算術(shù)平均值。在實(shí)際應(yīng)用中,此法主要是用在AD值的檢測(cè)上,由于外場(chǎng)設(shè)備中AD采集值判定,直接影響此設(shè)備能否投入使用,所以對(duì)所采AD值的可靠性要求高,采用此濾波法后,通過仿真可以清楚看出,在某些特定
的情況下,AD采集值波動(dòng)較大,但此法可以有效地避免了CPU對(duì)采集值的誤判,使軟件得以可靠運(yùn)行。
程序流程如圖4所示,此程序完成的主要功能是調(diào)用A/D測(cè)量輸入子程序ACD,將循環(huán)采集的6個(gè)AD值,放在70H至75H的寄存器中,RO為記錄采集次數(shù),70H和75H分別放置最大值和最小值,去除最大值和最小值后,將其余4個(gè)值求算術(shù)平均數(shù),以得到的值為最終AD采集值放在68H寄存器中。
2.2.6程序自檢
程序自檢是提高測(cè)控軟件可靠性的有效方法之一。在實(shí)際應(yīng)用中,自檢程序主要是對(duì)單片機(jī)系統(tǒng)的主要器件如8031的I/O口、外部擴(kuò)展的可編程I/O接VI芯片、A/D器件、ROM器件等進(jìn)行檢測(cè),如出現(xiàn)故障能夠給出故障部位。因此自檢程序不但可以了解與測(cè)試相關(guān)外設(shè)的工作情況,而且可避免因外設(shè)原因而使測(cè)控系統(tǒng)不能正常工作的干擾。
3結(jié)語(yǔ)
在采取以上所述的多種軟件抗干擾技術(shù),經(jīng)過外場(chǎng)的沙塵、云雪的考驗(yàn)和干擾復(fù)雜、嚴(yán)重的環(huán)境下驗(yàn)證,完全可以保證軟件可靠運(yùn)行。但是同時(shí)需要說明的是,軟件抗干擾技術(shù)只是被動(dòng)的方式,只有在硬件沒計(jì)合理的情況下,使用適當(dāng)?shù)目垢蓴_技術(shù),才能更有效地保證軟件可靠地工作。
評(píng)論