湯春球,曾豪杰,鄧飛宇
(武漢理工大學 機電工程學院,湖北 武漢 430070)
汽車儀表作為駕駛員了解汽車行車信息的窗口,其顯示的準確性和可靠性直接關(guān)系到行車安全。新能源汽車較傳統(tǒng)的燃油汽車相比,電氣設備更多,因此電動汽車儀表信息顯示更加豐富,顯示模式更加多樣化并具備良好的HMI(human machine interface)交互能力[1]。目前,單處理器的汽車虛擬儀表存在啟動時間長,抗電磁干擾能力弱等問題。針對以上問題,筆者提出了一種雙處理器車載虛擬儀表設計方案,主MPU(micro processor unit)采用基于ARM(advanced RISC machines) CORTEX-A9內(nèi)核MX6SOLO處理器來進行復雜的圖形處理,輔助MCU(micro controller unit)采用32位的NXP S32K146作為主控芯片的微控制器主要進行數(shù)據(jù)通信,并以目前安全性和實時性最好的QNX(quick unix)作為嵌入式系統(tǒng),以汽車領(lǐng)域?qū)S玫腢I(user interface)設計工具Kanzi進行儀表的圖形界面開發(fā)。該虛擬儀表系統(tǒng)將數(shù)據(jù)通信和圖形處理分離,增強了系統(tǒng)的干擾能力。且后期系統(tǒng)維護,只需更換UI資源,就能獲取新的主題風格。
虛擬儀表系統(tǒng)工作原理是:通過CAN(controller area network)總線實時采集汽車的各種數(shù)據(jù),包括汽車運行的轉(zhuǎn)速、車速、胎壓信息、電池信息和里程等信息,然后經(jīng)MCU進行數(shù)據(jù)處理,將正確的信息顯示在虛擬儀表盤上。根據(jù)儀表系統(tǒng)的工作原理,可將儀表總成分為3個主要模塊:數(shù)據(jù)采集、數(shù)據(jù)處理和液晶顯示[2]。
(1)信號采集模塊。汽車上的信號包括CAN總線信號和各種硬線信號,將采集到的信號經(jīng)過信號轉(zhuǎn)換單元轉(zhuǎn)換成處理器易讀的數(shù)字信號。
(2)數(shù)據(jù)處理模塊。將采集到的數(shù)據(jù)經(jīng)輔助MCU和主MCU處理后進行保存,方便后續(xù)液晶顯示和聲光報警。
(3)液晶顯示模塊。經(jīng)過解析、分析處理后的數(shù)據(jù)在液晶儀表面板上進行分區(qū)域顯示,主要顯示內(nèi)容有:當前速度、電池電量、時間、日期、行駛里程、報警信息等;當系統(tǒng)判定某項數(shù)據(jù)為異常信息時,通過智能語音和警告指示燈等方式進行預警,提醒駕駛員進行處理[3]。
某汽車公司設計的一款純電動汽車虛擬儀表,采用雙處理器協(xié)同工作。主MPU采用基于ARM CORTEX-A9內(nèi)核的IMX6SOLO處理器,運行速率高達1.2 GHz,內(nèi)部集成2D和3D圖形處理器,動畫運行速度流暢,圖像處理速度快。輔助MCU采用32位的NXP S32K146作為主控芯片,負責電源管理、整車CAN信號和硬線信息接收管理。硬件部分還包括電源管理模塊、CAN通信模塊、預警模塊和液晶顯示模塊,顯示屏采用10.25寸,分辨率為1 920×720 px的非觸摸屏。儀表的硬件框圖如圖1所示。圖中,LVDS(low-voltage differential signalling)為低電壓差分信號;UART(universal asynchronous receiver/trnsmitter)為通用異步收發(fā)傳輸器。
圖1 系統(tǒng)硬件框圖
控制器局域網(wǎng)是一種串行通信協(xié)議,能有效支持分布式控制和實時控制的串行通信網(wǎng)絡。電動汽車網(wǎng)絡通信結(jié)構(gòu)示意圖如圖2所示。
圖2 電動汽車網(wǎng)絡通信結(jié)構(gòu)示意圖
CAN總線結(jié)構(gòu)從上到下依次是CAN控制器、CAN收發(fā)器、CAN數(shù)據(jù)傳遞終端。CAN總線上節(jié)點發(fā)送數(shù)據(jù)是以報文的形式廣播給所有節(jié)點,且多節(jié)點發(fā)送數(shù)據(jù),優(yōu)先級低主動退出發(fā)送。
由于電動汽車并沒有標準的通信協(xié)議,一直是主流主機廠自己制定,基本的思路是在SAE-J1939[4-5]的基礎(chǔ)上,根據(jù)需求做出調(diào)整。電動汽車CAN總線系統(tǒng)由于電氣設備多,因此需要對應用層部分參數(shù)重新定義。
(1)優(yōu)先級。將重要的結(jié)點信息設置更高報文優(yōu)先級,保證重要的報文信息刷新頻率高。
(2)節(jié)點地址。電動汽車新增的節(jié)點包括整車控制器、汽車動力管理系統(tǒng)、電機控制器等。
(3)參數(shù)組定義。同一個設備內(nèi)完成不同功能構(gòu)成參數(shù)組,將刷新頻率接近的參數(shù)放在一個參數(shù)組內(nèi)進行發(fā)送能提高總線的利用率。
所設計的虛擬儀表系統(tǒng)采用分布式嵌入式實時操作系統(tǒng)QNX作為操作系統(tǒng),在QNX系統(tǒng)平臺下開發(fā)虛擬儀表的驅(qū)動程序和應用程序,采用Kanzi進行儀表的界面設計。調(diào)用系統(tǒng)的接口函數(shù)將采集到的CAN信號和各種硬線信號進行解析,經(jīng)處理系統(tǒng)內(nèi)核進行處理判斷,將正確有用的信息進行顯示,異常數(shù)據(jù)進行預警并存儲。系統(tǒng)軟件流程如圖3所示。
圖3 系統(tǒng)軟件流程圖
儀表軟件設計采用模塊化成熟設計方案,軟件總體框架采用MVC(module view controler)三層架構(gòu),View層接收用戶的操作以及通過刷新頁面的方式反饋客戶;Controller處理View層發(fā)送的消息做邏輯處理,并向Module層獲取View層所需的數(shù)據(jù);Module層負責緩存當前頁面的數(shù)據(jù),并響應View層的數(shù)據(jù)請求,同時也負責在數(shù)據(jù)需要更新或者數(shù)據(jù)不全的情況下向其他地方獲取數(shù)據(jù)(底層、文件、PPS(protocal and parameters selection)、網(wǎng)絡等渠道)。整個儀表軟件部分主要由上層應用軟件和下層驅(qū)動軟件部分組成[6]。驅(qū)動部分主要負責完成系統(tǒng)的初始化、CAN總線信號和硬線信號接收處理;應用程序部分主要完成復雜的邏輯處理[7],數(shù)據(jù)更新,UI顯示,系統(tǒng)任務的調(diào)配,故障的判斷及預警。
驅(qū)動部分由系統(tǒng)內(nèi)部驅(qū)動和外部設備驅(qū)動組成:系統(tǒng)內(nèi)核驅(qū)動,CAN總線驅(qū)動,A/D轉(zhuǎn)換驅(qū)動、語音驅(qū)動和液晶顯示器顯示驅(qū)動。
應用程序處理復雜的系統(tǒng)任務主要包括:系統(tǒng)管理,數(shù)據(jù)采集和信號轉(zhuǎn)換,繁雜的數(shù)據(jù)處理,UI顯示,系統(tǒng)異常的聲光報警。整個程序采用多進程和多線程的方式來共享系統(tǒng)資源,進程間通過QNX的PPS通信機制完成進程間的數(shù)據(jù)交換。儀表界面顯示部分由以下子線程同步運行:方控線程、聲光報警線程、串口線程等。負責完成相應的功能任務,提高系統(tǒng)資源的利用率。
UI設計師使用Kanzi Stadio完成UI界面設計,能所見所得地展示UI效果,并生成了KZB資源包給軟件工程師使用,可用Kanzi Engine讀取界面效果,添加數(shù)據(jù)和邏輯代碼。這種工作模式使得UI設計師不用考慮軟件工程是否能實現(xiàn)界面效果,軟件工程師也容易理解UI設計師意圖,減少了二者工作的依賴,提高了工作效率。同時Kanzi也具有良好的跨平臺性。使用Kanzi Studio設計儀表界面如圖4所示。
圖4 系統(tǒng)界面效果圖
為儀表界面添加邏輯代碼和數(shù)據(jù),Kanzi可以通過Kanzi Studio 中的觸發(fā)器和狀態(tài)機來實現(xiàn)簡單的邏輯,復雜的邏輯則使用執(zhí)行腳本和C++API來添加。采用Kanzi Engine API方式為儀表界面添加邏輯功能代碼的方法為:
(1)使用Kanzi Engine加載生成界面的二進制文件。由于本應用程序最終部署在QNX系統(tǒng)環(huán)境下,首先在Windows下構(gòu)建,然后使用Kanzi構(gòu)建腳本指向適用于Windows的QNX工具鏈來構(gòu)建應用程序。當使用Visual Studio來創(chuàng)建Kanzi工程時,首先調(diào)用onConfigure()配置應用程序。
(2)訪問 Kanzi Studio工程中創(chuàng)建的內(nèi)容。創(chuàng)建一個預設件節(jié)點列表,添加每個小組件,在應用程序類的成員變量中創(chuàng)建并存儲。在onConfigure函數(shù)后添加 onProjectLoaded() 函數(shù)。并將函數(shù)置于 onProjectLoaded() 內(nèi),Kanzi 會在加載應用程序后調(diào)用該函數(shù)。
(3)從文件系統(tǒng)加載圖像。在ProgrammerTutorialApplication中,為 WidgetDescription 結(jié)構(gòu)創(chuàng)建構(gòu)造函數(shù),它定義小組件名稱、圖標和描述,設置小組件數(shù)量,并定義小組件描述數(shù)組。
(4)為各個小組件和組件面板添加交互。在ProgrammerTutorialApplication類中的 onProjectLoaded() 函數(shù),實現(xiàn)小組件的時間處理程序,部分代碼實現(xiàn)如下:
virtual void onProjectLoaded() KZ_OVERRIDE
{ //為 Back button 添加處理程序
m_backButton->addMessageHandler(Button3D::PressedMessage, bind(&Programmer Tutorial Application::onBackButtonClicked,this, placeholders::_1));
}//組件的綁定
整個儀表的性能指標主要從實時性和穩(wěn)定性進行評價。雙處理器嵌入式儀表系統(tǒng)較單處理器嵌入式系統(tǒng)而言,既能進行復雜的數(shù)據(jù)處理又能保證系統(tǒng)的快速啟動。筆者所設計的虛擬儀表系統(tǒng)主處理器采用基于ARM內(nèi)核的IMX6作為微處理器,內(nèi)置圖形處理器,支持3D加速引擎,具備高速視頻信號輸入輸出處理功能。輔助MCU采用單片機作為處理器,主要負責數(shù)據(jù)通信,利用單片機功耗小,響應速度快等優(yōu)勢來控制儀表系統(tǒng)的快速啟動。此外雙處理器還具有抗電磁能力強的優(yōu)勢,有效防止液晶產(chǎn)生黑屏的現(xiàn)象[8]。雙MCU比單MCU方案可靠性和穩(wěn)定性更高。
QNX的微內(nèi)核[9]具有精確的故障隔離和恢復功能。中斷響應延時作為衡量一個嵌入式系統(tǒng)的重要性能指標,在相同的硬件條件下,QNX系統(tǒng)的中斷[10]延時為3.3~4.4 μs,具有明顯的實時性優(yōu)勢。據(jù)相關(guān)統(tǒng)計測算如果Linux響應延時大約為1 s的話, 那么QNX則低至約0.000 008 s。完全滿足高級輔助駕駛系統(tǒng)、HUD(head up display)抬頭顯示、第五代液晶虛擬儀表系統(tǒng)和其它有功能性安全需求的車載應用程序日益增長的需求。
通過USB、CAN和上位機來模擬CAN數(shù)據(jù)的收發(fā)過程,打開調(diào)試工具,完成相關(guān)參數(shù)配置,設置波特率,按時間間隔模擬實車數(shù)據(jù)的收發(fā)過程,經(jīng)過24 h測試實驗,儀表能正常接收并實時精確顯示電控信號、車速、轉(zhuǎn)速、電池等報文信號,同時最快開機時間為3 s,滿足快速啟動要求。
筆者設計的基于雙處理器的汽車虛擬儀表,采用嵌入式圖形庫開發(fā),運用3D圖形顯示技術(shù),其實時性、快速啟動以及精確顯示均滿足設計要求,解決了單處理器啟動慢,抗干擾能力弱的問題,同時3D顯示效果更加炫酷,具備一定的科技感。整個儀表系統(tǒng)軟件分層明確,各層之間耦合度較低,因此極大地提高了軟件的開發(fā)效率。