1 前言
由于汽车排放法规日益严格以及不可再生能源危机的不断加剧,降低排放和提高燃油经济性已成为目前车用柴油机研究的两个热点问题。电子控制燃油系统是解决这两个问题的有效途径。文献中提出了一种使用“中断环”控制柴油机喷射的方法。使用该方法开发的应用程序独立性较差,功能扩展难,代码的可重用性低。
OSEK/VDX标准是针对汽车电子的一个开放的行业标准,由操作系统、通信和网络管理3 部分组成。基于OSEK/VDX标准开发的应用程序与硬件的依赖关系小,便于向不同硬件平台移植。OSEK2turbo是一种符合OSEK/VDX标准的、可静态配置和可裁剪的实时嵌入式操作系统。CME - 555评估板的CPU是RISC 32位的MPC555单片机,其外设资源丰富,适合开发比较复杂的汽车控制器。
作者以MPC555 处理器作为ECU 硬件开发平台,基于OSEKturbo设计了一个电控柴油机ECU系统软件开发框架,并在此框架下采用模块化设计方法进行了ECU软件的开发。
2 电控柴油机ECU控制原理
以BOSCH电子控制单体泵系统为实验被控对象,该系统为时间控制式系统,由集成高速电磁阀的单缸高压泵、短高压油管和喷油器总成组成。
电控柴油机ECU控制原理如图1所示: ECU根据发动机转速和油门踏板的位置判断发动机当前工况,通过查MAP图表得到喷油量的基准值,再根据进气温度、进气压力和冷却液温度等信号对该基准值进行修正,得到目标喷油量;经过喷油定时计算确定喷油始点和喷油持续期之后, CPU向驱动电路发出控制信号,控制单体泵上的电磁阀动作,从而实现对电控柴油机的精确控制。
nload="javascript:if(>740)=740" align=center border=0>
图1 电控柴油机ECU控制原理图
3 ECU软件框架设计
3.1 模块划分电控柴油机的ECU系统软件需要实现的主要功能包括: (1)信号采集和处理;( 2)喷油量计算;(3)喷油始点和喷油持续期的计算;(4)自检和故障诊断;(5)外部通信等。
按照模块化设计思想,将ECU软件划分成图2所示的功能模块。
nload="javascript:if(>740)=740" align=center border=0>
3.2 选择调度策略和确定优先级在ECU软件中,决定应用程序执行流程的因素主要有两个:调度策略和优先级。
OSEK/VDX标准提供了3种调度策略,即完全占先调度、非占先调度和混合调度。3 种策略OS2EKturbo都予以支持 。作者选择完全占先调度策略,它可以提高CPU的利用率。
优先级的分配需考虑以下几方面问题。
(1) 任务之间的内在逻辑关系 如果两个任务之间存在顺序关系,可以考虑将位于前边的任务的优先级提高。
(2) 任务的周期属性 对于单次执行的非周期任务,即使不很重要,也可以将其优先级提高。对于周期性任务而言,周期较短的任务优先级可相应提高。
(3) 任务对实时性的要求 一般强实时性的任务优先级要高,以便能够及时得到系统的响应。
在系统集成调试过程中,如果因为优先级的设置不够合理而影响到ECU软件的调度,则必须对其进行适当调整。另外,如果ECU软件增加了新的功能,也需要对优先级进行重新考虑。
3.3 ECU软件实现在ECU软件的详细设计时,首先需要把图2所示各个模块对应为具体任务。任务的划分需要考虑的因素包括任务承担的功能、任务之间的数据流关系和ECU软件的可调度性等。
考虑到各个模块对实时性的要求,将ECU软件的任务分为两类,即“任务级”( Task Level)和“中断级”( ISR Level) 。图3为电控柴油机ECU软件框架图,箭头表示程序执行的路径,从一个状态转入另外一个状态。方框表示ISR Level的任务,圆框表示Task Level的任务。
nload="javascript:if(>740)=740" align=center border=0>
OSEK Builder是OSEKturbo 的配置工具,使用它对系统进行静态配置得到OIL文件。每个OIL文件里,都有一个叫做CPU的特殊对象,它是所有局部对象的容器。局部对象包括TASK、OS、ISR、E2VENT、APPMODE等 。
对于不同的OIL 实现,为对象定义的属性会有所不同,设计时尽量避免使用OSEK/VDX标准中没有规定的属性,以提高OIL文件的重用性。ECU软件框架设计时使用的部分OIL代码如下。
nload="javascript:if(>740)=740" align=center border=0>
对OIL文件进行编译后,生成系统配置文件的c代码。将其与OS源文件、库文件、硬件设备驱动程序和用户的应用程序进行集成、编译和连接,最后生成可执行的目标机代码。
4 可调度性分析
ECU的各个任务之间存在着争夺CPU控制权的问题。可调度性分析的目的是检查和验证应用程序是否可调度,适用于汽车软件工程的“V型”开发流程的各个阶段,可以帮助评估应用程序的计时行为,解决调度问题,并给出改进方案。
静态配置的系统不仅能提高ECU软件可靠性,还使ECU程序的运行具有可预测性。
汽车的实际工况复杂,导致ECU程序执行的路径很多,对应用程序的每个执行路径都做分析将使分析变得复杂。文中采用如下方法进行分析。
(1) 执行块的分割 为了使TASK和ISR的逻辑清晰,采用函数调用的形式将应用程序嵌入框架中。将各个TASK和ISR分成不同的执行块,例如可把WaitEvent、SetEvent、ActivateTask等影响调度的OS服务,以及像switch、if、else等影响程序执行顺序的语句作为分界点进行分割。
(2) 测量最坏执行时间TWCET 测量执行块的运行时间,找到每个任务中执行时间较长的支路,计算在TWCET时的CPU利用率。
nload="javascript:if(>740)=740" align=center border=0>
式中ETij表示第i个TASK的第j个执行块的执行时间; EImn表示第m 个ISR的第n个执行块的执行时间; Tos表示执行操作系统代码所需的时间,单个OS服务所需时间一般在几个至十几个μs左右; Pmax表示任务的最大周期值,对于非周期任务取最小到达时间TMINT ; Aj 表示在Pmax时间内,第i个TASK的第j个执行块执行的次数; Bn 表示在Pmax时间内,第m个ISR的第n个执行块执行的次数。
4.1 无外部通信模块的情形测量的参数值如表1所示。非周期任务的最小到达时间TMINT可以作为非周期任务分析时的周期时间使用,此处TMINT是发动机转速为3 000 r /min时的值。MPC555的系统时钟频率为40MHz,在CME- 555的外部FLASH中运行程序。
nload="javascript:if(>740)=740" align=center border=0>
在发动机转速为3000r/min时,按照式(1)计算CPU的利用率为:UCPU=26.26%。
曲轴信号和凸轮轴信号由TPU3 处理,使用同一个中断源。为了保证控制的实时性,将输出模块的代码直接在定时中断里执行。
图4为所测TPU3输出信号与电磁阀电流波形,其中通道1和2分别是调理后的曲轴信号和凸轮轴信号,通道3为TPU3输出的喷油信号,通道4为对应于发动机1缸电磁阀的电流波形。试验证明ECU程序是可以调度的。
nload="javascript:if(>740)=740" align=center border=0>
图4 TPU3输出信号与电磁阀电流波形
4.2 加入外部通信模块的情形
在上述开发平台使用MPC555的TouCAN,按照J1939协议向ECU软件框架中增加外部通信模块,实现ECU与自动变速器的控制器之间的通信功能。
在OIL文件中,新增如下代码。
nload="javascript:if(>740)=740" align=center border=0>
在框架中增加了一个以10ms为周期的警报(ALARM) ,用于激活外部通信任务,同时向工况任务中添加了以50ms为周期的代码,用于向外发送信息,例如转速、转矩等。还增加了CAN接收中断用于接收信息。
加入外部通信模块后,增加或变化的测量参数如表2所示。
nload="javascript:if(>740)=740" align=center border=0>
工况任务的第2 个执行块的执行时间增加了150μs,它是新增通信模块中50ms周期发送信息的代码。图5是增加外部通信模块前后执行时间的对比,其中通道1是油量任务,通道2为空闲任务(空白部分表示CPU在执行代码) ,通道3为工况任务,通道4为外部通信任务。
nload="javascript:if(>740)=740" align=center border=0>
增加通信模块后,在发动机转速为3 000 r /min时, 按照式( 1 ) 计算CPU 的利用率为: UCPU=27.70%。
通过对电磁阀的控制和测试,证明ECU软件仍然是可以调度的。
5 结论
(1) 由于OSEKturbo静态配置,以它为基础设计软件的行为可以预测,增强了软件运行的稳定性,提高了电控柴油机ECU的可靠性。
(2) 给出了调度分析时CPU 利用率的计算公式。根据这个公式可以计算出程序在最坏情况下的CPU利用率。
(3) 在CPU利用率小于100%的前提下,可以方便地向ECU软件框架中增加新功能,并且增加功能后系统的每个最坏响应时间仍然能够得到满足。
(4) 框架式设计和模块化开发方法便于代码移植,提高了代码的可重用性,可以加快电控柴油机ECU软件的开发速度,降低开发成本。