《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(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語(yǔ)言制作美觀大方的人機(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語(yǔ)言制作美觀大方的人機(jī)交互界面以實(shí)時(shí)顯示車輛工作情況。給出了系統(tǒng)軟硬件結(jié)構(gòu)設(shè)計(jì)方案。檢測(cè)結(jié)果表明,該設(shè)計(jì)方案滿足了汽車儀表指示精度與穩(wěn)定性要求。
關(guān)鍵詞: QML;CAN總線;S3C6410;GUI

 中國(guó)汽車工業(yè)強(qiáng)勁發(fā)展,產(chǎn)銷能力排行世界第一,但絕大部分國(guó)產(chǎn)汽車仍搭載步進(jìn)電機(jī)式汽車儀表。隨著電子技術(shù)的迅猛發(fā)展,汽車信息容量與系統(tǒng)復(fù)雜程度產(chǎn)生了很大的變化。目前,國(guó)外各大汽車公司都在研究全數(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++圖形用戶界面庫(kù),它基于面向?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é)的語(yǔ)言QML,這種語(yǔ)言能讓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ā)器。該儀表選用美國(guó)微芯科技有限公司生產(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總線通信

 德國(guó)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é)議是美國(guó)汽車工程協(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ù)頁(yè)(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語(yǔ)言是一種描述性語(yǔ)言,用于描述用戶界面的外觀和行為。QML中采用JavaScript作為腳本語(yǔ)言,用戶界面被規(guī)定為樹形結(jié)構(gòu)。
3.2.1 QML語(yǔ)言模塊以及語(yǔ)法
 QML已經(jīng)定義了許多功能強(qiáng)大的界面元素,如Item、Rectangle、Image、Text和ListView等,其中Item是QML中可視元素的基礎(chǔ)。import語(yǔ)句導(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語(yǔ)言描述一個(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)行庫(kù)以及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) 頁(yè)縮略圖模式與瀏覽模式切換,代碼如下:
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語(yǔ)言表達(dá)式檢查,代碼語(yǔ)句整齊排列,代碼自動(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。
 在上面的語(yǔ)句當(dāng)中,最后的語(yǔ)句-importdir/usr/local/Trolltech/QtEmbedded-4.8.0-arm/qml是將qml相關(guān)庫(kù)添加到Qt/E庫(kù)當(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)之一,在此選用較深色背景作為L(zhǎng)CD終端顯示背景,避免駕駛員出現(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)載。