CAN編程介紹

CAN編程介紹

14.1 CAN介紹

14.1.1 CAN是什麼?

CAN,全稱爲“Controller Area Network”,即控制器局域網,是國際上應用最廣泛的現場總線之一。

最初,CAN被設計作爲汽車環境中的微控制器通訊,在車載各電子控制裝置 ECU 之間交換信息,形成汽車電子控制網絡。比如:發動機管理系統、變速箱控制器、儀表裝備、電子主幹系統中,均嵌入CAN控制裝置。

一個由 CAN 總線構成的單一網絡中,理論上可以掛接無數個節點。實際應用中,節點數目受網絡硬件 的電氣特性所限制。例如,當使用 Philips P82C250 作爲CAN收發器時,同一網絡中允許掛接110個節點。

CAN可提供高達1Mbit/s的數據傳輸速率,這使實時控制變得非常容易。另外,硬件的錯誤檢定特性也增強了CAN的抗電磁干擾能力。
 

14.1.2 CAN的起源

CAN最初出現在 80 年代末的汽車工業中,由德國 Bosch 公司最先提出。當時,由於消費者對於汽車功能的要求越來越多,而這些功能的實現大多是基於電子操作的,這就使得電子裝置之間的通訊越來越複雜同時意味着需要更多的連接信號線。

提出 CAN 總線的最初動機就是爲了解決現代汽車中龐大的電子控制裝置之間的通訊,減少不斷增加的信號線。於是,他們設計了一個單一的網絡總線,所有的外圍器件可以被掛接在該總線上。

1993 年,CAN已成爲國際標準ISO11898(高速應用)和 ISO11519(低速應用)。 CAN 是一種多主方式的串行通訊總線,基本設計規範要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產生的任何錯誤。

當信號傳輸距離達到 10Km 時,CAN 仍可提供高達 50Kbit/s 的數據傳輸速率。由於 CAN 總線具有很高的實時性能,因此,CAN 已經在汽車工業、航空工業、工業控制、安全防護等領 域中得到了廣泛應用。
 

14.1.3 CAN傳輸模型

CAN 通訊協議主要描述設備之間的信息傳遞方式。CAN 層的定義與開放系統互連模型(OSI)一致。每 一層與另一設備上相同的那一層通訊。實際的通訊發生在每一設備上相鄰的兩層,而設備只通過模型物理層的物理介質互連。

CAN 的規範定義了模型的最下面兩層:數據鏈路層和物理層。下表中展示了 OSI 開放 式互連模型的各層。應用層協議可以由 CAN 用戶定義成適合特別工業領域的任何方案。已在工業控制和製造業領域得到廣泛應用的標準是 DeviceNet,這是爲 PLC 和智能傳感器設計的。在汽車工業,許多製造商都應用他們自己的標準。

序號 層次 描述
7 應用層 最高層。用戶、軟件、網絡終端等之間用來進行信息交換
6 表示層 將兩個應用不同數據格式的系統信息轉化爲能共同理解的格式
5 會話層 依靠低層的通信功能來進行數據的有效傳遞
4 傳輸層 兩通訊節點之間數據傳輸控制。操作如:數據重發,數據錯誤修復
3 網絡層 規定了網絡連接的建立、維持和拆除的協議。如:路由和尋址
2 數據鏈路層 規定了在介質上傳輸的數據位的排列和組織。如:數據校驗和幀結構
1 物理層 規定通訊介質的物理特性。如:電氣特性和信號交換的解釋
OSI開發系統互聯模型

雖然CAN傳輸協議參考了OSI 七層模型,但是實際上CAN協議只定義了兩層“物理層”和“數據鏈路層”,因此出現了各種不同的“應用層”協議,比如用在自動化技術的現場總線標準DeviceNet,用於工業控制的CanOpen,用於乘用車的診斷協議OBD、UDS(統一診斷服務,ISO14229),用於商用車的CAN總線協議SAEJ1939。

序號 層次 描述
7 應用層 主要定義CAN應用層
2 數據鏈路層 數據鏈路層分爲邏輯鏈接控制子層LLC和介質訪問控制子層MAC。MAC 子層是 CAN 協議的核心。它把接收到的報文提供給 LLC 子層,並接收來自 LLC 子層的報文。 MAC 子層負責報文分幀、仲裁、應答、錯誤檢測和標定。MAC 子層也被稱作故障界定的管理實體監管LLC 子層涉及報文濾波、過載通知、以及恢復管理。
LLC = Logical Link Control
MAC = Medium Access Control
1 物理層 物理層,爲物理編碼子層PCS
該層定義信號是如何實際地傳輸的,因此涉及到位時間、位編碼、同步。
CAN傳輸協議

14.1.4 CAN網絡拓撲

