微處理器是電磁流量計的核心單元, 控制整個系統(tǒng)的運行。當單片機應用系統(tǒng)的 CPU 受到干擾時, 可能造成的影響有: 非正常修改程序計數(shù)器指針; 改寫可編程輸出端口狀態(tài); 非正常修改數(shù)據(jù)區(qū)的數(shù)據(jù)等。以上不良影響會使單片機程序失控, 其后果是非常嚴重的。結(jié)合智能電磁流量計的工作特點和 MSP430系列單片機的特性, 采用軟件與硬件抗干擾技術(shù)相結(jié)合, 提高系統(tǒng)運行的穩(wěn)定性。
1 硬件抗干擾
由于軟件抗干擾措施是以犧牲 CPU 效率為代價的, 如果沒有硬件消除絕大多數(shù)干擾, CPU 將疲于奔命, 無暇顧及正常工作, 嚴重影響系統(tǒng)的工作效率和實時性。電磁流量計輸出單元一般包括 4~ 20 mA 電流輸出, 集電極開路的頻率輸出以及工業(yè)現(xiàn)場總線接口等, 在輸入和輸出通道上采用光電隔離器來進行信息傳輸是很有好處的, 它將微機系統(tǒng)與各種傳感器、 開關(guān)、 執(zhí)行機構(gòu)從電氣上隔離開來, 很大一部分干擾將被阻擋。M SP430單片機與外圍設(shè)備, 如模數(shù)轉(zhuǎn)換器、 EEP -ROM 等采用總線通信方式。當信號同時切換時會引起 /地彈 0和串擾。在電路板布線時, 總線盡量使用地線包圍, 電路采用多點接地方式。同時總線采用上拉電阻方式, 可以提高邏輯電路噪聲容限, 使總線通信更加可靠。M SP430的通用端口可以設(shè)置為輸入和輸出兩種狀態(tài), 對于沒有使用的端口, 全部設(shè)置為輸出狀態(tài), 防止 CPU受到意外干擾。此外 XT 2OUT 、 X OUT 、 VREF+ 空置; X I N 、 AV CC 接數(shù)字電源端; XT 2IN 、 VREF-、 VREF+ 接數(shù)字地。
2 睡眠狀態(tài)抗干擾
電磁流量計中微處理器很多情況下是在執(zhí)行等待指令和循環(huán)檢查程序, 這時 CPU 沒有工作, 但卻是清醒的, 很容易受干擾。MSP430系列單片機提供了多種睡眠狀態(tài), 讓 CPU在沒有正常工作時休眠, 必要時再由中斷系統(tǒng)來喚醒它, 之后恢復休眠狀態(tài),從而使 CPU受到隨機干擾的威脅大大降低, 同時降低了 CPU的功耗。
3 指令冗余與軟件陷阱技術(shù)
程序正常運行時, 指令計數(shù)器始終指向下一條指令的第一個字節(jié), 當單片機受到干擾時, 可能引起程序計數(shù)器的非正常修改, 將操作數(shù)當作指令碼執(zhí)行, 造成程序誤操作。M SP430單片機采用 RISC指令內(nèi)核, 指令字有單字節(jié)、 雙字節(jié)和三字節(jié)指令三種, 在雙字節(jié)和三字節(jié)指令后插入兩條單字節(jié)指令, 程序失控時也可以迅速進入預期控制軌道。
綜合考慮 CPU 效率和抗干擾能力, 在對程序流向起關(guān)鍵作用的指令處, 如跳轉(zhuǎn)指令、 中斷恢復指令等, 插入兩條 / NOP0單字節(jié)空操作指令, 以保證 /跑飛 0的程序迅速納入正確的控制軌道。為了防止單片機輸出口狀態(tài)被意外修改, 定期重新定義輸出口狀態(tài)。M SP430單片機內(nèi)部集成很多外圍設(shè)備, 如 UART、 SPI串口、 定時計數(shù)器等, 為了防止這些設(shè)備的相應控制寄存器被意外修改, 每次使用時都需重新設(shè)置。指令冗余使 /跑飛 0的程序安定下來是有前提條件的: 程序計算器必須指向程序區(qū)。當程序計數(shù)器落到非程序區(qū), 如 ROM 中未使用的空間、 中斷向量表、 數(shù)據(jù)區(qū), 則冗余指令失效。
采取額外措施就是設(shè)立軟件陷阱。所謂軟件陷阱, 就是一條引導指令, 強行將捕獲的程序引向?qū)Τ绦虺鲥e進行處理的程序, 一般安排在未使用的中斷向量、 未使用的 ROM 等。M SP430單片機具有多個中斷發(fā)生源。正常工作時, 執(zhí)行完中斷服務程序后, 相應的中斷標志位會被硬件自動復位; 當單片機受到干擾, 運行異常時, 可能會觸發(fā)沒有使用的中斷, 導致系統(tǒng)不能正常工作, 因此在未被使用的中斷向量處插入冗余指令, 使中斷自動返回, 如: / NOP NOP RETI0。
對于沒有使用的 ROM, 程序燒錄器默認寫入字0xfff,f該字對于指令系統(tǒng)是一條指令, 這條指令會修改單片機內(nèi)部寄存器值; 如果程序 /跑飛 0進入這段 ROM中, 可能造成數(shù)據(jù)運算錯誤, 因此在未使用的 ROM 中寫入代碼, 使程序跳轉(zhuǎn)到出錯處理程序。