提升電磁兼容性的軟件策略:EMC不只是硬件工程師的鍋

關注、星標嵌入式客棧,加羣請添加作者微信

[導讀] EMC( Electromagnetic Compatibility) 電磁兼容性對於一個產品而言是一個非常重要的性能指標,一個產品遇到EMC的坑,很多測試很難通過,很多軟件同學可能會覺得EMC更多的是硬件攻城師要去應對的難題,與軟件沒毛關係。

個人認爲這是一個不正確的認知,應該說EMC是一個系統性的綜合性能指標。它與硬件設計、軟件設計、機械結構設計都息息相關。本文就從軟件編程的角度來分享一下個人的一些看法。

EMC是什麼鬼?

電磁兼容性(EMC)是通過限制無意間產生傳播接收電磁能量的電氣設備和系統在其電磁環境中正常工作的能力。這些電磁能量可能會導致不必要的影響,例如電磁干擾(EMI:Electromagnetic Interference)甚至物理損壞、 設備功能異常、功能安全、人身財產安全等。

有這麼嚴重嗎?舉個極端的例子,比如一個病人身上植入了心臟起搏器,他走到一個強幹擾的環境中,外界的電磁干擾通過空間電磁波方式耦合進了心臟起搏器,心臟起搏器沒扛住,然後就悲劇了。那麼這樣一個案例,就可以一體兩面的來分析,干擾源從何而來?起搏器爲啥沒扛住?干擾咋進去的呢?.....

EMC研究三類主要問題:

  • 能量來源:通過某種來源產生的電磁能,無論是有意還是無意的,都會釋放到環境中。EMC研究了無用發射以及爲減少無用發射而可能採取的對策。

  • 抗干擾能力,它是指在遭受有害輻射(稱爲射頻干擾(RFI))的情況下,受干擾的電氣設備應對干擾避免或降低發生故障或損壞的能力。

  • 耦合路徑:干擾如何進入被幹擾設備的機制/途徑。

常見的EMC測試有哪些呢?

  • 抗擾度測試:將干擾注入設備,檢測設備表現是否正常,比如常規的靜電抗擾度測試、脈衝羣抗擾度、雷擊浪湧,輻射抗擾度等等

  • 傳導輻射測試:測試設備對外部釋放干擾的水平,設備應控制在一定的水準,否則測試將不通過。比如電源線傳導測試、電磁波輻射測試等等,具體測試標準,這裏就不一一列舉了,有興趣可以自行搜索查詢。

有哪些電磁失效可能?

由於EMC干擾的注入,對於一個電子系統而言,可能會引起哪些功能失效呢?

  • 系統死機無響應:怎麼會呢?比如因爲干擾原因,軟件採集的一個錯誤的輸入值,導致進入了死鎖。

  • PC指針失控,軟件跑飛。

  • 執行意外指令

  • 錯誤的地址指向,數據損壞或丟失

  • 子例程執行錯誤

  • 設備重啓和/或外部異常中斷

  • I/O表現異常,比如顯示屏花屏,按鍵功能失效,繼電器亂動,模數採樣噪聲增加,數模輸出異常

  • .......

哪些軟件對策可考慮?來看一看我的一些體會,供大家參考。

看門狗技術

對於系統死機、PC指針失控、軟件跑飛等等,可採用看門狗技術進行預防,即使出現了四級,由於看門狗技術,系統仍然能恢復正常,很多EMC測試等級,設備在干擾情況下,只要能恢復正常,都是可以接受的。爲什麼可以接受,因爲這是具有現實應用價值的。具體可以採用什麼樣的餵狗策略呢?有興趣的可以閱讀之前的推文(點擊即可閱讀):

這裏特別說下,爲什麼有序列檢測(sequence check)技術的出現了。這也是需求驅動的,需求驅動技術發展

數據冗餘技術

數據在EMC場景下遭受磨壞,如果內部沒有恢復機制,設備可能出現意想不到的表現。尤其在功能安全性要求很高行業,比如航空、醫療、汽車、工業等環境下。電子設備編程都會採用數據備份策略,對於關鍵安全功能鏈的內存數據都會強制要求採用備份數據機制。英文叫duplicate ,比如在IEC61508中就有強制要求。具體怎麼實現呢?

將關鍵功能對應的運行時參數(在內存中的全局變量),都做一個備份。並利用鏈接綁定技術,將這些參數存儲在兩片連續的內存區中。在寫某個參數時,同時也寫備份參數。然後在一個後臺中去檢查兩塊區域是否相等,如果不相等則可能發生了致命的錯誤,可以採集故障報警或者設備重啓的策略。

管理未使用的中斷

對於單片機/DSP系統而言,如果很多中斷異常並未使用,一方面應將中斷控制寄存器對應的使能開關關閉,另一方面也應將中斷處理接口顯式給出,這樣相對就比較安全。一個可以考慮的策略如下:

