《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Linux汽車智能儀表系統(tǒng)的設(shè)計(jì)
基于嵌入式Linux汽車智能儀表系統(tǒng)的設(shè)計(jì)
來源:微型機(jī)與應(yīng)用2014年第4期
鄧宗權(quán), 蔣向東, 王繼岷, 嚴(yán) 亮
(電子科技大學(xué) 光電信息學(xué)院, 四川 成都610054)
摘要: 為了優(yōu)化汽車儀表系統(tǒng)性能,提高系統(tǒng)智能化、人車交互界面友好度,以ARM微處理器S5PV210為控制核心設(shè)計(jì)了一款汽車智能儀表系統(tǒng)。該系統(tǒng)以嵌入式實(shí)時(shí)操作系統(tǒng)Linux為軟件平臺(tái),結(jié)合CAN現(xiàn)場(chǎng)總線技術(shù),并采用開放源代碼的圖形界面庫(kù)QT開發(fā)儀表終端應(yīng)用程序。經(jīng)實(shí)驗(yàn)驗(yàn)證,系統(tǒng)性能得到了改善。
Abstract:
Key words :

摘  要:為了優(yōu)化汽車儀表系統(tǒng)性能,提高系統(tǒng)智能化、人車交互界面友好度,以ARM微處理器S5PV210為控制核心設(shè)計(jì)了一款汽車智能儀表系統(tǒng)。該系統(tǒng)以嵌入式實(shí)時(shí)操作系統(tǒng)Linux為軟件平臺(tái),結(jié)合CAN現(xiàn)場(chǎng)總線技術(shù),并采用開放源代碼的圖形界面庫(kù)QT開發(fā)儀表終端應(yīng)用程序。經(jīng)實(shí)驗(yàn)驗(yàn)證,系統(tǒng)性能得到了改善。
關(guān)鍵詞: 智能儀表;ARM處理器;現(xiàn)場(chǎng)總線CAN嵌入式系統(tǒng);Qt

    汽車的顯示儀器作為駕駛員與汽車信息交流的主要途徑,實(shí)時(shí)地將汽車的駕駛情況反饋給駕駛員。作為人機(jī)交換信息的一個(gè)重要窗口,汽車顯示儀器有了很大的發(fā)展:第一代基于器械作用力,用機(jī)械指針顯示;第二代基于電測(cè)原理,通過各類傳感器采集非電量數(shù)據(jù)并轉(zhuǎn)換成電信號(hào)顯示;經(jīng)過第三代的模擬電路電子式的發(fā)展到第四代全數(shù)字儀表,將各種輸入信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),通過專用的中央處理器處理各種信號(hào),在LCD屏、VFD等顯示屏上顯示各種信息,全數(shù)字儀表重復(fù)性好、線性度好、可靠性高,適合現(xiàn)代生活對(duì)產(chǎn)品的智能化、數(shù)字化的要求[1]。
   本文提出了一種虛擬智能儀表系統(tǒng),S5PV210為中央處理器;通過CAN總線傳輸各種顯示所需要的數(shù)據(jù);采用實(shí)時(shí)性嵌入式系統(tǒng)Linux為汽車的操作系統(tǒng);圖形應(yīng)用界面庫(kù)Qt開發(fā)終端應(yīng)用程序。系統(tǒng)的性能得到提高,同時(shí)可擴(kuò)展性和可維護(hù)性都有了很大的改善,具有很大的商業(yè)價(jià)值。
1 總體設(shè)計(jì)
    通過CAN總線實(shí)時(shí)地采集汽車的各種數(shù)據(jù),包括汽車運(yùn)行的轉(zhuǎn)速、車速、水溫、油量、電壓、油壓、里程等信息,然后由嵌入式處理器S5PV210處理數(shù)據(jù),將得到的數(shù)據(jù)在顯示屏上用圖形界面虛擬顯示。同時(shí),系統(tǒng)在汽車異常運(yùn)行時(shí)語音報(bào)警,顯示器顯示具體的異常原因。
2 硬件組成
    汽車智能儀表系統(tǒng)的硬件設(shè)計(jì)如圖1所示,系統(tǒng)的控制核心采用SAMSUNG的S5PV210,采用ARM cortexTM-A8內(nèi)核,ARM V7指令集,主頻高達(dá)1 GHz,64/32 bit內(nèi)部總線結(jié)構(gòu),具有非常高的運(yùn)算能力。S5PV210包含很多強(qiáng)大的硬件編解碼功能,同時(shí)內(nèi)建高性能PowerVR SGX540 3D圖形引擎和2D圖形引擎,支持2D/3D圖形加速,能更快地解碼更高質(zhì)量的圖像和視頻[2]。采用外置CAN控制器承擔(dān)CAN節(jié)點(diǎn)控制器的任務(wù),通過SPI接口與CAN控制器通信,快速高效。S5PV210嵌入了許多外圍設(shè)備的功能,減少了系統(tǒng)芯片的數(shù)量。各種傳感器將采集到的轉(zhuǎn)速、車速、水溫、油量、電壓、油壓、里程等模擬信號(hào)通過CAN總線傳遞給控制器自帶的A/D輸入口轉(zhuǎn)換成數(shù)字信號(hào),LCD屏實(shí)時(shí)顯示采集到的信息,顯示的圖片信息存儲(chǔ)在SD卡中,通過輔助小鍵盤調(diào)節(jié)顯示效果。中心控制器處理信息,當(dāng)信息不符合設(shè)定的正常數(shù)值時(shí)顯示器顯示異常原因,語音模塊[3]發(fā)出警報(bào)。軟件采用嵌入式實(shí)時(shí)操作系統(tǒng)Linux2.6.30高效地管理整個(gè)系統(tǒng)。

    智能儀表采用網(wǎng)路化的集中管理,通過CAN總線將汽車各部分的信息傳遞給控制器,控制器通過CAN總線反饋實(shí)現(xiàn)汽車的有效操作。系統(tǒng)的CAN總線通信系統(tǒng)選用Microchip的MCP2515為控制核心,MCP2515是一款獨(dú)立CAN協(xié)議的控制器[4-5],完全支持CAN V2.0B技術(shù)規(guī)范,通過符合工業(yè)標(biāo)準(zhǔn)的SPI口與控制器連接。LCD顯示器選用CPT的8英寸工業(yè)屏CLAA080XA03BT,分辨率高達(dá)1 024×768,可視角度大、亮度高、對(duì)比度好、反應(yīng)時(shí)間快,滿足儀表系統(tǒng)對(duì)顯示屏顯示的各種要求。
3 軟件設(shè)計(jì)
    汽車智能儀表系統(tǒng)采用嵌入式Linux為操作系統(tǒng),Linux源代碼開放并遵循GPL規(guī)則,選擇Linux2.6.30版本,經(jīng)過系統(tǒng)裁剪,以適合本系統(tǒng)的嵌入式和實(shí)時(shí)的應(yīng)用,同時(shí)在Linux系統(tǒng)平臺(tái)下編寫各模塊的驅(qū)動(dòng)程序和應(yīng)用程序。控制面板采用Qt/Embedded圖形界面,外觀顯示的是傳統(tǒng)機(jī)械儀表圖形和數(shù)字圖形結(jié)合的圖形界面。傳感器采集各種數(shù)據(jù),經(jīng)過CAN總線傳輸,控制器對(duì)各種數(shù)據(jù)處理,同時(shí)通過儀表圖形界面顯示各種數(shù)據(jù),當(dāng)出現(xiàn)異常時(shí),界面顯示原因并且語音提示報(bào)警。整個(gè)系統(tǒng)軟件如圖2所示。系統(tǒng)主要分為兩個(gè)部分:Linux系統(tǒng)下各個(gè)應(yīng)用模塊的驅(qū)動(dòng)程序設(shè)計(jì)和Qt圖形界面設(shè)計(jì)。


3.1 驅(qū)動(dòng)程序設(shè)計(jì)
 外部和內(nèi)置設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)如下[6]:
    (1)8英寸的TFT-LCD屏驅(qū)動(dòng)設(shè)計(jì)。在驅(qū)動(dòng)LCD中首要配置LCD控制器,尤其是幀緩沖區(qū)(FrameBuffer)的指定,LCD是以字符設(shè)備方式加以訪問和管理,采用“文件層-驅(qū)動(dòng)層”的接口方式。文件層定義的數(shù)據(jù)結(jié)構(gòu)為file_operation結(jié)構(gòu)體中的接口函數(shù),如讀/寫的read/write函數(shù)和用于控制的ioctl等。將LCD驅(qū)動(dòng)程序模塊化,將編寫好的LCD驅(qū)動(dòng)程序lcd.c放到arm/linux/drivers/char目錄下,進(jìn)行make menuconfig選擇靜態(tài)加載LCD驅(qū)動(dòng)。
    (2)CAN模塊驅(qū)動(dòng)設(shè)計(jì)。系統(tǒng)中采用MCP2515獨(dú)立控制器和TJA1050高速CAN總線收發(fā)器為一體的外接模塊。MCP2515與主控芯片使用SPI數(shù)據(jù)總線進(jìn)行交互,將SPI封裝成SPI設(shè)備注冊(cè)與驅(qū)動(dòng)注冊(cè)兩部分,分別由platform_device和device_driver兩個(gè)結(jié)構(gòu)體實(shí)現(xiàn)。成功注冊(cè)SPI總線后,將CAN總線驅(qū)動(dòng)作為SPI子設(shè)備掛載到SPI總線上,與主控芯片傳遞數(shù)據(jù)。
    (3)A/D轉(zhuǎn)換器驅(qū)動(dòng)程序設(shè)計(jì)。S5PV210帶有10路12 bit的模擬輸入通道,A/D轉(zhuǎn)換的驅(qū)動(dòng)程序流程為:打開A/D轉(zhuǎn)換器→采集模擬信號(hào)→進(jìn)行A/D轉(zhuǎn)換→輸出數(shù)字信號(hào)→關(guān)閉A/D轉(zhuǎn)換器。A/D轉(zhuǎn)換驅(qū)動(dòng)程序也是一個(gè)字符設(shè)備驅(qū)動(dòng),將編譯好的A/D轉(zhuǎn)換程序燒入內(nèi)核。
    (4)5×5鍵盤驅(qū)動(dòng)程序。鍵盤驅(qū)動(dòng)程序采用層次型體系結(jié)構(gòu),分上下兩層實(shí)現(xiàn)。上層為通用鍵盤抽象層,為底層服務(wù);下層為硬件處理,對(duì)硬件直接操作。主要的工作在于編寫底層處理函數(shù),鍵盤中斷處理獲取按鍵的掃描碼,調(diào)用handle_scancode(),識(shí)別按鍵在鍵盤的位置,實(shí)現(xiàn)按鍵驅(qū)動(dòng)。
    (5)網(wǎng)口驅(qū)動(dòng)程序、USB協(xié)議、控制信號(hào)輸出驅(qū)動(dòng)程序等驅(qū)動(dòng)程序在Linux2.6.30中由官方給出,可直接調(diào)用。所有的驅(qū)動(dòng)程序在系統(tǒng)中均采用靜態(tài)編譯方式,不需要模塊加載。
3.2 應(yīng)用程序設(shè)計(jì)

 


    本系統(tǒng)的應(yīng)用程序包括管理任務(wù)、采集數(shù)據(jù)任務(wù)、CAN總線收發(fā)任務(wù)、LCD屏顯示任務(wù)、處理異常情況任務(wù)等多個(gè)任務(wù),采用信號(hào)量、郵箱、消息隊(duì)列等多種常用進(jìn)程間通信機(jī)制。系統(tǒng)采用C語言入口函數(shù)Main()的編寫完成各種初始化操作,建立信號(hào)量和消息隊(duì)列,依次創(chuàng)建各任務(wù),最后啟動(dòng)操作系統(tǒng),實(shí)現(xiàn)多任務(wù)操作。
    在Linux系統(tǒng)中,各任務(wù)被賦予不同的優(yōu)先級(jí),擁有不同的任務(wù)棧,不同任務(wù)之間通過消息隊(duì)列和信號(hào)量通信和共享數(shù)據(jù)。任務(wù)采用無限循環(huán)結(jié)構(gòu),各任務(wù)通過延時(shí)或等待信號(hào)量和消息對(duì)決定CPU的使用權(quán),通過產(chǎn)生中斷來切換任務(wù)。當(dāng)?shù)玫较㈥?duì)列或者延時(shí)時(shí)間時(shí),高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒狀態(tài),任務(wù)獲得CPU使用權(quán),最后處理相應(yīng)的消息隊(duì)列中的數(shù)據(jù)[7]。
3.3 Qt圖形界面設(shè)計(jì)[8-10]
    Qt/Embedded用于嵌入式系統(tǒng),具有高效、穩(wěn)定、美觀等特點(diǎn),能夠?yàn)橛脩籼峁┛煽康慕换スδ?。用Qt/Embedded下的集成開發(fā)工具Qt Designer實(shí)現(xiàn)嵌入式GUI的設(shè)計(jì)與布局,界面設(shè)計(jì)完成后, 生成.ui文件, 由.ui文件生成相應(yīng)的頭文件,在頭文件中用一個(gè)類實(shí)現(xiàn)對(duì)界面的搭建。具體的界面編寫過程如下:
    (1)使用Qt Designer提供的uic工具通過界面文件Carsmarting.ui生成Carsmarting.h文件和Carsmarting.cpp文件。命令為uic-o Carsmarting.h Carsmarting.uiuic-o和Carsmarting.cpp-impl Carsmarting.h Carsmarting.ui。
    (2) 系統(tǒng)中實(shí)現(xiàn)顯示功能,在Carsmarting.cpp文件中添加相應(yīng)的功能實(shí)現(xiàn)代碼。編寫main主函數(shù)文件,主函數(shù)所在文件名為main.cpp,首先產(chǎn)生一個(gè)QApplication類的實(shí)例,然后定義窗口類實(shí)現(xiàn)并把它作為程序的主窗口,接著設(shè)置mainwindow部件,最后調(diào)用show()和exec()方法,使用庫(kù)管理界面作為主界面,程序進(jìn)入消息循環(huán)。以下是Carsmarting.的主函數(shù)文件main.cpp的主要代碼:
    int main(int argc,char **argv)
    {
    QApplication Carsmarting(argc,argv);
                      //創(chuàng)建對(duì)象,管理整個(gè)應(yīng)用程序資源
    Carsmarting.*mainwindow = new Carsmarting;
                                  //創(chuàng)建應(yīng)用程序窗口
    app.setMain Widget(&mainwindow);
                        //設(shè)置程序的主部件mainwinow
    mainwindow—>how();  //使mainwindow的窗口部件可見
    return Carsmarting.exec();
                         //傳遞給Qt應(yīng)用程序的控制權(quán)
    }
    (3)編譯。使用progen命令生成工程文件(.pro文件),根據(jù)工程文件使用tmake命令生成Makefile文件,最后使用make命令編譯鏈接整個(gè)工程。
    本文介紹的基于嵌入式Linux和CAN總線的汽車智能儀表系統(tǒng)具有非常優(yōu)良的性能。通過裁剪優(yōu)化嵌入式系統(tǒng),提高了整個(gè)系統(tǒng)性能;系統(tǒng)應(yīng)用CAN總線獲取顯示所需的數(shù)據(jù),安全快捷;采用多任務(wù)設(shè)計(jì)方式,提高了系統(tǒng)的實(shí)時(shí)性和靈敏度;采用Qt/Embedded圖形界面,豐富了桌面系統(tǒng),界面顯示友好。經(jīng)過實(shí)驗(yàn)測(cè)試,本系統(tǒng)能夠正常運(yùn)行。該系統(tǒng)不但可應(yīng)用在汽車儀表系統(tǒng),同時(shí)對(duì)于機(jī)載艦載儀表系統(tǒng)有重要的參考意義。
參考文獻(xiàn)
[1] 唐志勇.汽車儀表指針控制技術(shù)[J].汽車電器,2007(7):1-3.
[2] 程唱南. ARM Cortex-A8硬件設(shè)計(jì)DIY[M].北京:北京航空航天大學(xué)出版社,2012.
[3] 但成福.一種用排隊(duì)論指導(dǎo)的CAN總線語言通信系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(2):22-25.
[4] 王保和. 嵌入式Linux下CAN總線驅(qū)動(dòng)程序設(shè)計(jì)[J].大眾科技,2011(6):19-21.
[5] 王黎明,夏立. CAN現(xiàn)場(chǎng)總線系統(tǒng)的設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2008.
[6] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社,2008.
[7] 張海清,陳永煌,朱暉.基于嵌入式系統(tǒng)的CAN總線汽車組合儀表的研究[J]. 安徽工程科技學(xué)院學(xué)報(bào),2009,24(3):53-56.
[8] 何劍鋒,鄔文彪.嵌入式Linux系統(tǒng)的Qt/Embedded圖形界面開發(fā)[J].電子工程師,2007,33(7):46-48.
[9] 連照亮,徐世國(guó).基于Qt/Embedded在嵌入式Linux下的應(yīng)用研究[J].微計(jì)算機(jī)信息,2010(17):81-85.
[10] 劉治國(guó),陳新華. 基于Linux和Qt的智能家居系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(4):23-26.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。