戴培駿 張登軍
(1.大陸汽車系統有限公司,上海 201807;2.廣東博觀科技有限公司,廣東 珠海 519080)
CAN (Controller Area Network) 即控制器局域網絡,是ISO國際標準化的串行通信協議。因其具有低開發成本、高傳輸速率、高可靠性等特點,CAN被廣泛應用于汽車、機器人、數控機床、自動化儀表等領域。
在當前的汽車產業中,各種電子控制系統之間通信所用的數據類型,及對可靠性的要求不盡相同,由多條總線構成的情況很多,線束的數量也隨之增加。出于安全性、舒適性、方便性、低公害、低成本的要求,1986年德國BOSCH公司開發出面向汽車的CAN通信協議。此后,CAN通信協議通過ISO11898及ISO11519進行了標準化,目前在歐洲已是汽車網絡的標準協議。
CAN通信協議最初由德國BOSCH公司,為解決現代汽車內部大量的控制系統與傳感器、執行機構之間的數據交換而開發的一種串行數據通信協議。目前汽車上的CAN網絡分為一條傳輸速率為500Kbps的高速CAN,主要連接發動機、剎車系統、動力總成等系統;以及另一條傳輸速率為 100Kbps的低速 CAN,主要連接汽車燈光、車窗及門鎖、空調、組合儀表等系統。
CAN總線以目前技術條件較成熟的ISO/OSI模型為基礎,覆蓋了ISO/OSI基本參照模型中的傳輸層、數據鏈路層及物理層。與其它網絡相比,具有以下特點:
(1)CAN是一種多主總線系統,任意節點均可在總線空閑時發送報文;
(2)CAN協議對數據塊進行編碼,使網絡節點數在電氣特性的限制下最多可達110;
(3)CAN節點的信息分成不同的優先級,可滿足不同通信的實時要求;
(4)CAN采用非破壞性總線仲裁技術,極大地節省了總線沖突仲裁時間;
(5)CAN報文不包含源地址或目標地址,僅用標識符來指示功能信息、優先級信息。通過報文濾波可實現點對點、一點對多點及全局廣播等幾種方式進行數據通信;
(6)CAN采用短幀結構,數據傳輸時間短,受干擾的概率低;
(7)CAN節點在錯誤嚴重的情況下自動關閉總線,不影響其它節點;
(8)CAN協議采用CRC檢驗并提供相應錯誤處理功能,保證了數據通信的可靠性。
CAN通信協議主要由CAN控制器完成,SJA1000主要由CAN核心模塊和接口管理邏輯模塊組成。CAN核心模塊控制CAN總線幀的發送和接收,接口管理邏輯模塊提供 SJA1000與微處理器或其它設備的連接。SJA1000結構框圖如圖1所示。

圖1 SJA1000結構框圖
通過正確的配置,SJA1000能自動完成CAN總線物理層和數據鏈路層的所有功能,對于單片機來說,可以把它看成一個基本的I/O設備。SJA1000的主要特性如下:
(1)標準幀和擴展幀信息的接收和傳送。
(2)擴展的接收緩沖器(64字節FIFO)。
(3)在標準和擴展格式中都有單/雙驗收濾波器(含屏蔽和代碼寄存器)。
(4)支持多種微處理器接口。
CAN Bus通信節點接口電路如圖2所示,主要由CAN收發器PCA82C250、CAN控制器SJA1000、主控制器89C51單片機及物理總線接口電路組成。
當CAN節點處于CAN Bus網絡終端時,需要在CAN_H和CAN_L之間增加阻值為120Ω的終端電阻。終端電阻對于匹配CAN物理總線的特征阻抗具有重要的作用,無終端電阻會使CAN通信的抗干擾性及可靠性大大降低,甚至無法進行正常通信。

圖2 CAN Bus通信節點接口電路圖
89C51單片機是整個CAN Bus接口電路的主控制器,負責 SJA1000的初始化,并且控制 SJA1000完成 CAN通信。SJA1000作為CAN協議轉換的控制器,通過對片內寄存器的讀、寫操作,89C51單片機能夠設置CAN通信模式,實現數據的發送與接收。
PCA82C250提供對物理總線的差動發送能力和對CAN控制器的差動接收能力,與ISO11898標準兼容。在運動環境中,具有抗瞬變、抗射頻和抗電磁干擾性能,內部的限流電路具有電路短路時對傳送輸出級進行保護的功能。
SJA1000的多路地址/數據總線AD0~AD7連接89C51單片機的輸入/輸出端口 P0,89C51單片機通過此地址可對SJA1000片內寄存器執行相應的讀、寫操作,完成相應的通信功能。SJA1000的發送/接收口 TX0和 RX0分別連接PCA82C250的TX0和RX0,接收或發送CAN報文。SJA1000 RST連接89C51單片機的輸入/輸出端口,通過其軟件程序來控制SJA1000完成復位操作。
CAN Bus通信系統要有效、實時地完成通信任務,系統的軟件設計是關鍵。系統軟件的設計主要包括CAN節點初始化、CAN報文接收以及CAN報文發送。
SJAl000的內部寄存器是作為89C51單片機的片外寄存器工作的,89C51單片機與SJAl000間狀態、控制和命令的交換都是通過在復位模式或工作模式下對寄存器進行讀、寫操作來完成的。
在初始化CAN Bus內部寄存器時,必須使各節點的位速率一致,而且收、發雙方必須同步。報文的接收主要有中斷和查詢兩種接收方式。為提高通信的實時性,采用中斷接收方式,這樣也可保證接收緩沖器不會出現數據溢出現象。
CAN節點初始化主要是設置 SJA1000的通信參數,SJA1000初始化流程如圖3所示。SJA1000初始化在復位模式才可進行,在主控制器發送信息到SJA1000的控制段后,清除復位模式/請求標志位,通過循環讀標志位確認是否進入工作模式才能進行下一步操作。

圖3 SJA1000初始化流程圖
CAN報文發送由SJA1000獨立完成,發送流程如圖4所示。89C51將要發送的數據根據CAN通信協議封裝,傳送到空閑的發送緩沖器,然后將命令寄存器中的發送請求標志位置位,SJA1000將自動向CAN Bus發送數據。若正在發送報文,發送緩沖器就被寫鎖定。

圖4 CAN報文發送流程圖
CAN報文接收由SJA1000獨立完成,接收流程如圖5所示。CAN Bus并不是總在通信,為了提高通信效率,采用中斷接收方式。SJA1000接收的報文數據放在接收緩沖器內,同時將狀態寄存器的接收緩沖器狀態位RBS和接收中斷標志位RI置位,并向89C51發送接收中斷,啟動中斷接收服務程序,89C51通過執行中斷接收服務程序,從SJA1000的接收緩沖區讀取報文數據,并存儲到單片機的內存單元,然后釋放接收緩沖器。

圖5 CAN報文接收流程圖
設計完成了基于89C51單片機和CAN控制器SJA1000的CAN Bus通信節點接口電路。CAN Bus通信系統結構簡單、適應性和可擴展性強,CAN Bus以其分時多主、非破壞性總線仲裁和自動檢錯重發的技術特點有效地提高了通信的可靠性,從而使現場調試更加方便,縮短了開發周期。實踐證明,CAN Bus具有很高的可靠性和的性價比,是目前較為理想的現場總線之一。
[1] 鄔寬明.CAN 總線原理和應用系統設計[M].北京:北京航空航天大學出版社,2006.
[2] 饒運濤,鄒繼軍.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2007.
[3] 賈智平,張瑞華.嵌入式系統原理與接口技術[M].北京:清華大學出版社,2005.