Loto實踐乾貨(3) 測量CAN匯流排通訊資料
Loto實踐乾貨(3) 測量CAN匯流排通訊資料
最近在做運動控制卡的專案,除錯樣機的過程中,需要驗證CAN匯流排通訊功能的正確性。以前只限於理論上認識CAN匯流排,使用的CANbus的通話卡也是有上位機例程,基本上簡單地配置上位機軟體就可以正常工作了。這次除錯需要深入測試CAN介面的通訊過程,正好把之前的對CAN的認識再複習深化一下。
之所以採用CAN匯流排,是因為它只需要兩根雙絞線就可以連線多個通訊節點,並且可以傳輸相對遠的距離,在工業現場抗干擾能力也很強。下圖是我按照CAN匯流排的要求做的一條雙絞線,黃色和綠色分別是CAN_High線和CAN_Low線。要求絞距20mm,不絞合的距離不超過50mm。
規定的雙絞線傳輸距離與CAN匯流排的傳輸速率的關係如下表。我們的傳輸距離很短,所以可以採用很高的傳輸速率。即便是採用最高的傳輸速率,以OSC802示波器的25M頻寬,也是足夠除錯用的。
下圖是我設計驅動控制板的CAN通訊介面部分的原理圖,使用SN65HVD230收發器:
打樣後的運動控制板是這樣的:
使用LOTO的USB示波器OSC802對CAN通訊的訊號進行捕捉,抓取資料進行解析判斷。
使用USB示波器OSC802的單次觸發功能,很輕鬆對CAN總線上的電平訊號進行了捕捉。不過我們現在還看不懂它,需要對CAN的電平邏輯和傳輸協議有所瞭解。
沒有收發訊號時,兩條導線上的電平相同(大約
我們通過程式發出一串CAN資料後,用OSC802捕捉到的波形如下:
根據波形進行資料解碼需要注意的有兩點:
1:在CAN協議中將CAN_H和CAN_L的差值為高電平時定義為顯性,邏輯上表示為0,為低電平時定義為隱性,邏輯上表示為1。
2:在CAN的協議中當連續出現5個顯性時就需要插入一個隱性。
CAN的標準幀和擴充套件幀協議格式:
所以,波形資料解讀為:
圖中被紅色斜線劃掉的為CAN協議有意在5個連續顯性後面加的單個隱性位,所以去掉。所以,通過USB 示波器 OSC802抓取到的資料為:
這個資料幀發出的資料為:
1010101111001101
0xAB, 0xCD
解析結果與上位機收發的結果互相驗證正確,所以此次運動控制板的CAN介面功能除錯成功完成。