控制器區域網路

维基百科,自由的百科全书
跳转至: 导航搜索

控制器區域網路 (Controller Area Network, 簡稱 CANCANbus)是一種通訊協定,其特點是允許網路上的微控制器和設備直接互相通訊,網路上不需要主機(Host)控制通訊。

CAN总线是一种基于消息的协议,专门设计用于汽车应用,但是现在也用于其他领域,包括航空,航海,工业自动化和医疗设备。

CAN总线最早是博世公司在1983年开发。1986年,在密歇根的底特律,SAE会议上,正式发布了协议!第一款CAN控制器芯片,由Intel和Philips联合开发,并与1987年上市。

博世发布了CAN规范的多个版本,最新的版本是1991年发布的CAN2.0。这个规范有两个部分: A部分是11位ID,B部分是扩展格式的29位ID。使用11位ID的CAN设备通常叫做CAN 2.0A,使用29位ID的CAN设备通常叫做CAN 2.0B。这些标准,以及其他规范和白皮书,可以免费地从博世方面获得。

1993年,国际标准组织发布ISO 11898 CAN标准,最后变成两部分;ISO 11898-1,涵盖数据链路层和ISO 11898-2,涵盖高速CAN物理层。ISO 11898-3涵盖低速CAN的物理层和容错CAN。物理层标准ISO 11898-2和ISO 11898-3不是博世CAN 2.0的规范部分。

自动化领域的CAN(CiA)也包含

簡介[编辑]

CAN是在1990年代初所制定的規格,並在1993年標準化(ISO 11898-1),被廣泛的應用在各種車輛與電子設備上。CAN為一序列匯流排,它提供高安全等級及有效率的即時控制。更具備了偵錯和優先權判別的機制,在這樣的機制下,網路訊息的傳輸變的更為可靠而有效率。CAN 亦提供多主控端的架構,這種特色,特別適合使用在主系統或子系統下提供更完整智慧型網路設備,如感測器致動器

CAN是建立在基於資訊導向傳輸協定的廣播傳輸機制(broadcast communication mechanism)上。CAN定義資訊的內容,利用訊息識別子(message identifier,每個message identifier在整個網路中皆為獨一無二的)來定義內容和資訊的優先順位,以進行資訊的傳遞。並非使用指派特定站台位址(station address)的方式。

CAN bus

如此,CAN擁有了高度的彈性調整能力,可以在既有的網路中增加站台而不用在軟硬體上作修正與調整的作業。除此之外,資訊的傳遞不是建構在特殊種類的站台上,增加了在升級網路時的便利性。

即時的資訊傳輸(Real-time data transmission)為CAN的特色之一。在即時的運算中,訊息傳遞的優先順序應以重要性來分,重要性較高的訊息會比較不重要的訊息傳遞的更頻繁。

仲裁機制[编辑]

訊息的優先權是由訊息封包的message identifier所決定的,identifier的屬性則是由系統一開始所給定的二進位數值決定,其數值是不能一直改變的。數值越小,就享有越高的優先順位。

即時環境中使用的通訊協定優點:

  • 訊息有分優先次序
  • 有限度的訊息傳遞延遲
  • 訊息可多重發送、資料確保一致性
  • 可分辨資料是網路傳送錯誤或是裝置不正常運作所造成,進而將有問題的網路節點關閉

仲裁機制 1

CAN base frame一開始是SOF(Start Of Frame),接著是仲裁區Arbitration field(包含identifier和遠端傳輸要求RTR(Remote Transmission Request)),之後的IDE(Identifier Extension)用來分辨是base frame或extended frame。DLC(Data Length Code)記錄了data field的大小。

當兩種格式同時存在於同一個匯流排時,11-bit的訊息將會擁有比29-bit的訊息較高的優先順位。可支援extended frame的CAN controller可正確的傳送base frame與extended frame的訊息,但是只支援base frame的controller則無法正確的傳送extended frame的訊息。

偵錯機制[编辑]

CAN 提供了五種偵錯機制,使其錯誤發生率低於 4.7×10-11。當一個以上的上述錯誤發生時,傳送中的傳輸將會失敗中止並且產生錯誤封包,發訊端則會試著重新傳送訊息封包。各個節點將會重新爭取優先權。

CAN的五種偵測錯誤機制

循环冗余校验 (CRC) CRC在訊息結尾處加上一個FCS(frame check sequence)來確保訊息的正確。接收訊息端會將其FCS重新演算並與所接收到的FCS比對,如果不相符,表示有CRC錯誤。
Frame check 檢查封包中幾個固定值的欄位以驗證該封包是否有被訊號干擾導致內容錯誤。
ACK errors 接收端在收到封包後會告知發訊端,發訊端若沒有收到確認訊息,ACK錯誤便發生。
Monitoring 傳一個bit到網路上,從網路上再讀進來檢查是否一致。
Bit stuffing 訊號同步用

實體層[编辑]

實體層以電、光或物理的方式將訊息在網路中傳遞,它提供硬體性質的載體來傳送與接收訊息。

ISO定義了一個標準,整合了CAN的規格與實體層physical layer,包括了編碼Bit Encoding、時間機制Bit Timing和同步Synchronization。

CAN使用NRZ(Non-Return-to-Zero)bit encoding,而其signal level在位元期間內都是保持穩定的。其signal level甚至可以在更長的時段內維持穩定,因此必須確保訊號不會超過最大允許的時段範圍,這對訊號同步而言是很重要的。利用bit stuffing在連續五個等值的bit後面填補一個 bit。接收端在將這個bit給去除(un-stuff)以處理原始資料內容。

Bus須能夠呈現兩種邏輯狀態(dominant & recessive),假如有兩個裝置同時對bus傳輸不同的邏輯狀態的訊息時,只有傳送dominant狀態的裝置能夠成功傳輸資料並繼續其動作。

Bus必須能分辨網路傳輸錯誤或是裝置運作錯誤所產生的錯誤訊息,並且可以將運作錯誤的裝置關閉。

應用領域[编辑]

  • 載客車輛、卡車、巴士
  • 載客與載貨電車
  • 航空、航海電子儀器
  • 工廠自動化
  • 工業機械控制
  • 電梯、手扶梯
  • 建築自動化
  • 醫療儀器與設備
  • 自行車電子變速系統

高階通訊協定[编辑]

模型是用來了解溝通對象、描述溝通對象與對象的功用。要明確使用一個語言,必須要先有大量辭彙、了解文法並熟悉句型。相同的,為了要更簡易明確的使用CAN,CAN的使用者運用高階通訊協定(Higher-Layer Protocols)來使用自己建基於CAN的語言。在不同應用層皆有標準化的CAN通訊協定,例如DeviceNetCANopenCANKingdom等等。

参考资料[编辑]

http://www.mathworks.cn/discovery/can-network.html