摘 要: 介紹了幾款Microchip單片機(jī)及收發(fā)器實現(xiàn)低成本的汽車子網(wǎng)LIN總線節(jié)點(diǎn)?;贛icrochip單片機(jī)內(nèi)帶的增強(qiáng)型通用同步/異步收發(fā)器(EUSART)實現(xiàn)LIN的控制器,并用Microchip的MCP2021作為LIN的電平轉(zhuǎn)換器,最終實現(xiàn)一主多從的低成本的LIN網(wǎng)絡(luò)。
關(guān)鍵詞: LIN總線;收發(fā)器;增強(qiáng)型通用同步/異步收發(fā)器;CAN總線
隨著汽車總線應(yīng)用的日益普及以及對汽車成本的要求越來越嚴(yán)格,LIN總線的市場占有率越來越高。本文從低成本的角度來實現(xiàn)LIN總線的節(jié)點(diǎn),具有非常高的實用價值。
1 LIN的基本知識與發(fā)展
1.1 LIN的基本知識
局域互連網(wǎng)絡(luò)LIN(Local Interconnect Network)是低成本的串行通信網(wǎng)絡(luò),用于實現(xiàn)汽車中的分布式電子系統(tǒng)控制,是現(xiàn)有多種汽車網(wǎng)絡(luò)在功能上的補(bǔ)充;同時它也是一個開放的標(biāo)準(zhǔn),作為CAN總線的子總線,能緩解CAN總線數(shù)據(jù)擁擠的現(xiàn)狀。
由于LIN總線是可靠、低成本、開放標(biāo)準(zhǔn)的網(wǎng)絡(luò)解決方案,它可以簡化現(xiàn)存的多點(diǎn)解決方案,并且能降低在汽車電子領(lǐng)域中的開發(fā)、生產(chǎn)、服務(wù)和后勤成本。
1.2 LIN的起源與發(fā)展
LIN聯(lián)盟成立于1999年,并發(fā)布了LIN 1.0版本。2000年,LIN聯(lián)盟再次發(fā)布了1.1版本。2001年,第一輛采用LIN1.1版本的量產(chǎn)汽車面世。2003年,2.0版本出現(xiàn)。2006年,2.1版本面世并沿用至今。
1.3 LIN的市場
LIN總線產(chǎn)品已經(jīng)成為汽車總線的第二大市場,預(yù)計將成為未來增長最快的一個市場。第一大市場是CAN總線,其在2006年已經(jīng)達(dá)到頂峰。
2 LIN的基本概念
LIN在物理層是單線實現(xiàn)的,一般電壓范圍在8 V~18 V。LIN網(wǎng)絡(luò)是單主多從結(jié)構(gòu),由于只有一個主節(jié)點(diǎn),所以不存在總線仲裁。總線的速度一般在2.4 kbd~19.6 kbd之間。典型節(jié)點(diǎn)數(shù)為2~10個,由于阻抗匹配的原因,最多不能超過16個[1]。如圖1所示。
LIN總線為串行通信方式,編碼采用非歸零碼,8N1(8個數(shù)據(jù)位,沒有校驗位,1個停止位)方式,如圖2所示。每幀的數(shù)據(jù)字節(jié)數(shù)可變,為2~8 B。在數(shù)據(jù)字節(jié)結(jié)束后,會發(fā)一個校驗和來進(jìn)行校驗。
在LIN網(wǎng)絡(luò)中,主節(jié)點(diǎn)的時鐘由高精度的晶振產(chǎn)生,從節(jié)點(diǎn)一般用RC震蕩器產(chǎn)生。在本文中,從節(jié)點(diǎn)的時鐘可以用Microchip單片機(jī)的內(nèi)部RC震蕩器來實現(xiàn)。
3 LIN協(xié)議的基本知識
LIN的報文分為兩部分,一是主任務(wù),也叫報文頭;另一個部分是從任務(wù),也叫響應(yīng)場。如圖3所示。
主任務(wù)位于主機(jī)節(jié)點(diǎn)內(nèi)部,都是由主節(jié)點(diǎn)發(fā)出,它負(fù)責(zé)報文的進(jìn)度表、發(fā)送報文頭(HEADER)。從任務(wù)位于所有的(即主機(jī)和從機(jī))節(jié)點(diǎn)中,其中一個(主機(jī)節(jié)點(diǎn)或從機(jī)節(jié)點(diǎn))發(fā)送報文的響應(yīng)(RESPONSE)。
3.1 報文頭
報文頭分為三部分,按順序分別叫同步間隔、同步字段、標(biāo)識符字段。
同步間隔是一個長時間的低電平(顯性總線電平),低電平時間要大于10個位定時時間,通常為13個位定時時間。在長時間的低電平之后,要跟著一個短時間的高電平(隱性總線電平),一般為1~4個位定時時間[2]。
同步字段包含了時鐘的同步信息。它的內(nèi)容為0x55,表現(xiàn)在8個位定時中有5個下降沿(隱性跳變到顯性的邊沿)。從節(jié)點(diǎn)通過同步字段,可以使自己的總線速率與主節(jié)點(diǎn)同步。
標(biāo)識符字段定義了報文的內(nèi)容和長度。其中,內(nèi)容是由6個標(biāo)識符位和2個奇偶校驗位組成,如圖4所示。標(biāo)識符位的第5位和第6位(ID4和ID5)定義了報文數(shù)據(jù)場的長度。
3.2 響應(yīng)場
響應(yīng)場包含數(shù)據(jù)字段和校驗和兩部分。
數(shù)據(jù)字段由8 bit數(shù)據(jù)的字節(jié)組成,傳輸由最低位(LSB)開始。校驗和按照帶進(jìn)位加的方式計算,每個進(jìn)位都被加到本次計算結(jié)果的最低位。
3.3 保留的標(biāo)識符
標(biāo)識符為0x3C和0x3D的標(biāo)識符被用做診斷。其中0x3C是主機(jī)請求幀,它可以從主機(jī)向從機(jī)節(jié)點(diǎn)發(fā)送命令和數(shù)據(jù)。0x3D是從機(jī)響應(yīng)幀,它觸發(fā)一個從機(jī)節(jié)點(diǎn)(由一個優(yōu)先的下載幀編址)向主機(jī)節(jié)點(diǎn)發(fā)送數(shù)據(jù)。
標(biāo)識符為0x3E是由用戶定義的自由用法,標(biāo)識符為0x3F是為將來使用而嚴(yán)格保留的。
4 Microchip單片機(jī)的軟硬件實現(xiàn)
4.1 硬件實現(xiàn)
主節(jié)點(diǎn)一般采用Flash比較大的Microchip中檔8位單片機(jī),或者采用帶CAN控制器的高檔8位單片機(jī)或16位單片機(jī)作為控制器。時鐘采用高精度石英晶振。物理層的電平轉(zhuǎn)換采用Microchip的收發(fā)器MCP2021。
從節(jié)點(diǎn)可用低成本的Microchip中、低檔8位單片機(jī)。時鐘用單片機(jī)內(nèi)部自帶的RC震蕩器。內(nèi)部RC震蕩器在常溫25 ℃時,精度為1%,全溫度范圍(-40 ℃~+125 ℃)內(nèi)精度為5%[1]。物理層的電平轉(zhuǎn)換采用Microchip的收發(fā)器MCP2021。
4.2 軟件實現(xiàn)
4.2.1 主節(jié)點(diǎn)
主節(jié)點(diǎn)完全按照LIN規(guī)范實現(xiàn)。主節(jié)點(diǎn)的任務(wù)就是發(fā)送報文頭和發(fā)送接收數(shù)據(jù),實現(xiàn)一個網(wǎng)關(guān)的作用。另外,單片機(jī)的剩余功能,可以用來做一些A/D和開關(guān)量的采集,還可以驅(qū)動一些蜂鳴器、小電機(jī)或者LED和LCD等器件。主節(jié)點(diǎn)發(fā)送流程如圖5所示。
LIN總線的通信可以通過配置單片機(jī)的EUSART來實現(xiàn)。每次通信都由主節(jié)點(diǎn)啟動,此處不考慮從節(jié)點(diǎn)到從節(jié)點(diǎn)的通信??偩€的配置也由主節(jié)點(diǎn)來實現(xiàn),具體波特率可以通過波特率控制寄存器來實現(xiàn)。這里采用9 600的波特率。
標(biāo)識符不是一個節(jié)點(diǎn)的地址,而是一個報文的描述符。當(dāng)主節(jié)點(diǎn)發(fā)送一個0x3C的命令后,再發(fā)送8 B的00H,總線就進(jìn)入休眠模式。在休眠模式下,總線處于空閑狀態(tài),因此任何一個從節(jié)點(diǎn)都可以喚醒總線。
主節(jié)點(diǎn)采用高精度的石英晶振作為時鐘源,可以產(chǎn)生低誤差的時鐘信號。在這里,要把主節(jié)點(diǎn)設(shè)置為異步半雙工通信模式,8 bit數(shù)據(jù)模式。時鐘選擇為內(nèi)部時鐘。
由于EUSART有“發(fā)送間隔字符位(SENDB)”,可以在每次發(fā)送數(shù)據(jù)前發(fā)送同步間隔字符,這樣可以省掉不少軟件開銷,使單片機(jī)可以致力于其他邏輯的運(yùn)算。
4.2.2 從節(jié)點(diǎn)
從節(jié)點(diǎn)不需要系統(tǒng)配置的信息,所有從節(jié)點(diǎn)接收所有報文,然后再判斷是否需要執(zhí)行。
從節(jié)點(diǎn)不需要外接石英晶振,可以用單片機(jī)內(nèi)部自帶的RC震蕩器實現(xiàn)。Microchip的中端8位單片機(jī)大多數(shù)都內(nèi)帶高精度的RC震蕩器,在常溫下(25℃),經(jīng)過校準(zhǔn)可以達(dá)到±1%的精度。
每個單片機(jī)在出廠時都經(jīng)過校準(zhǔn),并把校準(zhǔn)字寫在Flash空間的最后一位。在程序開始運(yùn)行時,會把校準(zhǔn)值裝載到W寄存器里。在程序的第一條指令中執(zhí)行MOVWF OSCCAL,即可將W寄存器里的值送到內(nèi)部RC震蕩器的校準(zhǔn)寄存器里,從而實現(xiàn)校準(zhǔn)。
從節(jié)點(diǎn)先檢測總線電平,當(dāng)長時間的隱性電平結(jié)束,出現(xiàn)大于10個位定時的顯性電平后,開始數(shù)5個下降沿的時間,用時間值除以8,就可以算出波特率。然后從總線上讀取數(shù)據(jù),解碼ID,處理響應(yīng)。
EUSART支持波特率的自動檢測和校準(zhǔn),可以使軟件代碼大量簡化。從節(jié)點(diǎn)可以在總線空閑時進(jìn)入休眠狀態(tài),當(dāng)從節(jié)點(diǎn)檢測到主節(jié)點(diǎn)發(fā)出的同步間隔時,可以從休眠狀態(tài)喚醒。
當(dāng)從節(jié)點(diǎn)被其他外部中斷喚醒時(例如A/D轉(zhuǎn)換完成,外部IO電平變化等),從節(jié)點(diǎn)可以喚醒休眠的總線。
如果從節(jié)點(diǎn)的功能比較簡單,工作電流比較小,可以通過收發(fā)器MCP2021的參考電壓輸出端來供電。MCP2021有兩種型號,參考電壓的輸出分別為5 V和3.3 V,適應(yīng)5 V和3.3 V的單片機(jī)。這個參考電壓的輸出電流最大為50 mA,所以不適合工作電流比較大的場合[3-4]。
參考文獻(xiàn)
[1] LIN規(guī)范(V1.2),廣州周立功單片機(jī)發(fā)展有限公司,2005.
[2] LIN Specification Package(Revision 2.1).LIN Consortium,2006.
[3] PIC16F688數(shù)據(jù)手冊.DS41203B_CN.2006.
[4] MCP202X數(shù)據(jù)手冊.DS22018D_CN.2009.