我的 CAN 裝置無法通訊或在高鮑率下行為不一致

更新 Jul 18, 2022

產品資訊

其他

CAN industrial communications devices

問題敘述

我的 CAN 裝置可以在低鮑率(baud rate)下正常通訊,但是當我提高鮑率時,它只能間歇性地通訊或完全無法通訊。

我收到 CAN errors:Form errors、CRC errors、Bit errors或Stuff errors。

解決方案

這些錯誤可能是由於 CAN termination (終端)不正常連接造成的。

本文討論了每種 CAN 通訊形式的正確termination resistor連接。

相關資訊

CAN specification規範 (ISO 11898) 要求 CAN 匯流排在 CAN 網路的兩個極端端點中的每一個都有正確連接的終端,通常在控制器節點和“最遠設備”節點處。在 CAN_H 和 CAN_L(NI-CAN DB-9 接口上的接腳 2 和 7)之間放置一個 120 歐姆的電阻就足夠了。有關如何在CAN網路通訊上進行termination 的更精確處理,請參閱下面標題為: NI-CAN Hardware and Software User Manual 相關連結。如果沒有適當的termination,嘗試通訊可能會產生以下不良行為之一:
    • 在低鮑率下成功通訊,但在高鮑率下失敗(發生故障的鮑率取決於許多因素,包括 CAN 網路的長度、與幀(frame)相關的資料——這可能會改變最高頻率給定傳輸的組成部份、網路附近的電磁干擾等)。下表總結的一項測試說明了這一點:
      CAN 鮑率 - 終端測試
      電纜正確端接?端口到端口通訊成功?
      1M
      1M
      125K
      125K有時
      40K
      40K

      請注意,在正確終端連接的情況下,通訊都應會是正常的;但在 40K 的低鮑率下,儘管沒有使用終端但仍成功,此時是不符合 CAN ISO 11898 規範。
    • CAN errors - Form Error, CRC Error, Bit Error, Stuff Error和其他一些errors可能是由不正確的終端引起的。有關 CAN error的更多資訊,請參閱下面相關連結中連結的 NI-CAN Hardware and Software User Manual(請參閱 CAN 標準的附錄 B 總結;它包含一個名為CAN Error Detection and Confinement 的部份,描述了 CAN error)。
    可以透過不正確的終端來解釋的 CAN error範例(並且是基於 CAN ISO 11898 規範定義的error條件)是Stuff Error。只要在匯流排上檢測到 6 個連續的相同值的bit ,就會發生Stuff error。每當發送設備檢測到 5 個連續的相同值的bit時,它會自動將補碼(complemented)bit插入到發送的bit stream中。所有接收設備都會檢測並自動刪除該stuffing bit。

    這種bit stuffing方案用於保證bit stream中有足夠的edges以保持幀內的同步。如果監聽設備檢測到 6  bits相同的值,那麼一定是發生同步失敗並且接收到的內容並非發送端一開始所送出的!這正是不當終端可能引起的情況。幀中的某些bit被正確傳輸和接收,但整個幀(以及該幀中所有bit的完整性)並未在偵聽 CAN 接口處得到維護和接收。

    其原因是 CAN 網路的形成就定義了傳輸線。而傳輸線理論告訴我們,如果在接收端沒有適當的接上終端,將無法沿給定傳輸線的長度成功傳輸足夠高的頻率分量。這種終端通常被稱為匹配網路,通常終端選擇會以透過使用回看網路的阻抗的共軛複數(complex conjugate)(在實務上,許多應用使用稍微不同的端接來考慮噪聲效能和其他考慮點)。

    好消息是,CAN ISO 11898 規範已經制定,因此在整個 CAN 網路(確實符合該 CAN 標準)上的正確端接就像在網路的“末端”放置兩個 120 歐姆電阻一樣簡單.