吳志玲,靳鴻,馮彥君
(中北大學電子測試技術重點實驗室,儀器科學與動態(tài)測試教育部重點實驗室,山西太原030051)
CAN( Controller area network),即控制器局域網(wǎng),是目前國際上應用最廣泛的現(xiàn)場總線之一。CAN為串行通信協(xié)議,能有效的支持具有很高安全等級的分布式實時控制系統(tǒng)。CAN的應用范圍極其廣泛,從高速的網(wǎng)絡到低價位的多路接線都可以使用CAN。在汽車電子行業(yè)里,使用CAN連接發(fā)動機控制單元、傳感器、剎車系統(tǒng)、電子系統(tǒng)等,其傳輸速率可達1Mbps。CAN 總線因傳輸時間短, 受干擾的概率低, 保證了通信的實時性。另外, CAN 總線[1]可對錯誤來源進行正確的定位, 將永久的硬件錯誤從軟件錯誤中獨立出來, 其協(xié)議采用CRC 檢驗并可提供相應的錯誤處理能力, 同時保證了數(shù)據(jù)通信的可靠性。
Silicon Lab公司的C8051F500單片機內部集成了CAN控制器[2],符合Bosch規(guī)范2.0A(基本CAN)和2.0B[3](全功能CAN),方便了CAN網(wǎng)絡通信系統(tǒng)的設計。由于C8051F500的高集成度,只需少量外圍測量電路便可組成集數(shù)據(jù)采集、控制和通信功能于一體的單片機系統(tǒng),同時還可提高系統(tǒng)的整體可靠性。另外,C8051F500內核與普通51系列兼容,且指令簡單易學,因此,可縮短系統(tǒng)研發(fā)周期。
CAN功能節(jié)點硬件分布原理圖如圖1所示。
圖1 CAN功能節(jié)點組成原理圖
Silicon Lab公司推出的C8051F500是完全集成的混合信號片上系統(tǒng)型MCU。
該單片機內部集成了CAN控制器,其與收發(fā)模塊(CTM1050)共同構成CAN節(jié)點模塊。其中CAN控制器包括CAN核、消息存儲器、消息處理器和控制寄存器[4]。由于其MCU無法直接訪問消息RAM,因此有兩組位于控制寄存器的接口寄存器被用來控制CPU對消息RAM的訪問。接口寄存器通過緩存?zhèn)鬏攲⒁獋鬏數(shù)臄?shù)據(jù),避免了CPU訪問消息RAM時同CAN消息的發(fā)送和接收之間的沖突。在單個傳輸時,一個完整的消息對象[5]或者消息對象的一部分在消息RAM和IFx消息緩沖寄存器之間進行可靠傳輸。兩個消息寄存器組的功能是一樣的(除了測試處于基本模式)。
CTM1050[6]是CAN控制器與CAN物理總線之間的接口芯片,其功能框圖如圖2所示。該模塊是集電源隔離、電氣隔離[7]、CAN收發(fā)器、CAN總線保護于一體的隔離CAN收發(fā)器模塊,可以實現(xiàn)帶隔離的CAN收發(fā)電路,從而進一步提高了系統(tǒng)的抗干擾能力和穩(wěn)定性。其隔離電壓可以達到DC 2500 V ,并且能連接任何一款CAN協(xié)議控制器。該芯片TxD、RxD 引腳兼容+3.3V及+5V的CAN控制器,不需要外接其他元器件直接將+3.3V或+5V的CAN控制器發(fā)送、接收引腳與CTM模塊的發(fā)送、接收引腳相連接。由此可見,CTM1050接口簡單,使用方便,非常適合對體積有一定要求的系統(tǒng)設計。
圖2 CTM2050T功能框圖
在CAN初始化時會打開CAN中斷,即CAN總線上有數(shù)據(jù)要發(fā)送時會產(chǎn)生一個中斷,此時由單片機的MCU來判斷其優(yōu)先級是否為最優(yōu),若是,則響應其中斷。此時單片機內的CAN處理器會控制消息緩存寄存器寫入數(shù)據(jù),并按照協(xié)議對消息進行處理;等發(fā)送請求中斷產(chǎn)生,響應中斷并發(fā)送處理好的數(shù)據(jù),此為一次數(shù)據(jù)收發(fā)過程[8]。CAN總線數(shù)據(jù)收發(fā)流程圖如圖3所示。
圖3 CAN總線收發(fā)程序流程
系統(tǒng)初始化主要包括端口、時鐘和CAN控制器的初始化。此處主要對CAN控制器初始化做詳細說明,其一般步驟如下:
·將SFRPAGE寄存器設置為CAN0_PAGE;
·將CAN0CN寄存器中的INIT和CCE位
設置為’1’;
·設置位定時寄存器和BRP擴展寄存器中的時序參數(shù);
·初始化每個消息對象或將其MsgVal位設置為NOT VALID(無效);
·將INIT位清零。
其初始化部分程序如下:
系統(tǒng)初始化完成后,在主程序中調用接收子程序,由接收子程序來響應總線上的消息接收請求命令。接收子程序要比發(fā)送子程序復雜一些,因為在處理接收報文的過程中,還要對諸如總線關閉、錯誤報警、接收溢出等情況進行處理。下面給出部分接收子程序:
發(fā)送子程序負責節(jié)點報文的發(fā)送。發(fā)送時用戶只需將處理好的待發(fā)送的數(shù)據(jù)按特定的格式組合成一幀報文,送入發(fā)送緩存區(qū)中,然后啟動發(fā)送即可。由于發(fā)送過程與接收過程只是數(shù)據(jù)緩存寄存器與消息RAM之間的數(shù)據(jù)傳輸方向有所不同,故在此不再贅述。
此次設計采用IDE開發(fā)環(huán)境,并用其進行仿真,所用適配器為新華龍公司最新產(chǎn)品U-EC6。如圖4所示,為實驗仿真結果中各寄存器、地址空間和相關變量的值。此CAN節(jié)點的通信速率為1Mbps,將適配器與目標節(jié)點相連接,再通過USB數(shù)據(jù)線分別與PC相連,由上位機控制總線給節(jié)點發(fā)送命令,進行數(shù)據(jù)的接受,并對其進行處理,等待發(fā)送中斷到來,再將總線所需數(shù)據(jù)發(fā)送回總線。實驗結果顯示:數(shù)據(jù)傳送完整、準確、高效,并且有效的解決了系統(tǒng)數(shù)據(jù)沖突等問題,滿足本次設計的初衷。
圖4 結果仿真顯示
本次設計采用由內部集成了CAN控制的C8051500單片機與隔離CAN收發(fā)器CTM1050共同構成的模塊作為CAN總線通信系統(tǒng)的智能節(jié)點。首先,解決了節(jié)點的CPU在訪問消息RAM時同CAN消息的發(fā)送與接收發(fā)生沖突等問題;其次,使微控制器這一核心部件的控制得以簡化;最后,由于同以往的節(jié)點相比減少了外部隔離光耦,還使得單片機的外圍電路得到大大簡化,從而使系統(tǒng)的穩(wěn)定性、可靠性及實時性得到進一步高。
[3]李迎.基于C8051F040的CAN總線接口嵌入式系統(tǒng)開發(fā)[J].電子測量技術,2009(2):90-94.
[4]饒運濤,鄒繼軍,鄭永云.現(xiàn)場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2003.
[5]袁越陽.C8051F040的CAN模塊應用研究[J].單片機與嵌入式系統(tǒng)應用,2008(10):76-79.
[6]楊春杰,王曙光,亢紅波,等.CAN總線技術[M].北京:北京航空航天大學出版社,2010.
[7]于曉光.CAN總線隔離器的設計與應用[J].電子設計工程,2009(12):1-4.
[8]于成毅,裴東興,梁志劍.基于CAN總線的數(shù)據(jù)采集節(jié)點的設計[J].電子測試,2009(11):62-66.
[1]王黎明,夏立,邵英,閆曉玲.CAN現(xiàn)場總線系統(tǒng)的設計與應用[M].北京:電子工業(yè)出版社,2008.
[2]鮑可進.C8051F單片機原理及應[M].北京:中國電力出版社,2006.