基于LPC2119的CAN總線智能節(jié)點的設計
引言
微控制器與can總線連接的傳統(tǒng)方式是將cpu與總線控制器和總線收發(fā)器相連后再接入總線網絡,這樣使cpu外圍電路復雜化,整個系統(tǒng)受外部影響較大。為了解決這一問題,很多單片機廠商紛紛將can控制器集成在單片機芯片上。目前,單片機內部集成的can控制器有motorola公司的mc68hc912dg128a、philips公司的p87c591和arm7
lpc2xxx系列、atmel公司的at89c51cc01和at89c51cc02、intel公司的tn87c196ca和tn87c196cb以及cygnal公司的c8051f040等。
lpc2119是philips公司推出的一款性價比很高的arm7核處理器,內部集成兩路獨立的can控制器。arm核的處理器具有性能高、成本低和能耗小的特點,適用于多種領域,如嵌入式控制、消費/教育類多媒體、dsp和移動式應用等。本文主要介紹lpc2119的can總線智能節(jié)點的設計。
硬件設計
lpc2119處理器特點
lpc2119是基于一個支持實時仿真和跟蹤的16/32位arm7tdmi-stm cpu,并帶有128 kb嵌入的高速flash存儲器。128位寬度的存儲器接口和獨特的加速結構使32位代碼能夠在最大時鐘速率下運行。對代碼規(guī)模有嚴格控制的應用可使用16位thumb模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。實行流水線作業(yè),提供embedded ice邏輯,支持片上斷點和調試點,具有先進的軟件開發(fā)和調試環(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內部集成2個can控制器,每一個can控制器都與獨立can控制器sja1000有著相似的寄存器結構。其主要的區(qū)別在于標識符接收過濾的編程操作上,篇幅有限,這里不作詳述。它的主要特性有:單個總線上的數(shù)據(jù)傳輸速率高達1mb/s;32位寄存器和ram訪問;兼容can2.0b,iso11898-1規(guī)范;全局驗收濾波器可以識別所有的11位和29位標識符;驗收濾波器為選擇的標準標識符提供full can-style自動接收。
can智能節(jié)點硬件電路
can接口部分包括lpc2119(內置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總線的驅動能力和可靠性。
為了進一步提高系統(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)化而且不會產生扼流。
軟件設計
軟件調試環(huán)境采用keil公司的keil uvision 3,通過ulink仿真調試。軟件設計關鍵部分是編寫can控制器(在lpc2119內部)的驅動程序。主程序只需通過調用驅動程序提供的接口來實現(xiàn)數(shù)據(jù)的接收和發(fā)送。can控制器驅動程序包括四部分內容:can控制器的初始化、報文的接收、報文的發(fā)送和總線異常處理。
lpc2119中can控制器的初始化
系統(tǒng)是否能正常地工作,初始化程序的設計是個關鍵。必須對寫入每個寄存器的內容進行仔細和全面的考慮,否則系統(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個中斷源,每個片內外設都有一條中斷線連接到向量中斷控制器, 其中can控制器的vic通道號是19-23??紤]到can控制器的中斷源較多,筆者采用非向量中斷。
為了避免接收到的數(shù)據(jù)因為沒有得到及時處理而造成數(shù)據(jù)丟失,筆者定義了接收緩沖區(qū),采用環(huán)形緩沖結構(類似于sja1000can控制器中64字節(jié)fifo環(huán)形緩沖)來接收數(shù)據(jù)。結合定義的環(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)測。其它一些不是很嚴重的錯誤一般不會引起總線錯誤,即使不處理也不會產生什么致命錯誤,如果為了提高中斷處理速度,可根據(jù)實際情況裁剪中斷服務程序。
結束語
本設計采用arm7tdmi內核的嵌入式微控制器作為節(jié)點的主控cpu,其豐富的片內資源,特別是內嵌can控制器簡化了節(jié)點的硬件電路。對比與sja1000的異同點本文詳細分析了can控制器的軟件設計方法。該設計作為can總線節(jié)點的一個模塊,能夠和儀器儀表等設備相結合,使其具有網絡通信的能力,有著廣闊的應用前景。
評論