為何會出現CAN波形解碼和報文解碼不一致的現象?

摘要:使用CANScope測量CAN總線信號,在干擾很嚴重的情況下會出現CAN總線波形解碼與CAN報文解碼不一致的情況,具體表現為某些正確報文對應的波形解碼卻是錯誤的,或者收到的錯誤報文對應的波形解碼卻是正確的,如圖1中,幀ID為0x721的正確報文對應的波形解碼卻為CRC錯誤。本文將對這種現象產生的原因及其存在的意義進行詳細的說明。

為何會出現CAN波形解碼和報文解碼不一致的現象?

圖1 報文解碼與波形解碼不一致

一、解碼差異錯誤的主要原因

CANScope對CAN信號的處理包含2部分:報文處理部分和波形處理部分。報文處理部分通過CAN收發器將總線上的CANH和CANL差分信號轉成單端的數字信號RXD,再使用專用的CAN控制器接收RXD信號並進行CAN協議解碼,最後將解碼後的報文進行接收存儲;波形處理部分通過信號調理電路將CAN總線信號進行隔離等必要的處理後通過ADC電路將模擬信號數字化後順序保存,完成對波形信號的採集。

為何會出現CAN波形解碼和報文解碼不一致的現象?

圖2 CAN總線信號處理

如圖2所示,報文處理和波形處理兩部分的電路和控制是完全獨立的,CAN信號經過這兩部分電路之後會有所差異,主要的不同在於:1、經過收發器之後的信號延時和經過信號調理電路的延時不同,但這個不同對解碼的影響比較小,本文不做討論;2、CAN收發器內部有遲滯比較器,具有相當於低通濾波器的功能,能通過的信號帶寬不高,而波形採集由於需要觀測高頻干擾等信號,要求信號調理電路的帶寬比較高,所以帶寬的差異對後續解碼的差異影響比較大。

如圖3所示,帶有高頻尖脈衝干擾信號的總線信號CANH和CANL,在經過低帶寬的收發器後,其攜帶的干擾信號被濾除(輸出的RXD信號是無干擾的數字信號);而同樣的CANH和CANL信號,在經過高帶寬的信號調理電路後,其攜帶的干擾信號依然保留(波形採集模塊採集到有干擾的CANH和CANL信號後,經過軟件差分後,得到的差分信號依然存在干擾,所以軟件轉換後的邏輯信號依然存在干擾)。

為何會出現CAN波形解碼和報文解碼不一致的現象?

圖3 波形差異

根據以上分析,干擾信號的存在使得後續的CAN波形解碼會出現與報文解碼不同的情況。我們繼續往下深究:是否有干擾信號就一定會導致波形解碼與報文解碼不同呢?其實也不然,這還得從CAN總線的採樣規則說起。

二、CAN總線採樣規則

CAN控制器先將高頻時鐘進行預分頻,生成較低頻率的時鐘信號,這個時鐘信號的週期定義為1個時間份額,1位CAN信號的碼元寬度包含有數倍的時間份額,如控制器時鐘頻率為16MHz,預分頻為8MHz的時鐘,則1個時間份額為125ns,對於1M波特率的CAN信號,1位CAN信號的碼元寬度即為8個時間份額。

以1個時間份額為最小單位,將1位CAN信號碼元分為3段:同步段、相位段1、相位段2。同步段固定為1個時間份額,相位段1和相位段2可設置成不同參數,控制器在相位段1和相位段2之間對CAN總線進行採樣。

為何會出現CAN波形解碼和報文解碼不一致的現象?

圖4 採樣點位置

當干擾信號出現的位置不在採樣點位置時,解碼是不會因為被幹擾而出現錯誤的,只有當干擾信號剛好位於採樣位置時,解碼才會因為干擾而出現錯誤。

為何會出現CAN波形解碼和報文解碼不一致的現象?

圖5 干擾位置

CAN總線通常工作在比較惡劣的環境中,常常有干擾信號的存在,CAN總線組網時為了保證解碼的一致性,要求所有節點的採樣點位置設置應該一致。CANScope中的報文處理和波形處理兩部分電路可看成2個CAN節點,CANScope的波形解碼的採樣點位置設置是跟報文解碼的採樣點位置保持一致的,然而,當高頻干擾信號出現在採樣點位置時,即使是在相同採樣點位置進行採樣,因為波形處理和報文處理電路的帶寬差異,還是有較大概率出現波形解碼和報文解碼不一致的現象。

三、軟件邏輯濾波

CANScope採用軟件濾波的方式,即對採集到的CAN總線模擬波形信號經過軟件差分和邏輯化後的數字信號進行軟件濾波,濾波後允許通過的信號帶寬隨著波特率的不同而不同,波特率越小,濾波後允許的信號帶寬越小;通過這樣的濾波處理,最大程度提高了對干擾信號的容忍度,甚至在報文解碼出現錯誤的情況下仍然能對波形做出正確的解碼。這樣,在干擾很嚴重的情況下就可能會出現文章開頭所說的報文解碼正確而波形解碼錯誤或者報文解碼錯誤而波形解碼正確的現象。

四、解碼差異存在的意義

使用過CAN卡的人可能會有這樣一個印象:在使用CAN卡的過程中,幾乎遇不到有些節點收到正確報文而有些節點收到錯誤報文的現象,因為只要一個節點(處於錯誤主動狀態的節點)收到錯誤報文,其它所有節點都會收到錯誤報文,最多就是錯誤的類型不同而已。這一點跟CANScope的報文解碼和波形解碼的差異現象是不同的,那這又是何原因呢?這是因為正常的CAN網絡中,當某個節點解碼到有錯誤時,會向總線發出錯誤幀破壞當前報文,從而導致所有節點都接收到錯誤報文。與之不同的是,CANScope作為測量設備,只對CAN總線進行監聽和採集,不影響CAN總線,將總線上的波形細節(包括波形細節導致的解碼差異)儘可能地展示出來,這正是解碼差異存在的意義。

為何會出現CAN波形解碼和報文解碼不一致的現象?

圖6 解碼錯誤不影響總線

如圖6所示,CAN總線被嚴重干擾,CANScope的報文解碼出錯,但這時CANScope並不會向總線發出錯誤幀,而其它節點沒有解碼出錯,當前幀被正常應答並正常完成傳輸,這些情況可通過波形及波形解碼全部展現出來且不影響CAN總線網絡。

總結:

使用CANScope測量CAN總線信號,在總線信號干擾很嚴重的情況下會出現CAN波形解碼與CAN報文解碼不一致的情況,這是由於CANScope獨立兩路的報文處理和波形處理所導致,而CANScope作為測量設備,只對CAN總線進行靜默監聽,不影響CAN總線,並將總線上的波形細節(包括波形細節導致的解碼差異)儘可能地展示出來,這正是CANScope的價值所在。


分享到:


相關文章: