0 序
1 CAN總線-概述
1.0 簡介
- CAN是控制器局域網絡(Controller Area Network, CAN)的簡稱,是一種能夠實現分佈式實時控制的串行通信網絡。
1.1 優點
- 傳輸速度高。傳輸速度最高到1Mbps,通信距離最遠到10km,無損位仲裁機制,多主結構。近些年來,CAN控制器價格越來越低。
- 低成本:ECUs通過單個CAN接口進行通信,佈線成本低。
- 高集成:CAN總線系統允許在所有ECUs上進行集中錯誤診斷和配置。
- 可靠性:該系統對子系統的故障和電磁干擾具有很強的魯棒性,是汽車控制系統的理想選擇。
- 高效率:可以通過id對消息進行優先級排序,以便最高優先級的id不被中斷。
- 靈活性:每個ECU包含一個用於CAN總線收發芯片,隨意添加CAN總線節點。
1.2 CAN總線網絡
- CAN總線網絡主要掛在CAN_H和CAN_L,各個節點通過這兩條線實現信號的串行差分傳輸.
- 爲了避免信號的反射和干擾,還需要在CAN_H和CAN_L之間接上120歐姆的終端電阻。爲什麼是120Ω?因爲電纜的特性阻抗爲120Ω,爲了模擬無限遠的傳輸線。
1.3 CAN收發器
CAN收發器
的作用是負責邏輯電平和信號電平之間的轉換。
即:從
CAN控制芯片
輸出邏輯電平到CAN收發器;然後,經過CAN收發器【內部轉換】將邏輯電平轉換爲差分信號輸出到CAN總線
上,CAN總線
上的節點都可以決定自己是否需要總線上的數據。
具體的引腳定義如下:
1.4 CAN信號表示
CAN總線
採用不歸零碼位填充技術。
也就是說,
CAN總線
上的信號有兩種不同的信號狀態,分別是: 顯性的(Dominant)邏輯0和隱形的(recessive)邏輯1,信號每一次傳輸完後不需要返回到邏輯0(顯性)的電平。
- 顯性電平與隱性電平的解釋:
- CAN的數據總線有兩條,一條是黃色的
CAN_High
,一條是綠色的CAN_Low
。- 當沒有數據發送時,兩條線的電平一樣都爲2.5V,稱爲靜電平,也就是隱性電平。
- 當有信號發送時,
CAN_High
的電平升高1V,即3.5V,CAN_Low
的電平降低1V,即1.5V。
- 按照定義的:
CAN_H
-CAN_L
< 0.5V 時候爲隱性的,邏輯信號表現爲"邏輯1" - 高電平。CAN_H
-CAN_L
> 0.9V 時候爲顯性的,邏輯信號表現爲"邏輯0" - 低電平。
1.5 CAN信號傳輸
- 發送過程:CAN控制器將CPU傳來的信號轉換爲邏輯電平(即: 邏輯0-顯性電平 或者 邏輯1-隱性電平)。CAN收發器(發射器)接收邏輯電平之後,再將其轉換爲差分電平輸出到CAN總線上。
- 接收過程:CAN發射器(接收器)將
CAN_H
和CAN_L
線上傳來的差分電平轉換爲邏輯電平輸出到CAN控制器,CAN控制器再把該邏輯電平轉化爲相應的信號發送到CPU上。
1.6 CAN數據傳輸
- CAN總線傳輸的是CAN幀,CAN的通信幀分成5種,分別爲:
數據幀
、遠程幀
、錯誤幀
、過載幀
和幀間隔
。 數據幀
根據仲裁段長度的不同,而分爲:標準幀(2.0A)和擴展幀(2.0B)。
幀起始
- 由一個顯性位(低電平)組成,發送節點發送幀起始,其他節點同步於幀起始;
幀結束
- 由7個隱形位(高電平)組成。
仲裁段
-
只要總線空閒,總線上任何節點都可以發送報文,如果有兩個或兩個以上的節點開始傳送報文,那麼就會存在總線訪問衝突的可能。但是CAN使用了標識符的逐位仲裁方法可以解決這個問題。
-
CAN總線控制器在發送數據的同時監控總線電平:
- 如果電平不同,則:停止發送並做其他處理。
- 如果該位位於仲裁段,則:退出總線競爭;
- 如果位於其他段,則:產生錯誤事件。
-
假設節點A、B和C都發送相同格式、相同類型的幀,如標準格式數據幀,它們競爭總線的過程是:
-
幀ID越小,優先級越高。
- 由於數據幀的RTR位爲顯性電平,遠程幀爲隱性電平。所以,幀格式和幀ID相同的情況下,數據幀優先於遠程幀;由於標準幀的IDE位爲顯性電平,擴展幀的IDE位爲隱形電平,對於前11位ID相同的標準幀和擴展幀,標準幀優先級比擴展幀高。
數據段
- 一個數據幀傳輸的數據量爲0~8個字節,這種短幀結構使得
CAN-bus
實時性很高,非常適合汽車和工控應用場合下圖所示。
- 數據量小,發送和接收時間短,實時性高,被幹擾的概率小,抗干擾能力強。