新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種CAN總線高層通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)

一種CAN總線高層通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

1 引言

本文引用地址:http://butianyuan.cn/article/201609/303364.htm

can全稱為controller area network,即控制器局域網(wǎng),由德國bosch公司最先提出,是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初can 被設(shè)計(jì)作為汽車環(huán)境中的通訊,在汽車電子控制裝置之間交換信息形成汽車電子控制網(wǎng)絡(luò)。由于其卓越的性能、極高的可靠性和低廉的價(jià)格現(xiàn)已廣泛應(yīng)用于工業(yè)現(xiàn)場控制、醫(yī)療儀器等眾多領(lǐng)域[1][2]。

can協(xié)議是建立在osi 7層開放互連參考模型基礎(chǔ)之上的。但can協(xié)議只定義了模型的最下面兩層:數(shù)據(jù)鏈路層和物理層,僅保證了節(jié)點(diǎn)間無差錯(cuò)的數(shù)據(jù)傳輸。can的應(yīng)用層協(xié)議必須 由can 用戶自行定義,或采用一些國際組織制訂的標(biāo)準(zhǔn)協(xié)議。應(yīng)用最為廣泛的是devicenet和canopen,分別廣泛應(yīng)用于過程控制和機(jī)電控制領(lǐng)域。但此類協(xié)議一般結(jié)構(gòu)比較復(fù)雜,更適合復(fù)雜大型系統(tǒng)的應(yīng)用。筆者在研制一種基于can總線的分布式高頻開關(guān)電源充電機(jī)系統(tǒng)的過程中設(shè)計(jì)了一種適合于小型控制系統(tǒng)的 can總線通信協(xié)議。

2 can的特點(diǎn)[3]

can 是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有高的位速率、抗電磁干擾性,而且要能夠檢測出總線的任何錯(cuò)誤。當(dāng)信號傳輸距離達(dá)10km時(shí),can仍可 提供高達(dá)50kbps 的數(shù)據(jù)傳輸速率。

can具有十分優(yōu)越的特點(diǎn):

(1) 較低的成本與極高的總線利用率;

(2) 數(shù)據(jù)傳輸距離可長達(dá)10km,傳輸速率可高達(dá)1mbps[7];

(3) 可靠的錯(cuò)誤處理和檢錯(cuò)機(jī)制,發(fā)送的信息遭到破壞后可自動(dòng)重發(fā);

(4) 節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)退出總線的功能;

(5) 報(bào)文不包含源地址或目標(biāo)地址,僅用標(biāo)志符來指示功能信息和優(yōu)先級信息。

3 can的技術(shù)規(guī)范

(1) 幀類型

在can總線中,有四種不同的幀類型[4][5]:

·數(shù)據(jù)幀(data frame) 數(shù)據(jù)幀帶有應(yīng)用數(shù)據(jù);

· 遠(yuǎn)程幀(remote frame) 通過發(fā)送遠(yuǎn)程幀可以向網(wǎng)絡(luò)請求數(shù)據(jù),啟動(dòng)其他資源節(jié)點(diǎn)傳送他們各自的數(shù)據(jù),遠(yuǎn)程幀包含6個(gè)不同的位域:幀起始、仲裁域、控制域、crc域、應(yīng)答域、幀結(jié)尾。仲裁域中的rtr位的隱極性表示為遠(yuǎn)程幀;

·錯(cuò)誤幀(error frame)錯(cuò)誤幀能夠報(bào)告每個(gè)節(jié)點(diǎn)的出錯(cuò),由兩個(gè)不同的域組成,第一個(gè)域是不同站提供的錯(cuò)誤標(biāo)志的疊加,第二個(gè)域是錯(cuò)誤界定符;

·過載幀 (overload frame)如果節(jié)點(diǎn)的接收尚未準(zhǔn)備好就會(huì)傳送過載幀,由兩個(gè)不同的域組成,第一個(gè)域是過載標(biāo)志,第二個(gè)域是過載界定符。

(2) 數(shù)據(jù)幀結(jié)構(gòu)

數(shù)據(jù)幀由以下7個(gè)不同的位域(bit field)組成:幀起始、仲裁域、控制域、數(shù)據(jù)域、crc域、應(yīng)答域、幀結(jié)尾。其標(biāo)準(zhǔn)幀結(jié)構(gòu)如表1所示:

表1 數(shù)據(jù)幀的結(jié)構(gòu)[4]

·幀起始:標(biāo)志幀的開始,它由單個(gè)顯性位構(gòu)成,在總線空閑時(shí)發(fā)送,在總線上產(chǎn)生同步作用。

·仲裁域: 由11位標(biāo)識符(id10-id0)和遠(yuǎn)程發(fā)送請求位(rtr)組成,rtr位為顯性表示該幀為數(shù)據(jù)幀,隱性表示該幀為遠(yuǎn)程幀;標(biāo)識符由高至低按次序發(fā)送,且前7位 (id10-id4)不能全為顯性位。標(biāo)識符id用來描述數(shù)據(jù)的含義而不用于通信尋址,can總線的幀是沒有尋址功能的。標(biāo)識符還用于決定報(bào)文的優(yōu)先權(quán),id值越低優(yōu)先權(quán)越高,在競爭總線時(shí),優(yōu)先權(quán)高的報(bào)文優(yōu)先發(fā)送,優(yōu)先權(quán)低報(bào)文退出總線競爭。can總線競爭的算法效率很高,是一種非破壞性競爭。

