CAN通訊

 CAN全稱爲Controller Area Network,即控制器局域網,由德國Bosch公司最先提出,是國際上應用最廣泛的現場總線之一。最初CAN 被設計作爲汽車環境中的通訊,在汽車電子控制裝置之間交換信息形成汽車電子控制網絡。由於其卓越的性能、極高的可靠性和低廉的價格現已廣泛應用於工業現場控制、醫療儀器等衆多領域。

CAN協議是建立在OSI 7層開放互連參考模型基礎之上的。但CAN協議只定義了模型的最下面兩層:數據鏈路層和物理層,僅保證了節點間無差錯的數據傳輸。CAN的應用層協議必須由CAN 用戶自行定義,或採用一些國際組織制訂的標準協議。應用最爲廣泛的是DeviceNet和CANopen,分別廣泛應用於過程控制和機電控制領域。但此類協議一般結構比較複雜,更適合複雜大型系統的應用。筆者在研製一種基於CAN總線的分佈式高頻開關電源充電機系統的過程中設計了一種適合於小型控制系統的CAN總線高層通信協議。

2 CAN的特點
CAN 是一種多主方式的串行通訊總線,基本設計規範要求有高的位速率、抗電磁干擾性,而且要能夠檢測出總線的任何錯誤。當信號傳輸距離達10km時,CAN仍可提供高達50kbps 的數據傳輸速率。
CAN具有十分優越的特點:
(1) 較低的成本與極高的總線利用率;
(2) 數據傳輸距離可長達10km,傳輸速率可高達1Mbps[7];
(3) 可靠的錯誤處理和檢錯機制,發送的信息遭到破壞後可自動重發;
(4) 節點在錯誤嚴重的情況下具有自動退出總線的功能;
(5) 報文不包含源地址或目標地址,僅用標誌符來指示功能信息和優先級信息。

3 CAN的技術規範
(1) 幀類型
在CAN總線中,有四種不同的幀類型[4][5]:
·數據幀(Data Frame) 數據幀帶有應用數據;
·遠程幀(Remote Frame) 通過發送遠程幀可以向網絡請求數據,啓動其他資源節點傳送他們各自的數據,遠程幀包含6個不同的位域:幀起始、仲裁域、控制域、CRC域、應答域、幀結尾。仲裁域中的RTR位的隱極性表示爲遠程幀;
·錯誤幀(Error Frame)錯誤幀能夠報告每個節點的出錯,由兩個不同的域組成,第一個域是不同站提供的錯誤標誌的疊加,第二個域是錯誤界定符;
·過載幀(Overload Frame)如果節點的接收尚未準備好就會傳送過載幀,由兩個不同的域組成,第一個域是過載標誌,第二個域是過載界定符。
(2) 數據幀結構
數據幀由以下7個不同的位域(Bit Field)組成:幀起始、仲裁域、控制域、數據域、CRC域、應答域、幀結尾。
[4]

·幀起始:標誌幀的開始,它由單個顯性位構成,在總線空閒時發送,在總線上產生同步作用。
·仲裁域:由11位標識符(ID10-ID0)和遠程發送請求位(RTR)組成,RTR位爲顯性表示該幀爲數據幀,隱性表示該幀爲遠程幀;標識符由高至低按次序發送,且前7位 (ID10-ID4)不能全爲顯性位。標識符ID用來描述數據的含義而不用於通信尋址,CAN總線的幀是沒有尋址功能的。標識符還用於決定報文的優先權,ID值越低優先權越高,在競爭總線時,優先權高的報文優先發送,優先權低報文退出總線競爭。CAN總線競爭的算法效率很高,是一種非破壞性競爭。
·控制域:爲數據長度碼 (DLC3-DLC0),表示數據域中數據的字節數,不得超過8。
·數據域:由被髮送數據組成,數目與控制域中設定的字節數相等,第一個字節的最高位首先被髮送。其長度在標準幀中不超過8個字節。
·CRC域:包括CRC(循環冗餘碼校驗)序列(15位)和CRC界定符(1個隱性位),用於幀校驗。
l應答域:由應答間隙和應答界定符組成,共兩位;發送站發送兩個隱性位,接收站在應答間隙中發送顯性位。應答界定符必須是隱性位。
·幀結束:由7位隱性位組成。

