《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計(jì)應(yīng)用 > 基于CAN總線的嵌入式汽車儀表設(shè)計(jì)
基于CAN總線的嵌入式汽車儀表設(shè)計(jì)
來源:微型機(jī)與應(yīng)用2013年第7期
王 璐,,潘 明
(桂林電子科技大學(xué) 電子工程與自動(dòng)化學(xué)院,,廣西 桂林 541004)
摘要: 在CAN總線技術(shù)基礎(chǔ)上,,設(shè)計(jì)了一款CAN總線嵌入式汽車儀表,。該儀表采用Samsung公司的S3C6410處理器,,利用Nokia公司開發(fā)的Qt Quick及QML語言制作美觀大方的人機(jī)交互界面以實(shí)時(shí)顯示車輛工作情況,。給出了系統(tǒng)軟硬件結(jié)構(gòu)設(shè)計(jì)方案,。檢測(cè)結(jié)果表明,該設(shè)計(jì)方案滿足了汽車儀表指示精度與穩(wěn)定性要求,。
Abstract:
Key words :

摘  要:CAN總線技術(shù)基礎(chǔ)上,,設(shè)計(jì)了一款CAN總線嵌入式汽車儀表。該儀表采用Samsung公司的S3C6410處理器,,利用Nokia公司開發(fā)的Qt Quick及QML語言制作美觀大方的人機(jī)交互界面以實(shí)時(shí)顯示車輛工作情況,。給出了系統(tǒng)軟硬件結(jié)構(gòu)設(shè)計(jì)方案。檢測(cè)結(jié)果表明,,該設(shè)計(jì)方案滿足了汽車儀表指示精度與穩(wěn)定性要求,。
關(guān)鍵詞: QML;CAN總線,;S3C6410,;GUI

 中國汽車工業(yè)強(qiáng)勁發(fā)展,產(chǎn)銷能力排行世界第一,但絕大部分國產(chǎn)汽車仍搭載步進(jìn)電機(jī)式汽車儀表,。隨著電子技術(shù)的迅猛發(fā)展,,汽車信息容量與系統(tǒng)復(fù)雜程度產(chǎn)生了很大的變化。目前,,國外各大汽車公司都在研究全數(shù)字式汽車儀表,,汽車儀表正加速向智能化、數(shù)字化和網(wǎng)絡(luò)化方向發(fā)展,。
 本文設(shè)計(jì)了一種基于CAN(Controller Area Network)總線的汽車智能儀表系統(tǒng),。設(shè)計(jì)思路是將獲取的行駛速度、發(fā)動(dòng)機(jī)轉(zhuǎn)速,、油量,、里程表、冷卻液和警示燈等數(shù)據(jù)顯示在人機(jī)交互界面上,,并將巡航控制,、導(dǎo)航、視頻和音樂等功能集成到該儀表系統(tǒng)當(dāng)中,,所有信息都直觀顯示在大屏幕TFT-LCD上,,觸摸屏技術(shù)給駕駛員與乘員帶來更為有趣的行駛過程。
 Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面庫,,它基于面向?qū)ο蟮乃枷?,擴(kuò)展容易且可移植性好,,其良好的封裝機(jī)制使得Qt模塊化程度很高,,用戶開發(fā)十分方便,并具有優(yōu)良的跨平臺(tái)特性,。Qt包括多達(dá)250個(gè)以上的C++類,,支持2D/3D圖形渲染和OpenGL,集成Webkit引擎,。本文采用Nokia最新開發(fā)的Qt Quick高級(jí)用戶界面技術(shù),,為嵌入式設(shè)備快速輕松地創(chuàng)建動(dòng)態(tài)觸摸式界面和輕量級(jí)應(yīng)用程序。在Qt Quick中,,新增加了一種簡(jiǎn)便易學(xué)的語言QML,,這種語言能讓Qt應(yīng)用程序開發(fā)變得更為方便快捷。
1 汽車儀表總體結(jié)構(gòu)
 汽車儀表主要由數(shù)據(jù)接收發(fā)送,、數(shù)據(jù)處理與存儲(chǔ)和觸摸屏顯示3個(gè)模塊組成,,如圖1所示。

 數(shù)據(jù)接收發(fā)送模塊負(fù)責(zé)接收CAN總線傳輸?shù)母鞣N數(shù)據(jù),,如速度,、轉(zhuǎn)速和溫度等,并將處理后的數(shù)據(jù)發(fā)送到微處理器;或者將微處理器發(fā)送的數(shù)據(jù)進(jìn)行處理之后發(fā)送至CAN總線,。微處理器接收到需要的數(shù)據(jù)后,,按照預(yù)定的算法和要求對(duì)數(shù)據(jù)進(jìn)行處理,并將結(jié)果輸出,。人機(jī)交互界面程序接收到微處理器發(fā)送的數(shù)據(jù)后進(jìn)行相應(yīng)的顯示,,并將觸摸事件反饋給微處理器。

 