· 控制域:為數(shù)據(jù)長度碼 (dlc3-dlc0),表示數(shù)據(jù)域中數(shù)據(jù)的字節(jié)數(shù),不得超過8。

·數(shù)據(jù)域:由被發(fā)送數(shù)據(jù)組成,數(shù)目與控制域中設(shè)定的字節(jié) 數(shù)相等,第一個(gè)字節(jié)的最高位首先被發(fā)送。其長度在標(biāo)準(zhǔn)幀中不超過8個(gè)字節(jié)。

·crc域:包括crc(循環(huán)冗余碼校驗(yàn))序列(15位)和crc界定 符(1個(gè)隱性位),用于幀校驗(yàn)。

l應(yīng)答域:由應(yīng)答間隙和應(yīng)答界定符組成,共兩位;發(fā)送站發(fā)送兩個(gè)隱性位,接收站在應(yīng)答間隙中發(fā)送顯性位。應(yīng)答界定符必須是隱性位。

·幀結(jié)束:由7位隱性位組成。

4 自訂can協(xié)議

can的協(xié)議也可理解為應(yīng)用層協(xié)議,是一種在現(xiàn)有的底層協(xié)議(物理層和數(shù)據(jù)鏈路層)之上實(shí)現(xiàn)的協(xié)議。由于充電機(jī)系統(tǒng)的結(jié)構(gòu)比較簡單,網(wǎng)絡(luò)規(guī)模也比較 小。因此我們自行制訂了一種簡單而有效的高層通信協(xié)議。

技術(shù)規(guī)范can2.0a規(guī)定標(biāo)準(zhǔn)的數(shù)據(jù)幀有11位標(biāo)識符,用戶可以自行規(guī)定其含義,將所需要的信息包含在內(nèi)。在充電機(jī)系統(tǒng)中,每一個(gè)節(jié)點(diǎn)都有一個(gè)唯一的地址,地址碼和模塊一一對應(yīng),通過撥碼開關(guān)設(shè)定,總線上數(shù)據(jù)的傳送也是根據(jù)地址進(jìn)行的。由于本系統(tǒng)規(guī)模較小,節(jié)點(diǎn)數(shù)少于32個(gè),因此為每個(gè)模塊分配一個(gè)5位 的地址碼,同一系統(tǒng)中地址碼不得重復(fù),系統(tǒng)初始化時(shí)由外部引腳讀入。將標(biāo)識符id9-id5定義為源地址,id4-id0定義為目的地址,本協(xié)議中從模塊 的目的地址全填0,表示數(shù)據(jù)是廣播數(shù)據(jù),所有節(jié)點(diǎn)都可接收,主模塊中目的地址根據(jù)要進(jìn)行通信目的模塊的地址確定。本通信協(xié)議的數(shù)據(jù)幀格式詳見表2。

表2 數(shù)據(jù)幀格式

理論上源地址和目的地址的范圍都是0~31,但由于can協(xié)議中規(guī)定標(biāo)識符前7位不能全為顯性位,所以源地址不能為31,這時(shí)實(shí)際節(jié)點(diǎn)只有31 個(gè) (0~30)。因此每個(gè)系統(tǒng)所含的模塊不超過31個(gè)。所以源地址和目的地址的范圍縮減到0~30。同時(shí)上位監(jiān)控機(jī)也要占用一個(gè)地址,因此系統(tǒng)中的電源模塊 不超過30個(gè),設(shè)計(jì)時(shí)根據(jù)節(jié)點(diǎn)的優(yōu)先權(quán)高低從小到大分配節(jié)點(diǎn)地址。id10位定義為主模塊識別碼,該位主模塊為隱性位,從模塊為顯性位,以保證主模塊通信優(yōu)先。模塊的地址碼決定發(fā)送數(shù)據(jù)的優(yōu)先級。主模塊向總線發(fā)送的數(shù)據(jù)有兩種:一種是目的地址全部填0的廣播數(shù)據(jù);另一種是包含特定目的地址的非廣播數(shù)據(jù)。

協(xié)議中一幀數(shù)據(jù)最多能傳送8個(gè)字節(jié),對于充電機(jī)控制系統(tǒng)來說已經(jīng)足夠用了,本系統(tǒng)只用到其中的前5個(gè)字節(jié),其余3個(gè)節(jié)字可用于以后的擴(kuò)展使用,因此未定義 多幀傳輸方式。

從模塊以廣播形式向總線發(fā)送數(shù)據(jù),同時(shí)回收自己發(fā)送的數(shù)據(jù),若檢測到所發(fā)送與所收到的數(shù)據(jù)不符,則立即重新發(fā)送上一幀數(shù)據(jù)。從模塊發(fā)送信息的順序由主模塊的發(fā)出的指令決定,以免在總線通信繁忙時(shí)優(yōu)先級較低的模塊始終得不到總線通信權(quán)。指令的發(fā)送順序按照各從模塊的地址順序進(jìn)行,即地址較低的從模塊首先獲得 指令,得以發(fā)送自己的地址碼和電流、溫度采樣值。如發(fā)生沖突,則由can控制器自動(dòng)根據(jù)模塊的優(yōu)先級調(diào)整發(fā)送順序,在can的底層協(xié)議中有完善的優(yōu)先級仲裁算法,因此應(yīng)用層協(xié)議不必考慮此類問題。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