4 自訂CAN高層協議
CAN的高層協議也可理解爲應用層協議,是一種在現有的底層協議(物理層和數據鏈路層)之上實現的協議。由於充電機系統的結構比較簡單,網絡規模也比較小。因此我們自行制訂了一種簡單而有效的高層通信協議。

技術規範CAN2.0A規定標準的數據幀有11位標識符,用戶可以自行規定其含義,將所需要的信息包含在內。在充電機系統中,每一個節點都有一個唯一的地址,地址碼和模塊一一對應,通過撥碼開關設定,總線上數據的傳送也是根據地址進行的。由於本系統規模較小,節點數少於32個,因此爲每個模塊分配一個5位的地址碼,同一系統中地址碼不得重複,系統初始化時由外部引腳讀入。將標識符ID9-ID5定義爲源地址,ID4-ID0定義爲目的地址,本協議中從模塊的目的地址全填0,表示數據是廣播數據,所有節點都可接收,主模塊中目的地址根據要進行通信目的模塊的地址確定。

理論上源地址和目的地址的範圍都是0~31,但由於CAN協議中規定標識符前7位不能全爲顯性位,所以源地址不能爲31,這時實際節點只有31個(0~30)。因此每個系統所含的模塊不超過31個。所以源地址和目的地址的範圍縮減到0~30。同時上位監控機也要佔用一個地址,因此係統中的電源模塊不超過30個,設計時根據節點的優先權高低從小到大分配節點地址。ID10位定義爲主模塊識別碼,該位主模塊爲隱性位,從模塊爲顯性位,以保證主模塊通信優先。模塊的地址碼決定發送數據的優先級。主模塊向總線發送的數據有兩種:一種是目的地址全部填0的廣播數據;另一種是包含特定目的地址的非廣播數據。

協議中一幀數據最多能傳送8個字節,對於充電機控制系統來說已經足夠用了,本系統只用到其中的前5個字節,其餘3個節字可用於以後的擴展使用,因此未定義多幀傳輸方式。

從模塊以廣播形式向總線發送數據,同時回收自己發送的數據,若檢測到所發送與所收到的數據不符,則立即重新發送上一幀數據。從模塊發送信息的順序由主模塊的發出的指令決定,以免在總線通信繁忙時優先級較低的模塊始終得不到總線通信權。指令的發送順序按照各從模塊的地址順序進行,即地址較低的從模塊首先獲得指令,得以發送自己的地址碼和電流、溫度採樣值。如發生衝突,則由CAN控制器自動根據模塊的優先級調整發送順序,在CAN的底層協議中有完善的優先級仲裁算法,因此應用層協議不必考慮此類問題。

對於每個模塊,上電1s後若未收到任何通信信息,則按計算延時發送自身的地址碼和溫度電流採樣值。延時時間的計算爲[6]:
tdelay=T×ADD
其中:tdelay-爲延時發送時間;
T-爲單位延時時間常數,該值根據通信速率定義;可以取1個位週期,在波特率爲100kHz時爲10μs;
ADD-爲模塊地址編碼。

主模塊是ID10=0的模塊,因此具有最高的優先級。上電後主模塊首先向總線廣播發送自身的地址碼和溫度電流採樣值,然後即按順序向從機發送指令,等待從機的回答。主機1秒鐘後若未收到任何通信信息則認爲該模塊出錯,發出報警。同樣從機1s後若未收到主機任何通信信息則認爲主機出錯,按照源地址優先級由其餘模塊中地址最低的模塊充當主模塊,並將其ID10由1改爲0,以獲得最高通信優先權。

各模塊檢測到自身故障時,將切斷輸出,退出通信,並向上位機報警,同時發出聲光報警。

5 結束語
本文中所介紹的CAN高層通信協議,結構簡單、使用靈活、可靠性極高,實現也比較容易。很適合在節點數不多、通信可靠性要求高、控制結構較簡單的小型控制系統中應用,具有一定的實用價值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章