CAN總線是一種分佈式的控制總線。CAN總線作爲一種控制器局域網,和普通以太網一樣,它的網絡很多CAN節點構成。其網絡拓撲結構如下圖所示:

CAN網絡的每個節點非常簡單,均由一個MCU(微控制器)、一個CAN控制器和一個CAN收發器構成,然後使用雙絞線連接到CAN網絡中。
 

14.1.5 CAN物理特性

CAN總線遵循國際標準ISO11898,如ISO11898-1,ISO11898-2,ISO11898-3,ISO11898-4標準。

序號 標準 描述
1 ISO11898-1 數據鏈路層和物理層信號
2 ISO11898-2 高速接入單元
3 ISO11898-3 低速容錯接入單元
4 ISO11898-4 時間觸發通訊
5 ISO11898-5 低功耗的接入單元
6 ISO11898-6 選擇性喚醒的高速接入單元
CAN總線

CAN 能夠使用多種物理介質,例如雙絞線、光纖等。最常用的就是雙絞線。信號使用差分電壓傳送,兩條信號線被稱爲“CAN_H”和“CAN_L”。靜態時CAN_H和CAN_L均是 2.5V 左右,此時狀態表示爲邏輯“1”,也可以叫做 “隱性”。用 CAN_H 比 CAN_L 高表示邏輯“0”,稱爲“顯形”,此時,通常電壓值爲:CAN_H = 3.5V 和 CAN_L = 1.5V 。

目前實際常用的CAN收發器有如下幾種型號:

序號 型號 描述
1 PCA82C250 高速 CAN 收發器
2 PCA82C251 高速 CAN 收發器
3 PCA82C252 容錯 CAN 收發器
4 TJA1040 高速 CAN 收發器
5 TJA1041 高速 CAN 收發器
6 TJA1042 高速CAN 收發器
7 TJA1043 高速 CAN 收發器
8 TJA1050 高速 CAN 收發器
9 TJA1053 容錯 CAN 收發器
10 TJA1054 容錯 CAN 收發器

目前實際常用的CAN控制器有如下幾種型號:

序號 型號 描述
1 SJA1000 獨立CAN控制器
2 MCU內部控制器 目前市面上如STM32系列,S32K系列,IMX6系列等等很多單片機內部集成了CAN控制

 

14.1.6 CAN報文幀

14.1.6.1 CAN報文格式

標準 CAN 的標誌符長度是 11 位,而擴展格式 CAN 的標誌符長度可達 29 位。CAN 協議的 2.0A 版本 規定 CAN 控制器必須有一個 11 位的標誌符。同時,在 2.0B 版本中規定,CAN 控制器的標誌符長度可以是 11 位或 29 位。遵循 CAN2.0B 協議的 CAN 控制器可以發送和接收 11 位標識符的標準格式報文或 29 位標識符的擴展格式報文。
標準幀&擴展幀對比:

幀格式 標準幀 擴展幀
規範 CAN2.0A CAN2.0B
CAN ID(標識符)長度 11 bits 29 bits
CAN ID(標識符)範圍 0x000~0x7FF 0x00000000~0x1FFFFFFF

14.1.6.2 CAN報文幀類型

CAN報文類型又分如5種幀類型:
數據幀:主要用於發送方向接收方傳輸數據的幀;
遙控幀:主要用於接收方向具有相同ID的發送方請求數據的幀;
錯誤幀:主要用於當檢測出錯誤時向其他節點通知錯誤的幀。
過載幀:主要用於接收方通知其他尚未做好接收準備的幀。
間隔幀:主要用於將數據幀及遙控幀與前一幀分隔開來的幀。

其中數據幀是使用最多的幀類型,這裏重點介紹以下數據幀。
數據幀如下圖所示:
在這裏插入圖片描述
由上圖所示,數據幀包括:
(1)幀起始。表示數據幀開始的段。
(2)仲裁段。表示該幀優先級的段。
(3)控制段。表示數據的字節數及保留位的段。
(4)數據段。數據的內容,一幀可發送0~8個字節的數據。
(5)CRC段。檢查幀的傳輸錯誤的段。
(6)ACK段。表示確認正常接收的段。
(7)幀結束。表示數據幀結束的段。
具體介紹可以查看”CAN2.0A”、”CAN2.0B”詳細介紹。

我們主要關注我們編程所需要關注的幾個段:
ID: CAN報文ID;
IDE: 爲0是標準幀,爲1是擴展幀;
RTR: 爲0是數據幀,爲1是遠程幀;
DLC: CAN報文數據長度,範圍0~8字節;
Data:數據,0~8個字節;


未完待續…關於CAN,還有很多內容(70多頁),剩下內容:
在這裏插入圖片描述
加微信13923404017,免費獲取完整版;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章