2 汽車儀表硬件設(shè)計(jì)
 本儀表采用Samsung公司的S3C6410處理器,,它是一款低功耗,、高性價(jià)比的32 bit RSIC處理器,其處理器在視頻媒體編解碼,、2D/3D圖形加速,、顯示處理和縮放等方面有很大的性能優(yōu)勢(shì)。S3C6410有很多硬件功能外設(shè),,如TFT真彩色LCD控制器,,4通道的UART,4通道定時(shí)器,,通用I/O口,,I2S總線,I2C總線,,USB Host,,高速USB OTG、SD Host,、MMC卡接口以及內(nèi)部的PLL時(shí)鐘發(fā)生器等,。該處理器具有很大的擴(kuò)展空間,在后續(xù)開發(fā)中潛力巨大,。Qt Quick開發(fā)出美觀炫麗的用戶圖形界面,,需要選擇圖形處理能力較強(qiáng)的處理芯片,因此選擇S3C6410處理器,。
 S3C6410處理器沒有內(nèi)置CAN控制器模塊,,需要外接一個(gè)CAN控制器和一個(gè)CAN收發(fā)器。該儀表選用美國微芯科技有限公司生產(chǎn)的MCP2510作為CAN控制器,。MCP2510是帶有SPI接口的獨(dú)立的CAN控制器,,它支持CAN 2.0A/B,含有3個(gè)發(fā)送緩沖器和兩個(gè)接收緩沖器,,可以使MCP2510發(fā)送和接收標(biāo)準(zhǔn)幀和擴(kuò)展幀,。本設(shè)計(jì)采用飛利浦公司生產(chǎn)的TJA1050作為CAN收發(fā)器,如圖2所示,。將MCP2510的數(shù)據(jù)輸出TXCAN和RXCAN引腳通過6N137光耦接到TJA1050的TXD和RXD引腳上,,MCP2510的SPI接口的SCK,、SI、SO引腳用導(dǎo)線引出,,S3C6410通過SPI接口與MCP2510進(jìn)行實(shí)時(shí)通信,,MCP2510將數(shù)據(jù)轉(zhuǎn)換成CAN報(bào)文發(fā)送到TJA1050,TJA1050把MCP2510傳輸?shù)男盘?hào)轉(zhuǎn)換為差分電壓信號(hào)發(fā)送到CAN總線上,。

3 汽車儀表軟件設(shè)計(jì)
3.1 CAN總線通信

 德國Bosch公司開發(fā)的CAN總線是為解決現(xiàn)代汽車中大量的電控單元而開發(fā)的一種串行通信協(xié)議,,在車載各電子控制單元ECU(Electronic Control Unit)之間交換信息,形成了重要的汽車電子控制網(wǎng)絡(luò),。CAN技術(shù)規(guī)范遵從ISO/OSI標(biāo)準(zhǔn)定義的7層基準(zhǔn)參考模型,,按照這個(gè)標(biāo)準(zhǔn)模型,最早的CAN規(guī)范只定義了數(shù)據(jù)鏈路層和物理層,,用戶需要自己制定相應(yīng)的應(yīng)用層協(xié)議,。J1939協(xié)議是美國汽車工程協(xié)會(huì)SAE(Society of Automotive Engineers)根據(jù)CAN 2.0B為核心協(xié)議制定的協(xié)議。J1939協(xié)議制定了應(yīng)用層協(xié)議,,明確規(guī)定了ECU地址,、報(bào)文發(fā)送優(yōu)先級(jí)、擴(kuò)展幀格式和通信方式等,。由CAN總線高速網(wǎng)絡(luò)連接車載電子裝置,,實(shí)現(xiàn)了高速數(shù)據(jù)共享。因此本文采用SAE J1939協(xié)議,。
