基于ARM及CAN总线的汽车行驶记录仪的开发
时间:05-31
来源:互联网
点击:
引言
汽车行驶记录仪是传统汽车仪表系统的技术革新产品,涉及许多技术领域。
其核心概念及主要研究内容包括:仪表信息数字化、车内总线通讯与全车信息共享、整车统一调度以及基于全车信息的故障诊断等几个方面。相信今后汽车将会越来越多地采用各种用途的电子化仪表,功能强大的电子仪表将成为发展趋势。
汽车行驶记录仪的系统结构
如图1所示,本系统由主机和上位机管理分析软件两部分组成。其中主机部分包括:信号输入、数据保存和处理、数据显示、数据通信、复位电路和掉电保护电路等。上位机软件实现数据统计、查询、分析等功能。整个系统作为汽车CAN网络的一个节点,可以实现与其他CAN节点之间的通讯及数据传输等。
汽车行驶记录仪的硬件设计
主处理器的选择
目前汽车行驶仪表系统的微处理器一般采用8位MCS51单片机,此类单片机应用广泛,价格相对较低,发展也较成熟,是记录仪低端方案的首选。低端方案虽然能够实现系统的基本功能,却不能保证系统对实时性、大量数据的处理能力和扩展接口等各方面的要求,故考虑采用高端方案——32位RISC嵌入式处理器ARM。根据系统具体要求,选用Philips公司的LPC2292作为系统的主处理器。LPC2292基于ARM7TDMI内核、总线开放、144脚封装、2个定时器、2路CAN、2路SPI接口、包含76个GPIO口、8路10位ADC以及多达9个外部中断,是一款性价比较高的ARM芯片。
数据存储方案的确定
本系统采用FRAM作为记录仪存储器,FRAM是美国Ramtron公司的产品,被称为铁电存储器,其核心技术是铁电晶体材料。这一特殊材料使得铁电存贮产品同时拥有SRAM和非易失性存储产品的特性:擦写次数至少可达到1000亿次,超过1000亿次后还可作为SRAM使用。但是,目前市场上出现的FRAM芯片容量都不够大,所以考虑再使用一块大容量FLASH作为数据存储器,而将FRAM作为数据转存的中介。超过一定时间或者发生掉电时,则立即将FRAM中的数据转存入FLASH中,这样就能满足存储器大容量且能够多次擦写的要求,而且避免了因掉电发生的数据丢失现象。本系统采用两块256kbit FRAM (FM24C256)和一块512kbit FLASH(W29C040)。
信号采集方案的确定
本系统的输入信号较多,大致可分成三类:模拟信号、数字信号以及开关量信号。不同种类的信号采用不同的采集方式。
模拟信号采集方案
模拟信号包括:水温、油量和油压,共3路输入信号。一般对模拟信号的采集和处理是采用A/D转换器进行的,由于处理器LPC2292内置了4路10位精度的A/D转换器,故无需扩展外围电路即可满足模拟信号的采集需求。
数字信号采集处理方案
数字信号包括车速和发动机转速信号,这两路信号通过各自相应的传感器转换成车速脉冲和发动机转速脉冲输出,由此可以利用LPC2292定时器的脉冲捕捉功能进行采集。通过记录脉冲的输出间隔,从而可以计算出里程、车速等实时数据,用以保存和报警输出,无需外扩电路。
开关量信号采集方案
开关量信号包括:前门、后门、大灯、左灯、右灯、倒车灯、远光灯、近光灯、点火、刹车、鸣号、雨刷以及中控锁,共13路信号。每路信号的状态发生变化时,均需要能被及时检测到。LPC2292内部没有采集开关量信号的部件,故需要外扩电路,本系统选用开关检测芯片MC33993来实现此功能。MC33993除了具有22个开关输入引脚之外,还有一个中断引脚。当任一开关量输入信号状态发生变化时,可以通过中断的方式通知主处理器,从而减轻了处理器频繁查询的负担。芯片的接口方式为4脚SPI,能够大大减少处理器需要提供的引脚数量。
数据显示方案的确定
LCD(Liquid Crystal Display)为液晶显示器,它使用两片薄膜,利用通电与未通电时中间的液态晶体改变排列方向来造成透光与不透光效果,从而产生图形。LCD液晶器具有图像不失真、无闪烁、无辐射等优点,所以LCD是本系统显示面板的首选,所选型号为信利公司的MSC-G12864。
实时时钟方案的确定
主处理器LPC2292具有内置实时时钟,但是当处理器断电后该实时时钟所有寄存器的内容将全部丢失,因此系统需要使用外部实时时钟。 Philips公司的PCF8563是符合这一要求的实时时钟芯片,它具备掉电检测器。当供电电压低于某个值时,秒寄存器中的某标志位将置1,指明此后实时时钟可能会产生不准确的时钟/日历信息,从而避免了记录仪对错误时间的记录。
打印输出电路
微型打印机M-1926有串口和并口两种接口,系统采用其串口功能,与LPC2292的DART1接口连接,实现对微机的控制输出。
汽车行驶记录仪的软件设计
本系统软件部分的设计都是在ADS开发环境下进行的,并通过JTAG仿真器进行软件调试。ADS(ARM Developer Suite)集成开发环境是ARM公司推出的ARM核处理器集成开发工具。JTAG(Joint Test Action Group)是一种通过ARM芯片的JTAG边界扫描口进行调试的仿真设备,它比在线实时仿真器要廉价简单,是现在较为流行的一种仿真器。本系统采用的EasyJTAG是广州周立功单片机发展有限公司开发的LPC2000系列ARM7微控制器的JTAG仿真器。
本系统软件部分的程序流程图如图2所示。软件部分主要包括以下几个模块:
A/D采样模块
LPC2292内置有8个模数转换器ADC,其控制器只有2个,即ADCR、ADDR。本系统使用3个ADC分别采集、转换3路模拟信号。首先将ADC设置为向量IRQ中断,为其中断通道分配一个优先级,并设置中断服务程序地址向量,此后将ADCR的START位置1来启动ADC转换。每当ADC完成一次转换,ADDR寄存器(A/D Data Register)的DONE位置1,从而引起中断,转入中断处理程序,在该处理程序中从ADDR寄存器的6-15位读取转换结果,再将二进制数转换成十进制数予以保存并显示。
FLASH数据存储模块
为了调用方便,系统软件部分对FLASH操作做了函数封装,主要有如下两个函数接口:
1、页写操作:将一字节数据写入FLASH的某个特定地址。当命令下发完之后延时一段微秒级的时间,然后把被写数据所在页整页读出,将被写数据所在地址的数据值替换为被写数据,其余地址的数据值不变,然后整页写入FLASH,完成页写操作。
2、整片擦除操作:对FLASH存储阵列中的内容进行整片擦除。通过给FLASH下发特定地址的特定六个字 节的命令字来完成FLASH整片擦除操作,数据下发完毕后需要等 待50mS,或等待内部toggle/plling操作完成。
RS232串口通信模块
本系统利用两个UART,一个用于提供主机与上位机软件的通信接口,另一个用于提供微型打印机与主机的连接接口。主机和上位机软件的RS232串口通信协议如下:通信波特率为15200, 8位数据位,1位停止位,无奇偶校验。
软件为RS232串口通信提供的函数接口有:
1、串口发送一个字节数据:将要发送的数据装载到串口发送寄存器中,等待串口状态字变1,则表示数据发送完毕。
2、串口初始化:根据串口通信协议对波特率、奇偶校验、数据位和停止位进行设置。
LCD液晶显示模块
主要包括的函数模块如下:
1、LCD“忙”检查:对LCD操作很重要的部分就是进行时序模拟,而时序模拟最重要的是LCD“忙”检查。程序代码如下:
uint32 rb;I02DIR=LCD_DO_D7; //P2口连接的D0到D7口设为输入方式,然后读取状态命令
IO1CLR=LCD_RS;
IO1SET=LCD_RW;
if(rb!=0)
{IO1SET=LCD_E;
rb=(I02PIN0x80000000);
IO1CLR=LCD_E;
}; //忙等待
IO2DIR=LCD_DO_D7;//将LCD数据位重新设为输出方式
2、向LCD下发命令:若LCD“不忙”,在LCD的管脚E的下降沿锁存命令字节完成命令的发送。
3、LCD初始化:对LCD内部“忙”操作状态进行检查,设置显示的起始行,然后开显示。
4、LCD液晶写一组汉字:函数写汉字的时候实际上是将汉字字模写入LCD。
5 、LCD液晶画图:LCD画图和写字其实很类似,将相应的字模写入规定的LCD屏幕的位置即可。LCD液晶画图用于报警信号的显示。
CAN-BUS通信模块
CAN通信与一般的串口通信类似,在数据通信前要对CAN总线进行初始化操作,包括CAN控制器的选择、数据寄存器的设置以及通信波特率的设置等。初始化完成后,则需要设置双方的通信协议,建立彼此的连接。只有在同一协议下工作的双方才能正确进行数据的交换。软件提供的CAN-BUS通信函数接口包括初始化CAN、CAN总线发送数据以及CAN总线接收数据等。
结束语
该汽车行驶记录仪结合了计算机技术、嵌入式技术以及现场总线技术等多项先进技术,具有高实时性、抗干扰能力强、可靠性高、数据精度高以及系统扩展方便等特点,可以在车辆实时警告与稽核、公安交警部门的事故处理等方面发挥一定的作用。(end)
汽车行驶记录仪是传统汽车仪表系统的技术革新产品,涉及许多技术领域。
其核心概念及主要研究内容包括:仪表信息数字化、车内总线通讯与全车信息共享、整车统一调度以及基于全车信息的故障诊断等几个方面。相信今后汽车将会越来越多地采用各种用途的电子化仪表,功能强大的电子仪表将成为发展趋势。
汽车行驶记录仪的系统结构
如图1所示,本系统由主机和上位机管理分析软件两部分组成。其中主机部分包括:信号输入、数据保存和处理、数据显示、数据通信、复位电路和掉电保护电路等。上位机软件实现数据统计、查询、分析等功能。整个系统作为汽车CAN网络的一个节点,可以实现与其他CAN节点之间的通讯及数据传输等。
汽车行驶记录仪的硬件设计
主处理器的选择
目前汽车行驶仪表系统的微处理器一般采用8位MCS51单片机,此类单片机应用广泛,价格相对较低,发展也较成熟,是记录仪低端方案的首选。低端方案虽然能够实现系统的基本功能,却不能保证系统对实时性、大量数据的处理能力和扩展接口等各方面的要求,故考虑采用高端方案——32位RISC嵌入式处理器ARM。根据系统具体要求,选用Philips公司的LPC2292作为系统的主处理器。LPC2292基于ARM7TDMI内核、总线开放、144脚封装、2个定时器、2路CAN、2路SPI接口、包含76个GPIO口、8路10位ADC以及多达9个外部中断,是一款性价比较高的ARM芯片。
数据存储方案的确定
本系统采用FRAM作为记录仪存储器,FRAM是美国Ramtron公司的产品,被称为铁电存储器,其核心技术是铁电晶体材料。这一特殊材料使得铁电存贮产品同时拥有SRAM和非易失性存储产品的特性:擦写次数至少可达到1000亿次,超过1000亿次后还可作为SRAM使用。但是,目前市场上出现的FRAM芯片容量都不够大,所以考虑再使用一块大容量FLASH作为数据存储器,而将FRAM作为数据转存的中介。超过一定时间或者发生掉电时,则立即将FRAM中的数据转存入FLASH中,这样就能满足存储器大容量且能够多次擦写的要求,而且避免了因掉电发生的数据丢失现象。本系统采用两块256kbit FRAM (FM24C256)和一块512kbit FLASH(W29C040)。
信号采集方案的确定
本系统的输入信号较多,大致可分成三类:模拟信号、数字信号以及开关量信号。不同种类的信号采用不同的采集方式。
模拟信号采集方案
模拟信号包括:水温、油量和油压,共3路输入信号。一般对模拟信号的采集和处理是采用A/D转换器进行的,由于处理器LPC2292内置了4路10位精度的A/D转换器,故无需扩展外围电路即可满足模拟信号的采集需求。
数字信号采集处理方案
数字信号包括车速和发动机转速信号,这两路信号通过各自相应的传感器转换成车速脉冲和发动机转速脉冲输出,由此可以利用LPC2292定时器的脉冲捕捉功能进行采集。通过记录脉冲的输出间隔,从而可以计算出里程、车速等实时数据,用以保存和报警输出,无需外扩电路。
开关量信号采集方案
开关量信号包括:前门、后门、大灯、左灯、右灯、倒车灯、远光灯、近光灯、点火、刹车、鸣号、雨刷以及中控锁,共13路信号。每路信号的状态发生变化时,均需要能被及时检测到。LPC2292内部没有采集开关量信号的部件,故需要外扩电路,本系统选用开关检测芯片MC33993来实现此功能。MC33993除了具有22个开关输入引脚之外,还有一个中断引脚。当任一开关量输入信号状态发生变化时,可以通过中断的方式通知主处理器,从而减轻了处理器频繁查询的负担。芯片的接口方式为4脚SPI,能够大大减少处理器需要提供的引脚数量。
数据显示方案的确定
LCD(Liquid Crystal Display)为液晶显示器,它使用两片薄膜,利用通电与未通电时中间的液态晶体改变排列方向来造成透光与不透光效果,从而产生图形。LCD液晶器具有图像不失真、无闪烁、无辐射等优点,所以LCD是本系统显示面板的首选,所选型号为信利公司的MSC-G12864。
实时时钟方案的确定
主处理器LPC2292具有内置实时时钟,但是当处理器断电后该实时时钟所有寄存器的内容将全部丢失,因此系统需要使用外部实时时钟。 Philips公司的PCF8563是符合这一要求的实时时钟芯片,它具备掉电检测器。当供电电压低于某个值时,秒寄存器中的某标志位将置1,指明此后实时时钟可能会产生不准确的时钟/日历信息,从而避免了记录仪对错误时间的记录。
打印输出电路
微型打印机M-1926有串口和并口两种接口,系统采用其串口功能,与LPC2292的DART1接口连接,实现对微机的控制输出。
汽车行驶记录仪的软件设计
本系统软件部分的设计都是在ADS开发环境下进行的,并通过JTAG仿真器进行软件调试。ADS(ARM Developer Suite)集成开发环境是ARM公司推出的ARM核处理器集成开发工具。JTAG(Joint Test Action Group)是一种通过ARM芯片的JTAG边界扫描口进行调试的仿真设备,它比在线实时仿真器要廉价简单,是现在较为流行的一种仿真器。本系统采用的EasyJTAG是广州周立功单片机发展有限公司开发的LPC2000系列ARM7微控制器的JTAG仿真器。
本系统软件部分的程序流程图如图2所示。软件部分主要包括以下几个模块:
A/D采样模块
LPC2292内置有8个模数转换器ADC,其控制器只有2个,即ADCR、ADDR。本系统使用3个ADC分别采集、转换3路模拟信号。首先将ADC设置为向量IRQ中断,为其中断通道分配一个优先级,并设置中断服务程序地址向量,此后将ADCR的START位置1来启动ADC转换。每当ADC完成一次转换,ADDR寄存器(A/D Data Register)的DONE位置1,从而引起中断,转入中断处理程序,在该处理程序中从ADDR寄存器的6-15位读取转换结果,再将二进制数转换成十进制数予以保存并显示。
FLASH数据存储模块
为了调用方便,系统软件部分对FLASH操作做了函数封装,主要有如下两个函数接口:
1、页写操作:将一字节数据写入FLASH的某个特定地址。当命令下发完之后延时一段微秒级的时间,然后把被写数据所在页整页读出,将被写数据所在地址的数据值替换为被写数据,其余地址的数据值不变,然后整页写入FLASH,完成页写操作。
2、整片擦除操作:对FLASH存储阵列中的内容进行整片擦除。通过给FLASH下发特定地址的特定六个字 节的命令字来完成FLASH整片擦除操作,数据下发完毕后需要等 待50mS,或等待内部toggle/plling操作完成。
RS232串口通信模块
本系统利用两个UART,一个用于提供主机与上位机软件的通信接口,另一个用于提供微型打印机与主机的连接接口。主机和上位机软件的RS232串口通信协议如下:通信波特率为15200, 8位数据位,1位停止位,无奇偶校验。
软件为RS232串口通信提供的函数接口有:
1、串口发送一个字节数据:将要发送的数据装载到串口发送寄存器中,等待串口状态字变1,则表示数据发送完毕。
2、串口初始化:根据串口通信协议对波特率、奇偶校验、数据位和停止位进行设置。
LCD液晶显示模块
主要包括的函数模块如下:
1、LCD“忙”检查:对LCD操作很重要的部分就是进行时序模拟,而时序模拟最重要的是LCD“忙”检查。程序代码如下:
uint32 rb;I02DIR=LCD_DO_D7; //P2口连接的D0到D7口设为输入方式,然后读取状态命令
IO1CLR=LCD_RS;
IO1SET=LCD_RW;
if(rb!=0)
{IO1SET=LCD_E;
rb=(I02PIN0x80000000);
IO1CLR=LCD_E;
}; //忙等待
IO2DIR=LCD_DO_D7;//将LCD数据位重新设为输出方式
2、向LCD下发命令:若LCD“不忙”,在LCD的管脚E的下降沿锁存命令字节完成命令的发送。
3、LCD初始化:对LCD内部“忙”操作状态进行检查,设置显示的起始行,然后开显示。
4、LCD液晶写一组汉字:函数写汉字的时候实际上是将汉字字模写入LCD。
5 、LCD液晶画图:LCD画图和写字其实很类似,将相应的字模写入规定的LCD屏幕的位置即可。LCD液晶画图用于报警信号的显示。
CAN-BUS通信模块
CAN通信与一般的串口通信类似,在数据通信前要对CAN总线进行初始化操作,包括CAN控制器的选择、数据寄存器的设置以及通信波特率的设置等。初始化完成后,则需要设置双方的通信协议,建立彼此的连接。只有在同一协议下工作的双方才能正确进行数据的交换。软件提供的CAN-BUS通信函数接口包括初始化CAN、CAN总线发送数据以及CAN总线接收数据等。
结束语
该汽车行驶记录仪结合了计算机技术、嵌入式技术以及现场总线技术等多项先进技术,具有高实时性、抗干扰能力强、可靠性高、数据精度高以及系统扩展方便等特点,可以在车辆实时警告与稽核、公安交警部门的事故处理等方面发挥一定的作用。(end)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)