周愛軍 胡宏燦 崔大連
(海軍大連艦艇學(xué)院裝備自動化系 大連 116018)
最初CAN-bus被設(shè)計作為汽車環(huán)境中的微控制器通訊工具,用于在車載各電子控制裝置ECU之間交換信息,從而形成汽車電子控制網(wǎng)絡(luò)。CAN總線使用多主機模式進行組網(wǎng),通訊方式靈活;使用非破壞性的總線仲裁技術(shù),節(jié)省了總線沖突仲裁時間;數(shù)據(jù)包采用短幀結(jié)構(gòu),傳輸時間短,受干擾概率低,傳輸距離長;具備完善的錯誤處理機制,保證了總線的健壯性??梢哉fCAN-bus總線在通信能力、可靠性、實時性、靈活性、易用性、傳輸距離等方面較其他串行總線有著明顯的優(yōu)勢。鑒于此,很多單片機廠商紛紛將CAN協(xié)議控制器集成在微控制器芯片上,LPC2368是PHILIPS公司推出的一款性價比很高的ARM7核處理器,內(nèi)部集成兩路獨立的CAN控制器,以其性能高、成本低和能耗小的特點,適用于多種工控領(lǐng)域,本文主要介紹基于LPC2368的CAN智能節(jié)點設(shè)計[1~2]。
LPC2368處理器是基于一款支持實時仿真和跟蹤的 32位 ARM7TDMI微控制器,并帶有512KB嵌入的高速FLash存儲器,58KB的SRAM;128位寬度的存儲器接口和獨特的加速結(jié)構(gòu),使32位代碼能夠在最大時鐘速率下運行;對代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用Thumb指令進行開發(fā),可將代碼規(guī)模降低30%,而性能的損失卻很小;指令實行三級流水線作業(yè),提供Embedded ICE邏輯單元,支持片上斷點和調(diào)試點,具有先進的軟件開發(fā)和調(diào)試環(huán)境。LPC2368內(nèi)部集成2個CAN控制器,每一個CAN控制器都與PHILIPS出品的獨立CAN控制器SJA1000有著相似的寄存器結(jié)構(gòu),單個總線上的數(shù)據(jù)傳輸速率可高達1Mb/s;兼容CAN2.0B,符合IS011898-1規(guī)范;全局驗收濾波器可以識別所有的11位和29位標(biāo)識符;驗收濾波器為選擇的標(biāo)識符提供Full-style自動接收。
CAN總線接口部分包括 LPC2368內(nèi)置的CAN協(xié)議控制器、光電耦合器和總線收發(fā)器[3],如圖1所示。
圖1 接口電路圖
由于LPC2368內(nèi)置了CAN協(xié)議控制模塊,所以節(jié)點硬件電路只需設(shè)計好協(xié)議控制器和總線收發(fā)器以及總線收發(fā)器和總線的接口電路即可。這里我們選用了PHILIPS公司(現(xiàn)為NXP公司)的TJA1050高速總線收發(fā)器。在整個應(yīng)用中,微控制器內(nèi)置的CAN協(xié)議控制模塊主要完成CAN的通信協(xié)議,實現(xiàn)報文的裝配和拆分、接收信息的過濾和校驗等工作;收發(fā)器TJA1050實現(xiàn)CAN協(xié)議控制器和通信線路的物理連接,提高CAN總線的驅(qū)動能力和可靠性;為了進一步提高系統(tǒng)的抗干擾能力,LPC2368引腳 Tx1、Rx1與收發(fā)器 TJA1050并不直接相連,而是使用高速光耦合 6N137和TJA1050相連[4]。
電路中采用隔離型DC/DC模塊B0505S-1W向收發(fā)器電路供電。這樣就可以很好地實現(xiàn)總線上各節(jié)點的電氣隔離,這部分電路雖增加了接點的復(fù)雜性,但卻提高了接點的穩(wěn)定性和安全性。
TJA1050與總線接口部分,使CANH、CANL與地之間并聯(lián)濾波電容,以達到消除總線高頻干擾的目的,并且使節(jié)點具備一定的防電磁輻射能力。在選取電容大小的時候必須考慮總線節(jié)點的數(shù)量和總線傳播速率,當(dāng)T JA1050的輸出級阻抗約200歐姆,總線系統(tǒng)有10個節(jié)點,速度是500kbit/s時,則電容的值不應(yīng)該超過470pF。
在兩根CAN總線接入端與地之間分別反接了一個保護二極管。當(dāng)CAN總線有較高的負(fù)電壓時,二極管的短路可起到一定的過壓保護作用。根據(jù)TJA1050的特性,本設(shè)計中CAN終端電阻使用了分裂終端,即總線端節(jié)點的兩個終端電阻都被分成兩個等值的電阻,用兩個60Ω的電阻取代120Ω的電阻,可以有效降低輻射。
軟件調(diào)試環(huán)境采用KEIL公司的keil uvision 4,通過 ULINK仿真調(diào)試。軟件設(shè)計部分包括CAN協(xié)議控制器的初始化、報文的接收、報文的發(fā)送及總線錯誤處理四個模塊[5]。
系統(tǒng)是否能正常地工作,初始化程序的設(shè)計是個關(guān)鍵。必須對寫入每個寄存器的內(nèi)容進行仔細(xì)和全面的考慮??刂破鞒跏蓟ぷ髦饕?硬件使能、配置管腳連接、軟件復(fù)位、設(shè)置總線波特率、配置模式寄存器、配置中斷工作方式、配置驗收濾波器、啟動CAN工作等。這部分內(nèi)容與通用CAN協(xié)議控制器SJA1000相似,不再贅述。
CAN報文的接收采用中斷方式。在ARM7TDMI核處理器中向量中斷控制器VIC具有32個中斷請求輸入,可將其編程分為3類:FIQ、向量IRQ和非向量IRQ。每個片內(nèi)外設(shè)都有一條中斷線連接到向量中斷控制器,其中CAN控制器的VIC通道號是19~23??紤]到CAN控制器的中斷源較多,筆者采用非向量中斷。為了避免接收到的數(shù)據(jù)因為沒有得到及時處理而造成數(shù)據(jù)丟失,我們定義了接收緩沖區(qū),采用環(huán)形緩沖結(jié)構(gòu)(類似于SJA1000CAN控制器中64字節(jié)FIFO環(huán)形緩沖)來接收數(shù)據(jù)。結(jié)合定義的環(huán)形緩沖區(qū)來進行CAN報文的接收程序設(shè)計。CAN報文接收模塊流程如圖2所示。
LPC2368中CAN控制器為了提高大量數(shù)據(jù)發(fā)送的效率,每個CAN控制器配有三個獨立的發(fā)送緩沖寄存器,這點和SJA1000有所不同。因此與SJA1000的發(fā)送程序相比要相對復(fù)雜。因為發(fā)送時是根據(jù)緩沖區(qū)的實際情況有選擇的把數(shù)據(jù)寫入三個發(fā)送緩沖之一。每個緩沖區(qū)的狀態(tài)通過查詢CANSR得知。所以在設(shè)計發(fā)送程序的時候要先判斷哪個緩沖是空閑的,然后再把數(shù)據(jù)寫入緩沖區(qū),啟動發(fā)送。報文發(fā)送流程如圖3所示。
為了使節(jié)點工作的更加可靠,對工作過程中發(fā)生的錯誤必須進行處理。工作過程中的錯誤中斷類型有兩種,一是錯誤報警中斷,另一個是總線錯誤中斷,前者是產(chǎn)生的條件是錯誤計數(shù)器的值超過96,中斷處理方式通常為清零所有的錯誤計數(shù)器的值,維持CAN的運行;而總線錯誤中斷產(chǎn)生的條件是錯誤計數(shù)器的值到達255,中斷錯誤處理方式為復(fù)位節(jié)點,重新初始化CAN控制器。從錯誤中斷產(chǎn)生的條件可以得出,錯誤報警中斷會屏蔽總線錯誤中斷,所以為了簡化錯誤處理過程,我們可以使節(jié)點打開總線錯誤中斷而屏蔽錯誤報警中斷,在總線錯誤累計255次后,CAN節(jié)點脫離總線,總線錯誤中斷的處理是復(fù)位該節(jié)點,重新初始化CAN控制器,這樣可以消除錯誤,給節(jié)點一個很好的初態(tài),使節(jié)點重新回歸正常工作狀態(tài)。
本文采用LPC2368作為主控CPU,利用其內(nèi)嵌CAN協(xié)議控制器和外置的TJA1050總線收發(fā)器給出了CAN智能節(jié)點的通訊接口設(shè)計和軟件實現(xiàn)流程。本設(shè)計在學(xué)校導(dǎo)航裝備仿真模擬實驗室的建設(shè)中得到了使用,試驗證明,本設(shè)計方案和“單片機+CAN協(xié)議控制器+總線收發(fā)器”設(shè)計方案相比,有開發(fā)簡單、工作穩(wěn)定可靠、支持在系統(tǒng)編程、便于功能擴展等優(yōu)勢,具有較高的容錯能力和自我診斷修復(fù)功能。
[1]周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:電子工業(yè)出版社,2008
[2]王黎明.CAN現(xiàn)場總線系統(tǒng)的設(shè)計與應(yīng)用[M].北京:電子工業(yè)出版社,2008
[3]孫傳友.測控電路及裝置[M].北京:北京航空航天大學(xué)出版社,2007
[4]張毅剛.新編MCS-51單片機應(yīng)用設(shè)計[M].北京:電子工業(yè)出版社,2003
[5]饒運濤.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航天航空大學(xué)出版社,2003