随着汽车拥有量的增加,发生交通事故的概率也随之增加,发生事故后用传统的方法进行分析、判断、维修有一定的困难。这样,就给人们提出了一个问题,怎样及时、准备地分析故障的存在,客观地分析事故的责任。由此联系到飞机上装的“黑匣子”,一旦飞机失事,“黑匣子”里的资料是判断失事原因的重要依据。因为它的造价高、技术复杂,在普通汽车上使用有一定的难。本文介绍一种价格低,功能较齐全且能扩展的汽车行驶记录仪。 本记录仪采用带ARM7内核的LPC2104型CPU作为主控机,大容量闪速存储器作为存储载体,带有精确的时钟电路,利用高精度A/D转换器采集汽车传感器转换的模拟量,并直接记录汽车信号灯等的各种开关量。同时利用串口实现与微机的数据通信,把汽车行驶记录低度的信息以二进制文件的形式存储到硬盘上。 系统的总体框架如图1所示。带ARM7内核的LPC2104型CPU是汽车行驶记录仪的核心,整个系统由信息采集模块、信息处理及存储模块和串口通信模块组成。 LPC2104是Philips公司生产的一款支持实时仿真和跟踪的ARM7TDMI-S CPU,内部集成有与片内存储器控制器接口的ARM7局部总线、与中断控制器接口的AMBA高性能总线(AHB)和连接片内外设功能的VLSI外设总线(VPB,ARM,AMBA总线的兼容超大规模集成电路),并嵌入了128KB高速Flash存储器。LPC2104将ARM7TDMI-S配置为小端(Iittle-endian)字节顺序,具有封装小、功耗低、多个32位定时器、多种总线接口及多达9个外部中断等优点,非常适合作为汽车行驶记录仪的主控CPU。同时,LPC2104还具有128位宽度的存储器接口和独特的加速结构,从而使得32位代码能够在最大时钟频率下运行。 2 信息采集模块设计 汽车行驶记录仪要求实时记录车辆行驶的各种状态信息,因此本系统将信息采集模块分为开关量数据采集模块、模拟量数据采集模块、时钟数据采集模块。 2.1 开关量数据采集模块 该模块利用74LS165型并行输入8位移位寄存器扩展16位并行输入口,其硬件电路如图2所示。其中利用LPC2104的3根I/O口线扩展为16位的输入口线,图中由2片74LS165串接扩展16位的输入线,CLK为时钟脉冲输入端,D0-D7为并行输入端,前级的数据输出端QH与后级的信号输入端SIN相连,S/L为低电平时,允许并行置入数据,S/L为高电平时允许串行移位。这样左右方向灯、前车灯、开门信号、刹车灯信号等16路开关量经过光电耦合器隔离后并行输入到2片74LS165中,再经74LS165转换后,串行输出给LPC2104进行处理。 2.2 模拟量数据采集模块 在进行模拟数据采集时,水温、水位等8路传感器采集的信号先经过模拟信号调理环节,将其整定在A/D转换器参考电压Vref决定的满量程输入电压信号以内,然后经过A/D转换器进行A/D转换。该模块采用美国德州仪器公司推出的TLC0838型8路8位逐次逼近型模、数转换器,采样频率为100kHz,与外部通信采用SPI总线接口。LPC2104通过其内嵌的SPI总线接口与TLC0838进行通信,其硬件电路如图3所示。其中SCK为SPI主机输入或从机输入的时钟,MOSI为SPI主机到从机的数据传输,MISO为SPI从机到主机的数据传输,SSEL为SPI从机选择。 汽车速度的测量是通过计数速度传感器产生的脉冲信号实现的。本系统利用AT89C2051型单片机来计数速度脉冲信号。该单片机可设定一个守量器来计数速度脉冲信号,并将其转换成汽车的实际量程。同时根据行程和时间可计算汽车的速度,并通过串口UART0将数据传送给LPC2104。 2.3 时钟数据采集模块 为了记录行车的时间,使行驶记录仪能够实时记录汽车状态,采用专门的时钟模块提供时间信号,本系统选用DS12887时钟电路。DS12887是跨越2000年的时钟电路,采用4位数表示年度的日历系统。电路的晶体振荡器、振荡电路、充电电路和可充电锂电池等一起封装在芯片的止方,组成一个加厚的集成电路模块。DS12887能够自动存取并更新当前的时间,LPC2104可通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进 进码或BCD码初始化电路的10个时标寄存器。 3 信息处理及存储模块设计 由于Flash的存储结构适宜是固态存储,EPROM的存储结构适宜于动态存储,因此,本系统根据实际需要,有用Flash固态存储和EPROM动态存储相结合的方式进行数据存储和记忆,即用Flash固态存储采集的汽车状态数据,用EPROM动态存储Flash最新存储的扇区号和存储地址。闪速存储器选用美信公司生产的MX29F800BTC型,EPROM选用Microchip公司的24C32型,同时利用LPC2104内嵌的I2C总线接口与24C32进行通信。 本系统工作时,首先由LPC2104主控CPU从24C32中读取Flash最近存储的扇区号和存储地址,然后以此地址为参照,以这个地址的一个地址值为Flash的起点地址,以这个地址的下一个地址值为Flash的起点地址,按顺序进行存储。Flash需要存储的数据有16路开关量信息、8路模拟量信息有及时钟信息。本系统利用二字节(共16位)存储16路开关量信息,利用8个字节的存储空间存储8路模拟量信息。为了节省存储空间,系统并非每次存储采集数据时都存储时间标志。由于数据采集以固定的秒间隔来进行,因此,系统只是在刚开始运行时和每个扇区的起始位置采集并存储时钟信号作为时间标记,而后面数据的采集时间则以这些时间标记为参照。 系统存储的软件流程如图4所示。在本系统重装上电运行时,需要记录开始采集的时间信息。由于系统电源是由汽车电源提供的,所以开始采集的时间也就是汽车启动的时间,以此作为汽车开始行驶的时间标记。在程序运行中,由主程序设定一个汽车启动标志,在第一次写数据之前汽车启动标志有效,然后首先判断当前存储地址是否有某个扇区的首地址,如果是,则根据写扇区的要求在第七个字节开始处存储当前的时钟信号,否则,在当前存储地址处开始用10个字节存储当前的时钟信号,记录汽车开始运行的起始时间,然后清除汽车启动标志。扇区开始地址处记录的时间信息是否是汽车开始运行的起始时间,可根据前一个扇区记录的时间信息进行判断。若前后两个扇区记录的数据是连续的,则后一个扇区头记录的时间信息不是表示汽车开始运行的起始时间,否则情况相反。 4 串口通信模块设计 计算机可以通过串口随时读取行驶记录仪存储的数据。行驶记录仪与计算机之间的串口通信遵循RS232协议。串行通信时,LPC2104依次将Flash中存储的数据读出并经UART0串口发出,然后经过MAX232电平转换器送给计算机,再由计算机通过串口接收该数据。 5 结束语 汽车行驶记录仪利用微机通过串口接收汽车行驶的数据,并对数据进行分析处理;利用Visual C++ 6.0作为开发工具,编写微机数据分析处理程序,模拟显示汽车运行时的状态;利用图形显示各分量的波形,如前向灯开关情况、左右方向灯开关情况、开门信息、刹车信号、水温变化情况(范围为0℃~100℃)等。将该行驶记录仪安装在汽车上进行测试,结果也较理想,能够满足设计要求。其测试结果如图5所示。