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