摘要:設(shè)計(jì)一款基于WinCE操作系統(tǒng)的智能車(chē)載儀表,,通過(guò)CAN總線(xiàn)接收汽車(chē)各個(gè)部件的ECU的信息,,并將其顯示在液晶顯示屏中。以ARM9內(nèi)核的S3C2440微處理器為核心,,設(shè)計(jì)了外圍硬件以及CAN總線(xiàn)在WinCE中的底層驅(qū)動(dòng)和上位應(yīng)用程序,。
關(guān)鍵詞:嵌入式應(yīng)用;智能車(chē)載儀表,;WinCE,;CAN總線(xiàn)
引言
隨著高性能電子顯示技術(shù)的發(fā)展,汽車(chē)儀表電子化的程度越來(lái)越高,。國(guó)內(nèi)外已開(kāi)發(fā)出了多功能全電子顯示儀表,、平視顯示儀表、汽車(chē)導(dǎo)航系統(tǒng),、行車(chē)記錄儀等高技術(shù)產(chǎn)品,。未來(lái),車(chē)用電子化嵌入式儀表具有以下優(yōu)點(diǎn):提供大量復(fù)雜的信息,,使汽車(chē)的電子控制程度越來(lái)越高,;滿(mǎn)足小型、輕量化的要求,,使有限的駕駛空間更人性化,;高精度和高可靠性實(shí)現(xiàn)汽車(chē)儀表的電子化,降低了故障的發(fā)生率,;設(shè)有在線(xiàn)故障診斷系統(tǒng),,一旦汽車(chē)發(fā)生故障,可以找到故障來(lái)源,,方便維修;外形設(shè)計(jì)自由度高,,汽車(chē)儀表盤(pán)造型美觀,。基于以上優(yōu)點(diǎn),,汽車(chē)會(huì)越來(lái)越多地采用各種用途的電子化儀表,。造型新穎,、功能強(qiáng)大的嵌入式電子化儀表將是今后車(chē)用儀表的發(fā)展趨勢(shì)和潮流。
1 智能車(chē)載儀表系統(tǒng)結(jié)構(gòu)
本智能車(chē)載儀表?yè)碛写蠖鄶?shù)傳統(tǒng)車(chē)載儀表所擁有的功能,,駕駛員可以通過(guò)車(chē)載儀表的顯示界面獲取當(dāng)前汽車(chē)的狀態(tài)信息,,例如車(chē)速、油壓,、油溫,、水溫、機(jī)油壓力或者電瓶電量,。
傳統(tǒng)車(chē)輛儀表直接與車(chē)輛的傳感器相連,,儀表系統(tǒng)經(jīng)由傳感器的模擬量得到汽車(chē)當(dāng)前狀態(tài),精確性不高,。本文設(shè)計(jì)的智能車(chē)載儀表并不是簡(jiǎn)單地與傳感器相連,,而是通過(guò)CAN控制器將整車(chē)連接成一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)。車(chē)輛部件配以CAN控制器,,通過(guò)雙絞線(xiàn)將車(chē)輛部件連接起來(lái)形成一個(gè)網(wǎng)絡(luò)體系,實(shí)現(xiàn)部件的電子化,。同時(shí),,車(chē)載儀表和汽車(chē)部件的電子化也提高了汽車(chē)的精準(zhǔn)度和可靠性,,降低故障發(fā)生率。
車(chē)載智能儀表主要分為基于S3C2440處理器的硬件系統(tǒng)和WinCE環(huán)境下的軟件系統(tǒng)兩大部分,。硬件系統(tǒng)為整個(gè)控制系統(tǒng)提供基礎(chǔ),,負(fù)責(zé)CAN總線(xiàn)通信。軟件系統(tǒng)提供CAN總線(xiàn)的硬件驅(qū)動(dòng)以及在WinCE下的儀表上位應(yīng)用程序,。
2 硬件設(shè)計(jì)
硬件系統(tǒng)以S3C2440為核心,,RAM內(nèi)存、NOR Flash和NAND Flash作為存儲(chǔ)介質(zhì),,擴(kuò)展部分外圍設(shè)備以負(fù)責(zé)系統(tǒng)信息的輸入與輸出,,如CAN總線(xiàn)通信單元、LCD顯示,、觸摸屏,、通用串行口、USB設(shè)備、以太網(wǎng)接口等,。系統(tǒng)硬件結(jié)構(gòu)如圖1所示,。
在眾多接口中,CAN總線(xiàn)通信單元是在整車(chē)通信過(guò)程中的關(guān)鍵部分,。在汽車(chē)的各個(gè)重要部件中,,配置相應(yīng)的CAN控制單元,由雙絞線(xiàn)將各個(gè)CAN總線(xiàn)控制單元連接起來(lái),。汽車(chē)的各個(gè)部件將該部件的當(dāng)前狀態(tài)信息由CAN控制單元發(fā)送出去,,經(jīng)雙絞線(xiàn)發(fā)送到智能車(chē)載儀表的CAN單元當(dāng)中,經(jīng)過(guò)系統(tǒng)的CAN接口將數(shù)據(jù)發(fā)送到系統(tǒng)中,。車(chē)載儀表系統(tǒng)得到數(shù)據(jù)后,,經(jīng)過(guò)數(shù)據(jù)處理得到汽車(chē)部件的當(dāng)前狀態(tài)信息。
CAN總線(xiàn)接口電路如圖2所示,。采用Microchip公司的CAN總線(xiàn)控制器MCP2515,。MCP2515完全支持CAN 2.OA/B技術(shù)規(guī)范,速度達(dá)到1Mbps,;SPI的接口標(biāo)準(zhǔn)使得它與S3C2440的連接更加簡(jiǎn)單,;能發(fā)送和接收標(biāo)準(zhǔn)和擴(kuò)展數(shù)據(jù)幀以及遠(yuǎn)程幀;自帶2個(gè)驗(yàn)收屏蔽寄存器和6個(gè)驗(yàn)收濾波寄存器,,可以過(guò)濾掉不想要的報(bào)文,,減少了微處理器的開(kāi)銷(xiāo)。CAN總線(xiàn)收發(fā)器采用TJA1050,,該器件提供了CAN控制器與物理總線(xiàn)之間的接口以及對(duì)CAN總線(xiàn)的差動(dòng)發(fā)送和接收功能,。
為了增強(qiáng)CAN總線(xiàn)節(jié)點(diǎn)的抗干擾能力,提高系統(tǒng)的穩(wěn)定性,,在CAN控制器與CAN收發(fā)器之間加入了光耦隔離器6N137,,而不是使TXCAN和RX-CAN端直接與收發(fā)器相連,這樣就實(shí)現(xiàn)了總線(xiàn)上各CAN節(jié)點(diǎn)之間的電氣隔離,。同時(shí),,這也解決了MCP2515與TJA1050之間電平兼容的問(wèn)題,還可以抑制CAN網(wǎng)絡(luò)中的尖峰脈沖及噪聲干擾,。光耦部分電路所采用的兩個(gè)電源必須完全隔離,,否則也就失去了意義。電源的隔離可以采用小功率的電源隔離模塊或者多帶5 V隔離輸出的開(kāi)關(guān)電源模塊實(shí)現(xiàn),。這些部分雖然增加了接口電路的復(fù)雜性,,但是卻提高了節(jié)點(diǎn)的穩(wěn)定性和安全性。
在CAN接口處,,CAN通信線(xiàn)上的2個(gè)60Ω電阻(總計(jì)120 Ω),,起到增大負(fù)載,、減少回波反射作用,是一種阻抗匹配的補(bǔ)救措施,。2個(gè)60 Ω的中間部分與地端之間連接一個(gè)電容以抗干擾。
3 軟件設(shè)計(jì)
軟件的整體環(huán)境為winCE編程環(huán)境,。針對(duì)本車(chē)載智能儀表硬件系統(tǒng)定制相應(yīng)的WinCE操作系統(tǒng),,實(shí)現(xiàn)對(duì)硬件的驅(qū)動(dòng)。再編寫(xiě)應(yīng)用程序,,通過(guò)對(duì)應(yīng)用程序的具體操作實(shí)現(xiàn)對(duì)系統(tǒng)硬件的操作,,即實(shí)現(xiàn)系統(tǒng)的功能。其中非常關(guān)鍵的是編寫(xiě)CAN控制器的驅(qū)動(dòng),。CAN驅(qū)動(dòng)實(shí)現(xiàn)應(yīng)用軟件對(duì)CAN控制單元的操作,,以及讀取CAN控制單元中的數(shù)據(jù)代碼。
3.1 系統(tǒng)開(kāi)發(fā)和移植
嵌入式系統(tǒng)開(kāi)發(fā)就是系統(tǒng)驅(qū)動(dòng)層的設(shè)計(jì),,其中最主要就是BSP的開(kāi)發(fā)和調(diào)試,。所以智能車(chē)載儀表底層驅(qū)動(dòng)的開(kāi)發(fā)就顯得尤為重要。
由于使用的是WinCE操作系統(tǒng),,所以使用Platform Builder定制WinCE操作系統(tǒng)鏡像,。在Platform Builder中,可以添加系統(tǒng)部分硬件(如液晶屏,、RAM)的驅(qū)動(dòng),,這些驅(qū)動(dòng)已經(jīng)由微軟公司編寫(xiě)好。然后啟動(dòng)Bootloader,,把鏡像文件下載到Flash存儲(chǔ)器中,,并配置操作系統(tǒng)啟動(dòng)文件boot.ini。
3.2 CAN總線(xiàn)驅(qū)動(dòng)開(kāi)發(fā)
由于CAN是外部設(shè)備,,所以需要將CAN的驅(qū)動(dòng)以流接口驅(qū)動(dòng)方式編寫(xiě),。流接口驅(qū)動(dòng)函數(shù)被設(shè)計(jì)來(lái)與通常的文件系統(tǒng)API(如 Activate Dev-iee、ReadFile,、WriteFile和IOControl等)緊密匹配,,即流接口驅(qū)動(dòng)在應(yīng)用程序中表現(xiàn)為一個(gè)系統(tǒng)文件,應(yīng)用程序通過(guò)對(duì)系統(tǒng)文件的特殊文件進(jìn)行操作從而完成對(duì)設(shè)備的操作,。編寫(xiě)流接口文件主要用到流接口函數(shù),,也就是流接口驅(qū)動(dòng)的入口點(diǎn),如XXX_Init,、XXX_Read和XXX_Open等,。這些流接口文件與相應(yīng)的API函數(shù)對(duì)應(yīng),使應(yīng)用程序由相應(yīng)的函數(shù)可以訪(fǎng)問(wèn)到外部設(shè)備,。
作為流接口驅(qū)動(dòng)程序,,CAN總線(xiàn)驅(qū)動(dòng)程序也有一組標(biāo)準(zhǔn)函數(shù),,可完成I/O操作。這些函數(shù)提供給WinCE操作系統(tǒng)內(nèi)核使用,,它們都是流接口驅(qū)動(dòng)程序的DLL文件,。動(dòng)態(tài)加載CAN總線(xiàn)驅(qū)動(dòng)程序時(shí),系統(tǒng)要進(jìn)行注冊(cè),。CAN驅(qū)動(dòng)程序注冊(cè)表信息:
通過(guò)以上代碼完成注冊(cè)之后,,調(diào)用ActivateDeviceEx()函數(shù)進(jìn)行加載驅(qū)動(dòng)。
3.3 CAN總線(xiàn)驅(qū)動(dòng)通信流程
CAN總線(xiàn)控制器驅(qū)動(dòng)程序主要用于設(shè)置MCP2515的波特率,、MCP2515的驗(yàn)收過(guò)濾器,、CAN消息傳送模式和CAN收發(fā)數(shù)據(jù)方式。驅(qū)動(dòng)程序是連接上位應(yīng)用程序和硬件的一個(gè)中間紐帶,。智能車(chē)載儀表系統(tǒng)在EVC++環(huán)境下進(jìn)行CAN總線(xiàn)開(kāi)發(fā),。
流式驅(qū)動(dòng)以文件的方式打開(kāi)函數(shù)CreateFile():驅(qū)動(dòng)成功打開(kāi)后,CreateFile()函數(shù)返回不為INVALID-HAN-DLE-VALUE的句柄,,此句柄也是關(guān)閉驅(qū)動(dòng)函數(shù)Close-Handle()的參數(shù),。CAN設(shè)置函數(shù)DeviceIoControl()接收由CreateFile()函數(shù)獲得的句柄及控制命令碼,設(shè)置輸入/輸出緩沖區(qū)以及緩沖區(qū)的大小,。函數(shù)執(zhí)行完成后返回實(shí)際輸出的緩沖區(qū)大小等,。CAN總線(xiàn)發(fā)送與接收函數(shù)WriteFile()和ReadFile(),利用驅(qū)動(dòng)文件句柄,、發(fā)送和接收緩沖區(qū)等參數(shù)完成數(shù)據(jù)的發(fā)送和接收,,操作成功后返回實(shí)際發(fā)送和接收的字節(jié)數(shù)。
為了不讓主線(xiàn)程一直處于等待數(shù)據(jù)到來(lái)的狀態(tài),,讓主線(xiàn)程擁有時(shí)間令牌來(lái)操作其他事情,,程序采用多線(xiàn)程設(shè)計(jì),創(chuàng)建一個(gè)接收數(shù)據(jù)線(xiàn)程,。接收數(shù)據(jù)線(xiàn)程是一個(gè)無(wú)限循環(huán),,它不斷查詢(xún)CAN總線(xiàn)數(shù)據(jù)退出標(biāo)志,如果退出標(biāo)志有效,,則該循環(huán)結(jié)束退出,。驅(qū)動(dòng)程序流程如圖3所示。
結(jié)語(yǔ)
目前,,基于嵌入式技術(shù)的車(chē)載儀表逐漸開(kāi)始流行,。本文使用基于WinCE的ARM9微處理器作為開(kāi)發(fā)平臺(tái),處理速度快,,功能強(qiáng)大,;使用CAN總線(xiàn)技術(shù)進(jìn)行信號(hào)的相互傳輸,CAN總線(xiàn)實(shí)時(shí)接收汽車(chē)部件發(fā)送來(lái)的信息,,并進(jìn)行處理與分析,;使用WinCE操作系統(tǒng),,界面友好。本智能車(chē)載儀表系統(tǒng)可以節(jié)約成本,、降低功耗,,并且可維護(hù)性強(qiáng),便于擴(kuò)展和升級(jí),。