儀表作為汽車整個(gè)系統(tǒng)中十分重要的部分,,是提高汽車綜合性能的重要方面之一。隨著計(jì)算機(jī)軟硬件技術(shù),、總線技術(shù),、電子技術(shù)等的快速發(fā)展,,控制系統(tǒng)臃腫、接線布線復(fù)雜,、占用空間大的傳統(tǒng)電磁機(jī)械儀表漸漸被淘汰,,虛擬儀表正以傳統(tǒng)機(jī)械儀表無(wú)法比擬的速度迅猛發(fā)展。目前虛擬儀表通常包括純數(shù)字儀表和虛擬儀表盤儀表2種:純數(shù)字儀表成本較低,,但功能和界面比較簡(jiǎn)單,,滿足不了一般駕駛員的需求;而現(xiàn)有的虛擬儀表盤儀表雖然功能和界面比較豐富,,但又存在著開發(fā)成本高,、可移植性和可重繪性差、可擴(kuò)展性不足等缺點(diǎn),,不利于大范圍的推廣與應(yīng)用,。
針對(duì)傳統(tǒng)儀表和現(xiàn)有儀表存在的不足,本文提出了一種新型的車載虛擬儀表設(shè)計(jì)方案,,采用ARM 處理器S3C6410為核心的硬件平臺(tái)和以嵌入式Linux系統(tǒng)為核心的軟件平臺(tái),,并在此基礎(chǔ)上采用開放源代碼的圖形界面庫(kù)QT開發(fā)儀表終端應(yīng)用程序。該虛擬儀表可讀性好,,讀數(shù)精度高,,在可移植性、可維護(hù)性和成本方面都得到了良好的改善,,具有較大的科研價(jià)值和商業(yè)使用價(jià)值,。
1 系統(tǒng)總體設(shè)計(jì)
本文所介紹的車載虛擬儀表的基本設(shè)計(jì)思想是將汽車上安裝的各種傳感器采集到的數(shù)據(jù)進(jìn)行智能化的處理,然后在運(yùn)行于嵌入式Linux系統(tǒng)的使用QT設(shè)計(jì)的虛擬儀表盤上進(jìn)行顯示,,以便于監(jiān)測(cè)汽車各系統(tǒng)的工作狀況,,如剩余油量、當(dāng)前車速,、行駛里程等,,并在某狀態(tài)出現(xiàn)異常或存在危險(xiǎn)時(shí)向駕駛員提示報(bào)警,。
如圖1所示,,本車載虛擬儀表系統(tǒng)的設(shè)計(jì)總體由3個(gè)部分組成:
(1)信號(hào)采集:對(duì)汽車上安裝的的各種傳感器采集的速度、剩余油量等汽車狀態(tài)信息,,經(jīng)過(guò)處理轉(zhuǎn)換后,,將其轉(zhuǎn)換為計(jì)算機(jī)可以識(shí)別的數(shù)字量;(2)數(shù)據(jù)處理:將"信號(hào)采集"過(guò)程傳輸來(lái)的數(shù)據(jù)進(jìn)行必要的處理,,將有用的數(shù)據(jù)保存,,以便于顯示和報(bào)警,本過(guò)程主要由嵌入式處理器完成;(3)人機(jī)交互:將"數(shù)據(jù)處理"過(guò)程處理完成的數(shù)據(jù),,在使用QT設(shè)計(jì)的虛擬儀表盤上動(dòng)態(tài)顯示,,主要顯示內(nèi)容有:當(dāng)前速度、燃油箱的存油量,、時(shí)間日期,、行駛里程、報(bào)警燈等,;在某項(xiàng)狀態(tài)出現(xiàn)異常時(shí),,通過(guò)報(bào)警模塊向駕駛員提示報(bào)警。
圖1 虛擬儀表系統(tǒng)結(jié)構(gòu)框圖
2 虛擬儀表硬件設(shè)計(jì)
虛擬儀表的硬件結(jié)構(gòu)圖如圖2所示,。虛擬儀表的核心處理器采用ARM1176JZF-S核的S3C6410芯片,,其主頻最高可達(dá)到667MHz,內(nèi)部繼承了強(qiáng)大的多媒體處理單元,帶有3D圖形硬件加速器,,并支持2D圖形圖像的平滑縮放等操作,,有利于為用戶提供高靈敏度的汽車狀態(tài)動(dòng)態(tài)顯示;外接256 MB SDRAM 和2GBNANDFLASH;串口連接信號(hào)轉(zhuǎn)換處理模塊,,轉(zhuǎn)換處理模塊內(nèi)部集成CAN-RS232轉(zhuǎn)換器及24位的A/D轉(zhuǎn)換器LTC2414,接收相關(guān)傳感器采集的各種汽車狀態(tài)信號(hào),,并經(jīng)過(guò)處理后,將處理完成的數(shù)據(jù)上傳至處理器,;外接LCD模塊采用8寸TFT液晶顯示屏,,處理器內(nèi)部集成的LCD控制器信號(hào)線經(jīng)過(guò)驅(qū)動(dòng)電路后即可連接LCD模塊,為虛擬儀表顯示提供了硬件平臺(tái),;外接由語(yǔ)音芯片組成的報(bào)警模塊,,在必要的時(shí)候可以由處理器驅(qū)動(dòng)報(bào)警模塊以語(yǔ)音的形式向駕駛員提示報(bào)警。
圖2 虛擬儀表的硬件結(jié)構(gòu)圖
3 虛擬儀表軟件設(shè)計(jì)
本系統(tǒng)采用嵌入式Linux作為操作系統(tǒng),,在Linux平臺(tái)下編寫虛擬儀表的驅(qū)動(dòng)程序和應(yīng)用程序,,采用QT/embedded設(shè)計(jì)虛擬儀表軟面板。應(yīng)用程序的主要功能有,,當(dāng)接收到各個(gè)經(jīng)轉(zhuǎn)換處理的傳感器采集到的信號(hào)后,,將其有用的數(shù)據(jù)提取并加以存儲(chǔ),,然后調(diào)用儀表顯示程序,,將需要顯示的內(nèi)容顯示到不同的虛擬儀表盤中,同時(shí)并行判斷各項(xiàng)參數(shù)是否正常,,若出現(xiàn)異常則調(diào)用語(yǔ)音報(bào)警程序和顯示程序提示報(bào)警,。虛擬儀表軟件結(jié)構(gòu)圖如圖3所示。虛擬儀表軟件開發(fā)主要有2個(gè)內(nèi)容:開發(fā)環(huán)境的搭建,、虛擬儀表應(yīng)用程序的設(shè)計(jì),。
圖3 虛擬儀表的軟件結(jié)構(gòu)圖
3.1 開發(fā)環(huán)境的搭建
為了開發(fā)滿足功能的應(yīng)用程序,本文采用的軟件開發(fā)環(huán)境是Vmware WorkStation 7虛擬機(jī)和Fedora 13操作系統(tǒng),在此環(huán)境中安裝交叉編譯器ARM-linux-gcc 4.5.1,用來(lái)完成包含相關(guān)驅(qū)動(dòng)程序的虛擬儀表系統(tǒng)內(nèi)核,、QT庫(kù)和應(yīng)用程序的編譯,;編譯安裝QT/Embedded庫(kù),用來(lái)支持虛擬儀表人機(jī)交互界面程序的開發(fā)并生成虛擬儀表系統(tǒng)中需要的QT庫(kù)文件,;編譯Tslib觸摸屏庫(kù),,為虛擬儀表系統(tǒng)添加觸摸屏支持;在Fedora13系統(tǒng)中安裝QT Creator軟件,,用于完成虛擬儀表系統(tǒng)應(yīng)用程序的開發(fā),;移植嵌入式設(shè)備的系統(tǒng)引導(dǎo)程序U-boot;編寫硬件平臺(tái)相關(guān)驅(qū)動(dòng),然后裁剪編譯Linux2.6.10內(nèi)核并在其中加載已編譯的相關(guān)驅(qū)動(dòng),;制作硬件平臺(tái)需要的根文件系統(tǒng),,在其中移植已配置、編譯過(guò)的tslib庫(kù)和QT/Embedded庫(kù),。
3.2 應(yīng)用程序開發(fā)
本虛擬儀表系統(tǒng)的的應(yīng)用程序基于QT/Embedded平臺(tái),,使用QT的輕量級(jí)集成開發(fā)環(huán)境QT Creator完成開發(fā),最后在已搭建的開發(fā)環(huán)境中編譯生成可執(zhí)行二進(jìn)制文件,,并將其移植到硬件平臺(tái)中的文件系統(tǒng)中進(jìn)行測(cè)試,。
虛擬儀表系統(tǒng)應(yīng)用程序的主要工作流程如圖4所示,在系統(tǒng)上電后,,應(yīng)用程序開始運(yùn)行,,要實(shí)現(xiàn)汽車虛擬儀表系統(tǒng)的功能,應(yīng)用程序需要完成虛擬儀表面板和后臺(tái)處理程序的開發(fā):
圖4 系統(tǒng)軟件工作流程圖
3.2.1 虛擬儀表面板的繪制
虛擬儀表面板主要將汽車的一些基本狀態(tài)在LCD上通過(guò)表盤和數(shù)字直觀,、動(dòng)態(tài)的顯示出來(lái),,本設(shè)計(jì)中采用速度、油量,、電池電量,、時(shí)間日期、安全帶,、安全氣囊,、行駛里程等狀態(tài)。
為了提高本虛擬儀表的可擴(kuò)展性和可維護(hù)性,,在本設(shè)計(jì)中,,為每種具體的虛擬儀表對(duì)象定義一個(gè)抽象類。
下面即以儀表盤類(QMeter)為例介紹本系統(tǒng)中虛擬儀器面板的繪制,。
在需要顯示的各種狀態(tài)中,,速度和油量通常以儀表盤形式顯示,虛擬儀表模塊中的虛擬儀表盤采用QT的二維圖形引擎的基礎(chǔ)類QPainter開發(fā),。QPainter具有豐富的圖形圖像繪制函數(shù),,并支持反走樣,、漸變填充、像素混合,、線性變換等特性,,利用這些函數(shù)完成儀表盤的繪制。
QMeter類的定義如下:
3.2.2 后臺(tái)處理程序
后臺(tái)處理程序主要將系統(tǒng)下層采集的數(shù)據(jù)進(jìn)行分析處理,,將有用的數(shù)據(jù)傳送至虛擬儀表面板顯示,,實(shí)現(xiàn)虛擬儀表的動(dòng)態(tài)顯示,同時(shí)以多線程的方式不斷檢測(cè)汽車各項(xiàng)狀態(tài),,當(dāng)某項(xiàng)狀態(tài)出現(xiàn)異?;虼嬖谖kU(xiǎn)時(shí)驅(qū)動(dòng)LCD和語(yǔ)音芯片向駕駛員報(bào)警,其中異常狀態(tài)有超速,、存油量過(guò)低,、電池電量過(guò)低等。下面以報(bào)警子程序?yàn)槔v解后臺(tái)處理子程序,。
報(bào)警子程序在后臺(tái)處理程序中新建一個(gè)線程,,通過(guò)多線程的方式以輪詢的方式查詢各個(gè)傳感器的狀態(tài),當(dāng)發(fā)現(xiàn)某個(gè)狀態(tài)存在危險(xiǎn)時(shí),,驅(qū)動(dòng)語(yǔ)音芯片發(fā)出相應(yīng)的報(bào)警信息,。其定義如下:
QT特有的信號(hào)與槽(signal/slots)機(jī)制實(shí)現(xiàn)方式如下:
通過(guò)調(diào)用QObject對(duì)象的connect函數(shù),將報(bào)警線程的sendData信號(hào)與主線程的槽函數(shù)Deal()關(guān)聯(lián),,當(dāng)報(bào)警偵聽線程發(fā)射信號(hào)時(shí),,主線程槽函數(shù)及時(shí)被調(diào)用,驅(qū)動(dòng)報(bào)警,。
4 應(yīng)用程序示例
將裁剪,、編譯過(guò)的內(nèi)核與制作的帶QT庫(kù)的文件系統(tǒng)燒寫到開發(fā)板。在開發(fā)環(huán)境內(nèi)交叉編譯編寫的應(yīng)用程序,,得到可執(zhí)行二進(jìn)制文件,,將此文件移植到開發(fā)板,即可實(shí)現(xiàn)應(yīng)用程序的發(fā)布,。重新開機(jī),,運(yùn)行應(yīng)用程序即顯示虛擬儀表界面,如圖5所示,。
圖5 基于嵌入式Linux與QT的汽車虛擬儀表主界面
通過(guò)汽車上的各種傳感器采集數(shù)據(jù),,通過(guò)控制器和高速CAN總線傳送到S3C6410硬件平臺(tái)解析,應(yīng)用程序得到解析后的數(shù)據(jù)后,,即可動(dòng)態(tài)的顯示當(dāng)前車輛的各種狀態(tài)及報(bào)警情況,。
5 結(jié) 語(yǔ)
本文設(shè)計(jì)的汽車虛擬儀表,,具有優(yōu)良的跨平臺(tái)性能,;該設(shè)計(jì)方案使得儀表信息量增大,,操作簡(jiǎn)單,易于維護(hù),,界面友好,;采用開放源碼設(shè)計(jì),使得本系統(tǒng)開發(fā)成本降低,;使用雙緩沖技術(shù)消除了儀表顯示頁(yè)面的閃爍,;采用多線程技術(shù),使處理,、顯示與報(bào)警同時(shí)進(jìn)行,,提高了系統(tǒng)的實(shí)時(shí)性與靈敏度;將具體的虛擬儀表對(duì)象定義為抽象類,,增強(qiáng)了虛擬儀表的擴(kuò)展性,。經(jīng)實(shí)驗(yàn)測(cè)試,本虛擬儀表系統(tǒng)的所有功能模塊均能正常運(yùn)行,,該系統(tǒng)的應(yīng)用將對(duì)降低汽車的成本,,縮短汽車儀表系統(tǒng)的研發(fā)周期,提供高友好度的人機(jī)界面具有重要的意義,。