文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2015)06-0020-04
0 引言
汽車儀表是汽車與駕駛員進(jìn)行信息交流的窗口,,也是汽車電子技術(shù)的重要內(nèi)容,。隨著現(xiàn)代汽車所使用車載電器不斷增多,如車載多媒體,、行車記錄儀,、空調(diào)和導(dǎo)航等,汽車駕駛環(huán)境在日益改善的同時,,顯示的信息量也急劇增加,。目前,多數(shù)汽車廠商采用在中控臺安置兩個顯示屏的方案解決信息顯示問題,,即“儀表盤+中控彩色大屏”,。行車時,該方案容易導(dǎo)致駕駛員頻繁轉(zhuǎn)移視線,,造成注意力不集中,,留下安全隱患。此外,,傳統(tǒng)的機(jī)械式儀表盤存在部件磨損后誤差等級大,、儀表樣式單一的缺點,而以液晶屏作為顯示終端的虛擬儀表則存在液晶屏壽命較短的缺陷,。
針對上述問題,,本文提出了一種基于數(shù)字光處理(Digital Light Procession,,DLP)[1]投影技術(shù)的車載集成前屏方案,將汽車行駛,、行車記錄儀視頻和多媒體播放等功能集中起來,,應(yīng)用DLP投影技術(shù)將畫面投射到方向盤前的反射屏上,并采用界面分隔的設(shè)計方法在一幀屏幕上同時顯示不同信息畫面,實現(xiàn)了系統(tǒng)樣機(jī)的研制及模擬實驗,。實驗結(jié)果表明,,數(shù)字化儀表響應(yīng)靈敏、畫面美觀,,各功能模塊之間通過按鍵切換,,交互便利。集成的顯示方法避免了駕駛員在兩個顯示屏中轉(zhuǎn)移視線,,駕駛環(huán)境更為舒適,,提高了行車安全性。
1 系統(tǒng)整體實現(xiàn)方案
汽車集成顯示系統(tǒng)整體結(jié)構(gòu)如圖1所示,。為滿足系統(tǒng)快速處理數(shù)據(jù)和實時性的要求,,選用Samsung公司的32位RISC微處理器S5PV210作為系統(tǒng)控制核心,,內(nèi)置高清晰多媒體接口線(High-Definition Multimedia Interface,,HDMI)模塊,可通過HDMI接口連接DLP投影儀進(jìn)行投影顯示,。外圍電路包括:存儲單元256 MB DDR RAM和1 GB NAND Flash,、RS-232口、CAN總線口等擴(kuò)展通信接口,。投影儀選用COOLUX X3S型DLP投影儀,。
系統(tǒng)功能為:采集模塊采集各類車載信號,兩個攝像頭分別采集前,、后兩個行車視頻圖像信號,,處理器根據(jù)獲得的信號調(diào)整信息顯示畫面,通過HDMI接口將畫面輸送到DLP投影儀并投射在反射屏上,,駕駛員通過觀察反射屏的圖像即可獲取所需信息,,并通過人機(jī)交互按鍵實現(xiàn)菜單操作,可方便地調(diào)整和切換顯示畫面,。集成顯示畫面包括汽車行駛信息,、行車記錄儀、電子地圖和多媒體播放4個子功能模塊,。
2 基于DLP技術(shù)的投影顯示方案
DLP技術(shù)是指通過數(shù)字微鏡器件(Digital Micromirror Device,,DMD)芯片將光強(qiáng)數(shù)字化以完成信息顯示的技術(shù)。DLP投影系統(tǒng)由光源,、色輪,、數(shù)字信號處理器,、光學(xué)器件和DMD芯片組成。其投影原理為:當(dāng)光源的光線經(jīng)過聚透鏡和色輪后,,被分解為R,、G、B三原色投射到DMD芯片上,,光線再經(jīng)過DMD鏡片的反射后由投影鏡頭投影成像,。
本文通過HDMI接口將車載集成系統(tǒng)與DLP投影儀連接,HDMI協(xié)議數(shù)據(jù)傳輸如圖2所示,,HDMI接口包含:3個用于傳輸數(shù)據(jù)的最小化傳輸差分信號(Transition Minimized Differential Signaling,,TMDS)通道;1個獨立的同步時序TMDS通道,,以保證數(shù)據(jù)傳輸時所需的統(tǒng)一時序,;顯示數(shù)據(jù)通道(Display Data Channel,DDC),,用于HDMI輸出端向接收端發(fā)送配置信息或讀取接收端的顯示屬性信息,。
車載終端與投影儀的連接結(jié)構(gòu)如圖3所示。處理器S5PV210內(nèi)部的視頻編碼器產(chǎn)生非標(biāo)準(zhǔn)流速視頻流,,經(jīng)過雙時鐘FIFO緩沖器將其調(diào)整為標(biāo)準(zhǔn)流速視頻流,,下一級的像素點轉(zhuǎn)換器將視頻流轉(zhuǎn)換為DLP投影儀可處理的24 bit RGB彩色圖像,最后經(jīng)視頻信號同步發(fā)生器處理,,把標(biāo)準(zhǔn)視頻流發(fā)送給HDMI發(fā)送器,,由HDMI接收器接收后輸入給DLPC300 DMD控制器,DMD鏡片將圖像反射后由投影鏡頭投影成像,。
為了使終端能夠滿足不同顯示分辨率系統(tǒng),,本文設(shè)計配置文件hdmi.conf并加入到根文件系統(tǒng)/etc目錄下。系統(tǒng)啟動后,,后臺服務(wù)進(jìn)程hdmi-service首先讀取投影儀接口分辨率參數(shù)并寫入到配置文件hdmi.conf中,,隨后hdmi-service進(jìn)程將hdmi.conf中的分辨率配置數(shù)據(jù)通過DDC通道發(fā)送到HDMI接收器的EDID ROM中,投影儀系統(tǒng)根據(jù)該數(shù)據(jù)變更顯示分辨率,。用戶如要更改顯示分辨率,,只需修改配置文件hdmi.conf即可完成。
本設(shè)計將DLP微型投影儀安裝在汽車方向盤轉(zhuǎn)向軸上,,將圖像投影到方向盤前的反射屏上,,如圖4所示。圖4中,,標(biāo)號1表示DLP微型投影儀,,標(biāo)號2表示反射屏。
3 系統(tǒng)軟件設(shè)計
3.1 開發(fā)環(huán)境構(gòu)建與系統(tǒng)軟件移植
系統(tǒng)軟件設(shè)計包括開發(fā)環(huán)境構(gòu)建[2],、系統(tǒng)軟件移植和應(yīng)用程序開發(fā)三部分,。本文采用的開發(fā)環(huán)境為VMware Workstation虛擬機(jī)和Red Hat Linux5操作系統(tǒng),,在虛擬機(jī)中安裝交叉編譯工具鏈ARM-Linux-gcc4.4.3,用于完成嵌入式操作系統(tǒng)內(nèi)核,、busybox,、QT/E4.6.3和車載終端應(yīng)用程序的編譯;安裝QT/E4.6.3[3]庫以支持應(yīng)用程序的開發(fā),;設(shè)計AD驅(qū)動jd_adc.c,、人機(jī)交互按鍵驅(qū)動jd_buttons.c和HDMI驅(qū)動等驅(qū)動并加入到Linux2.6.38內(nèi)核源碼樹中,配置編譯內(nèi)核,;設(shè)計根文件系統(tǒng)并在其中加入inittab,、rcS和hdmi.conf等配置文件以及glibc庫、QT庫等動態(tài)鏈接庫構(gòu)建車載終端應(yīng)用程序的運(yùn)行環(huán)境,。
3.2 應(yīng)用程序設(shè)計
車載終端應(yīng)用程序設(shè)計主要解決信號采集,、圖形用戶界面(Graphical User Interface,GUI)實時顯示和信號與GUI實時通信3個關(guān)鍵問題,。其中信號采集包括車載傳感器信號采集與攝像頭圖像信號采集,。
3.2.1 車載信號的采集
車載傳感器信號主要采集車速、發(fā)動機(jī)轉(zhuǎn)速,、燃油量,、冷卻液溫度、車燈信號和車身報警信號等,,一般為數(shù)字脈沖信號,、模擬電壓信號和開關(guān)量信號,,分別引入S5PV210的tclk0(輸入頻率在0~720 Hz)和tclk1(輸入頻率在0~8 kHz)兩個引腳,;模擬電壓信號引入S5PV210的AD輸入引腳adcAIN[0]和adcAIN[1],兩個AD輸入引腳電壓范圍在0~3.3 V,;車燈信號接S5PV210的外部I/O引腳GPH1[4:7],,車身報警信號接中斷引腳EINT[0:3]。由于采集的信號多且實時性強(qiáng),,為提高程序運(yùn)行效率,,采集模塊設(shè)計采用多線程方法,分別設(shè)計車速speedThread,、發(fā)動機(jī)轉(zhuǎn)速rotateThread,、燃油量oilThread、冷卻液溫度watertempThread等信號采集子線程,。系統(tǒng)工作時,,各個子線程循環(huán)采集傳感器傳來的信號。
在信號采集線程中,,為了保證實時性,,設(shè)計while(1)循環(huán)持續(xù)讀取信號值,。由usleep函數(shù)控制采集頻率,其功能是將線程掛起一段時間,。經(jīng)過反復(fù)試驗,,usleep函數(shù)頻率設(shè)為10 Hz為佳,即把掛起時間設(shè)定為0.1 s,。
以車速信號的采集為例,,部分代碼如下:
void Thread::readSpeed()
{int fd;
char buffer[BUF_SIZE];
fd = open(“/dev/ashspeed”,0);//打開車速設(shè)備文件
while(1){
…
value = atoi(buffer);//獲取當(dāng)前速度值
emit speedChanged(value);
//將當(dāng)前速度值傳遞給時速表刷新函數(shù)
usleep(100000);//線程掛起0.1 s
}
3.2.2 視頻信號的采集
本系統(tǒng)在車頭和車尾各安裝一個攝像頭,能同時記錄汽車前后的行車視頻圖像,。本文設(shè)計行車記錄儀模塊為雙攝像頭圖像采集方案,,通過界面分隔的方法使雙攝像頭采集的視頻能夠同時在一屏顯示圖像畫面。
系統(tǒng)的視頻采集設(shè)備選用中星微ZC301攝像頭和泰科姆2C8型CMOS攝像頭,,分別對應(yīng)/dev目錄下的video0和video1設(shè)備文件,。設(shè)計視頻采集程序時,基于LinuxV4l2驅(qū)動程序框架[4],,視頻圖像采集通過調(diào)用v4l2_read,、v4l2_ioctl和v4l2_mmap等函數(shù)實現(xiàn)。在進(jìn)行界面分隔顯示時,,通過向屏幕緩沖區(qū)中寫入前后攝像頭所采集的圖像信息以進(jìn)行屏幕繪圖,,實現(xiàn)在同一屏中同時顯示不同畫面的效果。視頻信號的采集流程如圖5所示,。
3.2.3 多道程序并發(fā)控制
多道程序并行性提高了系統(tǒng)資源的利用率和實時性能,,但也相應(yīng)產(chǎn)生了一些問題。在行車記錄儀模塊中,,事件輪詢代碼塊在執(zhí)行時需要一次性完成,,不允許被其它線程打斷,因此必須加入并發(fā)控制機(jī)制,。
本系統(tǒng)在并發(fā)控制處理中采用了互斥鎖機(jī)制,,在需要保護(hù)的代碼塊執(zhí)行前進(jìn)行上鎖操作,代碼塊執(zhí)行后進(jìn)行解鎖操作,,保證代碼塊執(zhí)行時不被打斷,。部分代碼如下:
LockMutex(affmutex);//上鎖
while (PollEvent(event))
{switch(event->type)
{ ……
}
}//被保護(hù)的代碼塊
UnlockMutex(affmutex),;//解鎖
3.2.4 信號與GUI界面通信
程序運(yùn)行時,,GUI界面模塊需要對各采集信號作出實時響應(yīng)。本系統(tǒng)各子線程的采集信號與界面模塊的通信使用信號(signal)-槽(slot)機(jī)制[5]實現(xiàn),,采集線程與界面刷新函數(shù)連接方法是:各子線程采集傳感器信號作為signal信號源,,界面刷新函數(shù)作為slot槽函數(shù)。各采集子線程每隔一段時間將當(dāng)前采集的信號值發(fā)送到主線程的界面刷新函數(shù),,完成界面的更新,。以時速表為例,,信號-槽的連接代碼如下:
connect(&speedThread,SIGNAL(speedChanged(int)),this,SLOT(updateSpeed(int)));
3.2.5 GUI界面的設(shè)計
數(shù)字儀表盤模塊顯示汽車行駛中的各類關(guān)鍵信息,可實現(xiàn)時速表,、發(fā)動機(jī)轉(zhuǎn)速表,、燃油表、水溫表和車燈,、報警信號的實時顯示,。程序設(shè)計時需解決靜態(tài)儀表繪圖和界面實時刷新兩個關(guān)鍵問題。
考慮到駕駛員的審美習(xí)慣,,設(shè)計的儀表盤沿用了傳統(tǒng)的指針式儀表盤[6],。使用drawRect()、drawEllipse(),、drawText()等函數(shù)完成靜態(tài)儀表繪圖,。為了使繪圖更加美觀、更具立體感,,在渲染時加入了漸變效果,時速表渲染前后對比如圖6所示,。
界面的實時刷新主要體現(xiàn)在儀表指針的轉(zhuǎn)動,首先根據(jù)傳感器采集的速度信號確定指針轉(zhuǎn)動角度,,利用信號-槽機(jī)制將角度信息傳遞到刷新函數(shù)update()中,。在update()函數(shù)中,應(yīng)用rotate()函數(shù)旋轉(zhuǎn)邏輯坐標(biāo)系,,用drawConvexPolygon()函數(shù)完成指針的繪制[7],。
數(shù)字儀表盤模塊的啟動流程如圖7所示。
系統(tǒng)采用EEPROM芯片AT24C08完成行駛里程等數(shù)據(jù)的存儲,,通過I2C總線完成對芯片存儲數(shù)據(jù)的修改,。汽車行駛時,里程數(shù)據(jù)需要不斷更新,,增加的里程數(shù)據(jù)ΔS(單位:km)與車速(單位:km/h)的關(guān)系為:
其中,,v(i)為某次采集的速度值,采集間隔為10 ms,。
4 系統(tǒng)測試與結(jié)論
本文設(shè)計的車載集成顯示終端將汽車儀表、電子地圖,、多媒體播放和行車記錄等功能集成在一起,,通過DLP投影技術(shù)將信息集中顯示在反射屏上,極大地節(jié)省了車內(nèi)空間,,方便駕駛員獲取信息,,提高了行車安全性。測試結(jié)果如圖8所示,。
測試結(jié)果表明,,系統(tǒng)畫面顯示穩(wěn)定,,實時數(shù)據(jù)準(zhǔn)確,動畫效果較好,,界面切換迅速,。此外,本系統(tǒng)提供多種通信接口,,可擴(kuò)展性強(qiáng),,具有較高的實用價值和廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 胡堅.DLP和LCD投影機(jī)對比分析[J].微計算機(jī)信息,,2005,,21(2):140-142.
[2] 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2011:240-360.
[3] 閆鋒欣,,曾泉人.C++ GUI Qt4編程(第二版)[M].北京:電子工業(yè)出版社,,2010:138-268.
[4] 奚海蛟,呂鐵軍.嵌入式Linux驅(qū)動程序?qū)崙?zhàn)開發(fā)[M].北京:北京航空航天大學(xué)出版社,,2012:1-91.
[5] 王潤民.基于嵌入式Linux的車載終端系統(tǒng)研究與實現(xiàn)[D].西安:長安大學(xué),,2013.
[6] 曹成昆,何彬.混合動力汽車真彩液晶數(shù)字儀表軟件設(shè)計[J].上海交通大學(xué)學(xué)報,,2008,,42(7):1081-1084.
[7] 陳新.電動汽車液晶數(shù)字儀表的設(shè)計[J].汽車工程,2013,,35(3):272-276.