CAN總線相關概述
1 寫在前面
說到CAN,相信大家都有所了解,但單純的了解,其意義不大,要知道它能做什么,知道它的用途才重要。
可能初學的朋友不太了解CAN的應用領域,對于汽車電子、軌道交通、工業自動化等諸多的運動控制系統中,運用CAN總線通信的地方很多很多。所以,我建議:嵌入式開發的朋友,有必要學習CAN,以及CAN常用的通信協議。
2 CAN總線
什么是總線?
相信大家都知道,谷歌百度一下,非常詳細的解釋:總線(Bus)是計算機各種功能部件之間傳送信息的公共通信主干線。就好比一條輸電線,它有多條分支,但主干線是重要的一條線路。
什么是CAN?
CAN:ControllerAreaNetwork即控制器局域網絡。
理解了總線及CAN的含義,對CAN總線的理解就不難了,只是我們這種控制通信的方式這樣命名而已。同理,我們也能理解什么是485總線,什么是I2C總線······
3 CAN網絡結構
想要實現CAN總線的通信,必須要有CAN相關的硬件支持,也可以說是OSI(開放系統互聯)中的物理層。
(圖片來自STM32 CAN網絡結構圖)
可以結合485總線理解,CAN控制器就是UART控制器,CAN收發器就是485轉換器。
CAN控制器是CAN通信中的核心部位,收和發的數據都經由它來處理;
CAN收發器可以理解成一個轉換器,就是將TTL電平信號轉換為CAN總線中的差分信號。
4 CAN通信原理
CAN通信原理其實是一個很大的話題,這里從基礎來講述實現CAN通信的原理。
can在英文單詞中有"罐頭"的意思,可能很多人小時候都玩過有種叫“傳聲筒”的東西,就是對著繩子一端的罐頭說話,聲音就可以傳輸的另一頭。
罐頭一端的人說【你好】,另外一端的人就能理解到對方說的話(你好)的意思。
我們可以把【你好】理解成通信中的數據,至于它是通過什么方式傳輸過去我們是不必關心的,只需要知道【你好】的意思即可。
也就是說,數據經過電平轉換的過程我們不用關心,還有就是添加的一些協議(如CANopen,可以理解成額外添加的數據)我們也不用關心,關心的是我們想要得到的數據。
5 CAN應用協議
CAN也可以理解成UART,我們可以不使用CAN收發器,像單片機UART中直接將兩塊單片機的TX和RX引腳連接,通過TTL電平信號傳輸數據。
一般來說,我們使用UART通信,都會添加相關的協議,如ModBus。添加協議的作用是就是方便解析數據,防止信號受干擾而檢測錯誤數據幀等。
相關的協議目前有多種:
CANopen協議 (制定組織:CiA)
DeviceNet協議 (制定組織ODVA)
CAL協議 (制定組織:CiA)
CANKingdom (制定組織:Kvaser)
J1939協議 (制定組織:SAE)
SDS協議(制定組織:Honeywell)
CAN總線應用協議相對CAN驅動來說要復雜的多,目前CANopen協議算是市面上用的比較多的一種,后期會更新CANopen協議中一項開源協議canfestival。
6 最后
CAN總線以及CAN相關協議的內容相對來說較多,本文算是帶領大家對CAN有一個基礎的認識。
微信搜索“EmbeddDeveloper” 或者掃描下面二維碼、關注,在我的底部菜單查看更多精彩內容!
長按識別二維碼 關注
原文標題:一種值得嵌入式開發人員學習的總線 --- CAN-Bus
文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
-
嵌入式
+關注
關注
5082文章
19106瀏覽量
304829 -
CAN總線
+關注
關注
145文章
1950瀏覽量
130728 -
485總線
+關注
關注
1文章
29瀏覽量
16780
發布評論請先 登錄
相關推薦
評論