3.1.1 SAE J1939協(xié)議數(shù)據(jù)幀格式
 SAE J1939協(xié)議數(shù)據(jù)幀以協(xié)議數(shù)據(jù)單元PDU為單位,,如圖3所示。PDU包含優(yōu)先級(jí)(P),、保留位(R),、數(shù)據(jù)頁(DP)、PDU格式(PF),、PDU細(xì)節(jié)(PS),、源地址(SA)以及數(shù)據(jù)域(Data Field),。指定PDU(PS):當(dāng)PF值為0~239時(shí),,PS是目標(biāo)地址DA;當(dāng)PF值為240~255時(shí),,PS為組擴(kuò)展(GE),。CAN擴(kuò)展幀中,SOF,、SRR,、IDE、RTR位,、控制域場(chǎng),、CRC、ACK和EOF場(chǎng)沒有包括在PDU內(nèi),這些場(chǎng)由CAN規(guī)范定義,,未被SAE J1939修改,。

3.1.2 CAN通信軟件設(shè)計(jì)
 本設(shè)計(jì)中S3C6410通過SPI總線與CAN控制器MCP2510通信,CAN通信可分為各個(gè)獨(dú)立的程序模塊,,包括SPI初始化,、MCP2510的初始化和發(fā)送接收子程序等。在CAN總線工作開始時(shí),,首先需要對(duì)S3C6410微處理器的SPI進(jìn)行初始化操作,,設(shè)置相應(yīng)寄存器,然后對(duì)MCP2510進(jìn)行初始化操作,。在對(duì)MCP2510進(jìn)行讀寫操作時(shí),,必須嚴(yán)格遵守SPI指令。SPI指令包括復(fù)位(11000000),、讀(00000011),、寫(00000010)、發(fā)送請(qǐng)求(10000000),、狀態(tài)讀(10100000)和位修改(00000101),。
 MCP2510只有在配置模式下才能對(duì)器件進(jìn)行正常的初始化。其中包括CAN通信的波特率,、MCP2510的配置寄存器,、濾波/屏蔽寄存器和中斷使能寄存器等。在進(jìn)行完初始化之后,,必須將MCP2510置為Normal模式,。CAN控制器MCP2510初始化流程如圖4所示。

3.2 人機(jī)交互界面設(shè)計(jì)
 Qt Quick提供了一套高動(dòng)態(tài),、豐富的QML元素來制定用戶圖形界面的框架以及Qt Quick Designer開發(fā)工具,。QML語言是一種描述性語言,用于描述用戶界面的外觀和行為,。QML中采用JavaScript作為腳本語言,,用戶界面被規(guī)定為樹形結(jié)構(gòu)。
3.2.1 QML語言模塊以及語法
 QML已經(jīng)定義了許多功能強(qiáng)大的界面元素,,如Item,、Rectangle、Image,、Text和ListView等,,其中Item是QML中可視元素的基礎(chǔ)。import語句導(dǎo)入包含所有標(biāo)準(zhǔn)QML元素的Qt模塊,,其中一些元素可以作為其他元素(children)的容器(parent),。每個(gè)元素具有唯一的id屬性,,此id允許對(duì)象被其他的對(duì)象引用。屬性以name:value形式指定,。State,、property、Animation,、Transition,、Timer和Connection等元素用于描述應(yīng)用程序的行為。在QML中常常用到的Anchors描述的是當(dāng)前元素的位置和其他元素的相對(duì)關(guān)系,。一個(gè)元素通過形式為Type.property的屬性附加到另一個(gè)元素當(dāng)中,,其中Type是附加property元素的類型。在QML中,,狀態(tài)(States)用于管理有id的元素,,它由多個(gè)state元素構(gòu)成,每個(gè)元素都可以定義自己的不同狀態(tài),,當(dāng)元素進(jìn)入某個(gè)狀態(tài)時(shí),,狀態(tài)所對(duì)應(yīng)的屬性將被設(shè)置修改。在設(shè)計(jì)中通過判斷條件來決定是否激活一個(gè)狀態(tài),,使用when屬性,,返回值為true或者false。在QML語言描述一個(gè)按鈕的單擊功能時(shí),,可以使用QML事件處理功能,,這個(gè)功能是非常類似于Qt的Signal/Slot機(jī)制。
 QML中用戶界面創(chuàng)建數(shù)據(jù)模型非常重要,,具有資源利用率高,、數(shù)據(jù)傳輸快、數(shù)據(jù)存儲(chǔ)空間合理和用戶界面流暢等優(yōu)點(diǎn),。模型為其他部件提供數(shù)據(jù)接口,,在設(shè)計(jì)中使用ListView能快速建立菜單欄列表類型的界面。
