通過一個(gè)儀器抗干擾處理的實(shí)踐,,分析干擾形成錯(cuò)誤的機(jī)理,。首先對干擾進(jìn)行描述,,然后分析錯(cuò)誤形成的可能性以及目前解決干擾問題的難點(diǎn),,最后提出對MCU改進(jìn)的建議。
關(guān)鍵詞 抗干擾 容錯(cuò) Watchdog
長久以來,,計(jì)算機(jī)系統(tǒng)的抗干擾一直是人們關(guān)心的重要問題,,因?yàn)橛?jì)算機(jī)用得越來越廣,,可靠性越來越重要,而抗干擾本身就是可靠性的重要組成部分,。為了汽車,、飛機(jī)、衛(wèi)星,、反應(yīng)堆的安全,,人們在抗干擾問題上花費(fèi)了大量精力與金錢,盡管已經(jīng)取得了長足的進(jìn)展,,但在性價(jià)比上遠(yuǎn)不能滿足要求,,以致高抗干擾的要求只是在高技術(shù)領(lǐng)域才加以考慮。本文討論了干擾對錯(cuò)誤的形成機(jī)制,,提出了對MCU改進(jìn)的建議,。這個(gè)建議如果實(shí)施,不僅有利于高技術(shù)領(lǐng)域的應(yīng)用,,也會(huì)惠及一般的民用領(lǐng)域,。
1 干擾源的討論
很久以前,還在“8031+2764+14433”的年代,,我們做了一批過程監(jiān)控儀表,用于滅菌過程F0的監(jiān)控,,遇到了強(qiáng)烈的干擾問題。滅菌過程約30 min,,由電觸點(diǎn)壓力表控制進(jìn)氣電磁閥,間接控制溫度,。F0是一個(gè)溫度函數(shù)的積分值,,可以反映滅菌的效果,,它綜合考慮了溫度波動(dòng)的影響。當(dāng)時(shí)采取了一些抗干擾措施,,例如,,硬件上對信號線屏蔽,,信號濾波;軟件上的智能濾波,,程序復(fù)執(zhí),,程序分段保護(hù),數(shù)據(jù)后備,,端口等重復(fù)初始化,,ROM的定時(shí)校驗(yàn)和檢驗(yàn),多種出錯(cuò)報(bào)警,,出錯(cuò)時(shí)重新熱啟動(dòng)(可使問題有所緩和,但偶然會(huì)有判為ROM校驗(yàn)和錯(cuò)而停機(jī)的情況出現(xiàn)),。由于當(dāng)時(shí)F0只是用作參考,,問題尚不嚴(yán)重,如要掩蓋,,也可以用熱啟動(dòng)代替停機(jī),;但很快F0要作為產(chǎn)品工藝參數(shù),,用記錄紙備案,,于是就重新設(shè)計(jì)了監(jiān)控儀,。新的監(jiān)控儀用89C51+14433,再加上光耦和TI5617 D/A轉(zhuǎn)換器,將溫度和F0變?yōu)槟M量后送到雙筆記錄儀,,實(shí)現(xiàn)產(chǎn)品工藝過程的記錄與存檔。硬件上,光耦隔離后部分是D/A和模擬電路,,軟件在原有基礎(chǔ)上添加與TI5617有關(guān)的串行通信部分,。TI5617的串行通信類似I2C,,由CS,、DIN和SCLK三條線構(gòu)成,SCLK數(shù)據(jù)位時(shí)鐘可達(dá)到25 ns,,速度很高。用于計(jì)算的周期是6 s,儀表用定點(diǎn)算法配以查表,,所以留出了充足的時(shí)間做許多抗干擾的工作,。在D/A用的串行通信中甚至考慮了多次重復(fù)發(fā)送的子程序,,希望減少通信錯(cuò)誤的影響,;但結(jié)果卻很壞,記錄紙上是一片墨帶,。由于不知道通信對錯(cuò),,很可能最后一次傳送就是錯(cuò)的,于是不得不重新處理抗干擾問題,。
經(jīng)查干擾主要發(fā)生在電磁閥動(dòng)作的時(shí)候,,由于不可能在現(xiàn)場為每一個(gè)簡單的小表制作一個(gè)良好的地線,一般的市售電源濾波器件根本不起作用?,F(xiàn)場用的是220 V交流電磁閥,,無法設(shè)計(jì)緩沖線路。分析認(rèn)為,,電磁閥斷開時(shí)會(huì)在電源上產(chǎn)生很大的反向電壓,。交流電源的示波器受到干擾,在無法看清干擾的情況下,,就用數(shù)字萬用表觀察,可以觀察到1 300 V以上的讀數(shù),??紤]到數(shù)字萬用表輸入的濾波效果,真正的峰值還要大,,因此推想,,高頻的干擾穿越了變壓器繞組間電容,造成變壓器次級交流電壓瞬間反向,。盡管反向波幅的衰減很大,,但因方向已改變,整流二極管來不及響應(yīng),,已不供電,,而濾波的電解電容器動(dòng)態(tài)上來不及反應(yīng),也不供電,,造成穩(wěn)壓前直流電源瞬間下降,。同時(shí)它通過整流二極管,78L15,、78L05等低頻器件到達(dá)二組隔離的電源,,造成直流電源跌落。循此思路,,發(fā)現(xiàn)TI5617的SCLK可能出現(xiàn)不正確的時(shí)鐘信號,,造成數(shù)據(jù)傳送的錯(cuò)誤。TI5617的讀數(shù)發(fā)生在SCLK的下降沿,,說明書上強(qiáng)調(diào),,在非傳送時(shí)減少饋通應(yīng)使SCLK=LOW,為節(jié)省電流消耗,,SCLK是從光耦的基極輸出的,。因此若光耦次級電源跌落,確實(shí)會(huì)造成SCLK下降而誤讀,。然后我們在基極電阻(20 kΩ)上并聯(lián)0.1 μF電容,,在光耦次級電源上串接高頻二極管,以防0.1 μF電容器通過光耦反向放電。采取此措施后,,記錄曲線不再有墨帶,。對本應(yīng)用而言,干擾問題初步解決,,但仍不徹底,。干擾得到解決本身證實(shí)了分析是正確的——來自電源的干擾有可能進(jìn)到直流電源部分。
國際標(biāo)準(zhǔn)ISO 7637是針對汽車電子領(lǐng)域電源的傳導(dǎo)干擾問題的,。它規(guī)定有#1,、#2a/b、#3a/b,、#4,、#5a/b等多種測試波形,反映實(shí)際應(yīng)用中會(huì)遇到的情形,。其中,,關(guān)斷感性負(fù)載(例如雨刮器的馬達(dá))引起的電壓升高,在12 V系統(tǒng)中可達(dá)50 V,,雖有瞬間超過元器件耐壓而引起損傷的可能性,,但不會(huì)直接引起誤動(dòng)作。而在波形#1中,,關(guān)斷感性負(fù)載(例如電動(dòng)座椅的馬達(dá)和座椅的加熱系統(tǒng))產(chǎn)生的脈沖,,在電源為12 V的系統(tǒng)中1 μs可達(dá)到-100 V,衰減到10%的時(shí)間為2 ms,。在波形#3a中,,電源為12 V的系統(tǒng)里5 ns可達(dá)到-138 V,回到0 V的時(shí)間大約為100 ns。這些是典型數(shù)據(jù),,實(shí)際上電源線不是匹配的傳輸線,,干擾波還要來回反射,情況更為復(fù)雜,。在這些場合,,也可能發(fā)生直流電源的跌落干擾。
空間的幅射干擾也是經(jīng)常遇到的問題,,例如在太空或反應(yīng)堆附近,,電子器件會(huì)受到重離子的轟擊而產(chǎn)生故障;又如在空港區(qū)或大電流,、高電壓區(qū)域,,電子器件也會(huì)受到強(qiáng)電磁輻射而發(fā)生故障。在這些場合,,干擾也會(huì)引起MCU的基本門電路工作失誤,。
2 Watchdog不能解決軟件可靠性問題
Vcc的跌落會(huì)引起MCU的誤動(dòng)作,。MCU里每一個(gè)讀/寫操作都是由門電路實(shí)現(xiàn)的,門的開關(guān)依賴于門的閾值和信號的時(shí)序,。電源跌落時(shí)閾值發(fā)生變化,,振蕩器產(chǎn)生的信號時(shí)序也會(huì)變形。下面以8051單片機(jī)為例,,考察如果干擾發(fā)生在執(zhí)行指令“MOV dir1, dir2”時(shí)會(huì)產(chǎn)生什么后果,。假定錯(cuò)誤發(fā)生在指令的第1字節(jié),最壞的情形是每個(gè)bit都反轉(zhuǎn),,而最大的概率是只有一個(gè)bit發(fā)生反轉(zhuǎn),。一個(gè)bit發(fā)生反轉(zhuǎn)的情況如表1所列,。
表1
從表1可見,,一個(gè)bit的變化完全改變了指令的意義,程序流或數(shù)據(jù)產(chǎn)生不可預(yù)測的變化,。例如,,表中的跳轉(zhuǎn)部分(bit 0, 2或5發(fā)生變化)可能不轉(zhuǎn)入死循環(huán),不引起Watchdog動(dòng)作,,也有可能跳到非正常指令處,,直至死循環(huán)。表中非跳轉(zhuǎn)指令則有可能改變累加器(bit 0, 1, 3, 4,,6或7發(fā)生變化),,數(shù)據(jù)RAM(bit 1,3, 6或7發(fā)生變化)或狀態(tài)寄存器(bit 0, 1, 3, 4,6或7發(fā)生變化)。如果錯(cuò)誤發(fā)生在指令的第2或第3字節(jié),,數(shù)據(jù)的源或目的地址就錯(cuò)了,。因此,即使Watchdog沒動(dòng)作,,也不表示程序運(yùn)行正常,。對8051其他指令作分析可得到類似的結(jié)果。由此可見,,Watchdog至多保證系統(tǒng)不死機(jī),,卻有可能掩蓋了數(shù)據(jù)的錯(cuò)誤。
F0設(shè)計(jì)中,,在關(guān)鍵點(diǎn)大量采用了“MOV dir1,tmp”,,“MOV tmp, dir2”的形式將數(shù)據(jù)從dir1送到dir2,而不采用“MOV A,@R1”類指令,,以減小對原始數(shù)據(jù)破壞的可能性,,從而為程序復(fù)執(zhí)創(chuàng)造條件。例如在備份數(shù)據(jù)Treh到Tbkh時(shí),,先將Treh送tmp1,,然后將數(shù)據(jù)由tmp1送到備份Tbkh,,再校驗(yàn)Tbkh與Treh是否一樣。若不一樣,,就重作備份,。采用的部分程序如下:
MOVtmp1, Tbkh85 53 19
MOVA, tmp1E5 19
XRLA, Treh65 4C
JNZtbkp70 F1
其中“MOV A, tmp1”仍有破壞tmp1的可能性,但tmp1是Treh的拷貝,,壞了可重做,;“XRL A, Treh”有可能破壞Treh,但已無法作其他選擇,。
在硬件抗干擾方面,,有許多專用的電源監(jiān)控芯片,如TL7705等,,但是它們只適合在較慢的電源擾動(dòng)下使用,。對于直流電源的跌落干擾,MCU根本來不及作現(xiàn)場的保護(hù)工作,,所以它不是解決快速干擾問題的辦法,。
在F0中使用的辦法也不盡完善,一般單片機(jī)線路中還有很多外圍線路,,例如F0中的光耦,,3個(gè)光耦同時(shí)導(dǎo)通時(shí)要消耗約50 mA的電流,它們形成的動(dòng)態(tài)電阻很小,,發(fā)生電源跌落時(shí),,并聯(lián)于MCU的解耦電容對此電阻放電,無法保證MCU正常工作的額定電壓,。如在MCU電源中串接高頻二極管,,就會(huì)引起額外的電源消耗,在低功耗的應(yīng)用中也會(huì)形成新的缺點(diǎn),。有些功能強(qiáng)大的MCU本身功耗就大,,容許的電源變化范圍小,能否依靠解耦電容對抗電源跌落還需要檢驗(yàn),。綜上所述,,軟件解決辦法不徹底,硬件解決辦法也有很多缺點(diǎn)與限制,。
3 MCU要增加的功能
由于干擾而使指令出錯(cuò)的問題不是Watchdog能解決的,,特別是造成源數(shù)據(jù)錯(cuò)時(shí),程序復(fù)執(zhí)也不能糾正錯(cuò)誤的結(jié)果,。程序設(shè)計(jì)者要在現(xiàn)成的指令體系中找到對源數(shù)據(jù)危害性概率最小的指令不容易,。即使找到,也不能保證指令在有多bit跳變時(shí)源數(shù)據(jù)不錯(cuò),。另外,,有些指令錯(cuò)誤也可能破壞其他處的數(shù)據(jù),。利用破壞數(shù)據(jù)概率最小的指令設(shè)計(jì)程序也不是好辦法,它既耗ROM空間,,又費(fèi)運(yùn)行時(shí)間,。
增大指令的Hamming距離可以改善這一情況。例如,,給指令增加一到數(shù)位校驗(yàn)位,,一旦指令通不過校驗(yàn),就不執(zhí)行,,并重新取指,。這樣,問題就有可能在產(chǎn)生后果前解決,。就目前MCU的設(shè)計(jì)與生產(chǎn)水平而言,,在技術(shù)與成本上這種增加不會(huì)有很大困難。雖然這一辦法在添加的校驗(yàn)位有限時(shí)仍會(huì)有一定出錯(cuò)概率,,但這種概率可以小到能接受的程度,。
為了更為可靠,作校驗(yàn)的線路可有某種冗余,。連續(xù)重取指可能反映有其他故障,應(yīng)通過某種方式通知應(yīng)用層,。為了不打擾程序設(shè)計(jì)者,,這些指令的添加位應(yīng)該在寫入ROM時(shí)自動(dòng)生成,這樣就不會(huì)產(chǎn)生與現(xiàn)有產(chǎn)品的兼容性問題,。
在早期的MCU應(yīng)用中,,Watchdog是外置的,后來都集成到MCU里面去了,。如果實(shí)現(xiàn)上述功能,,MCU的抗干擾能力會(huì)更強(qiáng),Watchdog可能就不需要了,。軟件的可靠性分析就可以將程序走飛和數(shù)據(jù)的完整性問題分割出來加以處理,,軟件部分更專注于邏輯分析,意義深遠(yuǎn),。