welcom ! Handel home

2018年1月31日 星期三

Controller Area Network (CAN BUS) 通訊協定原理概述

Controller Area Network (CAN BUS) 通訊協定原理概述

發表日期: 一月 04, 2017 | 3 人評分 | 4.67 分/共 5 | 
Read in English
  | 列印

概觀

Controller Area Network (控制器區域網路,CAN BUS) 是一種通訊協定,工業應用廣泛。本技術文件將詳細介紹 CAN BUS 通訊協定的發展、運作原理、優點及其日益廣泛的應用。

目錄

  1. CAN BUS 的沿革
  2. CAN BUS 的優點
  3. CAN BUS 應用
  4. CAN BUS 的實體層 (Physical Layer)
  5. CAN BUS 專有名詞
  6. CAN BUS 資料庫檔案
  7. CAN BUS 通訊作業的原理
  8. NI CAN 工具
  9. NI-XNET 驅動程式
  10. NI-CAN 驅動程式

1. CAN BUS 的沿革

由博世 (Bosch) 公司於 1895 年所開發的 Controller Area Network (CAN) 通訊協定,本是要用於車內網路 (In-vehicle network)。在此之前,汽車製造商均是透過點對點接線系統,以連接車內的電子裝置。而由於車輛使用越來越多的電子裝置,因此大量的傳統接線除了將佔據許多空間之外,亦將提高成本。有鑑於此,製造商開始以車內網路取代實體接線,藉以降低接線成本、複雜度,與體積/重量。CAN BUS 即為高密度的序列匯流排系統,其原理是建構智慧型裝置的網路功能,现已成為車內網路的標準。CAN 因而迅速普及於汽車工業,而接著在 1993 年成為 ISO 11898 的國際標準。在 1994 年已發展出多項以 CAN 為標準的進階協定,如 CANopen 與 DeviceNet。其他市場也已廣泛採用這些衍生協定,並成為目前工業級通訊作業的標準。此篇技術文件將著重於車內網路的 CAN。

2. CAN BUS 的優點

CAN BUS 可提供低價位且耐用的網路,以溝通多組 CAN 裝置。舉例來說,電子控制單元 (ECU) 僅需單一的 CAN 介面,即可取代系統中所有裝置的類比與數位輸入。如此即可降低汽車的整體成本與重量。網路中的各組裝置均具備了 CAN 控制器晶片,因此更具智慧型功能。在網路中的所有裝置均可接收相關訊息。各組裝置亦可自行辨識該筆訊息是否相關並予以篩選。此外,各筆訊息均具有其優先性。若有 2 個節點同時嘗試傳送訊息,則具有較高優先性的訊息將先行發出,低優先性的訊號將延後傳送。

3. CAN BUS 應用

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

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

4. CAN BUS 的實體層 (Physical Layer)

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

高速 (High-Speed) CAN

High-speed CAN BUS 為目前最常見的實體層。High-speed CAN 網路包含 2 組接線,並可進行最高 1 Mb/s 的通訊傳輸率。High-speed CAN 亦稱為 CAN C 與 ISO 11898-2。典型的 High-speed CAN 裝置包含反鎖死煞車系統 (ABS)、引擎控制模組,與排放系統。

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

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

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

5. CAN BUS 專有名詞