QML元素ListModel可以從內(nèi)部創(chuàng)建這些Model,,或使用QAbstractListModel繼承的C++ Model類,,ListElement在ListModel中定義數(shù)據(jù)項(xiàng),列表ListView顯示Model的數(shù)據(jù),,Delegate定義如何顯示數(shù)據(jù),。通過ListView定義Items的布局為水平布局和垂直布局來顯示Items的布局方式。ListModel,、Delegate和ListView之間的關(guān)系如圖5所示。

3.2.2 QML與C++交互    
 Qt Quick包含QtDeclarative C++模塊,,并且被整合進(jìn)Qt creator IDE當(dāng)中,。QML API有QDeclarativeEngine,、QDeclarativeComponent和QDeclarativeContext 3個(gè)主要成員: QDeclarativeEngine提供在C++中QML應(yīng)用的運(yùn)行庫以及QML內(nèi)容與Qt/C++程序中的接口; QDeclarative
Component加載QML文檔,每個(gè)QDeclarativeComponent實(shí)例對(duì)應(yīng)一個(gè)QML文檔,文檔URL可以是本地文件系統(tǒng)URL或任何QNetworkAccessManager支持的網(wǎng)絡(luò)URL,;QDeclarativeContext暴露數(shù)據(jù)給QML實(shí)例,。
在Qt/C++中使用QML開發(fā)的組件,必須先讓QML運(yùn)行的環(huán)境被應(yīng)用程序加載調(diào)用,,創(chuàng)建一個(gè)QDeclarativeEngine實(shí)例,,使用QDeclarativeEngine加載QML組件并對(duì)所有的QML組件進(jìn)行全局配置。通過QDeclarativeComponent::create()方法創(chuàng)建QML組件實(shí)例,。下面的代碼演示了如何加載一個(gè)QML Document并創(chuàng)建一個(gè)實(shí)例,。
 QDeclarativeEngine*engine=new QDeclarativeEngine(parent);
 QDeclarativeComponent component(engine,,QUrl::fromLocalFile("main.qml")),;
 QObject*Object=component.create();
 為了把QML組件嵌入到Qt/C++應(yīng)用程序中,,需要使用Qt 4.7以上的SDK,。
3.2.3 人機(jī)交互界面開發(fā)
 在本設(shè)計(jì)中設(shè)計(jì)人機(jī)交互界面主要涉及布局、Signal/Slot通信機(jī)制的運(yùn)用,、狀態(tài)轉(zhuǎn)換,、Transition過渡效果、ListModel與ListView元素等內(nèi)容,。通信方式使用QML發(fā)送Signal,,Qt/C++中定義用Slot接收。
在人機(jī)交互主界面中,,使用Scale縮放儀表盤圖片,,使其適合屏幕,設(shè)置Rotate來旋轉(zhuǎn)儀表盤指針,,旋轉(zhuǎn)默認(rèn)是以圖片中心為轉(zhuǎn)軸,,但是可以通過transformOrigin屬性來設(shè)置轉(zhuǎn)軸。轉(zhuǎn)向燈使用State元素,,State通過PropertyChanges修改屬性,,當(dāng)總線傳來開啟轉(zhuǎn)向燈信號(hào)時(shí),圖片透明度從較低值變換到較高值,,當(dāng)接收到總線傳來的關(guān)閉轉(zhuǎn)向燈信號(hào)時(shí),,圖片透明度從較高值變換到較低值,從而實(shí)現(xiàn)了警示燈的亮與滅,。警示燈狀態(tài)變化要迅速直觀,,減少駕駛員對(duì)警示燈誤判,因此并沒有采用Transition元素為狀態(tài)轉(zhuǎn)換間提供動(dòng)畫動(dòng)態(tài)過渡,,同理,,其他警示燈也采用這種方法實(shí)現(xiàn),。狀態(tài)轉(zhuǎn)換同樣用于儀表中菜單欄圖標(biāo)的顯示中,例如瀏覽器網(wǎng) 頁縮略圖模式與瀏覽模式切換,,代碼如下:
State{
name:“Internet”
PropertyChanges{
target:bookmark
y:parent.height
opacity:0
}
PropertyChanges{
     target:browser
     opacity:1
     height:mainView.height}
 }
 儀表各分界面菜單使用ListView顯示,,例如定義一個(gè)菜單欄,代碼為:
ListView{id:buttons,;x:10,;model:{};delegate:ItemDrawer,;
orientation:“Horizontal”,;
width:container.width;
height:container.height,;
spacing:15,;interactive:false}
 基本的菜單欄都類似于上面的代碼。在儀表系統(tǒng)中,,實(shí)現(xiàn)數(shù)字,、英文字母與符號(hào)輸入使用Grid元素來布局,spacing屬性控制網(wǎng)格單元之間的距離,。代碼例子如下:
Grid{
id:keyboard
spacing:2
columns:12
KeyButton{operation:“Q”}
……
KeyButton{operation:“Enter”,;width:50}
……
KeyButton{operation:“1”}
……
}
4 開發(fā)環(huán)境編譯與移植
 Qt Creator是跨平臺(tái)的Qt IDE,提供了圖形化的調(diào)試窗口和qmake工具,,Qt Creator代碼編輯窗口具有非常人性化的設(shè)計(jì),,具有對(duì)C++及QML語言表達(dá)式檢查,代碼語句整齊排列,,代碼自動(dòng)補(bǔ)全,,對(duì)類與函數(shù)及變量作上下文關(guān)聯(lián)分析,告知函數(shù)聲明和調(diào)用的位置,。Qt Demo提供大量的Qt實(shí)例并提供在Qt Linguist下的源代碼鏈接,,通過Qt Demo可以快速學(xué)習(xí)Qt和QML編程。
 要在ARM上運(yùn)行Qt程序,,需要移植ARM版本的Qt/E,。進(jìn)入到ARM版Qt/E目錄當(dāng)中,執(zhí)行配置源碼命令echo yes|./configure-opensource-embedded arm-xplatform qws/linux-arm-g++-webkit-qt-libtiff-qt-libmng-qt-mouse-tslib-no-mouse-linuxtp-declarative-no-qt3support-nomake examples-nomake demos-nomake docs-importdir/usr/local/Trolltech/QtEmbedded-4.8.0-arm/qml–fast,。
 在上面的語句當(dāng)中,,最后的語句-importdir/usr/local/Trolltech/QtEmbedded-4.8.0-arm/qml是將qml相關(guān)庫添加到Qt/E庫當(dāng)中,使用arm-linux交叉編譯器進(jìn)行編譯,,-xplatform qws/linux-arm-g++,,-qt-mouse-tslib命令為使用tslib來驅(qū)動(dòng)觸摸屏。編寫好配置命令后,使用make與make install命令進(jìn)行編譯安裝,,然后將文件打包下載到ARM板并解壓縮,,這樣Qt/E的ARM環(huán)境就移植完畢,。
5 汽車儀表測(cè)試
 儀表系統(tǒng)是駕駛過程中非常重要的系統(tǒng)之一,,在此選用較深色背景作為LCD終端顯示背景,避免駕駛員出現(xiàn)視覺疲勞現(xiàn)象,,背景也可以根據(jù)用戶喜好而改變,。汽車車速表、轉(zhuǎn)速表,、燃油表與溫度表都以圓盤式指針表顯示,,這樣的設(shè)計(jì)比較符合駕駛員對(duì)傳統(tǒng)汽車儀表的使用習(xí)慣。菜單欄位于屏幕上部,,便于乘員對(duì)儀表盤進(jìn)行操作,。

 使用嵌入式Linux作為車載儀表系統(tǒng)是比較流行的解決方案之一,其中嵌入式GUI能給用戶提供良好的操作界面,,而Qt Quick能迅速開發(fā)美觀易用的嵌入式GUI,,在今后的實(shí)際應(yīng)用中有著巨大的潛力,有比較大的參考價(jià)值,。
參考文獻(xiàn)
[1] 饒運(yùn)濤,,鄒繼軍,鄭勇蕓.現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù)(第2版)[M].北京:北京航空航天大學(xué)出版社,,2007.
[2] 廖樂平,,楊松,高琛,,等.基于SAE J1939的車身控制系統(tǒng)設(shè)計(jì)[J].汽車實(shí)用技術(shù),,2011(5):31-33.
[3] 宋曉東,王建.CAN總線汽車儀表研究[J].電子設(shè)計(jì)工程,,2010(4):35-37.
[4] 李宏梅,,佟為明,程樹康.CAN總線全數(shù)字式汽車儀表[J].電子器件,,2010(5):646-650.
[5] 肖楚海,,梁杰申,黃煒中.基于CAN總線的汽車儀表的設(shè)計(jì)[J].信息技術(shù),,2010(2):80-82.

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