吳志玲,靳鴻,馮彥君
(中北大學電子測試技術重點實驗室,儀器科學與動態測試教育部重點實驗室,山西太原030051)
CAN( Controller area network),即控制器局域網,是目前國際上應用最廣泛的現場總線之一。CAN為串行通信協議,能有效的支持具有很高安全等級的分布式實時控制系統。CAN的應用范圍極其廣泛,從高速的網絡到低價位的多路接線都可以使用CAN。在汽車電子行業里,使用CAN連接發動機控制單元、傳感器、剎車系統、電子系統等,其傳輸速率可達1Mbps。CAN 總線因傳輸時間短, 受干擾的概率低, 保證了通信的實時性。另外, CAN 總線[1]可對錯誤來源進行正確的定位, 將永久的硬件錯誤從軟件錯誤中獨立出來, 其協議采用CRC 檢驗并可提供相應的錯誤處理能力, 同時保證了數據通信的可靠性。
Silicon Lab公司的C8051F500單片機內部集成了CAN控制器[2],符合Bosch規范2.0A(基本CAN)和2.0B[3](全功能CAN),方便了CAN網絡通信系統的設計。由于C8051F500的高集成度,只需少量外圍測量電路便可組成集數據采集、控制和通信功能于一體的單片機系統,同時還可提高系統的整體可靠性。另外,C8051F500內核與普通51系列兼容,且指令簡單易學,因此,可縮短系統研發周期。
CAN功能節點硬件分布原理圖如圖1所示。

圖1 CAN功能節點組成原理圖
Silicon Lab公司推出的C8051F500是完全集成的混合信號片上系統型MCU。
該單片機內部集成了CAN控制器,其與收發模塊(CTM1050)共同構成CAN節點模塊。其中CAN控制器包括CAN核、消息存儲器、消息處理器和控制寄存器[4]。由于其MCU無法直接訪問消息RAM,因此有兩組位于控制寄存器的接口寄存器被用來控制CPU對消息RAM的訪問。接口寄存器通過緩存傳輸將要傳輸的數據,避免了CPU訪問消息RAM時同CAN消息的發送和接收之間的沖突。在單個傳輸時,一個完整的消息對象[5]或者消息對象的一部分在消息RAM和IFx消息緩沖寄存器之間進行可靠傳輸。兩個消息寄存器組的功能是一樣的(除了測試處于基本模式)。
CTM1050[6]是CAN控制器與CAN物理總線之間的接口芯片,其功能框圖如圖2所示。該模塊是集電源隔離、電氣隔離[7]、CAN收發器、CAN總線保護于一體的隔離CAN收發器模塊,可以實現帶隔離的CAN收發電路,從而進一步提高了系統的抗干擾能力和穩定性。其隔離電壓可以達到DC 2500 V ,并且能連接任何一款CAN協議控制器。該芯片TxD、RxD 引腳兼容+3.3V及+5V的CAN控制器,不需要外接其他元器件直接將+3.3V或+5V的CAN控制器發送、接收引腳與CTM模塊的發送、接收引腳相連接。由此可見,CTM1050接口簡單,使用方便,非常適合對體積有一定要求的系統設計。

圖2 CTM2050T功能框圖
在CAN初始化時會打開CAN中斷,即CAN總線上有數據要發送時會產生一個中斷,此時由單片機的MCU來判斷其優先級是否為最優,若是,則響應其中斷。此時單片機內的CAN處理器會控制消息緩存寄存器寫入數據,并按照協議對消息進行處理;等發送請求中斷產生,響應中斷并發送處理好的數據,此為一次數據收發過程[8]。CAN總線數據收發流程圖如圖3所示。

圖3 CAN總線收發程序流程
系統初始化主要包括端口、時鐘和CAN控制器的初始化。此處主要對CAN控制器初始化做詳細說明,其一般步驟如下:
·將SFRPAGE寄存器設置為CAN0_PAGE;
·將CAN0CN寄存器中的INIT和CCE位
設置為’1’;
·設置位定時寄存器和BRP擴展寄存器中的時序參數;
·初始化每個消息對象或將其MsgVal位設置為NOT VALID(無效);
·將INIT位清零。
其初始化部分程序如下:

系統初始化完成后,在主程序中調用接收子程序,由接收子程序來響應總線上的消息接收請求命令。接收子程序要比發送子程序復雜一些,因為在處理接收報文的過程中,還要對諸如總線關閉、錯誤報警、接收溢出等情況進行處理。下面給出部分接收子程序:


發送子程序負責節點報文的發送。發送時用戶只需將處理好的待發送的數據按特定的格式組合成一幀報文,送入發送緩存區中,然后啟動發送即可。由于發送過程與接收過程只是數據緩存寄存器與消息RAM之間的數據傳輸方向有所不同,故在此不再贅述。
此次設計采用IDE開發環境,并用其進行仿真,所用適配器為新華龍公司最新產品U-EC6。如圖4所示,為實驗仿真結果中各寄存器、地址空間和相關變量的值。此CAN節點的通信速率為1Mbps,將適配器與目標節點相連接,再通過USB數據線分別與PC相連,由上位機控制總線給節點發送命令,進行數據的接受,并對其進行處理,等待發送中斷到來,再將總線所需數據發送回總線。實驗結果顯示:數據傳送完整、準確、高效,并且有效的解決了系統數據沖突等問題,滿足本次設計的初衷。

圖4 結果仿真顯示
本次設計采用由內部集成了CAN控制的C8051500單片機與隔離CAN收發器CTM1050共同構成的模塊作為CAN總線通信系統的智能節點。首先,解決了節點的CPU在訪問消息RAM時同CAN消息的發送與接收發生沖突等問題;其次,使微控制器這一核心部件的控制得以簡化;最后,由于同以往的節點相比減少了外部隔離光耦,還使得單片機的外圍電路得到大大簡化,從而使系統的穩定性、可靠性及實時性得到進一步高。
[3]李迎.基于C8051F040的CAN總線接口嵌入式系統開發[J].電子測量技術,2009(2):90-94.
[4]饒運濤,鄒繼軍,鄭永云.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2003.
[5]袁越陽.C8051F040的CAN模塊應用研究[J].單片機與嵌入式系統應用,2008(10):76-79.
[6]楊春杰,王曙光,亢紅波,等.CAN總線技術[M].北京:北京航空航天大學出版社,2010.
[7]于曉光.CAN總線隔離器的設計與應用[J].電子設計工程,2009(12):1-4.
[8]于成毅,裴東興,梁志劍.基于CAN總線的數據采集節點的設計[J].電子測試,2009(11):62-66.
[1]王黎明,夏立,邵英,閆曉玲.CAN現場總線系統的設計與應用[M].北京:電子工業出版社,2008.
[2]鮑可進.C8051F單片機原理及應[M].北京:中國電力出版社,2006.