控制器區域網路 (CAN) 協定概述

內容

什麼是 CAN?

控制器區域網路 (CAN) 匯流排是一種高完整性序列匯流排系統,可連接智慧型裝置。CAN 匯流排與裝置是汽車與工業系統常見元件。舉例來說,CAN 協定有助於提高感測器與電子控制單元 (ECU) 之間的通訊效率,以支援 先進駕駛輔助系統。您可以使用 CAN 介面裝置撰寫 LabVIEW 應用,以便與 CAN 網路通訊。

CAN 的沿革

為簡化車用網路,Bosch 於 1985 年開發出 CAN 協定。 在此之前,汽車製造商均是透過點對點接線系統,以連接車內的電子裝置。而由於車輛使用越來越多的電子裝置,因此大量的傳統接線除了將佔據許多空間之外,亦將提高成本。接著他們以車內網路取代專用接線,藉以降低接線成本、複雜度與重量。CAN 即為高密度的序列匯流排系統,可建構智慧型裝置的網路功能,亦成為車內網路的標準。汽車產業迅速採用 CAN,並於 1993 年成為國際標準,稱為 ISO 11898.自 1994 年起,CANopen 與 DeviceNet 等數種更高階協定都已完成標準化。其他市場也已廣泛採用這些衍生協定,並成為目前工業級通訊作業的標準。此篇技術文件將著重於車內網路的 CAN。

CAN 的優點

平價、網路

CAN 可提供低價位且耐用的網路,以溝通多組 CAN 裝置。舉例來說,電子控制單元 (ECU) 僅需單一的 CAN 介面,即可取代系統中所有裝置的類比與數位輸入。如此即可降低汽車的整體成本與重量。 

廣播通訊

網路中的各組裝置均具備了 CAN 控制器晶片,因此更具智慧型功能。在網路中的所有裝置均可接收相關訊息。各組裝置亦可自行辨識該筆訊息是否相關並予以篩選。 這個架構可在影響程度最低的情況下修改 CAN 網路。 不需修改即可新增額外的非傳輸節點。

優先順序

每個訊息均具有其優先順序。若有 2 個節點同時嘗試傳送訊息,優先順序較高的訊息會先行發出,優先順序較低的訊號將延後傳送。 這種仲裁不會造成破壞,並可讓最高優先順序訊息保持不中斷的傳輸。 這樣一來,網路也能滿足精確的時序限制。

錯誤功能

CAN 規格包含循環冗餘碼 (CRC),可對每個訊框的內容進行錯誤檢查。 所有節點都會忽略有錯誤的框架,因此可傳輸錯誤框架,以便將錯誤訊號傳送至網路。 全域與區域錯誤會因控制器而有所區分,如果偵測到錯誤過多,個別節點可能會停止傳輸錯誤,或完全中斷與網路連線。

網路能大幅減少接線

圖 1:CAN 網路可大幅減少接線。

CAN 應用範例

CAN 原來是要用於汽車產業,因此最常見的應用即為車內電子網路。然而,由於最近 20 年來,已有越來越多的產業了解到 CAN 的優點,因此 CAN 更已普遍進入多項應用之中。如有軌電車、地下化捷運、輕軌鐵路,與長距離火車的軌道應用,均已採用了 CAN。在這些車輛之中,均可發現多種 CAN 所建構的網路,如車門系統、煞車控制器、乘客計算系統,還有更多。CAN 亦可用於飛行器的應用,如飛行狀態感測器、導航系統,與座艙之中的搜尋電腦。此外,多種航太應用亦可發現 CAN 匯流排的蹤跡,從飛行資料分析到飛行器引擎控制系統,如燃料系統、幫浦,與線性致動器。 

醫療設備製造商亦使用 CAN 建構醫療裝置中的嵌入式網路。事實上,某些醫院已經使用 CAN 管理整個手術室。透過 CAN 架構的系統,醫院可控制手術室的燈光、手術台、相機、X 光機,與病患床鋪。電梯與電扶梯亦使用嵌入式的 CAN 網路。而 CANopen 協定可連接電梯裝置,如面板、控制器、電梯門,與擋光器 (Light barrier),並進行控制作業。CANopen 亦可用於非工業應用,如實驗室設備、運動相機、望遠鏡、自動門,甚至咖啡機。

