|
0 引言 <P> <P>汽车仪表是司机与汽车之间进行信息交流的窗口和界面,对于提高汽车仪表使用寿命,安全和经济行驶有着积极而重要的作用。本设计采用LPC2292嵌入式控制器[1]作为仪表的控制核心,汽车原有传感器无需更换,传感器的输出信号通过信号调理电路后送入MCU,经MCU处理后的信号通过LCD显示器显示出来。实时显示车速、发动机转速、水温、油位、总里程、子里程等车况参数,并对信息进行复杂处理从而为司机提供平均车速、经济油耗、剩余油量能跑里程数等有用信息,同时,还能对瞬时行车信息进行记录存储,实现“黑匣子”功能;对异常情况实现语音报警提示,且为今后功能扩展预留通讯接口。与传统汽车仪表相比,该仪表具有功能丰富、可靠性高、精度高、可视性好、通用性强、且有存储功能、无机械磨损、使用寿命长等优点。 <P> <P>随着汽车电子的网络化,CAN总线技术在汽车领域得到了越来越广泛的应用,因此,CAN总线、嵌入式就成为汽车仪表未来发展的必然趋势。 <P> <P>1 汽车仪表的基本结构和功能 <P> <P>汽车智能仪表采集车辆的各种状态信息,这些信息包括车速,总、分里程,发动机转速,前后桥气压,水温,油量,及油压力,电瓶电压,室内、室外温度等。其中一部分信息(车速、转速、气压)经过处理后送入步进电机驱动模块来驱动指针,这些信息的变化较其它信息要快且与车辆行使安全密切相关,用指针显示既直观、醒目又符合人的视觉习惯。所以,汽车上较常用的有四种指示仪表,即车速里程表、发动机转速表、气压表等。分别显示汽车行驶速度、单里程和总里程数、汽车行驶时发动机旋转速度及前后桥气压等。另一些变化较慢的信息(电瓶电压、油量等)通过数据处理及液晶控制模块在液晶屏上显示。 <P> <P>汽车智能仪表由传感器、信号调理电路、微控制器、键盘输入模块、步进电机驱动模块、语音报警电路、LCD显示器等部分构成。 <P> <P>
图1 汽车智能仪表结构图
<P> <P>系统采用的微控制器为PHILIPS公司的LPC2292芯片。LPC2292是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S CPU的微控制器。128KB片内Flash程序存储器;外部8、16或32位总线;4路10位A/D转换器,转换时间低至2.44us;2个互连的CAN总线接口;2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出)、实时时钟和看门狗;多个串口接口,包括2个16C550工业标准UART、高速I2C接口(400Hkz)和2个SPI接口;通过片内PLL可实现最大为60MHz的CPU操作频率。 <P> <P>其中:车速传感器及调理电路模块[3]包括光电式车速传感器和车速测量通道的信号调理电阻。车速传感器将对应于0~200公里/小时的车速转变为频率范围为0~136.3Hz的脉冲信号;转速传感器及调理电路模块包括脉冲信号式转速传感器和发动机转速测量通道的信号调理电路,转速传感器将对应于0~8000转/分钟的发动机转速变换成0~260Hz的频率信号;由于车速和发动机转速传感器输出的脉冲频率信号,所以与之相对应的信号调理电路的作用是对传感器的输出信号进行整形、嵌位/限幅,以满足MCU对输入信号的要求。温度传感器采用热敏电阻式温度传感器,用于测量汽车冷却水的温度,该传感器将水温的变化变换成电阻、电压的变化;液位传感器采用浮子-可变电阻式液位传感器,将油位的变化变换成电阻、电压的变化;水温和油量传感器输出的是模拟信号,其对应的信号调理电路为电阻传输网络,将传感器的输出信号送到LPC2292自带的A/D输入端。E2PROM选用93LC46B三线串行电擦除可编程只读存储器,其容量为1K×16位,擦除周期为1M次,显示速度为2ms,数据保持时间可达40年,在仪表中用于保存子里程、总里程数据以及当前车况,并保证掉电时数据不会消失,起到汽车“黑匣子”作用。 <P> <P>步进电机模块驱动控制车速表、转速表、前桥气压表及后桥气压表。 <P> <P>语音模块主要用来存储所有报警语言,驱动报警喇叭,当车速、发动机转速、水温和油量等参数超限时,起语言提示报警作用。 <P> 键盘模块用于人机交互,接收输入来改变仪表的运行参数、仪表的日期时间设置、中英文语言切换、分里程清零及显示屏的切换。
<P>LCD显示屏实时显示车速、发动机转速、水温、油温、总里程、子里程、日期及时间、电瓶电压、各种报警指示、车内温度、车外温度等车况参数。 <P> <P>CAN通信模块采用LPC2292内置的CAN控制器和独立的CAN收发器PCA82C50构成,PCA82C50是Philips公司生产的高速CAN收发器,能适应不同的CAN总线传输速率。 <P> <P>2 CAN总线的优点及其在汽车领域的应用[2] <P> <P>控制局域网CAN(Controller Area Network)是德国Bosh公司从20世纪80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议。它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。在自动化电子领域的汽车发动机控制部件、传感器、抗滑系统等应用中,总线的位速率最大可达1Mbit/s。CAN网络正在不断地应用在汽车电子的各个方面。CAN总线具有下列主要特征:(1)多主站依据优先权进行总线访问;(2)无破坏性的基于优先权竞争的总线仲裁;(3)借助接收滤波的多地址帧传送;(4)远程数据请求;(5)配置灵活性;(6)全系统数据相容性;(7)错误检测和出错指令;(8)发送期间若丢失仲裁或由于出错而遭破坏的帧可自动重发送。 <P> <P>3 软件设计 <P> <P>基于μC/OS-II的汽车组合仪表采用源代码开放的μC/OS-II作为应用程序的开发平台。主要实现以下功能:通过电机指针显示发动机转速、车辆速度、前桥气压表、后桥气压表4种参数;通过LCD屏显示车速、发动机转速、水温、油位、总里程、子里程等车况参数。 <P> <P>μC/OS-II是一个完全免费的开放源码的可移植、可裁剪的占先式多任务嵌入式实时操作系统内核,其功能完备、性能可靠、短小精炼,具备多任务调度,信号量、邮箱、消息队列等任务间通信与同步,时间管理,简单内存管理等RTOS内核基本服务功能。它采用优先级驱动的占先式多任务调度算法[4]。 <P> <P>根据前面对整个系统的功能描述,可以将应用程序划分为6个任务加上6个中断(RTI节拍中断属于系统中断,其他5个为用户中断)。这6个任务分别是: <P> <P>(1)报警显示任务:前后灯光、刹车、电源、油量、油温、水温等LED报警; <P> <P>(2)里程显示、存储任务:LCD显示车速、发动机转速、水温、油温、总里程、子里程等车况参数; <P> <P>(3) 步进电机1任务:转速指针表显示; <P> <P>(4) 步进电机2任务:车速指针表显示; <P> <P>(5) 步进电机3任务:前桥气压指针表显示; <P> (6) 步进电机4任务:后桥气压指针表显示。
<P>每个任务在建立时均分配一个优先级(范围为0 ~63, 0为最高,63为最低)。这6个任务的优先级依次分配为1, 2, 3, 4, 5, 6;报警任务需要及时响应,具有最高的优先级;而里程显示、存储任务优先级最低。较高优先级的任务必须调用至少一项系统服务而暂时放弃CPU的使用权,否则低优先级任务无法得到运行。 <P> <P>任务的一般结构如下: <P> <P>void UserTask (void *pdata) <P> <P>{ for(;;) <P> <P>{调用μC /OS II的某种系统服务: <P> <P>OSMboxPend ( )/OSMboxPost ( );(1) <P> <P>OSQPend ( )/OSQPost ( ); (2) <P> <P>OSSemPend ( )/OSSemPend ( ): (3) <P> <P>OSTaskDel (OS PRIG SELF);(4) <P> <P>OSTaskSuspend (OS_ PR工OSELF); (5) <P> <P>OSTimeDly( )/OSTimeDlyHMSM(); (6) <P> <P>}} <P> <P>(1)-(6)是一些主要的系统服务函数,这些函数里均进行一次任务调度,或者可能会使当前任务放弃CPU使用权而运行其他的任务。用户任务必须至少调用一个服务函数。 <P> <P>另外程序还有5个用C语言编写的用户中断服务程序:一个CAN接收中断(用于接收总线信息)、4个定时器输出比较中断(用于产生驱动步进电机的周期性脉冲)。 <P> <P>因此本例程序可以这样规划,首先调用OSInit(),对μC /OS-II做初始化,然后创建一个信号量,因为后面的任务都要用到Printp( )函数,而Printp( )是一个不可重入函数,调用前要防止多个任务同时调用,这个信号量用于保护Printp()函数。接着创建6个任务,并对这6个任务分配优先级,最后调用OSStart ( )以启动内核,于是任务在操作系统的管理和调度下运行和切换。图2是程序的简要流程图。 <P> <P>
图2 程序流程图
<P> <P>4 结束语 <P> 随着汽车电气系统的总线化,高集成、嵌入式、总线化是汽车仪表发展的必然趋势。基于LPC2292的汽车智能组合仪表,实时显示和保存车速、发动机转速、水温、油位、总里程、子里程等车况参数,使汽车具有“黑匣子”功能。并且采用CAN总线建立通信网络,集车辆仪表、视频监控、语音输出于一体,解决了分开安装不便、可靠性差的缺陷,提高了系统的可靠性。 |
|