一種基于CAN總線和MiniGUI的虛擬儀表的實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
汽車儀表是駕駛員與車輛進(jìn)行信息交流的重要接口和界面,它是安全行駛和經(jīng)濟(jì)行駛不可缺少的裝置。早期,汽車上裝備的儀表均是通過(guò)機(jī)械結(jié)構(gòu)模擬顯示,它們存在精度低、響應(yīng)慢、顯示信息量少、信息顯示方式單一等缺點(diǎn)。隨著計(jì)算機(jī)技術(shù)的日漸成熟、汽車電子的發(fā)展、和嵌入式技術(shù)的廣泛應(yīng)用,對(duì)儀表的數(shù)字化和多信息綜合顯示已成一種重要的發(fā)展趨勢(shì)。 本文將嵌入式計(jì)算機(jī)技術(shù), 虛擬儀器技術(shù)和CAN總線數(shù)據(jù)傳輸技術(shù)引入到車載儀表中,設(shè)計(jì)、研制了嵌入式車載虛擬儀表。該儀表通過(guò)下位機(jī)各智能節(jié)點(diǎn)實(shí)時(shí)采集車況信息并通過(guò) CAN 總線將各節(jié)點(diǎn)連接和進(jìn)行數(shù)據(jù)傳輸。上位機(jī)將獲得的車況信息處理后,將常規(guī)信息顯示與異常信息顯示相結(jié)合,并充分發(fā)揮虛擬儀器功能與參數(shù)能自動(dòng)定義、動(dòng)態(tài)畫面可視性強(qiáng)的特點(diǎn),采用模擬、數(shù)字等多種方式對(duì)工況信息進(jìn)行綜合顯示,并對(duì)超限工況報(bào)警和自動(dòng)記憶存儲(chǔ),對(duì)汽車出現(xiàn)的各種異常情況給出緊急處理建議。
1 系統(tǒng)軟硬件平臺(tái)的選擇
本文選取Intel公司的PXA270為微處理器,選配MiniARM270核心板;64 MB SDRAM為系統(tǒng)運(yùn)行隨機(jī)存儲(chǔ)器;256 MB NAND Flash程序存儲(chǔ)器;MCP2515 CAN控制器負(fù)責(zé)CAN報(bào)文的接收與發(fā)送;8英寸640×480真彩TFT液晶屏顯示GUI圖形界面;Linux為嵌入式操作系統(tǒng)[2].選用目前較為流行的嵌入式GUI系統(tǒng)MiniGUI進(jìn)行應(yīng)用程序界面的編寫。運(yùn)用ZLG/BOOT啟動(dòng)Jflashmm、Flash FXP軟件進(jìn)行內(nèi)核的燒寫與移植。軟件編制調(diào)試完畢后,進(jìn)行操作系統(tǒng)內(nèi)核定制,裁減出最小操作系統(tǒng),并將應(yīng)用程序與最小系統(tǒng)在仿真環(huán)境下進(jìn)行聯(lián)合調(diào)試。虛擬儀表系統(tǒng)結(jié)構(gòu)如圖1所示。
2 MiniGUI的程序開(kāi)發(fā)和移植
MiniGUI是由北京飛漫軟件技術(shù)有限公司創(chuàng)辦的開(kāi)源Linux圖形用戶界面支持系統(tǒng),經(jīng)過(guò)近些年的發(fā)展,MiniGUI已經(jīng)發(fā)展成為比較成熟的性能優(yōu)良的、功能豐富的跨操作系統(tǒng)的嵌入式圖形界面支持系統(tǒng)。"小"是MiniGUI的特色,它目前已經(jīng)廣泛應(yīng)用于通訊、醫(yī)療、工控、電子、機(jī)頂盒、多媒體等領(lǐng)域。
將MiniGUI及應(yīng)用程序移植到目標(biāo)機(jī)上需要經(jīng)歷編寫相應(yīng)的驅(qū)動(dòng)程序、交叉編譯MiniGUI及應(yīng)用程序、安裝MiniGUI到目標(biāo)系統(tǒng)、在目標(biāo)系統(tǒng)上運(yùn)行MiniGUI應(yīng)用程序等幾個(gè)步驟。
MiniGUI程序是建立在MiniGUI和ANSIC庫(kù)之上,所以程序的編寫要按照MiniGUI的程序框架來(lái)定,并通過(guò)調(diào)用ANSIC庫(kù)以及MiniGUI自身提供的API函數(shù)來(lái)實(shí)現(xiàn)。MiniGUI程序的入口點(diǎn): int MiniGUIMain(int argc,const cha r * argv [ ]) .其風(fēng)格類似于Win32 ,也是基于窗口、事件驅(qū)動(dòng)編程。事件通過(guò)消息機(jī)制傳遞,當(dāng)事件發(fā)生時(shí),MiniGUI將事件轉(zhuǎn)換為一個(gè)消息,并將消息發(fā)送到MiniGUI應(yīng)用程序的消息隊(duì)列之中。窗口過(guò)程函數(shù)是MiniGUI應(yīng)用程序必不可少的函數(shù),用于接收和處理消息,是一個(gè)回調(diào)函數(shù),由MiniGUI調(diào)用,在應(yīng)用程序中不能直接調(diào)用,其函數(shù)原型如下:static int WindowProc (HWND hWnd, int message, WPARAM wParam,LPARAM lParam)。每個(gè)MiniGUI應(yīng)用程序的初始界面一般都是MiniGUI主窗口,然后在主窗口的基礎(chǔ)上再建立子窗口或?qū)υ捒虻取V鞔翱谑褂? CreateMainWindow函數(shù)實(shí)現(xiàn),在這個(gè)函數(shù)里可以設(shè)置主窗口的風(fēng)格、大小、句柄、標(biāo)題以及窗口過(guò)程函數(shù)等[6,8-9].
本文有兩個(gè)顯示界面,分別對(duì)應(yīng)流程圖里面的子程序1和子程序2.應(yīng)用程序流程圖如圖2所示。
本文采用arm-linux-gcc-3.4.3交叉編譯器對(duì)驅(qū)動(dòng)程序和應(yīng)用程序進(jìn)行編譯。安裝交叉編譯器步驟:將交叉編譯器安裝包arm- linux-3.4.3.tar.bz2復(fù)制到當(dāng)前目錄下,進(jìn)行解壓安裝并指定安裝路徑:#tar xjvf arm-linux-3.4.3.tar.bz2 –C /usr/local/arm.為了便于使用,安裝完畢后,通常都將交叉編譯器的路徑添加到系統(tǒng)的搜索路徑中。這樣要編譯文件時(shí)就很簡(jiǎn)單,不用每次都指定路徑,系統(tǒng)會(huì)自動(dòng)搜索。在這里介紹的一種方法是修改/etc/profile文件:打開(kāi)/etc/profile文件,在最后一行添加pathmunge /usr/local/arm/3.4.3/sbin,保存退出,在終端輸入執(zhí)行:#. Profile("點(diǎn)+空格+文件名")。可通過(guò)在終端輸入:arm-linux-gcc–v 檢驗(yàn)用戶編譯器版本。arm-linux-gcc編譯出來(lái)的程序,不能在PC機(jī)上運(yùn)行,必須下載到ARM系統(tǒng)中才能運(yùn)行。
MiniGUI在Linux系統(tǒng)中有兩種運(yùn)行模式:fbcon(Frame Buffer Console)和qvfb(Qt Virtual Frame Buffer)。fbcon在控制臺(tái)下運(yùn)行,這種模式下不能開(kāi)Linux的X圖形界面。qvfb則是帶幀緩沖的虛擬控制臺(tái),MiniGUI程序在qvfb 中運(yùn)行就像圖形界面下的終端(Terminal)中運(yùn)行命令一樣。通過(guò)對(duì)gal_engine賦值來(lái)設(shè)置運(yùn)行模式。
3 信號(hào)采集電路
CAN 是Controller Area Network 的縮寫(以下稱為CAN),是ISO國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議。在當(dāng)前的汽車產(chǎn)業(yè)中,出于對(duì)安全性、舒適性、方便性、低公害、低成本的要求,各種各樣的電子控制系統(tǒng)被開(kāi)發(fā)了出來(lái)。由于這些系統(tǒng)之間通信所用的數(shù)據(jù)類型及對(duì)可靠性的要求不盡相同,由多條總線構(gòu)成的情況很多,線束的數(shù)量也隨之增加。
CAN總線的智能節(jié)點(diǎn)一般由主控制器、CAN總線控制器、CAN總線驅(qū)動(dòng)器以及具體的功能單元組成。主控制器用來(lái)通過(guò)訪問(wèn)CAN總線控制器來(lái)實(shí)現(xiàn)對(duì)CAN總線的訪問(wèn)。CAN總線控制器實(shí)現(xiàn)CAN協(xié)議的數(shù)據(jù)鏈路層和物理層功能,對(duì)外具有與主控制器和總線驅(qū)動(dòng)器的接口功能。CAN總線驅(qū)動(dòng)器提供 CAN總線控制器與物理總線之間的接口。
本文選用Microchip公司生產(chǎn)的MCP2515作為CAN總線控制器。MCP2515是一款獨(dú)立的CAN協(xié)議控制器,完全支持CAN 2.0B技術(shù)規(guī)范。MCP2515與主控制器的連接是通過(guò)標(biāo)準(zhǔn)串行外設(shè)接口SPI(Searial Peripheral Interface)實(shí)現(xiàn)的。主控制器選擇了Microchip公司的PIC16F913,該單片機(jī)為高性能的RISC CPU,內(nèi)部具有4 KB的可編程可擦除的Flash存儲(chǔ)器、256 B的RAM、256 B的EEPROM,帶有標(biāo)準(zhǔn)的SPI接口,也能夠方便地和CAN總線控制器MCP2515進(jìn)行連接。CAN總線驅(qū)動(dòng)器選擇Microchip公司的 MCP2551,是一個(gè)可容錯(cuò)的高速CAN器件[4,10].數(shù)據(jù)采集用的CAN總線接口電路如圖3所示。[!--empirenews.page--]
4 CAN總線驅(qū)動(dòng)程序的方案設(shè)計(jì)與實(shí)現(xiàn)
設(shè)備驅(qū)動(dòng)程序是介于硬件和Linux內(nèi)核之間的軟件接口,是一種低級(jí)的、專用于某一硬件的軟件組件。設(shè)備驅(qū)動(dòng)也可以理解為操作系統(tǒng)的一部分,對(duì)于一個(gè)特定的硬件設(shè)備來(lái)說(shuō),其對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序是不同的,比如網(wǎng)卡、鍵盤、鼠標(biāo)、顯卡、電位器、電機(jī)等。操作系統(tǒng)本身沒(méi)有對(duì)各種硬件設(shè)備提供持久不變的"驅(qū)動(dòng)設(shè)備",沒(méi)有驅(qū)動(dòng),操作系統(tǒng)就控制不了底層的設(shè)備,對(duì)于操作系統(tǒng)來(lái)說(shuō),掛接的設(shè)備越多,需要的設(shè)備驅(qū)動(dòng)程序也越多。
在Linux操作系統(tǒng)中,把所有外設(shè)都當(dāng)成文件看待,使用操作文件的方法來(lái)操作設(shè)備,通過(guò)驅(qū)動(dòng)程序,Linux操作系統(tǒng)才能以文件夾的方式來(lái)管理設(shè)備。因此驅(qū)動(dòng)程序的編寫開(kāi)發(fā)具有十分重要的地位。Linux設(shè)備驅(qū)動(dòng)程序運(yùn)行在Linux內(nèi)核空間,是Linux內(nèi)核中聯(lián)系硬件設(shè)備和應(yīng)用程序的橋梁。Linux系統(tǒng)硬件、設(shè)備驅(qū)動(dòng)和應(yīng)用程序的關(guān)系如圖4所示[7].
MagicARM270實(shí)驗(yàn)箱采用SJA1000 CAN控制器擴(kuò)展了1路CAN接口,SJA1000是PHILIPS公司經(jīng)典的CAN控制器,支持CAN 2.0 A、B協(xié)議。結(jié)合應(yīng)用程序、驅(qū)動(dòng)程序、內(nèi)核程序,CAN驅(qū)動(dòng)流程圖如圖5所示。
5 測(cè)試結(jié)果與驗(yàn)證
選取廣州致遠(yuǎn)電子有限公司生產(chǎn)的Magic ARM270實(shí)驗(yàn)箱進(jìn)行仿真[2].通過(guò)CAN總線實(shí)現(xiàn)汽車上各種信息的采集和測(cè)量,并將采集的結(jié)果送到ARM進(jìn)行處理,最后通過(guò)TFT顯示出來(lái),設(shè)置 CAN總線傳輸速度波特率為125 KB/s,圖6所示為捕捉的一個(gè)界面。
隨著信息技術(shù)的快速發(fā)展,現(xiàn)場(chǎng)總線技術(shù)在汽車上得到了越來(lái)越多的應(yīng)用。本文在測(cè)試系統(tǒng)下采用CAN總線接口提取車速、發(fā)動(dòng)機(jī)轉(zhuǎn)速、機(jī)油壓力、油量、水溫、傳動(dòng)箱壓力及其他車況等信息。實(shí)驗(yàn)表明采用虛擬儀表技術(shù)完全能夠滿足車輛運(yùn)行參數(shù)和狀態(tài)顯示的要求,可擴(kuò)充性好,配置方便。