摘要:設計一款基于WinCE操作系統的智能車載儀表,通過CAN總線接收汽車各個部件的ECU的信息,并將其顯示在液晶顯示屏中。以ARM9內核的S3C2440微處理器為核心,設計了外圍硬件以及CAN總線在WinCE中的底層驅動和上位應用程序。
關鍵詞:嵌入式應用;智能車載儀表;WinCE;CAN總線
引言
隨著高性能電子顯示技術的發展,汽車儀表電子化的程度越來越高。國內外已開發出了多功能全電子顯示儀表、平視顯示儀表、汽車導航系統、行車記錄儀等高技術產品。未來,車用電子化嵌入式儀表具有以下優點:提供大量復雜的信息,使汽車的電子控制程度越來越高;滿足小型、輕量化的要求,使有限的駕駛空間更人性化;高精度和高可靠性實現汽車儀表的電子化,降低了故障的發生率;設有在線故障診斷系統,一旦汽車發生故障,可以找到故障來源,方便維修;外形設計自由度高,汽車儀表盤造型美觀。基于以上優點,汽車會越來越多地采用各種用途的電子化儀表。造型新穎、功能強大的嵌入式電子化儀表將是今后車用儀表的發展趨勢和潮流。
1 智能車載儀表系統結構
本智能車載儀表擁有大多數傳統車載儀表所擁有的功能,駕駛員可以通過車載儀表的顯示界面獲取當前汽車的狀態信息,例如車速、油壓、油溫、水溫、機油壓力或者電瓶電量。
傳統車輛儀表直接與車輛的傳感器相連,儀表系統經由傳感器的模擬量得到汽車當前狀態,精確性不高。本文設計的智能車載儀表并不是簡單地與傳感器相連,而是通過CAN控制器將整車連接成一個網絡結構。車輛部件配以CAN控制器,通過雙絞線將車輛部件連接起來形成一個網絡體系,實現部件的電子化。同時,車載儀表和汽車部件的電子化也提高了汽車的精準度和可靠性,降低故障發生率。
車載智能儀表主要分為基于S3C2440處理器的硬件系統和WinCE環境下的軟件系統兩大部分。硬件系統為整個控制系統提供基礎,負責CAN總線通信。軟件系統提供CAN總線的硬件驅動以及在WinCE下的儀表上位應用程序。
2 硬件設計
硬件系統以S3C2440為核心,RAM內存、NOR Flash和NAND Flash作為存儲介質,擴展部分外圍設備以負責系統信息的輸入與輸出,如CAN總線通信單元、LCD顯示、觸摸屏、通用串行口、USB設備、以太網接口等。系統硬件結構如圖1所示。
在眾多接口中,CAN總線通信單元是在整車通信過程中的關鍵部分。在汽車的各個重要部件中,配置相應的CAN控制單元,由雙絞線將各個CAN總線控制單元連接起來。汽車的各個部件將該部件的當前狀態信息由CAN控制單元發送出去,經雙絞線發送到智能車載儀表的CAN單元當中,經過系統的CAN接口將數據發送到系統中。車載儀表系統得到數據后,經過數據處理得到汽車部件的當前狀態信息。
CAN總線接口電路如圖2所示。采用Microchip公司的CAN總線控制器MCP2515。MCP2515完全支持CAN 2.OA/B技術規范,速度達到1Mbps;SPI的接口標準使得它與S3C2440的連接更加簡單;能發送和接收標準和擴展數據幀以及遠程幀;自帶2個驗收屏蔽寄存器和6個驗收濾波寄存器,可以過濾掉不想要的報文,減少了微處理器的開銷。CAN總線收發器采用TJA1050,該器件提供了CAN控制器與物理總線之間的接口以及對CAN總線的差動發送和接收功能。
為了增強CAN總線節點的抗干擾能力,提高系統的穩定性,在CAN控制器與CAN收發器之間加入了光耦隔離器6N137,而不是使TXCAN和RX-CAN端直接與收發器相連,這樣就實現了總線上各CAN節點之間的電氣隔離。同時,這也解決了MCP2515與TJA1050之間電平兼容的問題,還可以抑制CAN網絡中的尖峰脈沖及噪聲干擾。光耦部分電路所采用的兩個電源必須完全隔離,否則也就失去了意義。電源的隔離可以采用小功率的電源隔離模塊或者多帶5 V隔離輸出的開關電源模塊實現。這些部分雖然增加了接口電路的復雜性,但是卻提高了節點的穩定性和安全性。
在CAN接口處,CAN通信線上的2個60Ω電阻(總計120 Ω),起到增大負載、減少回波反射作用,是一種阻抗匹配的補救措施。2個60 Ω的中間部分與地端之間連接一個電容以抗干擾。
3 軟件設計
軟件的整體環境為winCE編程環境。針對本車載智能儀表硬件系統定制相應的WinCE操作系統,實現對硬件的驅動。再編寫應用程序,通過對應用程序的具體操作實現對系統硬件的操作,即實現系統的功能。其中非常關鍵的是編寫CAN控制器的驅動。CAN驅動實現應用軟件對CAN控制單元的操作,以及讀取CAN控制單元中的數據代碼。
3.1 系統開發和移植
嵌入式系統開發就是系統驅動層的設計,其中最主要就是BSP的開發和調試。所以智能車載儀表底層驅動的開發就顯得尤為重要。
由于使用的是WinCE操作系統,所以使用Platform Builder定制WinCE操作系統鏡像。在Platform Builder中,可以添加系統部分硬件(如液晶屏、RAM)的驅動,這些驅動已經由微軟公司編寫好。然后啟動Bootloader,把鏡像文件下載到Flash存儲器中,并配置操作系統啟動文件boot.ini。
3.2 CAN總線驅動開發
由于CAN是外部設備,所以需要將CAN的驅動以流接口驅動方式編寫。流接口驅動函數被設計來與通常的文件系統API(如 Activate Dev-iee、ReadFile、WriteFile和IOControl等)緊密匹配,即流接口驅動在應用程序中表現為一個系統文件,應用程序通過對系統文件的特殊文件進行操作從而完成對設備的操作。編寫流接口文件主要用到流接口函數,也就是流接口驅動的入口點,如XXX_Init、XXX_Read和XXX_Open等。這些流接口文件與相應的API函數對應,使應用程序由相應的函數可以訪問到外部設備。
作為流接口驅動程序,CAN總線驅動程序也有一組標準函數,可完成I/O操作。這些函數提供給WinCE操作系統內核使用,它們都是流接口驅動程序的DLL文件。動態加載CAN總線驅動程序時,系統要進行注冊。CAN驅動程序注冊表信息:
通過以上代碼完成注冊之后,調用ActivateDeviceEx()函數進行加載驅動。
3.3 CAN總線驅動通信流程
CAN總線控制器驅動程序主要用于設置MCP2515的波特率、MCP2515的驗收過濾器、CAN消息傳送模式和CAN收發數據方式。驅動程序是連接上位應用程序和硬件的一個中間紐帶。智能車載儀表系統在EVC++環境下進行CAN總線開發。
流式驅動以文件的方式打開函數CreateFile():驅動成功打開后,CreateFile()函數返回不為INVALID-HAN-DLE-VALUE的句柄,此句柄也是關閉驅動函數Close-Handle()的參數。CAN設置函數DeviceIoControl()接收由CreateFile()函數獲得的句柄及控制命令碼,設置輸入/輸出緩沖區以及緩沖區的大小。函數執行完成后返回實際輸出的緩沖區大小等。CAN總線發送與接收函數WriteFile()和ReadFile(),利用驅動文件句柄、發送和接收緩沖區等參數完成數據的發送和接收,操作成功后返回實際發送和接收的字節數。
為了不讓主線程一直處于等待數據到來的狀態,讓主線程擁有時間令牌來操作其他事情,程序采用多線程設計,創建一個接收數據線程。接收數據線程是一個無限循環,它不斷查詢CAN總線數據退出標志,如果退出標志有效,則該循環結束退出。驅動程序流程如圖3所示。
結語
目前,基于嵌入式技術的車載儀表逐漸開始流行。本文使用基于WinCE的ARM9微處理器作為開發平臺,處理速度快,功能強大;使用CAN總線技術進行信號的相互傳輸,CAN總線實時接收汽車部件發送來的信息,并進行處理與分析;使用WinCE操作系統,界面友好。本智能車載儀表系統可以節約成本、降低功耗,并且可維護性強,便于擴展和升級。