周愛軍 胡宏燦 崔大連
(海軍大連艦艇學院裝備自動化系 大連 116018)
最初CAN-bus被設計作為汽車環境中的微控制器通訊工具,用于在車載各電子控制裝置ECU之間交換信息,從而形成汽車電子控制網絡。CAN總線使用多主機模式進行組網,通訊方式靈活;使用非破壞性的總線仲裁技術,節省了總線沖突仲裁時間;數據包采用短幀結構,傳輸時間短,受干擾概率低,傳輸距離長;具備完善的錯誤處理機制,保證了總線的健壯性。可以說CAN-bus總線在通信能力、可靠性、實時性、靈活性、易用性、傳輸距離等方面較其他串行總線有著明顯的優勢。鑒于此,很多單片機廠商紛紛將CAN協議控制器集成在微控制器芯片上,LPC2368是PHILIPS公司推出的一款性價比很高的ARM7核處理器,內部集成兩路獨立的CAN控制器,以其性能高、成本低和能耗小的特點,適用于多種工控領域,本文主要介紹基于LPC2368的CAN智能節點設計[1~2]。
LPC2368處理器是基于一款支持實時仿真和跟蹤的 32位 ARM7TDMI微控制器,并帶有512KB嵌入的高速FLash存儲器,58KB的SRAM;128位寬度的存儲器接口和獨特的加速結構,使32位代碼能夠在最大時鐘速率下運行;對代碼規模有嚴格控制的應用可使用Thumb指令進行開發,可將代碼規模降低30%,而性能的損失卻很小;指令實行三級流水線作業,提供Embedded ICE邏輯單元,支持片上斷點和調試點,具有先進的軟件開發和調試環境。LPC2368內部集成2個CAN控制器,每一個CAN控制器都與PHILIPS出品的獨立CAN控制器SJA1000有著相似的寄存器結構,單個總線上的數據傳輸速率可高達1Mb/s;兼容CAN2.0B,符合IS011898-1規范;全局驗收濾波器可以識別所有的11位和29位標識符;驗收濾波器為選擇的標識符提供Full-style自動接收。
CAN總線接口部分包括 LPC2368內置的CAN協議控制器、光電耦合器和總線收發器[3],如圖1所示。

