基于ARM 和Qt/E的車載HMI終端的設計方案
HMI觸控平臺以ARM為處理器,接7.0寸LCD觸摸屏來實現,可取代傳統的(如圖2A)機械按鍵與表盤顯示的中控平臺。HMI觸控平臺如圖2B所示,由車燈、車窗、后視鏡、多媒體、空調、導航以及狀態參數顯示菜單組成。將該終端嵌入到方向盤,駕駛員可點擊觸控菜單進入車燈、車窗等控制界面(如圖2C和D)實現車燈、車窗等設備的觸摸控制,也可實時采集與顯示設備狀態參數如:車速、故障碼等。其中,觸控與顯示數據需調用ARM底層串口驅動來實現讀寫操作,觸控界面通過Button控件的信號與槽機制來實現數據的發送,狀態參數的采集與顯示通過事件驅動方式實現。終端可外接GPS模塊實現導航功能,設計了Qt媒體媒體播放器實現娛樂功能,也可接入無線網卡來實現無線上網功能。

4.1CAN/RS232網關軟件設計
主程序中首先要完成初始化操作,包括單片機、SJA1000、RS232通信以及中斷源的初始化。其中SJA1000的初始化是整個設計最重要的部分,也是保證CAN通信的前提??紤]車輛內部網絡的兼容性,SJA1000配置為Peli模式,支持CAN2.0A和B規范,實現標準幀和擴展幀兩種報文傳輸。SJA1000初始化寄存器配置流程如圖3所示。

圖3SJA1000初始化寄存器配置流程
為保證數據實時傳輸,采用中斷方式進行數據收發。
當CAN總線有數據接收時SJA1000會跳入接收中斷函數將數據接收并存儲到接收緩存,根據數據幀頭來判別數據類型和所帶數據長度,最后提取CAN數據拆分為單字節通過串口發送,并在HMI終端顯示;當HMI終端有控制字發送,串口接收中斷函數將所發送的控制字依次接收存入接收緩存,并根據首字節來判別所發數據類型和長度,組裝成CAN數據幀格式發送到網絡中去,以此實現各節點的控制。具體流程如圖4所示。

圖4數據接收與發送流程圖
4.2車載HMI界面的設計
HMI界面采用QtCreator2.0來設計,因為HMI終端是通過UART接口接入CAN網絡中,所以通信時需接上面所介紹的CAN/RS232協議轉換器來實現。同時,還需在Linux下編寫Qt串口通信程序。
首先,在Linux下利用open函數打開串口設備,用tcsetattr函數來設置串口屬性。打開驅動設備UART0進行讀寫操作:constchar*devName=/dev/ttySAC0;fd=::
open(devName,O_RDWR|O_NONBLOCK);設置波特率等參數:serialAttr.c_cflag=B115200|HUPCL|CS8|CREAD|CLOCAL;serialAttr.c_cc[VMIN]=1;其中串口設備可使用Linux下I/O函數進行Read和Write操作。但是,在數據接收時當數據量過大會導致界面被阻塞(造成界面假死),于是創建了一個線程通過事件驅動實現數據接收。
Qt中可采用QSocketNotifier類來實現設備事件驅動的設計要求。QSocketNotifier類關聯Signal/Slot機制,當有數據可讀時會觸發Ativated信號,LCDNumber控件Slot會被調用來連接到該信號并顯示,從而實現數據采集與顯示功能。在數據發送時,可通過Button控件Signal/Slot調用QObject對象的connect()函數來實現[3].當按鍵被按下時觸發Signal信號,Slot會調用pressed()函數將定義好的數據通過串口Write函數發送到總線上。函數實現如下:
voidGlass::on_lu_pressed(){charmsg[]={160,34,16,0};//定義所發送數據myserial->myCom->write(msg,4);//寫發送數據}
通過QPainter類進行對窗體界面和按鍵圖像界面進行設計,達到美觀的人機界面。最后將設計好的程序通過交叉編譯,生產二進制文件移植到ARM中,然后在文件系統中調用執行,最終在LCD觸摸屏上顯示,如圖2所示。
5系統集成與測試
首先將設計好的HMI終端通過交叉串口線與PC機連接,進行相互通信,測試是否能夠進行數據收發,測試成功后通過CAN/RS232網關接入Polo車CAN試驗臺進行綜合測試。試驗臺設備節點可通過觸摸方式控制,同時可實時采集與顯示運行狀態信息,經過多次實驗測試,運行穩定可靠,達到了設計要求。
6結束語
本文所設計的車載HMI終端集車身控制、儀表顯示、導航、多媒體和無線上網為一體,簡化了車載中控平臺,降低了車輛控制系統操作的復雜性。經實驗測試實現了車身設備的觸摸控制,能夠對各設備運行狀態信息進行采集與顯示。為車載HMI開發提供了一種可行的設計思路與性價比更合理的解決方案。
c++相關文章:c++教程











評論