CAN 裝置透過 CAN 網路,以封包傳送資料即稱為框架 (Frame)。CAN 框架包含下列要素。
  • CAN 框架 (Frame)  完整的 CAN 傳輸作業:仲裁識別號碼 (Arbitration ID)、資料位元,與回應位元 (Acknowledge bit) 等。框架亦可稱為「訊息」。

  • 框架起點 (Start-of-Frame,SOF) 位元 – 以強勢位元 (Dominant bit) – 亦為 Logic 0 – 為開頭的訊息。
  • 仲裁識別號碼 (Arbitration ID) – 可識別訊息與其優先順序。框架共有 2 種格式 – 標準格式使用 11 位元的仲裁 ID;延伸格式則是使用 29 位元的仲裁 ID。
  • 識別子延伸 (Identifier Extension,IDE) 位元 – 可區隔標準與延伸框架。
  • 遠端傳輸要求 (Remote Transmission Request,RTR) 位元 – 可從資料框架中區隔出遠端框架。強勢 (Logic 0) RTR 位元即表示 1 組資料框架。弱勢 (Logic 1) RTR 位元即表示 1 組遠端框架。
  • 資料長度碼 (Data Length Code,DLC) – 指出資料欄位所內含的位元數
  • 資料欄位(Data Field) – 包含 0 ~ 8 位元數的資料
  • 循環冗餘校驗 (Cyclic Redundancy Check,CRC) – 包含 15 位元的循環冗餘校驗碼與弱勢分隔符 (Delimiter) 位元。CRC 欄位可用於除錯。
  • 認可字元 (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 位元的資料。

6. CAN BUS 資料庫檔案

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

針對各筆訊號,CAN 資料庫可定義工程單位的轉換規則。下列資料將儲存於資料庫中:
  • 通道名稱
  • 已知訊息中的通道位置 (開始位元) 與大小 (位元數)
  • 位元組順序 (Byte order) - (Intel/Motorola)
  • 資料類型 (已簽、未簽,與 IEEE 浮點)
  • 縮放比例 (Scaling) 與單元字串 (Unit string)
  • 範圍
  • 預設值
  • 指令
透過此資訊,即可輕鬆將「原始」資訊 (往往為位元組) 轉換為「實際」值。下圖則顯示轉換範例。
CAN 資料庫檔案可能包含整組車輛的框架與訊號定義。各組網路亦具有其專屬的資料庫檔案。此外,這些資料庫檔案為各個製造商所專屬,且往往具有其機密性。
只要於 CAN 網路上針對多個框架使用資料庫檔案,則多個 CAN API (如 NI-XNET) 亦可自動將框架資訊直接轉換為實際數值。此可簡化應用開發作業,且不需擔心原始的框架數值。

7. CAN BUS 通訊作業的原理

如先前所述,CAN BUS 屬於點對點網路。意即當獨立節點要讀寫 CAN 匯流排上的資料時,並不需要透過主機控制器 CAN BUS 的基本原理是當節點準備傳送資料時,將先檢查匯流排是否處於繁忙狀態,接著將 CAN BUS 框架寫入至網路中。而傳輸完畢的 CAN 框架,將不包含傳輸節點與任何預設接收節點的位置。反之,是由整組網路的專屬仲裁 ID 標記該框架。CAN BUS 網路上的所有節點均將接收 CAN 框架,而根據該完成傳送框架的仲裁 ID,網路上的各個 CAN 節點均可決定是否要接收該框架。

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

8. NI CAN 工具

針對 CAN 應用開發作業,NI 提供多款硬體與軟體工具。NI 對不同的平台提供 CAN 介面,包含 PCI、PXI、PCMCIA,與 NI CompactRIO。而 PCI、PXI,與 PCMCIA 介面,均有其高速、低速/容錯,與單線式的實體層。在 PCI 與 PXI 方面,NI 提供業界首款可由軟體進行選擇的 CAN 介面。針對單一裝置的各組通訊埠與機板,即提供高速、低速/容錯,與單線式收發器。此亦表示,僅需透過軟體即可選擇所要使用的模式。
NI PCI-8513 – 可透過軟體進行選擇 (XS) 的 CAN 介面卡

此外,NI 所提供的各組介面卡均內附合適的驅動程式。NI CAN 介面的驅動程式細節將如下所述。

NI ECU 量測與校準工具組,可擴充 NI LabVIEW、NI LabWindows/CVI,與 Microsoft C/C++ 開發環境,以支援量測與校準應用,適於設計並校準電子控制單位 (ECU)。ECU 量測與校準 (Measurement and Calibration) 工具組則是以 CAN 校準協定 (CCP) 為架構,提供簡單易用的高階函式,可讓 ECU 工程師建立所需的客制化量測與校準應用。若需要進一步資訊,請參閱下列 ECU 量測與校準 (Measurement and Calibration) 工具組資源。

9. NI-XNET 驅動程式

NI-XNET 軟體已內含於 PCI/PXI-851x 硬體系列,並可至 ni.com 免費下載。此新的驅動程式可於 Windows 與 LabVIEW Real-Time 作業系統中,透過 NI LabVIEW、NI LabWindows/CVI,與 C/C++ 開發 CAN 與 FlexRay 應用。PCI/PXI-851x 系列屬於 NI-XNET 平台的 1 部分,可即時且高速操作數百種 CAN 框架與訊號,如硬體迴路 (HIL) 模擬、快速製作控制系統原型、匯流排監控、自動化控制,還有更多。
NI-XNET:單一 API 即可建構多個嵌入式網路
NI-XNET 平台可針對多款高效能的 CAN、FlexRay 介面,整合 NI-XNET API (簡單易用的函式集),以讀寫 CAN/FlexRay 的框架與訊號。
以更少的程式設計作業達到更高效能
NI-XNET 介面,整合初階微控制器程式設計,還有 Windows 與 LabVIEW Real-Time 作業系統的開發速度。針對電腦架構 CAN 介面的常見缺點,申請專利中的 NI-XNET 裝置驅動 DMA 引擎,可將系統潛時從毫秒 (Millisecond) 縮短到微秒 (Microsecond)。此引擎可透過快取 (On-board) 處理器,於介面與使用者程式之間搬移 CAN 架構/訊號,而不需透過電腦 CPU 進行處理;此可省下主機處理器處理複雜模型與應用的時間。

10. NI-CAN 驅動程式

NI 已於所有 NI 舊款 CAN 介面 (Legacy 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 硬體與軟體手冊的「Using the Frame API」章節 (請見下方)。

NI 則於 NI-CAN 2.0 驅動程式中首次發表 Channel API。透過於資料庫檔案 (.dbc 或 .ncd) 中所定義的通道名稱,即可讀寫 CAN 通道。Channel API 具有下列優點:
  • 高階程式設計功能
  • 簡單易用的實體單元 (Physical unit)
  • 主要用於簡易的 CAN/資料擷取的同步化作業
  • 可整合 Vector 資料庫的檔案

沒有留言: