基于LPC2119的CAN總線智能節(jié)點(diǎn)的設(shè)計(jì)
引言
微控制器與can總線連接的傳統(tǒng)方式是將cpu與總線控制器和總線收發(fā)器相連后再接入總線網(wǎng)絡(luò),這樣使cpu外圍電路復(fù)雜化,整個(gè)系統(tǒng)受外部影響較大。為了解決這一問(wèn)題,很多單片機(jī)廠商紛紛將can控制器集成在單片機(jī)芯片上。目前,單片機(jī)內(nèi)部集成的can控制器有motorola公司的mc68hc912dg128a、philips公司的p87c591和arm7
lpc2xxx系列、atmel公司的at89c51cc01和at89c51cc02、intel公司的tn87c196ca和tn87c196cb以及cygnal公司的c8051f040等。
lpc2119是philips公司推出的一款性價(jià)比很高的arm7核處理器,內(nèi)部集成兩路獨(dú)立的can控制器。arm核的處理器具有性能高、成本低和能耗小的特點(diǎn),適用于多種領(lǐng)域,如嵌入式控制、消費(fèi)/教育類(lèi)多媒體、dsp和移動(dòng)式應(yīng)用等。本文主要介紹lpc2119的can總線智能節(jié)點(diǎn)的設(shè)計(jì)。
硬件設(shè)計(jì)
lpc2119處理器特點(diǎn)
lpc2119是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的16/32位arm7tdmi-stm cpu,并帶有128 kb嵌入的高速flash存儲(chǔ)器。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。對(duì)代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16位thumb模式將代碼規(guī)模降低超過(guò)30%,而性能的損失卻很小。實(shí)行流水線作業(yè),提供embedded ice邏輯,支持片上斷點(diǎn)和調(diào)試點(diǎn),具有先進(jìn)的軟件開(kāi)發(fā)和調(diào)試環(huán)境。 lpc2119具有非常小的64腳封裝、極低的功耗、多個(gè)32位定時(shí)器、4路10位adc、2路can、pwm通道、多個(gè)串行接口,包括2個(gè)16c550工業(yè)標(biāo)準(zhǔn)uart、高速i2c接口(400 khz)和2個(gè)spi接口,46個(gè)gpio以及多達(dá)9個(gè)外部中斷,特別適用于汽車(chē)、工業(yè)控制應(yīng)用以及醫(yī)療系統(tǒng)和容錯(cuò)維護(hù)總線。
lpc2119內(nèi)部集成2個(gè)can控制器,每一個(gè)can控制器都與獨(dú)立can控制器sja1000有著相似的寄存器結(jié)構(gòu)。其主要的區(qū)別在于標(biāo)識(shí)符接收過(guò)濾的編程操作上,篇幅有限,這里不作詳述。它的主要特性有:?jiǎn)蝹€(gè)總線上的數(shù)據(jù)傳輸速率高達(dá)1mb/s;32位寄存器和ram訪問(wèn);兼容can2.0b,iso11898-1規(guī)范;全局驗(yàn)收濾波器可以識(shí)別所有的11位和29位標(biāo)識(shí)符;驗(yàn)收濾波器為選擇的標(biāo)準(zhǔn)標(biāo)識(shí)符提供full can-style自動(dòng)接收。
can智能節(jié)點(diǎn)硬件電路
can接口部分包括lpc2119(內(nèi)置can控制器)、光電耦合器和總線收發(fā)器,如圖1所示。
can總線遵循iso的標(biāo)準(zhǔn)模型,分為數(shù)據(jù)鏈路層和物理層。在工程上通常由can控制器和收發(fā)器來(lái)實(shí)現(xiàn)。收發(fā)器選擇philips公司的tja1050高速收發(fā)器,它符合iso11898 標(biāo)準(zhǔn)。can控制器主要完成can的通信協(xié)議,實(shí)現(xiàn)報(bào)文的裝配和拆分、接收信息的過(guò)濾和校驗(yàn)等。收發(fā)器tja1050則是實(shí)現(xiàn)can控制器和通信線路的物理連接,提高can總線的驅(qū)動(dòng)能力和可靠性。
為了進(jìn)一步提高系統(tǒng)的抗干擾能力,lpc2119引腳tx1、rx1與收發(fā)器tja1050并不直接相連,而是通過(guò)高速光耦6n137后與tja1050相連。電路中采用隔離型dc/dc 模塊向收發(fā)器電路供電。dc/dc 模塊采用金升陽(yáng)的b0505s-1w定電壓輸入隔離非穩(wěn)壓?jiǎn)屋敵鲂蚫c/dc模塊,隔離電壓≥1000vdc。這樣就可以很好地實(shí)現(xiàn)總線上各接點(diǎn)的電氣隔離,這部分電路雖增加了接點(diǎn)的復(fù)雜性,但卻提高了接點(diǎn)的穩(wěn)定性和安全性。
tja1050與can 總線的接口部分也采用了一定的安全和抗干擾措施。canh和canl與地之間并聯(lián)兩個(gè)小電容ch和cl可以濾除總線上的高頻干擾并具備一定的防電磁輻射能力。電容值須由節(jié)點(diǎn)的數(shù)量和波特率決定,當(dāng)tja1050 的輸出級(jí)阻抗大約是20 ,總線系統(tǒng)有10 個(gè)節(jié)點(diǎn)速度是500kbit/s,則電容的值不應(yīng)該超過(guò)470pf。另外在兩根can 總線接入端與地之間分別反接了一個(gè)保護(hù)二極管。當(dāng)can 總線有較高的負(fù)電壓時(shí),二極管的短路可起到一定的過(guò)壓保護(hù)作用。根據(jù)tja1050的特性,本設(shè)計(jì)中can終端電阻使用了分裂終端,即總線端節(jié)點(diǎn)的兩個(gè)終端電阻都被分成兩個(gè)等值的電阻,用兩個(gè)60 的電阻代替一個(gè)120 的電阻,這樣可以有效的減少輻射。由于使用了分裂終端tja1050的emc,性能得到優(yōu)化而且不會(huì)產(chǎn)生扼流。
軟件設(shè)計(jì)
軟件調(diào)試環(huán)境采用keil公司的keil uvision 3,通過(guò)ulink仿真調(diào)試。軟件設(shè)計(jì)關(guān)鍵部分是編寫(xiě)can控制器(在lpc2119內(nèi)部)的驅(qū)動(dòng)程序。主程序只需通過(guò)調(diào)用驅(qū)動(dòng)程序提供的接口來(lái)實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送。can控制器驅(qū)動(dòng)程序包括四部分內(nèi)容:can控制器的初始化、報(bào)文的接收、報(bào)文的發(fā)送和總線異常處理。
lpc2119中can控制器的初始化
系統(tǒng)是否能正常地工作,初始化程序的設(shè)計(jì)是個(gè)關(guān)鍵。必須對(duì)寫(xiě)入每個(gè)寄存器的內(nèi)容進(jìn)行仔細(xì)和全面的考慮,否則系統(tǒng)將無(wú)法正常運(yùn)行。can初始化主要是設(shè)置can的通信參數(shù),即通過(guò)對(duì)can控制器中的寄存器進(jìn)行設(shè)置,從而確定can控制器的工作方式等。lpc2119中can控制器的初始化與獨(dú)立can控制器sja1000初始化過(guò)程相似。初始化can控制器的操作包括:硬件使能、配置管腳連接、軟件復(fù)位、設(shè)置總線波特率、配置模式寄存器、配置中斷工作方式、配置驗(yàn)收濾波器工作方式、啟動(dòng)can等。設(shè)置總線波特率是個(gè)難點(diǎn),所有can節(jié)點(diǎn)的波特率要相同才能正常工作,要注意正確配置vpbdiv和pll寄存器。
can報(bào)文的接收
can報(bào)文的接收采用中斷方式。在arm7tdmi核處理器中向量中斷控制器(vic)具有32個(gè)中斷請(qǐng)求輸入,可將其編程分為3類(lèi):fiq、向量irq和非向量irq。lpc2119芯片具有24個(gè)中斷源,每個(gè)片內(nèi)外設(shè)都有一條中斷線連接到向量中斷控制器, 其中can控制器的vic通道號(hào)是19-23??紤]到can控制器的中斷源較多,筆者采用非向量中斷。
為了避免接收到的數(shù)據(jù)因?yàn)闆](méi)有得到及時(shí)處理而造成數(shù)據(jù)丟失,筆者定義了接收緩沖區(qū),采用環(huán)形緩沖結(jié)構(gòu)(類(lèi)似于sja1000can控制器中64字節(jié)fifo環(huán)形緩沖)來(lái)接收數(shù)據(jù)。結(jié)合定義的環(huán)行緩沖區(qū)來(lái)進(jìn)行can報(bào)文的接收程序設(shè)計(jì)。can報(bào)文接收的程序流程如圖2所示。
can報(bào)文的發(fā)送
lpc2119中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ù)寫(xiě)入三個(gè)發(fā)送緩沖之一。每個(gè)緩沖區(qū)的狀態(tài)通過(guò)查詢cansr得知。所以在設(shè)計(jì)發(fā)送程序的時(shí)候要先判斷哪個(gè)緩沖是空閑的,然后在把數(shù)據(jù)寫(xiě)進(jìn)緩沖區(qū),啟動(dòng)發(fā)送。can報(bào)文發(fā)送程序流程如圖3所示。
can總線異常處理中斷程序
can控制器根據(jù)can2.0規(guī)范來(lái)對(duì)can總線上發(fā)生的錯(cuò)誤進(jìn)行處理。
在總線發(fā)生嚴(yán)重故障的情況下,can節(jié)點(diǎn)有可能脫離總線,此時(shí)以下寄存器被置位:cansr的bs位、canir的bei和ei位以及canmod的rm位。軟件下一步必須置零rm位。發(fā)送錯(cuò)誤計(jì)數(shù)器將遞減計(jì)數(shù)(11個(gè)連續(xù)的隱性位)的第128個(gè)事件,總線釋放條件軟件可通過(guò)讀取tx錯(cuò)誤計(jì)數(shù)器對(duì)計(jì)數(shù)器遞減計(jì)數(shù)的情況進(jìn)行監(jiān)測(cè)。其它一些不是很?chē)?yán)重的錯(cuò)誤一般不會(huì)引起總線錯(cuò)誤,即使不處理也不會(huì)產(chǎn)生什么致命錯(cuò)誤,如果為了提高中斷處理速度,可根據(jù)實(shí)際情況裁剪中斷服務(wù)程序。
結(jié)束語(yǔ)
本設(shè)計(jì)采用arm7tdmi內(nèi)核的嵌入式微控制器作為節(jié)點(diǎn)的主控cpu,其豐富的片內(nèi)資源,特別是內(nèi)嵌can控制器簡(jiǎn)化了節(jié)點(diǎn)的硬件電路。對(duì)比與sja1000的異同點(diǎn)本文詳細(xì)分析了can控制器的軟件設(shè)計(jì)方法。該設(shè)計(jì)作為can總線節(jié)點(diǎn)的一個(gè)模塊,能夠和儀器儀表等設(shè)備相結(jié)合,使其具有網(wǎng)絡(luò)通信的能力,有著廣闊的應(yīng)用前景。
評(píng)論