通過(guò)電平轉(zhuǎn)換電路轉(zhuǎn)換成可以外圍標(biāo)準(zhǔn)電平,考慮到保證音質(zhì)效果,在此電路上加入低通濾波電路,去除外界雜質(zhì),降低阻抗,最終接入標(biāo)準(zhǔn)的外部音箱和MIC單元。其作用是預(yù)存語(yǔ)音導(dǎo)航音頻,當(dāng)進(jìn)行導(dǎo)航時(shí)被調(diào)用并通過(guò)音箱發(fā)出導(dǎo)航語(yǔ)音;CAN通信系統(tǒng)負(fù)責(zé)車(chē)輛狀態(tài)數(shù)據(jù)的傳輸,控制器采用帶有SPI接口的MCP2515,完全支持CAN V2.0B技術(shù)規(guī)范。收發(fā)器采用的是CTM1050T高速CAN隔離收發(fā)器,具備電磁輻射低,電磁抗干擾EMI性強(qiáng),不上電時(shí)成無(wú)源特性,功耗低,電氣隔離功能和ESD保護(hù)功能。
[0045]圖2所示為全圖形化虛擬儀表的整體界面設(shè)計(jì)。Android系統(tǒng)借助了 Java的UI設(shè)計(jì)思想,為用戶提供了豐富的可視化界面組件,對(duì)于用戶界面(UI)的設(shè)計(jì),Android系統(tǒng)為用戶提供了豐富的可視化界面組件,我們可以根據(jù)需要,選擇恰當(dāng)?shù)囊晥D組件來(lái)完成個(gè)性化的布局設(shè)計(jì)。界面的控制主要有三種方式:使用xml布局文件、使用Java代碼以及兩者的結(jié)合。此外,還可借助Android系統(tǒng)的強(qiáng)大的圖形處理能力(包括2D和3D)進(jìn)行界面的優(yōu)化設(shè)計(jì),圖形的特效處理以及圖像的紋理渲染,還可借助OpenGL ES來(lái)開(kāi)發(fā)獨(dú)居特色的3D效果。
[0046]該設(shè)計(jì)具有多種模式,靈活性強(qiáng),用戶可根據(jù)個(gè)人喜好選擇。其中覆蓋的車(chē)輛狀態(tài)信息包括車(chē)速、里程、發(fā)動(dòng)機(jī)轉(zhuǎn)速、發(fā)動(dòng)機(jī)高溫警示、燃油液位、制動(dòng)液位、機(jī)油油位、冷卻液液位以及狀態(tài)指示燈的相關(guān)提示等。此外,當(dāng)發(fā)生故障時(shí),還可顯示故障原因、故障部位以及維修建議、保養(yǎng)信息等。
[0047]圖3所示為車(chē)輛數(shù)據(jù)信息采集流程圖。具體工作流程如下:首先對(duì)主控器以及CAN節(jié)點(diǎn)進(jìn)行初始化(包括中斷的設(shè)置、定時(shí)器的設(shè)置、CAN工作模式的設(shè)置、波特率的設(shè)置等),然后按照固定的周期以及規(guī)定的CAN總線通信協(xié)議讀取CAN信息幀,并通過(guò)幀標(biāo)識(shí)符(ID)來(lái)判斷數(shù)據(jù)類(lèi)型:若為車(chē)輛運(yùn)行狀態(tài)數(shù)據(jù),則把信息做歸一化處理,提取有效的數(shù)據(jù),并進(jìn)行信息處理、波動(dòng)幅度抑制等操作,最后將完整的車(chē)輛行駛狀態(tài)信息發(fā)送給LCD液晶屏,并以圖形化虛擬儀表的方式進(jìn)行顯示;若為故障碼信息,則根據(jù)優(yōu)先級(jí)原則,直接進(jìn)入車(chē)輛健康狀況診斷操作模式。
[0048]作為CAN主站的信息采集裝置及自診斷系統(tǒng)與各個(gè)傳感器及電控單元(ECT)實(shí)時(shí)通信,其中,信息采集裝置按照固定周期向作為從站的CAN通訊裝置的主控器發(fā)送數(shù)據(jù),自診斷系統(tǒng)則實(shí)時(shí)監(jiān)控各傳感器及ECU的工作狀態(tài),若在此期間發(fā)生故障或出現(xiàn)異常,自診斷系統(tǒng)立即向主控器發(fā)送故障碼。
[0049]具體的CAN通信機(jī)制:
[0050](I)主控器的CAN節(jié)點(diǎn)為從站,信息采集裝置和汽車(chē)自診斷裝置為主站;
[0051](2) CAN通訊數(shù)據(jù)分為兩類(lèi):分別為汽車(chē)自診斷系統(tǒng)故障碼數(shù)據(jù)、汽車(chē)運(yùn)行狀態(tài)數(shù)據(jù);
[0052](3) CAN幀格式:具有11位標(biāo)識(shí)符的標(biāo)準(zhǔn)幀;
[0053](4) ID分配:汽車(chē)自診斷系統(tǒng)故障碼數(shù)據(jù)ID為100H、汽車(chē)運(yùn)行狀態(tài)數(shù)據(jù)ID為102H。,一旦出現(xiàn)故障,系統(tǒng)優(yōu)先發(fā)送優(yōu)先級(jí)高的故障碼;
[0054](5)主站(信息采集裝置)按照固定周期向從站發(fā)送數(shù)據(jù),若在此期間發(fā)生故障,則汽車(chē)自診斷裝置立即向主控器發(fā)送故障碼數(shù)據(jù);
[0055](6)主站、從站之間通訊的數(shù)據(jù)區(qū)長(zhǎng)度固定為8字節(jié),如傳輸數(shù)據(jù)長(zhǎng)度大于8字節(jié),則順序采用分配的下一個(gè)可以使用的Class ID;
[0056](7) CAN通訊部分?jǐn)?shù)據(jù)傳送采用高位節(jié)優(yōu)先傳送原則。
[0057]圖4所示的是CAN通信系統(tǒng)整體框架圖,該部分設(shè)計(jì)的最大亮點(diǎn)是采用了一款帶隔離的高速CAN收發(fā)器芯片CTM1050T,該芯片除了繼承了 CJA1050的所有優(yōu)點(diǎn)外,內(nèi)部還集成了必需的CAN隔離及CAN收、發(fā)器件,并且具有DC 2500V的隔離功能及ESD保護(hù)作用,與控制器MCP2515有良好的兼容性。與常規(guī)的CAN總線通信設(shè)計(jì)相比,省去了光電耦合器(6N137)和電源隔離器(ZY0505BS),避免了設(shè)計(jì)的繁瑣性,并且參加了抗干擾能力以及運(yùn)行的穩(wěn)定性和安全性。
[0058]具體的硬件連接:主控器ARM的接收引腳XspiMISO接MCP2515的發(fā)送引腳S0,ARM的發(fā)送引腳XspiMOSI接的是主控器的SI腳;同步時(shí)鐘SPICLK由主控器提供;MCP2515的片選信號(hào)CS由主控器的SPI模塊的XspiCS控制,CAN總線控制器MCP2515的中斷引腳與主控器的外部中斷XEINTO連接。采用中斷的方式接收數(shù)據(jù)。
[0059]圖5所示為Android下的CAN總線通信開(kāi)發(fā)流程圖。Android下的CAN總線通信開(kāi)發(fā)步驟如下:
[0060]第一步:Android下CAN驅(qū)動(dòng)的開(kāi)發(fā):傳統(tǒng)的CAN驅(qū)動(dòng)是基于字符設(shè)備的。這種方式只能針對(duì)某一具體硬件的設(shè)備驅(qū)動(dòng),提供的功能比較少,且同一時(shí)刻只支持單進(jìn)程訪問(wèn)。而基于網(wǎng)絡(luò)設(shè)備的Socket CAN驅(qū)動(dòng)則可以克服以上不足。這種建于Linux網(wǎng)絡(luò)層之上的協(xié)議族實(shí)現(xiàn)了用戶空間的socket接口,CAN控制器的設(shè)備驅(qū)動(dòng)將自己作為一個(gè)網(wǎng)絡(luò)設(shè)備注冊(cè)進(jìn)Linux的網(wǎng)絡(luò)層,CAN控制器收到的CAN幀可以傳輸給高層的網(wǎng)絡(luò)協(xié)議和CAN協(xié)議族,反之,發(fā)送的幀也會(huì)通過(guò)高層給CAN控制器。
[0061]首先是ARM處理器的SPI總線的加載和聲明,CAN控制器的初始化、讀寫(xiě)等操作。然后,將CAN驅(qū)動(dòng)以模塊化的方式編譯進(jìn)Android內(nèi)核中,這種方式可以縮短開(kāi)發(fā)周期,減少工作量。
[0062]第二步:CAN測(cè)試工具的編譯:在Vmware的Linux環(huán)境下編譯測(cè)試工具--
canutils,主要用到的命令有ifconfig命令負(fù)責(zé)CAN節(jié)點(diǎn)的開(kāi)啟與關(guān)閉,candump命令負(fù)責(zé)CAN節(jié)點(diǎn)的接收,cansend命令負(fù)責(zé)CAN節(jié)點(diǎn)的發(fā)送,canecho命令負(fù)責(zé)對(duì)波特率等的設(shè)置。
[0063]第三步:CAN通信的測(cè)試:此步驟主要是為驗(yàn)證CAN驅(qū)動(dòng)的正確性,主要進(jìn)行CAN總線的收發(fā)實(shí)驗(yàn)。首先是CAN通信系統(tǒng)測(cè)試環(huán)境的搭建(見(jiàn)附圖6),中,終端調(diào)試工具為SecureCRT。然后通過(guò)上一步編譯的腳本命令來(lái)控制主控器的CAN節(jié)點(diǎn)動(dòng)作,從而測(cè)試通信是否正常。
[0064]第四步:Android HAL層的調(diào)用:由于Android上層的Applicat1n和Applicat1n Framework都是使用Java編寫(xiě),底層包括系統(tǒng)和使用眾多的LIiraries都是C/C++編寫(xiě)的。所以上層Java要調(diào)用底層的C/C++函數(shù)庫(kù)必須通過(guò)Java的JNI來(lái)實(shí)現(xiàn)。
[0065]第五步:Android上層軟件的設(shè)計(jì):運(yùn)用JAVA語(yǔ)言設(shè)計(jì)用戶軟件。
[0066]圖7所示為車(chē)載網(wǎng)絡(luò)及通訊服務(wù)框圖。在有無(wú)線網(wǎng)絡(luò)覆蓋的情況下,可wifi模塊實(shí)現(xiàn)無(wú)線上網(wǎng);還將手機(jī)與車(chē)載系統(tǒng)連接到同一 wifi網(wǎng)絡(luò)下,實(shí)現(xiàn)局域網(wǎng)的信息交互,從而實(shí)現(xiàn)文件的傳輸,界面的相互映射與控制;也可將手機(jī)或車(chē)載系統(tǒng)設(shè)置成便攜式的WLAN熱點(diǎn),發(fā)射無(wú)線網(wǎng)絡(luò)信號(hào),供對(duì)方使用,實(shí)現(xiàn)網(wǎng)絡(luò)的共享。
[0067]藍(lán)牙通訊方面,首先可以通過(guò)藍(lán)牙通訊技術(shù)實(shí)現(xiàn)主控器與手機(jī)等藍(lán)牙設(shè)備之間的文件傳輸與共享;車(chē)載主控器通過(guò)藍(lán)牙HCI指令和AT指令對(duì)藍(lán)牙模塊進(jìn)行操作,在主控器的LCD上實(shí)現(xiàn)電話的接聽(tīng),也可以通過(guò)位于方向盤(pán)上的快捷鍵實(shí)現(xiàn)電話的接聽(tīng)。藍(lán)牙模塊的語(yǔ)音信號(hào)輸出接到藍(lán)牙耳機(jī)上,車(chē)主在行車(chē)過(guò)程中可以方便的實(shí)現(xiàn)語(yǔ)音通話功能。
[0068]3G/4G網(wǎng)絡(luò)服務(wù)可以實(shí)現(xiàn)上網(wǎng)功能,比如新聞瀏覽,電子郵件,資源下載,甚至是視頻觀看等。此外,車(chē)載主控器還是有借助3G/4G網(wǎng)絡(luò)與后臺(tái)服務(wù)器進(jìn)行通訊,實(shí)現(xiàn)車(chē)輛的故障的報(bào)警及健康狀況診斷等服務(wù)(下部分內(nèi)容介紹)。
[0069]圖8所示為車(chē)輛健康狀況診斷示意圖。該診斷服務(wù)主要分為兩大部分,即基于CAN總線的離線診斷服務(wù)和基于3G網(wǎng)絡(luò)的在線診斷服務(wù)。
[0070]首先看基于CAN總線的離線診斷服務(wù)。由于Android系統(tǒng)提供了基于SQLite的嵌入式數(shù)據(jù)庫(kù)管理系統(tǒng),因此,可以借助SQLite來(lái)建立故障診斷系統(tǒng)的后臺(tái)數(shù)據(jù)庫(kù),即維修手冊(cè),并完成數(shù)據(jù)的查詢,新增,刪除,修改等操作。車(chē)載故障診斷系統(tǒng)的數(shù)據(jù)庫(kù)系(見(jiàn)附圖9)統(tǒng)包括兩個(gè)數(shù)據(jù)庫(kù)文件,分別為故障碼庫(kù)和汽車(chē)運(yùn)行數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù)。其中,故障碼庫(kù)包括有兩個(gè)數(shù)據(jù)表,一個(gè)為故障碼表(存儲(chǔ)所有的故障碼以及相關(guān)維修信息,即維修手冊(cè)),一個(gè)為實(shí)時(shí)故障碼表(實(shí)時(shí)保存汽車(chē)產(chǎn)生的故障碼);汽車(chē)運(yùn)行數(shù)據(jù)庫(kù)包括一個(gè)車(chē)輛運(yùn)行數(shù)據(jù)表,存儲(chǔ)