CAN 的實體層 (Physical Layer)

CAN 具備多個不同的實體層。這些實體層均以 CAN 網路的概念進行分類,如電子層 (Electrical level)、訊號產生架構、連接線阻抗、最大鮑率,還有更多。最常見且廣泛使用的實體層如下列所述:

高速/FD CAN

高速 CAN 為目前最常見的實體層。高速 CAN 網路採用 2 組接線,傳輸率最高可達 1 Mbit/s。高速 CAN 的其他名稱也包含 CAN C 與 ISO 11898-2。一般的高速 CAN 裝置包含抗鎖定式制動系統、引擎控制模組與排放系統。 CAN 具備靈活的資料傳輸率 (CAN FD) 是新一代的高速 CAN 通訊系統,能因應日新月異的資料傳輸率標準。  NI 透過 NI-XNET 驅動程式使用 TJA1041 與 TJA1043 收發器,可達到最高 8 Mb/s 的速度。  隨著收發器廠商完成 CAN FD 速度定義之後,必要時 NI 也會更新自家的說明文件。

低速/的 CAN 硬體

Low-Speed/Fault-Tolerant CAN 硬體 Low-speed/fault-tolerant CAN 網路包含 2 組接線,可達最高 125 kbit/s 的通訊傳輸率,並為接收器提供容錯功能。低速/容錯 CAN 的其他名稱則包含 CAN B 與 ISO 11898-3。汽車常見的低速/容錯裝置,包含舒適裝置。必須穿過車輛車門的接線,即屬於低速/容錯 CAN,以較輕壓力的系統進行開/關車門的動作。同樣的,對較高等級的安全系統 (如煞車燈) 而言,低速/容錯 CAN 亦可建構解決方案。

單線式 CAN 硬體

單線式 (Single-Wire) CAN 硬體 單線式 CAN 介面可溝通裝置達最高 33.3 kbit/s (高速模式可達 88.3 kbit/s) 傳輸率。單線式 CAN 亦稱為 SAE-J2411、CAN A,與 GMLAN。汽車中的單線式裝置往往並不具有高效能。常見應用即包含如座椅調整與後照鏡調整裝置的舒適度裝置。

透過軟體選擇的 CAN 硬體

可透過軟體進行選擇的 CAN 硬體 透過 NI CAN 硬體產品,即可設定由軟體進行選擇的 CAN 介面,以使用任何的快取 (On-board) 接收器 (高速、低速/容錯,或單線式 CAN)。針對需要整合多個通訊標準的應用,具備多重接收器的硬體將可提供完美解決方案。而可由軟體進行選擇的 CAN 硬體,使用者亦可自行選擇所需外接式 CAN 接收器。

使用 LabVIEW 與其他程式語言進行 CAN 程式設計

NI-XNET 驅動程式

PCI/PXI-851x 和 NI 986x 裝置均隨附 NI-XNET 軟體,並可於 ni.com 免費下載。這個新的驅動程式用於開發 NI LabVIEW、NI LabWindows/CVI 以及 Windows 與 LabVIEW Real-Time 作業系統的 CAN、區域互連網路 (LIN) 與 FlexRay 應用。NI/PXI-851x 系列屬於 NI-XNET 平台的 1 部分,可即時且高速操作數百種 CAN 框架與訊號,如硬體迴路 (HIL) 模擬、快速製作控制系統原型、匯流監控、自動化控制,還有更多。

NI-XNET:單一 API、多個嵌入式網路

NI-XNET 平台可針對多款高效能的 CAN、LIN 與 FlexRay 介面卡,整合簡單易用的 NI-XNET API 函式,以讀寫 CAN/LIN//FlexRay 的框架與訊號。

更少程式設計作業達到高效能

NI-XNET 介面卡,整合初階的微控制器程式設計,還有 Windows 與 LabVIEW Real-Time 作業系統的開發速度。針對電腦架構 CAN 介面卡的常見缺點,已申請專利的 NI-XNET 裝置驅動 DMA 引擎,可將系統延遲從毫秒 (Millisecond) 縮短到微秒 (Microsecond)。此引擎還可透過內建的處理器,於介面卡與程式之間搬移 CAN 框架/訊號,不需透過電腦 CPU 處理;藉此省下主處理器對複雜模型與應用的處理時間。

