引言
微控制器與CAN總線連接的傳統(tǒng)方式是將CPU與總線控制器和總線收發(fā)器相連后再接入總線網(wǎng)絡,這樣使CPU外圍電路復雜化,整個系統(tǒng)受外部影響較大。為了解決這一問題,很多單片機廠商紛紛將CAN控制器集成在單片機芯片上。目前,單片機內(nèi)部集成的CAN控制器有Motorola公司的MC68HC912DG128A、Philips公司的P87C591和ARM7 LPC2xxx系列、Atmel公司的AT89C51CC01和AT89C51CC02、Intel公司的TN87C196CA和TN87C196CB以及Cygnal公司的C8051F040等。
LPC2119是Philips公司推出的一款性價比很高的ARM7核處理器,內(nèi)部集成兩路獨立的CAN控制器。ARM核的處理器具有性能高、成本低和能耗小的特點,適用于多種領(lǐng)域,如嵌入式控制、消費/教育類多媒體、DSP和移動式應用等。本文主要介紹LPC2119的CAN總線智能節(jié)點的設計。
硬件設計
LPC2119處理器特點
LPC2119是基于一個支持實時仿真和跟蹤的16/32位ARM7TDMI-STM CPU,并帶有128 KB嵌入的高速Flash存儲器。128位寬度的存儲器接口和獨特的加速結(jié)構(gòu)使32位代碼能夠在時鐘速率下運行。對代碼規(guī)模有嚴格控制的應用可使用16位Thumb模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。實行流水線作業(yè),提供Embedded ICE邏輯,支持片上斷點和調(diào)試點,具有先進的軟件開發(fā)和調(diào)試環(huán)境。 LPC2119具有非常小的64腳封裝、極低的功耗、多個32位定時器、4路10位ADC、2路CAN、PWM通道、多個串行接口,包括2個16C550工業(yè)標準UART、高速I2C接口(400 kHz)和2個SPI接口,46個GPIO以及多達9個外部中斷,特別適用于汽車、工業(yè)控制應用以及醫(yī)療系統(tǒng)和容錯維護總線。
LPC2119內(nèi)部集成2個CAN控制器,每一個CAN控制器都與獨立CAN控制器SJA1000有著相似的寄存器結(jié)構(gòu)。其主要的區(qū)別在于標識符接收過濾的編程操作上,篇幅有限,這里不作詳述。它的主要特性有:單個總線上的數(shù)據(jù)傳輸速率高達1Mb/s;32位寄存器和RAM訪問;兼容CAN2.0B,ISO11898-1規(guī)范;全局驗收濾波器可以識別所有的11位和29位標識符;驗收濾波器為選擇的標準標識符提供Full CAN-style自動接收。
CAN智能節(jié)點硬件電路
CAN接口部分包括LPC2119(內(nèi)置CAN控制器)、光電耦合器和總線收發(fā)器,如圖1所示。
CAN總線遵循ISO的標準模型,分為數(shù)據(jù)鏈路層和物理層。在工程上通常由CAN控制器和收發(fā)器來實現(xiàn)。收發(fā)器選擇Philips公司的TJA1050高速收發(fā)器,它符合ISO11898 標準。CAN控制器主要完成CAN的通信協(xié)議,實現(xiàn)報文的裝配和拆分、接收信息的過濾和校驗等。收發(fā)器TJA1050則是實現(xiàn)CAN控制器和通信線路的物理連接,提高CAN總線的驅(qū)動能力和可靠性。
為了進一步提高系統(tǒng)的抗干擾能力,LPC2119引腳Tx1、Rx1與收發(fā)器TJA1050并不直接相連,而是通過高速光耦6N137后與TJA1050相連。電路中采用隔離型DC/DC 模塊向收發(fā)器電路供電。DC/DC 模塊采用金升陽的B0505S-1W定電壓輸入隔離非穩(wěn)壓單輸出型DC/DC模塊,隔離電壓≥1000VDC。這樣就可以很好地實現(xiàn)總線上各接點的電氣隔離,這部分電路雖增加了接點的復雜性,但卻提高了接點的穩(wěn)定性和安全性。
TJA1050與CAN 總線的接口部分也采用了一定的安全和抗干擾措施。CANH和CANL與地之間并聯(lián)兩個小電容CH和CL可以濾除總線上的高頻干擾并具備一定的防電磁輻射能力。電容值須由節(jié)點的數(shù)量和波特率決定,當TJA1050 的輸出級阻抗大約是20 ,總線系統(tǒng)有10 個節(jié)點速度是500kbit/s,則電容的值不應該超過470pF。另外在兩根CAN 總線接入端與地之間分別反接了一個保護二極管。當CAN 總線有較高的負電壓時,二極管的短路可起到一定的過壓保護作用。根據(jù)TJA1050的特性,本設計中CAN終端電阻使用了分裂終端,即總線端節(jié)點的兩個終端電阻都被分成兩個等值的電阻,用兩個60 的電阻代替一個120 的電阻,這樣可以有效的減少輻射。由于使用了分裂終端TJA1050的EMC,性能得到優(yōu)化而且不會產(chǎn)生扼流。
軟件設計
軟件調(diào)試環(huán)境采用KEIL公司的keil uvision 3,通過ULINK仿真調(diào)試。軟件設計關(guān)鍵部分是編寫CAN控制器(在LPC2119內(nèi)部)的驅(qū)動程序。主程序只需通過調(diào)用驅(qū)動程序提供的接口來實現(xiàn)數(shù)據(jù)的接收和發(fā)送。CAN控制器驅(qū)動程序包括四部分內(nèi)容:CAN控制器的初始化、報文的接收、報文的發(fā)送和總線異常處理。
LPC2119中CAN控制器的初始化
系統(tǒng)是否能正常地工作,初始化程序的設計是個關(guān)鍵。必須對寫入每個寄存器的內(nèi)容進行仔細和全面的考慮,否則系統(tǒng)將無法正常運行。CAN初始化主要是設置CAN的通信參數(shù),即通過對CAN控制器中的寄存器進行設置,從而確定CAN控制器的工作方式等。LPC2119中CAN控制器的初始化與獨立CAN控制器SJA1000初始化過程相似。初始化CAN控制器的操作包括:硬件使能、配置管腳連接、軟件復位、設置總線波特率、配置模式寄存器、配置中斷工作方式、配置驗收濾波器工作方式、啟動CAN等。設置總線波特率是個難點,所有CAN節(jié)點的波特率要相同才能正常工作,要注意正確配置VPBDIV和PLL寄存器。
CAN報文的接收
CAN報文的接收采用中斷方式。在ARM7TDMI核處理器中向量中斷控制器(VIC)具有32個中斷請求輸入,可將其編程分為3類:FIQ、向量IRQ和非向量IRQ。LPC2119芯片具有24個中斷源,每個片內(nèi)外設都有一條中斷線連接到向量中斷控制器, 其中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報文的接收程序設計。CAN報文接收的程序流程如圖2所示。
CAN報文的發(fā)送
LPC2119中CAN控制器為了提高大量數(shù)據(jù)發(fā)送的效率,每個CAN控制器配有三個獨立的發(fā)送緩沖寄存器,這點和SJA1000有所不同。因此與SJA1000的發(fā)送程序相比要相對復雜。因為發(fā)送時是根據(jù)緩沖區(qū)的實際情況有選擇的把數(shù)據(jù)寫入三個發(fā)送緩沖之一。每個緩沖區(qū)的狀態(tài)通過查詢CANSR得知。所以在設計發(fā)送程序的時候要先判斷哪個緩沖是空閑的,然后在把數(shù)據(jù)寫進緩沖區(qū),啟動發(fā)送。CAN報文發(fā)送程序流程如圖3所示。
CAN總線異常處理中斷程序
CAN控制器根據(jù)CAN2.0規(guī)范來對CAN總線上發(fā)生的錯誤進行處理。
在總線發(fā)生嚴重故障的情況下,CAN節(jié)點有可能脫離總線,此時以下寄存器被置位:CANSR的BS位、CANIR的BEI和EI位以及CANMOD的RM位。軟件下一步必須置零RM位。發(fā)送錯誤計數(shù)器將遞減計數(shù)(11個連續(xù)的隱性位)的第128個事件,總線釋放條件軟件可通過讀取Tx錯誤計數(shù)器對計數(shù)器遞減計數(shù)的情況進行監(jiān)測。其它一些不是很嚴重的錯誤一般不會引起總線錯誤,即使不處理也不會產(chǎn)生什么致命錯誤,如果為了提高中斷處理速度,可根據(jù)實際情況裁剪中斷服務程序。
結(jié)束語
本設計采用ARM7TDMI內(nèi)核的嵌入式微控制器作為節(jié)點的主控CPU,其豐富的片內(nèi)資源,特別是內(nèi)嵌CAN控制器簡化了節(jié)點的硬件電路。對比與SJA1000的異同點本文詳細分析了CAN控制器的軟件設計方法。該設計作為CAN總線節(jié)點的一個模塊,能夠和儀器儀表等設備相結(jié)合,使其具有網(wǎng)絡通信的能力,有著廣闊的應用前景。