文獻(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]庫(kù)以支持應(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庫(kù)、QT庫(kù)等動(dòng)態(tài)鏈接庫(kù)構(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)測(cè)試與結(jié)論
本文設(shè)計(jì)的車載集成顯示終端將汽車儀表、電子地圖、多媒體播放和行車記錄等功能集成在一起,通過DLP投影技術(shù)將信息集中顯示在反射屏上,極大地節(jié)省了車內(nèi)空間,方便駕駛員獲取信息,提高了行車安全性。測(cè)試結(jié)果如圖8所示。
測(cè)試結(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] 王潤(rùn)民.基于嵌入式Linux的車載終端系統(tǒng)研究與實(shí)現(xiàn)[D].西安:長(zhǎng)安大學(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.