如需了解 NI-XNET 的優點與用途,請參閱 NI-XNET CAN、LIN 與 FlexRay 平台概述

NI-CAN 驅動程式

National Instruments 隨附所有 NI Instruments 舊版 CAN 介面的驅動程式軟體 NI-CAN,並可於 ni.com 下載免費軟體。如有其他 CAN 介面,如果未購買現成軟體工具,即可充分運用機板功能的部分。然而,所有的 NI CAN 介面卡均具備完整功能,因此使用者可選擇所需的程式設計語言,建立客制化的應用。NI-CAN 驅動程式並具備簡單易用的高階函式,可迅速開發 CAN 應用,省下成本與時間。

NI-CAN 驅動程式軟體提供 2 個 API。Frame API 為 CAN 程式設計作業的原始 API。透過 Frame API,即可傳輸並接收已包含原始資料位元組的 CAN 框架。而程式必須能夠分析語法並調整這些位元組,以搭配調整過後的工程單位。若要進一步了解 Frame API 的程式設計作業,可參閱 NI CAN 硬體與軟體手冊的「使用 Frame API」章節 (請見下方)。


NI 則於 NI-CAN 2.0 驅動程式中首次發表 Channel API。透過於資料庫檔案 (.dbc 或 .ncd) 中所定義的通道名稱,即可讀寫 CAN 通道。Channel API 具有下列優點:

  • 高階程式設計功能
  • 簡單易用的實體單元 (Physical unit)
  • 主要用於簡易的 CAN/資料擷取的同步化作業
  • 可整合 Vector 資料庫的檔案

如需進一步了解如何使用 Channel API 進行程式設計,請參閱 NI-CAN Channel API 使用說明。

CAN 協定術語

CAN 裝置透過 CAN 網路,以封包傳送資料即稱為框架 (Frame)。CAN 框架包含下列要素。

  • CAN Frame 整個 CAN 傳輸:仲裁 ID、資料位元、確認位元等等。框架也稱為「訊息」。

標準可以框架格式

圖 2: 標準 CAN 框架格式。

  • SOF (Start-of-Frame,SOF) 位元 – 以強勢位元 (Dominant bit) 為開頭的訊息。
  • 仲裁識別號碼 – 可識別訊息與其優先順序。框架共有 2 種格式 – 標準格式使用 11 位元的仲裁 ID;延伸格式則是使用 29 位元的仲裁 ID。
  • IDE (識別子延伸) 位元 – 可區隔標準與延伸框架。
  • 遠端傳輸要求 (RTR) 位元 – 可從資料框架中區隔出遠端框架。強勢 (Logic 0) RTR 位元即表示 1 組資料框架。弱勢 (Logic 1) RTR 位元即表示 1 組遠端框架。
  • DLC (資料長度碼) – 指出資料欄位所含的位元數。
  • 資料欄位 – 包含 0 ~ 8 位元數的資料。
  • CRC (Cyclic Redundancy Check,CRC) – 包含 15 位元的循環冗餘校驗碼與衰勢分隔符 (Delimiter) 位元。CRC 欄位可用於除錯。
  • ACK (ACKnowledgement,ACK) 槽 – 正確接收訊息的 任何 CAN 控制器,均將於訊息末端附加傳送 1 組 ACK 位元。傳送節點將檢查匯流排中是否具有 ACK 位元,而若未偵測到 ACK 則將重新嘗試傳輸。NI Series 2 CAN 介面則具備唯接收 (Listen-only) 模式。因此,若透過硬體監控而傳輸 ACK 位元,則是為了避免其受到匯流排的動作所影響。
  • CAN 訊號 – 為 CAN 框架資料欄位所內含的獨立資料片段。亦可將 CAN 訊號視為通道 (Channel)。由於資料欄位可包含最多 8 位元的資料,因此單一 CAN 框架可包含 0 ~ 64 筆獨立訊號 (對 64 個通道而言,可能全為二進制)。 
下圖則顯示單一 CAN 框架的資料欄位,共包含了 6 個通道。各組訊號則包含 8 位元的資料。


訊號可定義為箱型框架內部的特定位元數

圖 3: 訊號可定義為 CAN 框架內特定數量的位元。

CAN 資料庫檔案