void exception_isr(void)
{
    /*將異常中斷記錄或者如有可能顯示*/
    record_exception_isr();
    /*讓程序一直在這裏死循環,通過看門狗讓系統自動重啓*/
    while(1);
}

在可能的情況下將出現這種異常中斷記錄並顯示,同時進入死循環,利用前面說的看門狗技術讓系統重啓,或者進入設備安全狀態。

謹慎IO策略

爲啥干擾會注入,下圖就是一個直觀的例子,干擾最終會在數字系統中引起輸入脈衝,這是異常行爲:

輸入通道:包括開關量輸入,模數採樣輸入,可以採用濾波策略。比如開關量輸入在既有的硬件輸入濾波措施的基礎上,可以採用諸如多次檢測去抖動策略。如

/*描述一下思路*/
#define FILTER_TIMES  6
#define SAMPLE_TIMES  10
#define GET_IO_BIT(X)  PA##X /*硬件體系不同,具體實現修改*/
bool read_io()
{
    uint8 counter = 0;
    for(int i=0;i<SAMPLE_TIMES;i++)
        counter += GET_IO_BIT(0);
    /*大於門限佔比則認爲是高電平狀態*/
    if(counter>=FILTER_TIMES)
        return true;
    else
        return false;
}

這裏僅僅描述一個思路,具體實現時,還需要考慮多次採樣,中間是否需要加延時,你可以看成對開關量調整其採樣率,進而做出合理判斷。如果只讀一次,則在干擾注入時,非常容易讀取錯誤的信息。

對於一個模數採樣而言,可以利用數字濾波器技術濾除噪聲,消除噪聲對系統的影響,在一些資源相對有限的系統,推薦使用一階數字濾波器或者移動均值濾波器去處理。當然使用時需要合理選擇截至頻率,防止將真實有用信號頻率幹掉,導致正常功能也無法使用。

具體可以參考下面的文章,點擊即可閱讀:

輸出通道:比如顯示輸出,比如LCD顯示屏,可以增加刷新率,這樣即使在某個瞬態設備被幹擾了,由於刷新及時,那麼外在顯示就不會出現。人眼就可能無法識別,當然這是一個健壯措施。如果遇到這樣的問題,還是建議從硬件上儘量將干擾切斷或者降低注入的程度。對於電壓模數輸出,在可能的情況下,可以嘗試採用工業4-20mA的標準,去傳遞信息。4-20mA標準在抗干擾方面性能優異。

掉電檢測存儲技術

一個電子系統的供電最容易被幹擾,因此可以結合硬件設計一個掉電檢測及短時板級UPS電路,檢測出系統單片機/DSP供電被幹擾到可能將要重啓時,電路將備用供電切上,同時將關鍵運行時參數馬上存儲在非易失介質中(比如EEPROM/FRAM),如果系統真的無法抵抗干擾導致設備重啓,在系統上電時,檢測重啓原因以及數據,如果識別出是由於短時掉電重啓的,將介質中數據導入,恢復現場,系統繼續執行。

健壯的通信協議設計

電子系統或多或少都需要與其他設備進行通信,那麼設計一個健壯的通信協議也是提高抗干擾措施的一個重要手段,比如增加CRC報文完整性檢查,增加錯誤重傳機制,通信故障檢測機制等等。

總結一下

電磁兼容是系統健壯性的一個重要方面,電磁兼容是一個系統性衡量指標,它絕不是硬件攻城獅一個人的鍋,作爲軟件攻城獅(PCB佈局布板、器件選擇、電路參數設計、抗干擾器件等等)、機械工程師(比如加強屏蔽、設計吸波材料、結構尺寸、佈局佈線等等)都應該從各自的角度提出技術應對策略,來提升電子電氣系統的工作穩定性,電磁兼容性水平。大家都被這個大鍋妥妥的罩着,誰也別想獨善其身~~~~

本文就這幾個比較常用的技術應對措施,描述了一些方法措施,實際上這方面的對策遠不止這些,有興趣的可以深入研究,只是想表達一個觀點:做研發,不要只做一個能用的產品,還要爭取做一個穩定可靠的產品。編程也是如此,不要僅僅實現系統功能,還要努力實現一個魯棒健壯的系統!大家共勉!!

寫本文的過程中,找到一份個人覺得比較好的EMC基礎PPT《emc design fundamentals》,如有興趣,關注後臺回覆EMC可領取。

本文原創分享,如真心喜歡請留言、再看、轉發三連支持走一波~~~  哈哈哈,如需學習資料,可關注公衆號,後臺發送"領取“,即可免費獲取海量學習資料。

END

往期精彩推薦,點擊即可閱讀

▲Linux內核中I2C總線及設備長啥樣? 

手把手教系列之梳狀濾波器設計實現

手把手教系列之IIR數字濾波器設計實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章