圖1 接口電路圖
由于LPC2368內置了CAN協議控制模塊,所以節點硬件電路只需設計好協議控制器和總線收發器以及總線收發器和總線的接口電路即可。這里我們選用了PHILIPS公司(現為NXP公司)的TJA1050高速總線收發器。在整個應用中,微控制器內置的CAN協議控制模塊主要完成CAN的通信協議,實現報文的裝配和拆分、接收信息的過濾和校驗等工作;收發器TJA1050實現CAN協議控制器和通信線路的物理連接,提高CAN總線的驅動能力和可靠性;為了進一步提高系統的抗干擾能力,LPC2368引腳 Tx1、Rx1與收發器 TJA1050并不直接相連,而是使用高速光耦合 6N137和TJA1050相連[4]。
電路中采用隔離型DC/DC模塊B0505S-1W向收發器電路供電。這樣就可以很好地實現總線上各節點的電氣隔離,這部分電路雖增加了接點的復雜性,但卻提高了接點的穩定性和安全性。
TJA1050與總線接口部分,使CANH、CANL與地之間并聯濾波電容,以達到消除總線高頻干擾的目的,并且使節點具備一定的防電磁輻射能力。在選取電容大小的時候必須考慮總線節點的數量和總線傳播速率,當T JA1050的輸出級阻抗約200歐姆,總線系統有10個節點,速度是500kbit/s時,則電容的值不應該超過470pF。
在兩根CAN總線接入端與地之間分別反接了一個保護二極管。當CAN總線有較高的負電壓時,二極管的短路可起到一定的過壓保護作用。根據TJA1050的特性,本設計中CAN終端電阻使用了分裂終端,即總線端節點的兩個終端電阻都被分成兩個等值的電阻,用兩個60Ω的電阻取代120Ω的電阻,可以有效降低輻射。
軟件調試環境采用KEIL公司的keil uvision 4,通過 ULINK仿真調試。軟件設計部分包括CAN協議控制器的初始化、報文的接收、報文的發送及總線錯誤處理四個模塊[5]。
系統是否能正常地工作,初始化程序的設計是個關鍵。必須對寫入每個寄存器的內容進行仔細和全面的考慮。控制器初始化工作主要包括:硬件使能、配置管腳連接、軟件復位、設置總線波特率、配置模式寄存器、配置中斷工作方式、配置驗收濾波器、啟動CAN工作等。這部分內容與通用CAN協議控制器SJA1000相似,不再贅述。
CAN報文的接收采用中斷方式。在ARM7TDMI核處理器中向量中斷控制器VIC具有32個中斷請求輸入,可將其編程分為3類:FIQ、向量IRQ和非向量IRQ。每個片內外設都有一條中斷線連接到向量中斷控制器,其中CAN控制器的VIC通道號是19~23。考慮到CAN控制器的中斷源較多,筆者采用非向量中斷。為了避免接收到的數據因為沒有得到及時處理而造成數據丟失,我們定義了接收緩沖區,采用環形緩沖結構(類似于SJA1000CAN控制器中64字節FIFO環形緩沖)來接收數據。結合定義的環形緩沖區來進行CAN報文的接收程序設計。CAN報文接收模塊流程如圖2所示。
LPC2368中CAN控制器為了提高大量數據發送的效率,每個CAN控制器配有三個獨立的發送緩沖寄存器,這點和SJA1000有所不同。因此與SJA1000的發送程序相比要相對復雜。因為發送時是根據緩沖區的實際情況有選擇的把數據寫入三個發送緩沖之一。每個緩沖區的狀態通過查詢CANSR得知。所以在設計發送程序的時候要先判斷哪個緩沖是空閑的,然后再把數據寫入緩沖區,啟動發送。報文發送流程如圖3所示。

為了使節點工作的更加可靠,對工作過程中發生的錯誤必須進行處理。工作過程中的錯誤中斷類型有兩種,一是錯誤報警中斷,另一個是總線錯誤中斷,前者是產生的條件是錯誤計數器的值超過96,中斷處理方式通常為清零所有的錯誤計數器的值,維持CAN的運行;而總線錯誤中斷產生的條件是錯誤計數器的值到達255,中斷錯誤處理方式為復位節點,重新初始化CAN控制器。從錯誤中斷產生的條件可以得出,錯誤報警中斷會屏蔽總線錯誤中斷,所以為了簡化錯誤處理過程,我們可以使節點打開總線錯誤中斷而屏蔽錯誤報警中斷,在總線錯誤累計255次后,CAN節點脫離總線,總線錯誤中斷的處理是復位該節點,重新初始化CAN控制器,這樣可以消除錯誤,給節點一個很好的初態,使節點重新回歸正常工作狀態。
本文采用LPC2368作為主控CPU,利用其內嵌CAN協議控制器和外置的TJA1050總線收發器給出了CAN智能節點的通訊接口設計和軟件實現流程。本設計在學校導航裝備仿真模擬實驗室的建設中得到了使用,試驗證明,本設計方案和“單片機+CAN協議控制器+總線收發器”設計方案相比,有開發簡單、工作穩定可靠、支持在系統編程、便于功能擴展等優勢,具有較高的容錯能力和自我診斷修復功能。
[1]周立功.ARM嵌入式系統基礎教程[M].北京:電子工業出版社,2008
[2]王黎明.CAN現場總線系統的設計與應用[M].北京:電子工業出版社,2008
[3]孫傳友.測控電路及裝置[M].北京:北京航空航天大學出版社,2007
[4]張毅剛.新編MCS-51單片機應用設計[M].北京:電子工業出版社,2003
[5]饒運濤.現場總線CAN原理與應用技術[M].北京:北京航天航空大學出版社,2003