CAN 資料庫檔案為文字式檔案,包含 CAN 框架與訊號定義等相關資訊。NI 的 NI-XNET 資料庫編輯軟體,可識別 FIBEX 資料庫檔案 (.xml)、Vector Database 檔案 (*.dbc),與 NI CAN 資料庫檔案 (*.ncd)。

針對每一筆訊號,CAN 資料庫可定義工程單位的轉換規則。下列資料將儲存於資料庫中:

  • 通道名稱
  • 已知訊息中的通道位置 (開始位元) 與大小 (位元數)
  • 位元組順序 (Intel/Motorola)
  • 資料類型 (已簽、未簽與 IEEE 浮點)
  • 縮放範圍 (Scaling) 與單元字串 (Unit string)
  • 範圍
  • 預設值
  • Comment

透過此資訊,即可輕鬆將「原始」資訊 (往往為位元組) 轉換為「實際」值。 下圖則顯示轉換範例。

所有必要的調整資料都包含在可將框架轉換為訊號的資料庫中

圖 4: 所有必要的調整資料都會包含在資料庫中,以將框架轉換為訊號。

CAN 資料庫檔案可能包含整組車輛的框架與訊號定義。各組網路亦具有其專屬的資料庫檔案。此外,這些資料庫檔案為各個製造商所專屬,且往往具有其機密性。

只要於 CAN 網路上針對多個框架使用資料庫檔案,則多個 CAN API (如 NI-XNET) 亦可自動將框架資訊直接轉換為實際數值。 這樣一來就能簡化應用開發作業,不必擔心原始的框架數值。

CAN 通訊作業運作方式

如先前所述,CAN 屬於點對點網路。這表示,沒有主機可控制個別節點在 CAN 匯流排上存取讀取與寫入資料的時間。當 CAN 節點準備好傳輸資料時,它會檢查匯流排是否繁忙,接著只需將 CAN 框架寫入網路即可。而傳輸完畢的 CAN 框架,將不包含傳輸節點與任何預設接收節點的位置。反之,是由整組網路的專屬仲裁 ID 標記該框架。All nodes on the CAN 網路上的所有節點均將接收 CAN 框架,而根據該完成傳送框架的仲裁 ID,網路上的各個 CAN 節點均可決定是否要接收該框架。

若有多個節點於同時嘗試將訊息傳送至 CAN 匯流排,則最高優先度的節點 (即為最低的仲裁 ID) 將自動先進入匯流排。較低優先度的節點必須等到匯流排完成作業,才會再次嘗試進行傳輸。依此方式,即可確保 CAN 網路中的 CAN 節點,將進行精確的通訊作業。

可包含為訊息所建置的優先順序,以避免衝突

圖 5: CAN 內建訊息優先順序,以避免衝突。

NI CAN 工具

NI 針對 CAN 應用開發,提供多款軟硬體工具。NI 提供適用於不同平台的 CAN 介面,包括 PCIPXIUSBCompactRIO 與 CompactDAQ (C 系列)。針對 PCI、PXI 與 C 系列,您可以選擇高速/FD、低速/容錯,以及單線式實體層。在 PCI 與 PXI 方面,NI 提供業界首款可由軟體進行選擇的 CAN 介面。針對單一裝置的各組通訊埠與機板,即提供高速、低速/容錯、與單線式收發器。此亦表示,僅需透過軟體即可選擇所要使用的模式。

NI PCI-8513
圖 6: NI PCI-8513 – 可透過軟體進行選擇 (XS) 的 CAN 介面卡


此外,NI 所提供的各組介面卡均內附合適的驅動程式軟體。NI CAN 介面驅動程式軟體將於下方說明。 

National Instruments ECU 量測與校準工具組可擴充 NI LabVIEW、NI LabWindows™/CVI 與 C/C++ 開發環境,以支援量測與校準應用,適用於設計並校準電子控制單元 (ECU)。ECU 量測與校準工具組提供以 CAN 校準協定 (CCP) 為架構的高階且簡單易用函式,讓 ECU 設計師、測試人員與工程師能建立自訂的量測與校準應用。

 

LabWindows 商標經過 Microsoft Corporation 授權使用。Windows 是 Microsoft Corporation 在美國與其他國家/地區的註冊商標。