工業現場中嵌入式系統抗干擾與容錯技術
一、引言
對于微機嵌入式應用系統,系統的可靠性是至關重要的,只有高可靠性才能保證系統正常運行。在工業現場,因工作環境惡劣,干擾源較多,對于那些需要作連續數據記錄的智能儀器對系統的可靠性要求更高,這類儀器的特點是:能夠根據用戶的要求選擇量程范圍,掉電時進行數據保護記錄,其中包括用戶設定的量程參數和累加記錄的數據結果等;而當系統上電恢復工作時又能將保存的數據準確的讀出,并在此基礎上繼續作累加記錄。但在上電或掉電階段,系統工作狀態往往不夠穩定,容易造成讀寫數據錯誤,需要在硬件和軟件設計上采取抗干擾和容錯措施。本文以智能電能表的抗干擾設計為例,根據電能表的工作環境特點,分析了影響電能表可靠性的因素,并針對影響其可靠性最為嚴重的供電系統干擾,提出了相應的抗干擾措施。
二、系統功能電路圖
圖1給出系統中與本文內容相關的功能電路圖,其功能是實現系統掉電時記錄數據保護,系統上電工作時恢復記錄數據。
圖1 系統功能圖
電路中包括一個單片機AT89C52,一個看門狗芯片MAX813,一個E2PROM存儲芯片AT24C02,一個電壓比較器A由LM393芯片構成,兩個反相器由74HC04芯片構成。兩反向器用于實現電壓匹配,以確保外部中斷信號電壓在0~5V。電壓比較器是在系統掉電時發出外部中斷信號,保證系統在停止工作前,將記錄在單片機內部RAM中的數據,保存到掉電保護芯片AT24C02中。圖中僅用了一片AT24C02,所以片選端A0、A1和A2接地。WP為寫保護輸入端即當其為高電平時具有寫保護功能,低電平時可進行正常的讀寫,SCL為串行時鐘輸入端,SDL為串行數據輸入輸出端。AT24C02是Atmel公司生產的,具有I2C總線接口的串行E2PROM。AT24C02自定時寫周期包括自動擦除時間不超過10ms,典型時間為5ms,擦寫次數一般為10萬次以上,寫人數據的有效保存時問一般可達100年,采用單一電源供電,電源電壓為5V。
三、影響系統正常工作的干擾因素
對于微機應用系統來說,工作環境中會遇到各種干擾,按竄入微機系統的渠道主要有三種:空間干擾,如電磁輻射;供電系統干擾,如電網的欠壓或過壓等;過程通道干擾,如測量通道中的干擾。其中供電系統的干擾最為嚴重。大部分微機嵌入式系統的直流電源都是通過市電經過整流、穩壓、濾波后提供的,然而電網電壓并非純凈的正弦波,其污染程度不容忽視。在工礦企業中,電網的污染主要來自各電氣設備的投切、故障跳閘和對地短路等原因。
對一機械制造廠車間電網的監測表明,平均2~3小時出現一次欠壓,最大欠壓約為40伏,最長時間達2秒,平均為0.3秒。平均5~6小時出現一次過壓,最大過壓為17伏,最大過壓時間為0.8秒,平均為0.2秒。
另外,除電網竄入的干擾外,電源電路本身也是一個干擾源,例如電源電路本身產生的紋波和自激振蕩,開關電源產生的尖鋒脈沖噪聲等。研究表明,浪涌與下陷幅度過大也會影響系統正常工作,如果有連續幾個±10%。±15%的浪涌或下陷,由此造成的振蕩能產生±30%~±40%的電源電壓變化,而使系統無法正常工作。
造成系統數據記錄錯誤的原因,主要集中在系統上電階段和系統工作階段電網電壓波動,即供電系統產生的干擾。因而本文針對供電系統產生的干擾,在系統硬件上和軟件上分別采用相應的抗干擾措施。
另外,對于記錄數據準確性要求極高的系統,為了保證記錄數據的準確可靠,防止系統在讀寫數據時造成的數據錯誤以及存儲器部分存儲單元損壞造成的記錄數據錯誤,還必須通過多次記錄的方法,即數據備份冗余來提高系統的容錯能力。
四、系統硬件抗干擾措施
對于具有掉電保護記錄功能的系統,必須提高供電系統供電質量,如使用各種穩壓器、電源調節器等措施消除電網噪聲影響。對于印刷電路板電感造成的供電電壓上升緩慢的影響,可采用給PCB板上的集成電路增加去耦電容方法來解決,電容容量一般取0.01μF~0.1μF。
為了有效地消除系統因電源電壓波動造成誤中斷的影響,在系統硬件電路上仍要采取相應的措施,解決由電網電壓波動造成的電壓比較器A的誤翻轉。為此,本系統電路中的電壓比較電路采用施密特電路結構,施密特電路的特點是抗干擾能力強,能夠有效地消除電路中各種噪聲和電壓波動的影響,使比較器輸出波形不因各種干擾的影響而出現無故的翻轉,從而減少因干擾而引起的誤中斷信號,保證整個系統的正常工作,也可減少AT24C02的誤擦寫次數,從而可以提高AT24C02的使用壽命,提高整個系統的可靠性。
五、系統軟件抗干擾措施
硬件上雖對電壓波動的干擾采取了一定措施,但對CPU與存儲器的工作狀態匹配,系統上電過程中產生外部誤中斷干擾及系統工作過程中的電壓波動的誤中斷的克服仍需采用軟件方法。軟件的抗干擾措施主要是針對兩個方面的干擾影響:一個是系統上電階段,系統工作不協調可能出現的數據讀寫錯誤;一個是系統工作過程中供電電壓波動干擾造成的誤中斷,而造成不必要的對AT24C02的寫操作。
對于智能累加性記錄儀器,剛開始工作時,必須讀出上次記錄結果,以及用戶所設定的一些量程和換算比例參數等。在系統上電過程中,存在兩種造成讀寫數據出錯的干擾。 1. 對供電電源上升緩慢干擾的克服
由于PCB板印制線條電感的影響,電源電壓上升緩慢,當CPU已正常工作時,電壓比較電路輸出仍為低電平,發出外部中斷信號。雖然AT24C02帶有寫保護端,但因系統工作不穩,如不采取必要的軟件處理措施,仍會使系統產生中斷響應,而誤改記錄結果,即將上電階段CPU的RAM中的隨機數寫入AT24C02。因此,必須在軟件上使CPU等待,只有當比較電路輸出電平為高后,才允許CPU讀外部存儲器中的數據,然后才可打開中斷,允許中斷。
2. 對系統各部分工作狀態不匹配干擾克服
系統上電過程中,還存在CPU和存儲器工作狀態的匹配問題,即在讀取數據前,必須先判斷外部存儲器是否已正常工作。因此,需測試AT24C02的工作狀態,即向存儲器中送入特征字,然后再讀出來,并判斷結果是否與送入的特征數據一樣,如相同,證明外部存儲器已正常工作,否則等待10ms,再送入特征字,直到讀出結果和寫入的數據相同,特征字可用55H(01010101B)或AAH(10101010B)。但由于AT24C02擦寫次數是有限的,為防止可能出現的惡性情況,當測試3次仍不正確的話,CPU進入死循環,在死循環中不訪問看門狗,超過一定時間后(大約1.6s,看門狗允許最大訪問時間間隔),看門狗發出復位信號,重新啟動CPU。系統啟動過程抗干擾程序實現流程圖如圖2所示。
當系統正常工作后,對于電網電壓欠壓造成的電壓波動,雖在硬件上采用了抗干擾措施,但當欠壓過大,仍會使電壓比較器誤翻轉,引起不必要的外部中斷。在軟件上仍需進行必要的處理,即在進入外部中斷響應后,程序需等待300ms,并判斷外部中斷信號是否仍為低電平,當外部中斷信號電平變高時,應結束中斷,返回正常工作;當300ms后仍為低電平,CPU才進行記錄數據保護記錄。300ms是根據電網的欠壓的平均值確定的。
六、系統的容錯措施
對于數據記錄準確性要求極高的微機系統,除了必要的抗干擾措施,還必須具有容錯能力。所謂的容錯,就是通過增加冗余資源的方法來掩蓋故障造成的影響,使得系統即使出錯或發生故障,其功能仍不受影響。對于數據記錄的容錯方法就是通過數據多次備份。本系統中采用了常用的三模冗余(Triple Modular Redundancy,TMR)方法,即對需要記錄的數據記錄三次,讀出時兩兩進行比較,以比較結果來決定記錄結果正確與否。只有當至少兩個記錄結果相同時,系統才能以此為基礎繼續累加記錄,否則發出出錯信號報警。通過多次記錄能有效地克服單次記錄可能造成的錯誤,并能有效地彌補因存儲器部分存儲單元物理介質損壞而造成的數據記錄結果破壞,有效地提高了系統的可靠性。
上述軟件抗干擾措施具體實現代碼如下:
wdi equ p3.4
wp equ p3.5
ORG 0000H
ljmp main
ORG 0003H
ljmp int0
ORG 0030H
Main:……
setb wp;AT24C02寫保護,禁止寫入,但可正常讀
wait0:cpl wdi;訪問看門狗
jnb p3.2,wait0;查看外部中斷電壓信號是否已變高
mov r1,#10;當外部中斷消失后再等l0ms
waita:mov r0,#250
wait1:cpl wdi
nop
djnz r0,waitl
jnb p3.2,wait0
djnz r1,waita
clr wp;取消寫保護
mov r0,#3
retry:mov a,#55H;正常后,檢查外部存儲器是否正常工作送人;特征字#55H
mov b.#XXH;#XXH為外部存儲器的一個存儲單元地址
lcall wrt24c02
mov a,#XXH
lcall rd24c02
cjne a,#55H,number
……;省略的為讀出記錄數據和結果比較程序
setb ea:開中斷進入主循環
limp loop
number:djnz r0,retry
waitrest:ajmp waitrest;等待看門狗復位,重啟
loop:……
……
ljmp loop
int0:push psw
push acc
mov r0,#100
intwait0:mov r1#250
intwaitl:cpl wdi;進人中斷后等待大約l00ms,以防止電;網波動造成的誤中斷
nop
djnz r1,intwaitl
djnz r0,intwait0
jb p3.2,noclose;當l00ms后中斷信號消失,結束中斷
mov r0,#ramaddreH;#ramaddreH為CPU中記錄數據的地址,有兩個字節
mov b,#rom24c02H;#rom24c02H為E2PROM中要寫入的單元地址
mov a,@r0
lcall wrt24e02
inc r0
mov a,@r0
mov b,#rom24c02H+1
lcall rt24c02
intwait:ajmp intwait;數據寫完以后,在此等待直到完全關機
noclose:pop acc
pop psw
reti
……
end
wrt24c02,rd24c02是寫和讀AT24C02子程序,由于AT89C52無I2c串行接口,所以是以軟件模擬12C串口。因篇幅有限,這里省略了有關讀寫程序。
需要說明的是,對于進入外部中斷int0后,在進行數據保存前,等待300ms,這一時間是根據電網欠壓平均時間確定的,但要確保外部電源下降到CPU停止工作前,即2.7V前,將要保存的數據可靠地寫入AT24C02中。本文中的電能表電能讀數的表示是用三個字節來表示的,并且每一個數據要保存三次,共需寫入9個字節,每個字節寫操作需5ms,共要45ms,考慮可能出現最長的寫入時間,故選擇總寫入時間為100ms。因而需要選擇合適的分壓電阻R6和R8或穩壓二極管z來確保電壓比較器的翻轉時機,用以保證系統在掉電時響應外部中斷到停止工作前,有0.4s的時間間隔,確保將要保存的數據可靠地寫入存儲器,又盡可能地減少因誤中斷造成的不必要的數據擦寫。
七、結束語
實際應用結果表明,采用上述的硬件和軟件兩方面的抗干擾設計方法及數據冗余措施,大大地提高系統的可靠性和容錯性,有效地克服了各種干擾因素造成記錄數據出錯的可能性,保證存儲數據的準確性,提高了產品在工業現場適應性。因而,對于智能記錄儀器的數據記錄來說,這一硬件和軟件相結合的抗干擾設計方法和容錯技術是有效的,可行的。
文章版權歸西部工控xbgk所有,未經許可不得轉載。