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