基于CAN总线的行车记录仪设计
,并得到INITAK(CANCTL1)的回应后,MSCAN进入初始化模式。在此模式下,通常是对CAN一 BTR0、CANBTR1、CANIDAR、CANIDMR等寄存器进行配置。CANBTR0决定波特率预分频和同步跳转宽度的数值,CAN—BTR1决定周期的宽度、采样点的位置以及在每个采样点进行采样的次数,根据具体CAN总线通信速率设置适当的值。CANIDAR、CANIDMR共同决定哪些ID 帧需要接收,在本系统中,CAN总线记录仪的目的是接收CAN线数据全部报文,因而设置CANIDMR为0xFFh,即所有位都不屏蔽,所有的帧都接收。将需要配置的寄存器设置好后,需退出初始化模式,参与CAN总线通信。
(2)CH375的初始化
主要是设置USB的工作模式,通过CH375提供的SETUSB MODE命令,设置其工作模式代码为06H,即USB主机方式下,自动检测USB设备是否连接,当USB设备连接或者断开时都会产生中断通知外部单片机,并自动定时产生USB帧周期开始包SOF发送给已经连接的USB设备。通常情况下,设置USB工作模式在20微秒时间内完成,完成后输出操作状态。通过读 PA端口得到操作状态,查看是否设置成功。如不成功,表明CH375出错,例如芯片型号错或者处于串口方式或者不支持,则无法进行u盘的读写。
3.3 中断处理模块
中断模块即接受中断,由于本系统设置所有的帧都被接收,因而必须在中断处理函数里对接收到的帧进行判断,并进行"解码"。现就实例来详细说明"解码"的过程,如表1所示,列举了A5车内2个重要的CAN消息,其ID均是采用标准格式 (11位),数据单元占64位(8字节)。中断接收到数据帧后,首先取其ID号,对于标准帧格式来说,IDRO存放的是IDIO~ID3,IDR1的高3 位存放的是ID2~ID0,因此ID号=(IDR0《《3)l(IDRI》》5),其中ID号设置为int型变量。得到ID号后,将根据消息列表进行消息解码,例如,假设取得的ID号是0xFA,这是来自发动机控制单元EMS(enginemanagement system)的消息帧,我们将从它的64位数据单元中取出所关心的数据,其中64位数据在结果寄存器DSR0-DSR7中的存放顺序如表2所示。假设我们从此帧中取出如下3个数据:Engine speedRPM,M eanEfectiveTorque,DriveRequest。
表 3列出了它们在64位数据单元中的起始位和所占位数。在此对数据位数为16的Engine speed RPM 稍作解释,由于选用的单片机采用的是Motorola大端模式,因此其最低位是DSR1中的第8位,而不是DSR0中的第0位,而我们的上层PC机数据分析软件是Intel格式的,于是需要对多字节数据进行大小端转换。下面给出函数语句示例:
Engine speed RPM DSR1;
Engine speed RPM =(Engine speed RPM《《8)IDSR0;
M eanEfectiveTorque=DSR2;
DriverRequest=DSR3;
对多字节数据需进行大小端转换,而单字节数据则是直接拷贝。将采集的数据存储在缓存里,然后结束本次中断。
3.4 其它模块
液晶模块,对于需要固定显示的部分,利用"预制画面"以减少工作中通讯传输的负担和重复性工作。读写u盘模块,u盘中的数据都是以文件格式存储的,单片机读写u盘则主要是根据FAT文件系统进行文件和目录的各种操作,CH375提供了u盘文件级子程序库,此库支持FAT16和FAT32文件系统,用户只需调用此库的各种API函数就可实现数据块的读写。A/D转换模块,对控制寄存器5(ATDCTL5)的配置要慎重,因为对此寄存器的写操作将中断当前模数转换序列并且开始一个新的转换序列,建议将此寄存器放在前4个控制寄存器之后配置。
4 结束语
本系统所开发的行车记录仪已成功的运用于A5车的3万公里、5万公里等各种路试,准确记录了行车过程中的重要数据,对于研究人员进行性能分析、故障分析、以及标定工作提供了重要的数据依据。在已具备CAN 总线的车辆上使用基于CAN的行车记录仪,可大幅度降低系统复杂度,并降低成本。对于不同的车型,只需软件的少许修改而不需要更改硬件,使得记录仪具有极高的灵活性和可移植性,从而广泛应用于各种车型。
- 行车记录仪主控芯片公司及其方案和厂家介绍(07-03)
- 衡量行车记录仪产品质量的三大标准(02-25)
- 如何挑选行车记录仪有门道(02-25)
- FRAM在汽车电子中的应用方案TOP4(02-25)
- 好心不做坏事,教你如何选购行车记录仪及安装?(02-21)
- 解密双镜头行车记录仪(02-24)