1 引言
德国Micronas公司开发的CDC3207G是一款32位ARM内核高性能低功耗的微控制器。这是专门针对汽车仪表板而设计的微控制器。目前已经应用于德国大众,中国东风等中高档汽车。CDC3207G采用ARM7TDMI内核,内部具有512 K Flash以及32 K SRAM,为了满足汽车仪表设计的需要,该微控制器还提供16路10位A/D转换模块、音频驱动模块、液晶显示驱动模块、7路步进电机驱动模块等。而且内部集成了CAN通信模块,可以很方便地与车内的其他电子装置进行通信。
2 硬件设计
2.1 硬件总体结构图
整个仪表板使用一个CDC3207G微控制器进行控制。输入信号可以分为数字开关信号和模拟电压信号两种类型。对数字开关信号,可以根据其高低电平直接读取其状态。而对模拟信号,如转速,速度等,用微控制器内部的lO位精度A/D转换器进行A/D转换,将模拟信号转换为数字信号。设计的仪表板用6个步进电机来驱动6个指针,分别用来显示转速、发动机温度、油量、速度、油压和电池电压。左右转向时发出的提示音和故障报警声等可以用音频输出驱动一个扬声器来发出,除了可以产生简单的单音警报外,还可产生振幅逐渐衰减的锣声信号。在LCD上可以显示当前的档位、车内外的温度以及一些报警信息和时间等。LED指示灯可以用微控制器的H端口直接驱动。CAN总线可以与车内的其他控制模块通信。图1给出仪表板的结构示意图。
2.2 步进电机模块
步进电机在汽车仪表领域的应用是新一代汽车仪表最显著的特点。控制器CDC3207G内部集成了7个步进电机驱动模块,每个步进电机模块通过控制器内部连接了H桥的4个高电流输出端口,直接驱动两相步进电机,大大简化了硬件电路的设计。通过软件便可产生步进电机定位需要的各种脉冲。CDC3207G微控制器的步进电机模块可提供多通道的PWM输出,输出信号频率通过硬件设置可以选择,并且不同步进电机模块输出信号时序上具有偏移,可以提高电磁兼容性能(EMC)。根据控制两相步进电机的需要,CDC3207G内部提供了3个8位的寄存器,用于通过软件产生控制步进电机需要的脉冲信号。其中2个寄存器通过每一模块中的比较器与模块计时器比较,用于产生驱动电机的PWM信号,另外一个寄存器用来选中相应步进电机模块,输出驱动信号,以及选择4个输出引脚的极性。这样,通过软件对3个寄存器的操作就能方便地控制每一路步进电机。此外,CDC3207G还具有零位检测功能,即检测电机运转时的感应电流,得到电机运行的位置信息,就可以据此判断电机是否达到初始位置(即汽车仪表的零位)。图2给出步进电机驱动电路。
2.3 音频控制模块
CDC3207G音频模块的输出信号可以直接驱动蜂鸣器或其他音频设备,硬件设计比较简单。图3给出音频模块驱动电路。从图中可知,在微控制器音频模块的输出端口U1.4处直接接人三极管VT5、低通滤波器电路和扬声器,即可实现整个音频电路的设计。音频模块用于由脉宽调制单元(PWM)、3个计数器和1个累加器组成。该模块能产生类似于锣声的声音信号,是频率可调的方波信号,输出信号的脉宽由方波信号的脉宽决定,无需CPU就能实现信号振幅的指数变化。
2.4 LCD显示模块
液晶显示器(LCD)具有微功耗、平板化、无x射线和电磁辐射等优点。LCD显示模块能以数字和图像准确显示出各个物理量,并增加了一些发生故障时的文字提示。CDC3207G内部集成了一个48x4的笔段式LCD驱动模块,可以驱动4行、48列的LCD显示模块。为了能显示更多的信息,这里选用的是一款128x 64的LCD模块,在此LCD模块上集成有驱动器,所以没有用到CDC3207内部的LCD驱动器。图4给出LCD显示电路,需要连接8根数据线,一根读信号,一根写信号,一根复位信号线。
2.5 LED指示灯和报警灯
LED指示灯可以用有较强驱动能力的H端口进行驱动,其8个LED指示灯由H端口直接驱动。但H端口不够用,所以扩展了一个TD62083,用于驱动另外8个LED指示灯和报警灯。图5给出LED指示灯和报警灯电路。
3 软件设计
考虑到汽车仪表板对实时性的要求,应用了μC/OS—II操作系统开发软件。μC/OS—II是一个具备现代操作系统特点的RTOS,同时它结构清晰,注解详尽,具有良好的可扩展性和可移植性,广泛地应用于各种架构的微处理器。μC/OS—II的系统组成包含任务调度,任务管理,时间管理和任务间的通信等基本功能。这里仅对μC/OS—II的启动程序和任务的分配作简要介绍,将着眼点放在基于CDC3207G的移植和应用。图6给出软件的组织结构。
3.1 启动代码的设计
嵌入式系统的资源有限,程序通常都是固化在ROM运行。ROM程序执行前,需要初始化系统硬件和软件运行环境,这些工作由汇编语言编写的启动程序完成。启动程序是嵌入式程序的开头部分,与应用程序一起固化在ROM中,并首先在系统上电后运行。它应包含各模块可能出现的所有段类,并合理安排它们的次序。
设计优秀的嵌入式程序关键要有好的启动程序,由于μC/OS—II不是针对特定的硬件进行设计,可以把μC/OS—II内核代码分成4个部分:与处理器无关的代码、与处理器有关的代码、与应用相关的代码以及驱动程序库。为了使μC/OS—II在基于ARM7TDMI的处理器CDC3207G上能够正常的运行,需要实现相应的启动程序以及对μC/OS—II中与处理器相关部分的设计与实现。图7给出启动代码的流程图。
3.2 任务规划
仪表盘的研制在软件部分可以分成若干任务来完成,下面对这个问题进行规划。
(1)启动任务
优先级:10
周期:否
可剥夺:否
作用:初始化各模块,包括UART、定时器、捕捉比较器等
(2)步进电机任务
优先级:8
周期:2 ms
可剥夺:否
作用:驱动步进电机,在启动时需要0位检测
3)指示器任务
优先级:7
周期:500 ms
可剥夺:否
作用:设置指示灯和提示音。
(4)采集任务
优先级:6
周期:25 ms
可剥夺:否
作用:用于采集各种非中断量如温度、光强等传感器信号并保存
(5)背光任务
优先级:5
周期:250 ms
可剥夺:否
作用:根据周围的光线强度调节仪表盘和LCD的背光
(6)LCD显示任务
优先级:2
周期:100 ms
可剥夺:是
任务:根据总线上采集到的数据更新LCD显示,如温度、公里数等
上述各任务运行在任务级,还有一些任务运行在中断级,比如时钟节拍中断、CAN总线数据采集等。
4 结语
由于Micronas公司的CDC3207G内部集成有步进电机驱动模块、音频控制模块、LCD驱动模块、LED及报警灯驱动端口,CAN总线模块等丰富的资源,因此减少了所需使用的外部驱动器件的数量,大大简化了仪表盘系统的设计。该器件在休眠状态下的功耗非常小(经测试约为19.1μA),有利于降低整个系统的功耗。该仪表板系统各方面表现良好.指针平滑转动,具有极低的功耗,可靠性较高。软件部分应用了uC/OS一Ⅱ操作系统,实时性能较好,能对外部事件作出快速响应。