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

摘  要:CAN總線技術基礎上,設計了一款CAN總線嵌入式汽車儀表。該儀表采用Samsung公司的S3C6410處理器,利用Nokia公司開發的Qt Quick及QML語言制作美觀大方的人機交互界面以實時顯示車輛工作情況。給出了系統軟硬件結構設計方案。檢測結果表明,該設計方案滿足了汽車儀表指示精度與穩定性要求。
關鍵詞: QML;CAN總線;S3C6410;GUI

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

 數據接收發送模塊負責接收CAN總線傳輸的各種數據,如速度、轉速和溫度等,并將處理后的數據發送到微處理器;或者將微處理器發送的數據進行處理之后發送至CAN總線。微處理器接收到需要的數據后,按照預定的算法和要求對數據進行處理,并將結果輸出。人機交互界面程序接收到微處理器發送的數據后進行相應的顯示,并將觸摸事件反饋給微處理器。

 


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

3 汽車儀表軟件設計
3.1 CAN總線通信

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

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

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

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

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 国内精品视频 在线播放 | 国产在线观看成人免费视频 | 丰满寡妇一级毛片 | 日韩精品一区二区三区免费视频 | 国产精品成人观看视频网站 | 无码专区aaaaaa免费视频 | 久久久久国产午夜 | 欧美成视频人免费淫片 | 怡红院成人永久免费看 | 日韩在线观看一区二区三区 | 日韩免费观看视频 | 日韩 国产 欧美 精品 在线 | 亚洲一区二区三区网站 | 国产午夜精品不卡视频 | 亚洲日产综合欧美一区二区 | 日韩精品中文字幕在线 | 99精品免费在线 | 手机在线一区二区三区 | 手机毛片在线观看 | 亚洲成在人线久久综合 | 精品国产一区二区二三区在线观看 | 一本大道大臿蕉香蕉网站 | 人人成人免费公开视频 | 久久精品视频91 | 国产人成精品综合欧美成人 | 欧美日韩动漫 | 国产 日韩 欧美在线 | 亚洲啊啊 | 一级全免费视频播放 | 国产成人在线看 | 成人怡红院视频在线观看 | 亚洲人成一区二区三区 | 国产成人精品s8p视频 | 欧美成视频无需播放器 | 伊人手机在线视频 | 91精品国产一区二区三区左线 | 一女多男高h | 一区二区视频在线 | 亚洲日本欧美在线 | 色秀视频在线 | 一级aaaaaa片毛片在线播放 |