摘 要:?jiǎn)纹瑱C(jī)的開發(fā)過(guò)程中的抗噪是必須解決和處理的問(wèn)題,單片機(jī)的性能不斷優(yōu)化,片內(nèi)外干擾也越來(lái)越嚴(yán)重,因而必須采取有效的辦法。本文研究的問(wèn)題即是從硬件軟件兩方面來(lái)探討抗噪。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);抗噪;看門狗技術(shù);軟件陷阱
單片機(jī)構(gòu)成系統(tǒng)的抗干擾能力線路板的設(shè)計(jì)和布線有很大關(guān)系。理想的數(shù)字電路信號(hào),高低電平穩(wěn)定,上升,下降沿整齊平穩(wěn),沒(méi)有過(guò)沖與不到位,應(yīng)為理想的方波。而當(dāng)用示波器觀察線路上的信號(hào)時(shí),會(huì)發(fā)現(xiàn)有噪聲信號(hào)疊加在所謂理想信號(hào)上。如果線路板上的噪聲較大,當(dāng)外界來(lái)的隨機(jī)電磁干擾信號(hào)疊加在原有的噪聲上,就會(huì)造成系統(tǒng)出錯(cuò)。
目前我們對(duì)于單片機(jī)的噪聲問(wèn)題的解決辦法主要有下列幾種:
1 監(jiān)控電路
監(jiān)控電路是比較低端但是行之極為有效的解決噪聲辦法,主要包括時(shí)鐘監(jiān)控電路和電源電壓監(jiān)控。高可靠性的額單片機(jī)片內(nèi)有時(shí)鐘監(jiān)控電路,在外部遇到干擾餓時(shí)候,外部晶振有可能停振,對(duì)于外部晶振停振的問(wèn)題,可以使用復(fù)制產(chǎn)生單片機(jī)復(fù)位信號(hào)的方法使CPU復(fù)位,也可以讓CPU改用單片機(jī)內(nèi)部振蕩器工作,這樣可以有助于提高單片機(jī)系統(tǒng)的抗干擾能力;也可以通過(guò)寫相應(yīng)寄存器打開時(shí)鐘監(jiān)控電路,并且關(guān)掉使用片內(nèi)時(shí)鐘方式,在出現(xiàn)外部時(shí)鐘停振時(shí)直接產(chǎn)生CPU復(fù)位信號(hào),重新啟動(dòng)單片機(jī)系統(tǒng)。也可以寫相應(yīng)寄存器允許在出現(xiàn)外部時(shí)鐘失效時(shí)使用片內(nèi)自時(shí)鐘方式。進(jìn)入自時(shí)鐘方式以后,片內(nèi)的時(shí)鐘產(chǎn)生器模塊會(huì)對(duì)外部時(shí)鐘質(zhì)量進(jìn)行檢測(cè)每當(dāng)外部時(shí)鐘恢復(fù)后自動(dòng)轉(zhuǎn)入正常外部方式,自時(shí)鐘頻率為片內(nèi)壓控振蕩器的最低頻率,如果降低時(shí)鐘頻率運(yùn)行比復(fù)位帶來(lái)的系統(tǒng)不確定性更安全,可以允許在出現(xiàn)外部時(shí)鐘失效時(shí)使用這種自時(shí)鐘方式。對(duì)于不同模式下的外部時(shí)鐘失效干擾,可以通過(guò)程序選擇最合適的抗干擾方式。
除了時(shí)鐘監(jiān)控之外,采用電源電壓監(jiān)控也可以有效的抗噪聲,由于單片機(jī)是基于CMOS工藝的超大規(guī)模集成電路,允許使用臺(tái)的電源電壓范圍很寬,原則上2.7——3.5V都可以,但根據(jù)應(yīng)用領(lǐng)域的不同,對(duì)電源電壓的監(jiān)控,可以根據(jù)應(yīng)用使用不同的抗干擾措施。對(duì)于 穩(wěn)定電壓供電的單片機(jī)應(yīng)用系統(tǒng),可以使用低電壓復(fù)位電路。
2 軟件陷阱
為確保單片機(jī)的可靠性,對(duì)剩余程序空間要做一些處理。處理的原則是,考慮到一旦由于某種干擾,程序落到這一空間(亂飛),無(wú)論這里的數(shù)據(jù)當(dāng)作地址解釋還是當(dāng)作指令解釋,都能使程序恢復(fù)正常運(yùn)行。從軟件的角度來(lái)看,對(duì)實(shí)現(xiàn)功能的程序在設(shè)計(jì)中不可避免出現(xiàn)亂飛現(xiàn)象。我們以MC51為例說(shuō)明,當(dāng)亂飛的程序進(jìn)入非程序區(qū)的時(shí)候,我們就可設(shè)定軟件陷阱對(duì)亂飛的程序進(jìn)行攔截從而將程序引向一個(gè)固定的位置。這樣我們就可將捕獲的程序重新納入正軌。 軟件陷阱主要就是把程序從新引入它的復(fù)位入口處,也就是說(shuō)我們?cè)谶m當(dāng)?shù)牡胤皆O(shè)置這樣的指令:
NOP
NOP
LJMP 0000H
對(duì)于軟件陷阱的安排,我們主要安排在這樣一些區(qū)域,未使用的中斷區(qū),未使用的EPROM空間及非EPROM空間。程序運(yùn)行區(qū),及中斷服務(wù)程序區(qū)。在這里我們主要來(lái)看前三種:
未使用的中斷區(qū):如果對(duì)于未使用的中斷因干擾而開放的話,我們可以把中斷服務(wù)程序這樣來(lái)寫:
NOP
NOP
POPD1 ;將原來(lái)的錯(cuò)誤斷點(diǎn)彈出
POPD2 ;將原來(lái)的錯(cuò)誤斷點(diǎn)彈出
PUSH 00H
PUSH 00H ;將斷點(diǎn)地址重寫為0000H
RETI
未使用的EPROM區(qū) :假設(shè)我們用了一片2764,但并沒(méi)有用完整個(gè)存儲(chǔ)區(qū)。這時(shí)候就可在未用的區(qū)域里填充上020000數(shù)據(jù),這樣當(dāng)程序飛入其中時(shí)就會(huì)很快的走入正軌。這條指令其實(shí)是\"LJMP 0000H\"的機(jī)器碼。非EPROM空間 :?jiǎn)纹瑱C(jī)系統(tǒng)的程序空間是64K,正常情況下我們所使用的EPROM不會(huì)占用所有的空間,假設(shè)我們現(xiàn)在的EPROM占用16K的空間那么剩下的48K空間就被閑置不用了。當(dāng)亂飛的PC落入這些空間時(shí),讀入的數(shù)據(jù)將為FFH,這是:MOVR7,A 指令的機(jī)器碼,將修改R7的內(nèi)容。因此,當(dāng)程序亂飛入非EPROM芯片區(qū)后,不僅無(wú)法導(dǎo)入正規(guī),面且破壞了R7的內(nèi)容。
我們知道,當(dāng)CPU讀程序存儲(chǔ)器的時(shí)候,伴隨著會(huì)產(chǎn)生一個(gè)PSEN信號(hào),我們就可利用這個(gè)信號(hào),再加上一個(gè)非EPROM區(qū)的地址譯碼信號(hào),構(gòu)成一個(gè)選通信號(hào)來(lái)起動(dòng)一個(gè)空閑的中斷,再用軟件陷阱的方法從中斷程序中把程序?qū)胝?guī)。
3 看門狗技術(shù)
我們知道看門狗的作用就是防止程序發(fā)生死循環(huán),或者說(shuō)程序跑飛。硬件看門狗是利用了一個(gè)定時(shí)器,來(lái)監(jiān)控主程序的運(yùn)行,也就是說(shuō)在主程序的運(yùn)行過(guò)程中,我們要在定時(shí)時(shí)間到之前對(duì)定時(shí)器進(jìn)行復(fù)位如果出現(xiàn)死循環(huán),或者說(shuō)PC指針不能回來(lái)。那么定時(shí)時(shí)間到后就會(huì)使單片機(jī)復(fù)位。也就是說(shuō),單片機(jī)的看門狗電路要求用戶程序定期對(duì)一時(shí)間遞減計(jì)數(shù)器做刷新操作,應(yīng)用程序中應(yīng)使用單片機(jī)的實(shí)時(shí)中斷,在實(shí)時(shí)中斷服務(wù)子程序中定時(shí)刷新這個(gè)計(jì)數(shù)器。在應(yīng)用程序開發(fā)工作基本完成以后,要考慮打開看門狗電路,這是軟件方面的工作軟件上怎么做完全取決與應(yīng)用。
軟件看門狗技術(shù)的原理和看門狗電路技術(shù)差不多,只不過(guò)是用軟件的方法實(shí)現(xiàn),仍以51系列來(lái)講,在51單片機(jī)中有兩個(gè)定時(shí)器,我們就可以用這兩個(gè)定時(shí)器來(lái)對(duì)主程序的運(yùn)行進(jìn)行監(jiān)控。我們可以對(duì)T0設(shè)定一定的定時(shí)時(shí)間,當(dāng)產(chǎn)生定時(shí)中斷的時(shí)候?qū)σ粋€(gè)變量進(jìn)行賦值,而這個(gè)變量在主程序運(yùn)行的開始已經(jīng)有了一個(gè)初值,在這里我們要設(shè)定的定時(shí)值要小于主程序的運(yùn)行時(shí)間,這樣在主程序的尾部對(duì)變量的值進(jìn)行判斷,如果值發(fā)生了預(yù)期的變化,就說(shuō)明T0中斷正常,如果沒(méi)有發(fā)生變化則使程序復(fù)位。
對(duì)于T1我們用來(lái)監(jiān)控主程序的運(yùn)行,我們給T1設(shè)定一定的定時(shí)時(shí)間,在主程序中對(duì)其進(jìn)行復(fù)位,如果不能在一定的時(shí)間里對(duì)其進(jìn)行復(fù)位,T1的定時(shí)中斷就會(huì)使單片機(jī)復(fù)位。在這里T1的定時(shí)時(shí)間要設(shè)的大于主程序的運(yùn)行時(shí)間,給主程序留有一定的的裕量。而T1的中斷正常與否我們?cè)儆蒚0定時(shí)中斷子程序來(lái)監(jiān)視。這樣就夠程了一個(gè)循環(huán),T0監(jiān)視T1,T1監(jiān)視主程序,主程序又來(lái)監(jiān)視T0,從而保證系統(tǒng)的穩(wěn)定運(yùn)行。
另外,EFT技術(shù)(Electrical Fast Transient)也被廣泛運(yùn)用到抗噪領(lǐng)域里,它能夠使產(chǎn)生的毛刺被RC濾波和施密特電路處理掉,從而達(dá)到抗干擾的目的。當(dāng)然,單片機(jī)的開發(fā)應(yīng)用中的噪聲問(wèn)題一直都是存在的,這激勵(lì)廣大開發(fā)人員做更深入的鉆研和探索。
參考文獻(xiàn)
[1]羅余翔等 PCB板層布局與EMC .北京:安全與電磁兼容 2003(5)
[2]余永權(quán),曾碧,單片機(jī)模糊邏輯控制.北京:北京航空航天大學(xué)出版社,2003
[3]邵貝貝 Motorola DSP型16位單片機(jī)原理與實(shí)踐,北京,北京航空航天大學(xué)出版社,2003