最近在做運動控制卡的項目,調(diào)試樣機的過程中,需要驗證CAN總線通訊功能的正確性。以前只限于理論上認識CAN總線,使用的CANbus的通訊卡也是有上位機例程,基本上簡單地配置上位機軟件就可以正常工作了。這次調(diào)試需要深入測試CAN接口的通訊過程,正好把之前的對CAN的認識再復習深化一下。
![poYBAGKQM0SAX5o0AAB0m2jai_w681.png](https://file.elecfans.com/web2/M00/46/08/poYBAGKQM0SAX5o0AAB0m2jai_w681.png)
之所以采用CAN總線,是因為它只需要兩根雙絞線就可以連接多個通訊節(jié)點,并且可以傳輸相對遠的距離,在工業(yè)現(xiàn)場抗干擾能力也很強。下圖是我按照CAN總線的要求做的一條雙絞線,黃色和綠色分別是CAN_High線和CAN_Low線。要求絞距20mm,不絞合的距離不超過50mm。
![poYBAGKQM0SASS5PAAN1DlI0R4s976.png](https://file.elecfans.com/web2/M00/46/08/poYBAGKQM0SASS5PAAN1DlI0R4s976.png)
規(guī)定的雙絞線傳輸距離與CAN總線的傳輸速率的關(guān)系如下表。我們的傳輸距離很短,所以可以采用很高的傳輸速率。即便是采用最高的傳輸速率,以O(shè)SC802示波器的25M帶寬,也是足夠調(diào)試用的。
位速率 bit/s | 總線長度 m | |
1 | 1M | 30 |
2 | 800K | 50 |
3 | 500K | 100 |
4 | 250K | 250 |
5 | 125K | 500 |
6 | 62.5K | 1000 |
7 | 20K | 2500 |
8 | 10K | 5000 |
下圖是我設(shè)計驅(qū)動控制板的CAN通訊接口部分的原理圖,使用SN65HVD230收發(fā)器:
![poYBAGKQM0SAMitIAADJd7MgEGY639.png](https://file.elecfans.com/web2/M00/46/08/poYBAGKQM0SAMitIAADJd7MgEGY639.png)
打樣后的運動控制板是這樣的:
使用LOTO的USB示波器OSC802對CAN通訊的信號進行捕捉,抓取數(shù)據(jù)進行解析判斷。
![pYYBAGKQM0qAEMsFAEcYXYH7dG4056.png](https://file.elecfans.com/web2/M00/46/08/pYYBAGKQM0qAEMsFAEcYXYH7dG4056.png)
使用USB示波器OSC802的單次觸發(fā)功能,很輕松對CAN總線上的電平信號進行了捕捉。不過我們現(xiàn)在還看不懂它,需要對CAN的電平邏輯和傳輸協(xié)議有所了解。
沒有收發(fā)信號時,兩條導線上的電平相同(大約2.5V)。這種電平狀態(tài)為隱形狀態(tài),也稱之為隱性電平,即為邏輯1。有信號時,CAN_H導線的電平升高至少1V;而對應(yīng)的CAN_L導線電平降低同樣值,這種電平狀態(tài)為顯形狀態(tài),也稱之為顯性電平,即為邏輯0。5V和3.3V的CAN收發(fā)器的邏輯電平會稍有不同。
![pYYBAGKQM0SAQjbGAAFyrwx3YyQ575.png](https://file.elecfans.com/web2/M00/46/08/pYYBAGKQM0SAQjbGAAFyrwx3YyQ575.png)
我們通過程序發(fā)出一串CAN數(shù)據(jù)后,用OSC802捕捉到的波形如下:
![pYYBAGKQM0SAK75xAACTPhkJbBA662.png](https://file.elecfans.com/web2/M00/46/08/pYYBAGKQM0SAK75xAACTPhkJbBA662.png)
![poYBAGKQM0WAdmEMAAVvtuJOkLY321.png](https://file.elecfans.com/web2/M00/46/08/poYBAGKQM0WAdmEMAAVvtuJOkLY321.png)
根據(jù)波形進行數(shù)據(jù)解碼需要注意的有兩點:
1:在CAN協(xié)議中將CAN_H和CAN_L的差值為高電平時定義為顯性,邏輯上表示為0,為低電平時定義為隱性,邏輯上表示為1。
2:在CAN的協(xié)議中當連續(xù)出現(xiàn)5個顯性時就需要插入一個隱性。
CAN的標準幀和擴展幀協(xié)議格式:
![poYBAGKQM0aAKwCSABszpGLDGbg926.png](https://file.elecfans.com/web2/M00/46/08/poYBAGKQM0aAKwCSABszpGLDGbg926.png)
所以,波形數(shù)據(jù)解讀為:
![pYYBAGKQM0WARyDPAAGfcXpEays447.png](https://file.elecfans.com/web2/M00/46/08/pYYBAGKQM0WARyDPAAGfcXpEays447.png)
圖中被紅色斜線劃掉的為CAN協(xié)議有意在5個連續(xù)顯性后面加的單個隱性位,所以去掉。所以,通過USB 示波器 OSC802抓取到的數(shù)據(jù)為:
00000000000011000001001100010100000001010101011110011010001111100000111101111
ID | SRR | ID | DLC | CRC | |||
0 | 00000000000 | 1 | 1 | 000001001100010100 | 000 | 0010 | 000111110000011 |
這個數(shù)據(jù)幀發(fā)出的數(shù)據(jù)為:
1010101111001101
0xAB, 0xCD
解析結(jié)果與上位機收發(fā)的結(jié)果互相驗證正確,所以此次運動控制板的CAN接口功能調(diào)試成功完成。
![poYBAGKQM0WAWnK5AAEJjzbQo64005.png](https://file.elecfans.com/web2/M00/46/08/poYBAGKQM0WAWnK5AAEJjzbQo64005.png)
-
示波器
+關(guān)注
關(guān)注
113文章
6282瀏覽量
185838 -
CAN
+關(guān)注
關(guān)注
57文章
2769瀏覽量
464383
發(fā)布評論請先 登錄
相關(guān)推薦
使用CAN總線進行數(shù)據(jù)采集的方法
CAN總線數(shù)據(jù)傳輸速率 CAN總線在汽車中的應(yīng)用
CAN總線與LIN總線的區(qū)別
![](https://file1.elecfans.com/web2/M00/0B/AF/wKgaomcoXPyAd0BeAAHVXcPTtkk237.jpg)
![](https://file1.elecfans.com/web2/M00/0B/56/wKgaomcgYsCAXo3oAAI0Tzg84-Q157.jpg)
【CAN總線知識】深度解析CAN-FD與CAN協(xié)議的差別
![【<b class='flag-5'>CAN</b><b class='flag-5'>總線</b>知識】深度解析<b class='flag-5'>CAN</b>-FD與<b class='flag-5'>CAN</b>協(xié)議的差別](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
CAN/CAN FD/CAN XL三大總線協(xié)議解讀,是逐步替代關(guān)系嗎?
CAN總線的數(shù)據(jù)幀結(jié)構(gòu)
![](https://file1.elecfans.com/web2/M00/F8/13/wKgaomaD2tSAIW2AAAI6aaeDXPI038.jpg)
CAN總線數(shù)據(jù)偶爾出錯原因
如何使用示波器檢測CAN總線上的信號
can高和can低之間的電阻怎么測量
什么是CAN總線通信?CAN總線工作原理
![什么是<b class='flag-5'>CAN</b><b class='flag-5'>總線</b>通信?<b class='flag-5'>CAN</b><b class='flag-5'>總線</b>工作原理](https://file1.elecfans.com/web2/M00/C1/15/wKgaomXS_VeAWWGuAAAeFgRhNro567.jpg)
Mini CAN Unit小型CAN總線通訊單元
![Mini <b class='flag-5'>CAN</b> Unit小型<b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>通訊</b>單元](https://file.elecfans.com/web2/M00/7D/DA/pYYBAGN-zMaAF9QdAAAZUkbIjzU950.png)
評論