戴培駿 張登軍
(1.大陸汽車系統(tǒng)有限公司,上海 201807;2.廣東博觀科技有限公司,廣東 珠海 519080)
CAN (Controller Area Network) 即控制器局域網(wǎng)絡(luò),是ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議。因其具有低開發(fā)成本、高傳輸速率、高可靠性等特點,CAN被廣泛應(yīng)用于汽車、機器人、數(shù)控機床、自動化儀表等領(lǐng)域。
在當(dāng)前的汽車產(chǎn)業(yè)中,各種電子控制系統(tǒng)之間通信所用的數(shù)據(jù)類型,及對可靠性的要求不盡相同,由多條總線構(gòu)成的情況很多,線束的數(shù)量也隨之增加。出于安全性、舒適性、方便性、低公害、低成本的要求,1986年德國BOSCH公司開發(fā)出面向汽車的CAN通信協(xié)議。此后,CAN通信協(xié)議通過ISO11898及ISO11519進行了標(biāo)準(zhǔn)化,目前在歐洲已是汽車網(wǎng)絡(luò)的標(biāo)準(zhǔn)協(xié)議。
CAN通信協(xié)議最初由德國BOSCH公司,為解決現(xiàn)代汽車內(nèi)部大量的控制系統(tǒng)與傳感器、執(zhí)行機構(gòu)之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信協(xié)議。目前汽車上的CAN網(wǎng)絡(luò)分為一條傳輸速率為500Kbps的高速CAN,主要連接發(fā)動機、剎車系統(tǒng)、動力總成等系統(tǒng);以及另一條傳輸速率為 100Kbps的低速 CAN,主要連接汽車燈光、車窗及門鎖、空調(diào)、組合儀表等系統(tǒng)。
CAN總線以目前技術(shù)條件較成熟的ISO/OSI模型為基礎(chǔ),覆蓋了ISO/OSI基本參照模型中的傳輸層、數(shù)據(jù)鏈路層及物理層。與其它網(wǎng)絡(luò)相比,具有以下特點:
(1)CAN是一種多主總線系統(tǒng),任意節(jié)點均可在總線空閑時發(fā)送報文;
(2)CAN協(xié)議對數(shù)據(jù)塊進行編碼,使網(wǎng)絡(luò)節(jié)點數(shù)在電氣特性的限制下最多可達110;
(3)CAN節(jié)點的信息分成不同的優(yōu)先級,可滿足不同通信的實時要求;
(4)CAN采用非破壞性總線仲裁技術(shù),極大地節(jié)省了總線沖突仲裁時間;
(5)CAN報文不包含源地址或目標(biāo)地址,僅用標(biāo)識符來指示功能信息、優(yōu)先級信息。通過報文濾波可實現(xiàn)點對點、一點對多點及全局廣播等幾種方式進行數(shù)據(jù)通信;
(6)CAN采用短幀結(jié)構(gòu),數(shù)據(jù)傳輸時間短,受干擾的概率低;
(7)CAN節(jié)點在錯誤嚴重的情況下自動關(guān)閉總線,不影響其它節(jié)點;
(8)CAN協(xié)議采用CRC檢驗并提供相應(yīng)錯誤處理功能,保證了數(shù)據(jù)通信的可靠性。
CAN通信協(xié)議主要由CAN控制器完成,SJA1000主要由CAN核心模塊和接口管理邏輯模塊組成。CAN核心模塊控制CAN總線幀的發(fā)送和接收,接口管理邏輯模塊提供 SJA1000與微處理器或其它設(shè)備的連接。SJA1000結(jié)構(gòu)框圖如圖1所示。
圖1 SJA1000結(jié)構(gòu)框圖
通過正確的配置,SJA1000能自動完成CAN總線物理層和數(shù)據(jù)鏈路層的所有功能,對于單片機來說,可以把它看成一個基本的I/O設(shè)備。SJA1000的主要特性如下:
(1)標(biāo)準(zhǔn)幀和擴展幀信息的接收和傳送。
(2)擴展的接收緩沖器(64字節(jié)FIFO)。
(3)在標(biāo)準(zhǔn)和擴展格式中都有單/雙驗收濾波器(含屏蔽和代碼寄存器)。
(4)支持多種微處理器接口。
CAN Bus通信節(jié)點接口電路如圖2所示,主要由CAN收發(fā)器PCA82C250、CAN控制器SJA1000、主控制器89C51單片機及物理總線接口電路組成。
當(dāng)CAN節(jié)點處于CAN Bus網(wǎng)絡(luò)終端時,需要在CAN_H和CAN_L之間增加阻值為120Ω的終端電阻。終端電阻對于匹配CAN物理總線的特征阻抗具有重要的作用,無終端電阻會使CAN通信的抗干擾性及可靠性大大降低,甚至無法進行正常通信。
圖2 CAN Bus通信節(jié)點接口電路圖
89C51單片機是整個CAN Bus接口電路的主控制器,負責(zé) SJA1000的初始化,并且控制 SJA1000完成 CAN通信。SJA1000作為CAN協(xié)議轉(zhuǎn)換的控制器,通過對片內(nèi)寄存器的讀、寫操作,89C51單片機能夠設(shè)置CAN通信模式,實現(xiàn)數(shù)據(jù)的發(fā)送與接收。
PCA82C250提供對物理總線的差動發(fā)送能力和對CAN控制器的差動接收能力,與ISO11898標(biāo)準(zhǔn)兼容。在運動環(huán)境中,具有抗瞬變、抗射頻和抗電磁干擾性能,內(nèi)部的限流電路具有電路短路時對傳送輸出級進行保護的功能。
SJA1000的多路地址/數(shù)據(jù)總線AD0~AD7連接89C51單片機的輸入/輸出端口 P0,89C51單片機通過此地址可對SJA1000片內(nèi)寄存器執(zhí)行相應(yīng)的讀、寫操作,完成相應(yīng)的通信功能。SJA1000的發(fā)送/接收口 TX0和 RX0分別連接PCA82C250的TX0和RX0,接收或發(fā)送CAN報文。SJA1000 RST連接89C51單片機的輸入/輸出端口,通過其軟件程序來控制SJA1000完成復(fù)位操作。
CAN Bus通信系統(tǒng)要有效、實時地完成通信任務(wù),系統(tǒng)的軟件設(shè)計是關(guān)鍵。系統(tǒng)軟件的設(shè)計主要包括CAN節(jié)點初始化、CAN報文接收以及CAN報文發(fā)送。
SJAl000的內(nèi)部寄存器是作為89C51單片機的片外寄存器工作的,89C51單片機與SJAl000間狀態(tài)、控制和命令的交換都是通過在復(fù)位模式或工作模式下對寄存器進行讀、寫操作來完成的。
在初始化CAN Bus內(nèi)部寄存器時,必須使各節(jié)點的位速率一致,而且收、發(fā)雙方必須同步。報文的接收主要有中斷和查詢兩種接收方式。為提高通信的實時性,采用中斷接收方式,這樣也可保證接收緩沖器不會出現(xiàn)數(shù)據(jù)溢出現(xiàn)象。
CAN節(jié)點初始化主要是設(shè)置 SJA1000的通信參數(shù),SJA1000初始化流程如圖3所示。SJA1000初始化在復(fù)位模式才可進行,在主控制器發(fā)送信息到SJA1000的控制段后,清除復(fù)位模式/請求標(biāo)志位,通過循環(huán)讀標(biāo)志位確認是否進入工作模式才能進行下一步操作。
圖3 SJA1000初始化流程圖
CAN報文發(fā)送由SJA1000獨立完成,發(fā)送流程如圖4所示。89C51將要發(fā)送的數(shù)據(jù)根據(jù)CAN通信協(xié)議封裝,傳送到空閑的發(fā)送緩沖器,然后將命令寄存器中的發(fā)送請求標(biāo)志位置位,SJA1000將自動向CAN Bus發(fā)送數(shù)據(jù)。若正在發(fā)送報文,發(fā)送緩沖器就被寫鎖定。
圖4 CAN報文發(fā)送流程圖
CAN報文接收由SJA1000獨立完成,接收流程如圖5所示。CAN Bus并不是總在通信,為了提高通信效率,采用中斷接收方式。SJA1000接收的報文數(shù)據(jù)放在接收緩沖器內(nèi),同時將狀態(tài)寄存器的接收緩沖器狀態(tài)位RBS和接收中斷標(biāo)志位RI置位,并向89C51發(fā)送接收中斷,啟動中斷接收服務(wù)程序,89C51通過執(zhí)行中斷接收服務(wù)程序,從SJA1000的接收緩沖區(qū)讀取報文數(shù)據(jù),并存儲到單片機的內(nèi)存單元,然后釋放接收緩沖器。
圖5 CAN報文接收流程圖
設(shè)計完成了基于89C51單片機和CAN控制器SJA1000的CAN Bus通信節(jié)點接口電路。CAN Bus通信系統(tǒng)結(jié)構(gòu)簡單、適應(yīng)性和可擴展性強,CAN Bus以其分時多主、非破壞性總線仲裁和自動檢錯重發(fā)的技術(shù)特點有效地提高了通信的可靠性,從而使現(xiàn)場調(diào)試更加方便,縮短了開發(fā)周期。實踐證明,CAN Bus具有很高的可靠性和的性價比,是目前較為理想的現(xiàn)場總線之一。
[1] 鄔寬明.CAN 總線原理和應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 饒運濤,鄒繼軍.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2007.
[3] 賈智平,張瑞華.嵌入式系統(tǒng)原理與接口技術(shù)[M].北京:清華大學(xué)出版社,2005.