席雷鹏,姚凯学,何 勇,杨黎娜
(贵州大学 计算机科学与技术学院,贵州 贵阳 550025)
汽车是人类生活中重要的交通工具,国内的汽车保有量逐年增加,道路基础设施的建设与汽车的增长量失调,这使得国内的道路交通拥挤和交通事故频发的状况日益凸显。同时,目前国内的车险缴纳以年为单位,忽视了汽车的使用情况,风险与费率的失衡积弊已久,对大量汽车的有效管理也变得越来越重要。
随着物联网技术的成熟,物联网在各行各业得到了应用。智能网联汽车是互联网、汽车以及交通的融合,通过在车上搭载先进的传感器,使用现代网络技术、后台系统,从而实现车与人,以及其他物理实体之间的信息交互。通过车内摄像头来获取车辆的行驶状态信息,传输到后台服务器中,结合图像识别技术来分析驾驶员的驾驶情况,从而对车辆的使用情况有一个很好的把控。但是采集和处理视频图像需要很多的硬件资源,对通信速率有一定的要求,同时驾驶员的隐私也有泄露的风险。对此,文中提出了一款基于STM32的车辆行驶状态信息采集系统,能够实时采集车辆行驶中的三轴加速度、三轴角速度等车辆状态信息和车辆定位信息,为后续研究驾驶员的驾驶行为,实现对车辆的有效管理打下基础。
车辆行驶状态信息采集系统通过外接三轴加速度陀螺仪传感器实现汽车行驶中的三轴加速度和三轴角速度的采集,利用STM32的DMA自动传输机制实现定位信息的采集,通过4G移动通信网络把采集到的数据传输到后台数据处理中心。系统主要由七个模块构成,分别是数据处理模块、加速度和角速度采集模块、定位信息采集模块、通信模块、数据存储模块、电源模块和上位机。其中,数据处理模块是整个系统的控制中心,电源模块从车载点烟口取电,为系统的运行提供稳定可靠的电源,数据采集模块负责各类信息的采集,数据存储模块在数据未能成功发送到上位机时对数据进行存储,通信模块用于下位机与上位机之间的交互,上位机模块用于数据的存储和可视化。系统的总体设计框图如图1所示。
图1 系统总体框图
系统在工作时,微控制单元(MCU)控制数据采集模块采集三轴加速度、三轴角速度和定位数据,同时将采集到的数据按照通信协议的格式进行数据帧的封装,通过无线通信将封装好的数据发送给上位机。车辆在行驶中会出现无线通信信号弱的情况,设计数据存储模块,以便在无线通信信号弱的情况下进行数据的暂时存储。由于通信模块需要12V的供电电压,从车载点烟口获得12 V电压进行稳压处理后向系统供电,同时采用降压模块将12 V电压转换为5 V和3.3 V,为系统的其他部分供电。
车辆行驶状态信息采集系统主要分为数据处理模块、加速度和角速度采集模块、定位信息采集模块、通信模块和数据存储模块,电源模块为系统的各个模块供电。
数据处理模块使用STM32F103ZET6作为微控制单元,是整个系统的控制中心,实现数据采集、数据上传和暂时存储等控制功能。使用STM32F03ZET6的DMA(direct memory access)通过USART2循环采集定位数据,使用IIC1外设采集三轴加速度陀螺仪数据,将采集到的数据按照通信协议格式进行数据帧封装,通过USART1发送给通信模块。数据因无线通信信号弱而未能成功发送时,STM32F103ZET6通过SDIO将数据发送给数据存储模块进行暂时存储。同时,STM32F103ZET6的PA0引脚设计了一个可以使系统停止工作的按键KEY1,PA0引脚外接了下拉电阻,按键的一端连接PA0引脚,另外一端连接3.3 V高电平,当按键被按下时,PA0引脚由低电平转变为高电平,通过设置该引脚的硬件中断检测按键被按下。
系统使用MPU6050作为采集加速度、角速度的传感器,它能够检测三轴加速度、三轴角速度运动数据以及该芯片内部温度数据,可以使用IIC与其他芯片进行通信,IIC通信的时钟频率最高为400 kHz,测量加速度的最高分辨率为16 384 LSB/g,角速度最高分辨率为131 LSB/( o/s)。加速度和角速度采集模块原理图如图2所示。
图2 加速度角速度采集模块原理图
MPU6050芯片采用了扁平的QFN-24封装,需要使用3.3 V电压供电。STM32使用PB6、PB7引脚与MPU6050进行IIC通信,所以MPU6050的SCL、SDA引脚外接4.7K的上拉电阻。MPU6050的AD0引脚用于设定IIC通信地址,当AD0引脚接地时,MPU6050的IIC通信地址为0x68,接VCC时,可设置MPU6050的IIC通信地址为0x69。当系统刚刚上电时,需要向MPU6050的0x6B地址的寄存器写入0x00解除休眠状态,由于目前汽车的最大加速度为6.9 m/s,设置MPU6050的加速度量程范围为±2g
,则测量到的x
轴加速度计算公式为:其中,a
表示x
轴的加速度,acel是从MPU6050中读出的原始ADC值,16 384是在加速度量程范围设置为±2g
时的加速度计分辨率,g
表示重力加速度。设置MPU6050的角速度量程范围为±250/s,则测量得到的x
轴角速度的计算公式为:其中,gyro是从MPU6050中读出的原始ADC值,131.072是在角速度的量程设为±250/s时的陀螺仪分辨率。
系统使用ATGM332D-5N模块进行定位信息的采集,ATGM332D-5N支持北斗和GPS双模定位,可使用3.3 V~5 V电压供电,导航信息更新率可达10 Hz,定位精度为2.5 m,采用串口与STM32核心控制器通信。
在该设计中,使用STM32的串口2与ATGM332D-5N进行通信,由于ATGM332D-5N定位模块的定位速度以及串口通信速度相对于STM32的运算速度会慢很多,如果STM32直接通过串口读取定位数据,就不能够完成系统的其他任务,故通过STM32的DMA1循环采集定位数据,在STM32的内存中开辟512字节大小的缓冲区存储定位数据,设置DMA传输一半和全部传输完成中断,在中断发生时取走相应的一半数据并且清空中断,这样STM32就能处理系统的其他任务,同时为了避免DMA传输发生数据覆盖问题,在上一次定位数据还没有处理完成时,直接清空DMA传输完成中断。ATGM332D-5N采集到的是NMEA-0183 4.0协议格式的数据,系统使用NEMA解码库来进行原始定位数据的解码,得到经纬度、速度、GPS时间、定位精度等定位信息。
通信模块采用4G无线通信的方式来保证下位机与上位机之间的通信,同时也预留TTL串口通信的方式。4G通信模块采用了WH-LTE-7S4 V2,可以通过串口AT指令建立与上位机的TCP远程连接,同时还可以通过AT指令进行网络透传、HTTPD、UDC三种工作模式的配置。WH-LTE-7S4 V2有电源、复位重启、工作状态指示、UART、SIM和射频接口,该设计中使用到的模块引脚功能介绍如表1所示。
表1 WH-LTE-7S4 V2引脚功能描述
在该系统中使用12 V电压为WH-LTE-7S4 V2模块供电,在供电引脚接口前端增加220 uF的电解电容,以增加模块工作的稳定性。使用STM32的PC0连接该模块的WORK,用于检测模块是否工作正常;STM32的PC1连接模块的RESET引脚,用于模块的复位重启;STM32的PC2连接模块的RELOAD,用于模块恢复出厂设置;模块的UTXD1和URXD1连接STM32的串口1,用于AT指令进行TCP远程连接。同时在天线接口和SIM接口增加ESD保护,避免外部接口电压过大而造成模块损坏,4G通信模块的硬件电路结构框图如图3所示。
图3 4G通信模块硬件电路结构框图
在移动通信信号弱时会导致数据不能够发送到上位机,为了避免数据丢失,设计数据存储模块用于数据的暂时存储,当STM32空闲且无线通信信号良好时再进行数据的发送。系统采用SD卡来实现数据的暂时存储,STM32与SD卡之间采用SDIO(secure digital input and output)的方式进行通信,其最高支持32 GB容量的SD存储卡。SD卡有9个通信接口,其中有3个电源接口、1个时钟线接口、4个数据线接口和1个命令线接口,SD卡中有8个寄存器表示SD卡中的信息,这些寄存器的功能表示如表2所示。
表2 SD卡寄存器功能表示
在该系统设计中,使用3.3 V电压为数据存储模块供电,在每个数据线和命令线接口添加10K的上拉电阻,增加模块工作的稳定性。数据存储模块的DAT0、DAT1、DAT2、DAT3引脚分别与核心处理器的PC8、PC9、PC10、PC11相连接,用于进行数据的读写,在SD卡处于忙状态时,会把D0引脚拉低表示正在被使用。数据存储模块的CLK引脚与核心处理器的PC12引脚相连接,由核心处理器产生时序信号,来保证通信的正常进行。数据存储模块的CMD引脚与核心处理器的PD2引脚相连接,核心处理器通过该引脚向数据存储模块发送命令,同时也可以接收来自数据存储模块的应答信号。
电源模块为系统的工作提供稳定可靠的电能。系统在车载点烟口取得12 V电压的电能,经过稳压处理后向通信模块供电,同时使用AMS1117-5.0作为降压稳压器,将12 V电能转换为5 V,为数据处理模块供电,使用AMS1117-3.3将5 V电压降为3.3 V,为数据采集和数据存储部分的模块供电,在各级电压处增加电容确保供电的稳定性。使用CR1220作为STM32F103ZET6的VBAT引脚的备用电源,当系统主电源有效时,RTC时钟外设由主电源供电,在主电源掉电后,由VBAT引脚向RTC外设供电,确保时钟数据不会丢失。
系统软件使用C语言编写,移植FatFS文件管理系统至下位机,从而实现对SD卡中数据的有组织管理。系统软件设计的工作流程是在系统上电后进行硬件初始化,之后进行数据的采集、发送和存储。
FatFS文件管理系统是基于小型嵌入式设备开发的,具有轻量化的特点,其具体实现与底层的I/O(input/output)介质的读写实现相分离,通过为其编写I/O读写的驱动程序,实现外部存储介质存储空间的有效管理。在该系统中,使用SD卡进行数据因4G通信模块问题而导致的发送失败时的暂时存储,依据SDIO通信的方式分别编写获取SD存储器状态、初始化存储器、写入和读取扇区的芯片驱动函数。系统上电后,检测SD卡是否有文件管理系统,若没有则进行格式化操作和文件管理系统的创建,在格式化操作和文件管理系统创建成功后进行一次读写测试验证SD存储模块正常。系统把车辆行驶状态数据存储在一个“1.txt”的文本文件中,初次使用没有该文件则进行文件的创建。当需要向存储模块中写入数据时,在文件末尾进行数据追加并进行换行操作,确保一行存储一条数据,在数据取出时先取出前面部分的数据,在确保从SD卡中取出的数据被正常发送出去后,从SD卡中的该文件中删除该条数据。
STM32核心处理器使用串口2与定位信息采集模块进行通信,在进行STM32的串口2初始化时,其波特率的配置要与定位信息采集模块的串口通信波特率保持一致以确保通信的正常进行。定位信息采集模块在接收到一次卫星定位信息后,会主动将定位数据发送到STM32的串口2。为了避免STM32等待定位数据而产生时间浪费,系统使用了STM32的DMA自动传输机制来配合定位信息的采集,串口2在接收到数据后会触发DMA1的通道6,从而在不需要核心处理器参与的情况下完成数据的接收,在数据接收完成后通过中断的方式提醒STM32核心处理器,STM32在响应了定位数据采集中断后设置标志位,在主程序中对定位数据进行打包处理。
系统在上电后,STM32首先初始化GPIO口、串口、DMA、硬件IIC1、SDIO、RTC实时时钟中断等。在STM32自身硬件外设初始化完成后,系统通过串口1对定位信息采集模块进行初始化操作。通过STM32的IIC1外设对MPU6050传感器进行初始化操作,对MPU6050的初始化操作包括解除休眠状态、设置陀螺仪采样率和设置加速度计采样率。通过串口1对4G通信模块进行初始化操作,采用AT指令设置上位机的IP地址,建立与上位机的远程连接,将4G通信模块设置为网络透传模式。系统在数据采集模块初始化完成后再次检测数据能否正常采集,在检测失败时进行系统报错。系统成功初始化后,每隔100 ms会产生一次中断,系统会采集数据并且通过4G通信模块向上位机发送数据,当数据未能成功发送给上位机时,系统会把数据暂时存储在存储模块之中。当KEY1按键被按下时,系统停止工作。系统数据采集流程如图4所示。
图4 系统数据采集流程
在系统空闲且存储模块中有存储的数据时,系统会从存储模块中取出一条数据通过4G通信模块向上位机发送,在该条数据发送成功后从存储模块中删除该条数据。存储模块中的数据上传流程如图5所示。
图5 存储模块数据上传流程
通信协议用于保证下位机向上位机传输数据的正确性,数据传输采用串行的方式进行传输,数据字节的发送采用大端法。
该系统采集的数据有汽车行驶中的三轴加速度数据、三轴角速度数据以及定位数据,同时,需要加入时间信息来记录数据的采集时间。其中,定位数据包含经度、纬度、海拔高度以及表示定位精度的信息。为了对不同的设备以及不同的行车记录和不同数据进行区分,避免因网络中不同数据帧到达上位机的顺序不同而造成数据的混乱,为每台设备分配设备编号,对每次行车记录和不同数据设置相应的编号标识。
从整体上看,系统的数据帧由起始标识、数据编号标识、数据长度标识、数据、CRC循环检验码和结束标识六部分组成。起始标识和结束标识用于识别每一个数据帧,设备编号和数据ID组成了数据编号标识,数据长度对传输数据的长度进行了标识,在进行数据解析时配合起始和结束标识进行数据帧识别的验证,循环冗余检验码用于验证数据的正确性,确保数据在传输的过程中没有发生错误。通信协议中的数据帧格式如表3所示。
表3 通信协议数据帧表示
STA固定为EAH,表示一帧的开始;DEVICEID是设备编号,占用两个字节,用于区分每个下位机;DATAID用于标识该条数据信息,占用四个字节,其中20~31位表示第几次行车记录,每次下位机上电启动会生成一条新的行车记录,在溢出后复位为1,0~19位是该条数据采集时的编号;LEN表示数据长度,大小为一字节;DATA为数据,其长度由LEN表示,单位为字节,其中01H表示后面的四字节数据为时间戳,02H表示后面的数据为三轴加速度和三轴角速度数据,占用24个字节,03H表示后面的数据为定位数据,占用48个字节;CRC是循环冗余检验码,由DEVICEID设备编号到DATA数据域生成,大小为两个字节;END用于表示一帧数据的结束,其值固定为E5。
该系统测试通过串口测试下位机是否能正常采集数据,系统完成硬件初始化后,将采集到的数据通过串口发送给上位机,使用串口调试助手接收数据,系统采集数据测试结果如图6所示。系统设置采集频率为每秒10次,经过测试,系统能够稳定地采集数据。
设计实现了车辆行驶状态信息采集系统,以STM32F103ZET6为核心处理器,采集车辆行驶中的三轴加速度、三轴角速度以及定位数据,通过自定义的通信协议将数据传输到上位机,同时设计数据存储模块来进行通信信号不好时的数据暂时存储,在可以正常发送数据时再进行数据的上传,确保不会发生通信信号弱而导致的数据丢失。系统通过STM32自带的RTC外设来进行计时,为采集到的每条数据进行时间标识,从而实现对车辆行驶状态信息的有效管理。电源模块的设计保证了系统断电后时钟的正常工作,同时,系统每隔一周利用定位数据中的卫星时间对STM32的RTC系统定时器进行一次时间矫正以确保系统时间的正确性。系统能够实现汽车行驶状态信息的稳定采集,操作方便,成本低,具有很好的使用价值。
图6 数据采集测试结果