汽车监控终端系统的设计与实现探析

前言:寻找写作灵感?中文期刊网用心挑选的汽车监控终端系统的设计与实现探析,希望能为您的阅读和创作带来灵感,欢迎大家阅读并分享。

汽车监控终端系统的设计与实现探析

摘要:本文阐述了基于ARM架构的i.MX287设计的一种新型汽车监控终端系统,移植并构建了嵌入式的Linux系统,在Ubuntu环境下进行底层驱动程序和应用程序设计,通过交叉编译生成目标文件,然后烧写到目标板上运行。该系统具有数字化、小型化、易于编程和调试、运行稳定等特点。本文详细介绍了该系统硬件设计、软件驱动、应用程序的基本原理及具体实现方案和最终测试结果。该终端系统通过了高低温、潮湿、震荡、电磁兼容等环境试验,运行平稳无故障出现,显示了良好的工作性能和环境适应能力。

关键词:i.MX287;汽车监控终端;Linux驱动;内核

1概述

近年来各家车企纷纷在自家量产车型上配置车载终端,期望实现对车辆的远程监控,以便及时掌握车辆的故障情况和运行状态,对于单个用户来说通过手机APP就可以查看这些信息,国家对此也出台了相应的管理规定[1],但是对于多种不同厂家不同型号的车辆管理起来就显得捉襟见肘了,另外对于一些没有配置车载终端的车型也很难统一远程调度管理。为了满足这种需求,本文设计实现了一种新型的汽车监控终端系统,可以无缝衔接各类车型。

2系统硬件设计

2.1系统整体设计。监控终端采用明远智睿公司的MYZR-IMX28-CB142核心板,CPU为NXP的i.MX287,主频454MHz,内存128MBDDR2-400存储128MBNandFlash,邮票孔结构,搭载自研的底板,扩展了各种功能模块,底板上采用中科微电子的ATGM332D-5N导航定位模块来获取GPS、北斗等卫星导航系统的卫星信号,实现联合定位、导航与授时;采用广和通公司的NL668无线通讯模块实现车联网;采用免驱的USB摄像头获取车内图像信息[2];通过OBD转接线连接车辆的CAN总线;通过GPIO外接DS18B20温度传感器感知车内实时温度[3];通过GPIO外接MQ2烟雾气敏传感器感知车内有害气体浓度[4];另外底板上预留了一路RS232调试串口、一路RS485工业总线、一路百兆以太网RJ45口。系统总体结构组成框图如图1所示。限于篇幅,下面仅对底板上电源电路、定位模块电路、网口电路、CAN总线保护电路的设计进行说明。

2.2电源电路设计。首先电源来源,对于乘用车可以直接从点烟器处取电,对于试验车可以从底盘供电线缆处取电。电路设计支持9~50V宽电压输入,通过高效率的DC/DC变压器UW2405D-20W,转成5V直流稳压为终端设备供电,再通过RT8010将5V降压到3.3V输出,电路设计如图2所示。

2.3定位模块电路设计。该部分设计采用了低纹波的LDO供电,纹波相对小;使用无源天线,模块前端增加一级低噪声放大器(LNA)AT2659保证性能[5],电路设计如图3所示。

2.4网口电路设计。由于i.MX287内部集成了MAC,所以只需要在底板上外扩独立的PHY芯片即可,本设计采用低功耗的LAN8720A,通过RMII接口和MAC层通信,同时连接带网络隔离变压器的HR911105ARJ45接头和外部设备通信,电路设计如图4所示。2.5CAN总线保护电路设计CAN收发器采用ISO1050,加装SMBJ12CA瞬态抑制二极管(TVS),确保CAN总线在传输数据时能够隔离浪涌、快速电脉冲群、静电等的影响,提高可靠性。

3系统软件设计

3.1系统环境配置和烧写。系统开发使用了VirtualBox虚拟机,内嵌Ubuntu12.04,交叉编译工具链采用的是gcc-4.4.4,内核版本为Linux-3.14.54,串口调试工具使用SecureCRT8.0,文件上传下载工具采用SSHSecureFileTransferClient。uboot、内核、文件系统、设备树的烧写工具采用了官方提供的MfgTool.exe以及Tftpd32.exe。

3.2Linux驱动程序设计。4G通信模块采用PPP拨号,需要在内核中添加USB串口驱动,Ubuntu下切换到内核所在目录,点击鼠标右键打开终端,执行makemenuconfig命令,依次选择devicedrivers->usbsupport->usbserialconvertersupport,选中如下组件:USBdriverforGSMandCDMAmodems,选中后保存配置。打开内核源码文件drivers/usb/serial/option.c,在源码中找到option_ids数组,在数组中添加NL668产品的VID(0x1508)和PID(0x1001),然后交叉编译到模块,最后在板卡上执行sudomodprobeoption加载驱动。编辑好几个配置文件之后,便可以通过pppd命令进行拨号:#pppdcallmodem_NL668&。定位模块使用/dev/ttyAPP0串口设备节点,需要追加以下命令到文件系统的\etc\rc.d\init.d\myzr中以便上电开机自动执行。USB摄像头的驱动支持需要编译进内核,执行makemenuconfig命令后依次选择Multimediasupport->Videocaptureadapters->V4LUSBdevices->USBVideoClass(UVC),选中UVCinputeventsdevicesupport,然后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设备了。

3.3Linux应用程序设计。应用程序采用开源的IDECodeBlocks开发,系统设置“compileranddebuggersettings”对话框中选择GNUARMGCCCompiler,Linkersettings中添加-lpthread-ljpeg,“Toolchainexecutables”中添加交叉编译工具。经过编译生成的二进制可执行程序通过共享文件夹将其拷贝到虚拟机外部的Windows系统上,再通过SSH工具将可执行文件上传到板卡上,在板卡上对文件再次授权后,便可以在板卡上执行了。终端的应用程序采用C语言设计,多线程编程,为了增强鲁棒性,添加了软件看门狗,通过操作/dev/watchdog设备,设置超时时间,当定时器超时,系统自动执行复位操作。4G模组初始化完成后,会生成一个虚拟网卡,应用程序中可直接通过socket套接字来进行网络编程,在终端上构建了一个TCP客户端,和云平台的TCP服务器进行报文信息交互,实现本地信息上传和远程指令的接收和执行。定位模块初始化完成后,会输出NEMA-0183报文,应用程序中开辟了一个线程进行定位信息的解析,解析结果将通过消息队列传递给TCP客户端。烟雾传感器通过数字IO接到i.MX287上,当连续三次监测到TTL电平为低时,立即点亮告警灯并驱动告警喇叭,同时将信息上报给云平台。摄像头模块通过调用opencv库进行抓拍驾驶员位置,生成的图片放到指定路径下,应用程序将自动定时将图片通过FTP上传到云服务器上。

3.4云平台监控运行效果。我们在阿里云服务器上基于QT开发了可扩展的车辆远程监控平台,可以实时查看网络状态、车辆位置、车内温度、是否有可燃气体等信息,支持远程重启设备,支持OTA更新固件,平台运行效果如图6所示。

4总结与展望

本文设计的汽车监控终端功能强大,可以对突发状况进行预警和上报,无人值守帮助节省了人力成本[6],同时多车部署的情况下可以大大提高监控效率。由于自研的底板接口丰富,后面将尝试接入更多的传感器,便于云端可远程掌握更多的车况信息。目前该终端已经在我公司内部开始小批量安装试用,运行稳定可靠,未来充满商用价值。

作者:付建宽 张庆余 张苏林 单位:中汽数据(天津)有限公司