付建寬 張慶余 張蘇林
(中汽數據(天津)有限公司,天津300000)
近年來各家車企紛紛在自家量產車型上配置車載終端,期望實現對車輛的遠程監控,以便及時掌握車輛的故障情況和運行狀態,對于單個用戶來說通過手機APP 就可以查看這些信息,國家對此也出臺了相應的管理規定[1],但是對于多種不同廠家不同型號的車輛管理起來就顯得捉襟見肘了,另外對于一些沒有配置車載終端的車型也很難統一遠程調度管理。為了滿足這種需求,本文設計實現了一種新型的汽車監控終端系統,可以無縫銜接各類車型。
監控終端采用明遠智睿公司的MYZR-IMX28-CB142 核心板,CPU 為NXP 的i.MX287,主 頻454MHz,內 存128MB DDR2-400 存儲128MB NandFlash,郵票孔結構,搭載自研的底板,擴展了各種功能模塊,底板上采用中科微電子的ATGM332D-5N 導航定位模塊來獲取GPS、北斗等衛星導航系統的衛星信號,實現聯合定位、導航與授時;采用廣和通公司的NL668 無線通訊模塊實現車聯網;采用免驅的USB 攝像頭獲取車內圖像信息[2];通過OBD 轉接線連接車輛的CAN 總線;通過GPIO 外接DS18B20 溫度傳感器感知車內實時溫度[3];通過GPIO 外接MQ2 煙霧氣敏傳感器感知車內有害氣體濃度[4];另外底板上預留了一路RS232 調試串口、一路RS485 工業總線、一路百兆以太網RJ45 口。系統總體結構組成框圖如圖1 所示。

圖1 系統組成框圖
限于篇幅,下面僅對底板上電源電路、定位模塊電路、網口電路、CAN 總線保護電路的設計進行說明。
首先電源來源,對于乘用車可以直接從點煙器處取電,對于試驗車可以從底盤供電線纜處取電。電路設計支持9~50V 寬電壓輸入,通過高效率的DC/DC 變壓器UW2405D-20W,轉成5V 直流穩壓為終端設備供電,再通過RT8010 將5V 降壓到3.3V 輸出,電路設計如圖2 所示。

圖2 電源電路設計

圖3 定位模塊電路設計
該部分設計采用了低紋波的LDO 供電,紋波相對小;使用無源天線,模塊前端增加一級低噪聲放大器(LNA) AT2659 保證性能[5],電路設計如圖3 所示。
由于i.MX287 內部集成了MAC,所以只需要在底板上外擴獨立的PHY 芯片即可,本設計采用低功耗的LAN8720A,通過RMII 接口和MAC 層通信,同時連接帶網絡隔離變壓器的HR911105A RJ45 接頭和外部設備通信,電路設計如圖4 所示。

圖4 網口電路設計
CAN 收發器采用ISO1050,加裝SMBJ12CA 瞬態抑制二極管(TVS),確保CAN 總線在傳輸數據時能夠隔離浪涌、快速電脈沖群、靜電等的影響,提高可靠性。

圖5 CAN 總線保護電路設計
系統開發使用了VirtualBox 虛擬機,內嵌Ubuntu12.04,交叉編譯工具鏈采用的是gcc-4.4.4,內核版本為Linux-3.14.54,串口調試工具使用SecureCRT 8.0,文件上傳下載工具采用SSH Secure File Transfer Client。uboot、內核、文件系統、設備樹的燒寫工具采用了官方提供的MfgTool.exe 以及Tftpd32.exe。
4G 通信模塊采用PPP 撥號,需要在內核中添加USB 串口驅動,Ubuntu 下切換到內核所在目錄,點擊鼠標右鍵打開終端,執行make menuconfig 命令,依次選擇device drivers->usb support->usb serial converter support,選中如下組件:USB driver for GSM and CDMA modems,選中后保存配置。打開內核源碼文件drivers/usb/serial/option.c,在源碼中找到option_ids 數組,在數組中添加NL668 產品的VID(0x1508)和PID(0x1001),然后交叉編譯到模塊,最后在板卡上執行sudo modprobe option 加載驅動。編輯好幾個配置文件之后,便可以通過pppd 命令進行撥號:# pppd call modem_NL668 &。
定位模塊使用/dev/ttyAPP0 串口設備節點,需要追加以下命令到文件系統的etc c.dinit.dmyzr 中以便上電開機自動執行。

USB 攝像頭的驅動支持需要編譯進內核,執行make menuconfig 命令后依次選擇Multimedia support->Video capture adapters->V4L USB devices->USB Video Class (UVC),選中UVC input events device support,然后make 編譯。
GPIO 驅動的配置是通過更改設備樹實現的,可以首先查看管腳功能文件arch/arm/boot/dts/imx28-pinfunc.h,然后更改設備樹主文件arch/arm/boot/dts/imx28-evk.dts。
DS18B20 需要在內核中開啟w1 選項,編譯內核,然后燒寫內核到板卡,這樣便會在文件系統/sys/bus/w1/devices/下發現該設備。
CAN 通信使用的是FLEXCAN,對應內核代碼中的drivers/net/can/flexcan.c,CAN 將被作為網絡設備進行操作,在之后應用程序的初始化中添加如下代碼加載CAN 模塊并配置波特率和始能CAN,便可以像操作網口設備一樣操作CAN 設備了。

應用程序采用開源的IDE CodeBlocks 開發,系統設置“compiler and debugger settings”對話框中選擇GNU ARM GCC Compiler,Linker settings 中 添 加-lpthread -ljpeg,“Toolchain executables”中添加交叉編譯工具。經過編譯生成的二進制可執行程序通過共享文件夾將其拷貝到虛擬機外部的Windows 系統上,再通過SSH 工具將可執行文件上傳到板卡上,在板卡上對文件再次授權后,便可以在板卡上執行了。
終端的應用程序采用C 語言設計,多線程編程,為了增強魯棒性,添加了軟件看門狗,通過操作/dev/watchdog 設備,設置超時時間,當定時器超時,系統自動執行復位操作。
4G 模組初始化完成后,會生成一個虛擬網卡,應用程序中可直接通過socket 套接字來進行網絡編程,在終端上構建了一個TCP 客戶端,和云平臺的TCP 服務器進行報文信息交互,實現本地信息上傳和遠程指令的接收和執行。
定位模塊初始化完成后,會輸出NEMA-0183 報文,應用程序中開辟了一個線程進行定位信息的解析,解析結果將通過消息隊列傳遞給TCP 客戶端。
煙霧傳感器通過數字IO 接到i.MX287 上,當連續三次監測到TTL 電平為低時,立即點亮告警燈并驅動告警喇叭,同時將信息上報給云平臺。
攝像頭模塊通過調用opencv 庫進行抓拍駕駛員位置,生成的圖片放到指定路徑下,應用程序將自動定時將圖片通過FTP上傳到云服務器上。
我們在阿里云服務器上基于QT 開發了可擴展的車輛遠程監控平臺,可以實時查看網絡狀態、車輛位置、車內溫度、是否有可燃氣體等信息,支持遠程重啟設備,支持OTA 更新固件,平臺運行效果如圖6 所示。

圖6 車輛遠程監控平臺運行效果
本文設計的汽車監控終端功能強大,可以對突發狀況進行預警和上報,無人值守幫助節省了人力成本[6],同時多車部署的情況下可以大大提高監控效率。由于自研的底板接口豐富,后面將嘗試接入更多的傳感器,便于云端可遠程掌握更多的車況信息。目前該終端已經在我公司內部開始小批量安裝試用,運行穩定可靠,未來充滿商用價值。