杨利,李昭灿, 李雪琼
(株洲易力达机电有限公司,湖南株洲 412002)
汽车电子助力转向器相比传统的液压助力转向器具有高性能、高稳定性和高抗干扰性、环保节能等特点,已慢慢成为现代转向系统发展的必然趋势。随着汽车工业的蓬勃发展,电子技术在汽车上得到越来越多的应用,同时也对电子助力转向器提出了更严格的要求:首先,电子助力转向器的功能除了最初的助力、回正、阻尼之外,XCP标定、UDS诊断、协助自动泊车等新的需求也层出不穷,传统的软件结构已无法适应多任务系统的需求;其次,不同的市场决定了汽车助力转向器的多样化,也就决定了转向器平台的多样性,进而对控制器软件的兼容性和移植性提出了更高的要求;另外随着功能安全标准的引入,对汽车及其零部件产品的安全等级要求也越来越严格。因此,应用实时嵌入式操作系统开发出高效、安全、兼容和可移植的汽车助力转向器软件也成为必然。
OSEK/VDX是由德国汽车工业界、法国汽车商PSA和雷诺联合推出的一个开放式工业标准,旨在规范汽车电子应用领域的软件开发。经过十多年的发展,OSEK/VDX已经引起了全球的强烈关注。它的宗旨是充分考虑软件的可移植性、可扩展性和可重用性,采用基于标准化接口和协议的构件化、模块化设计。它主要由四部分组成:操作系统标准、通信标准、网络管理标准、OSEK实现语言(OIL)。文中着重关注操行系统标准。
OSEK/VDX标准的提出顺应了汽车电子的发展需求,因此文中正是应用OSEK/VDX操作系统来设计汽车助力转向器的软件。
EPS是一个为了减轻驾驶员对方向盘的操纵力,完成辅助转向操作的机电一体化系统,分为机械部分和电气部分,如图1所示。其中电气部分的核心是电子控制器(MCU),它能根据扭矩传感器、车速传感器、发动机转速等控制信号,确定转向助力的大小和方向,来驱动助力电机做功。机械部分包括输入输出轴、拉杆、齿条、离合器等,作用是将助力电机输出的力传递给车轮,带动车轮转动。
RTA-OSEK是ETAS公司根据OSEK/VDX标准编制的一个实时操作系统及其配置环境,它的理念是:严格的时间要求;追求100%的可移植性,而不是兼容性;支持广泛的硬件平台;提供标准化接口;强调系统的可剪裁性;增强错误检测。
RTA-OSEK的核心是任务管理,它将任务分为基本任务和扩展任务。基本任务有运行、挂起和准备3个状态。基本任务只有在以下情况下放弃CPU:任务中止、更高优先级的任务到来,硬件中断。扩展任务比基本任务多了一个等待状态,它允许调用系统服务WaitEvent,并进入等待状态,处于等待状态的扩展任务释放处理器,运行低优先级任务,而不需中止。
任务优先级是静态分配,0的优先级最低,最大优先级由系统决定。
任务的调度策略有非抢占式、抢占式和混合式3种。非抢占式是指新来的任务必须等正在运行的任务运行完毕才能运行;抢占式是指新来的优先级更高的任务可以使正在运行的低优先级的任务挂起;混合式是指既有非抢占式又有抢占式。
系统软件架构分为3层,分别为驱动层、中间层和应用层,见图2。
(1)驱动层主要包括底层硬件的设置和初始化、中断事件处理和信号采样。
(2)中间层指OSEK操作系统,包括逻辑定时器管理、任务管理。逻辑定时器是任务管理的基础。各任务的定时是由逻辑定时器完成的,当然逻辑定时器实际上也是由一个物理定时器驱动的。任务管理顾名思义就是对系统中的任务进行管理,包括优先级管理和任务间通信管理。
(3)应用层主要实现对EPS的控制、故障诊断和处理、数据通信等。
根据以上分析,可以大致将系统软件划分为以下几个模块:
电源管理模块。提供电源管理,监控系统电源的工作状态并及时汇报给故障诊断模块;
车速模块。检测到车身传递的车速信号,并计算出实时的车速大小;
力矩模块。检测到驾驶员操控的扭力杆的力矩输入,并计算出当前的力矩大小,最后反馈给助力控制和回正控制模块;
角度模块。检测方向盘位置,是方向盘主动回正时的重要控制参数。
故障诊断模块。定时轮询各模块的工作状态,一旦发现异常将进行必要的故障处理,以保障行车安全;
电机驱动模块:将计算得到的PWM值转换为控制助力电机旋转的控制量,其中包括电机预驱动、电流电压检测等;
助力模块。通过输入力矩和车速的大小确定输出的助力大小,并加入速度补偿、阻尼补偿、摩擦补偿等当量,使助力大小达到最优;
回正模块。根据当前的方向盘角度及角速度,发出相应的控制信号驱动电机,使电机产生相应的回正力矩,最终使方向盘回到中间位置。
嵌入式实时操作系统的优势在于高效的任务调度算法,因此使用RTA-OSEK来开发软件时,只需要根据系统架构分析,将系统软件模块划分为不同的任务类型,并静态指派任务的属性。
基本任务:
(1)OnTmrVehicleSinalCalc——车速计算
该任务根据gioLowLevelInterrupt中断采集到的车速频率计算得到当前的车速值,并对车速进行滤波、修正处理,最终将得到的车速值保存。该任务是基本任务,4 ms定时执行一次,优先级为32。
(2)OnTmrTorqueCalc——力矩计算
该任务将hetHighLevelInterrupt中断采集到的力矩信号进行有效值、平滑值滤波处理,并存储力矩的当前值、历史值,以便进行力矩波动计算。该任务是基本任务,4 ms定时执行一次,优先级为31。
(3)OnTmrAngleCalc——角度计算
该任务将gioHighLevelInterrupt中断采集到的角度信号进行有效值、平滑值等滤波处理后,计算出角度和角速度、角加速度大小,为回正控制提供参数。该任务是基本任务,4 ms定时执行一次,优先级为30。
(4)OnTmrFaultDetect——故障检测
该任务定时轮询各个模块的运行情况,检测是否运行在安全状态。考虑到系统的安全需求,一旦模块出现故障,系统必须尽快检测到,因此该任务的优先级应该高于其他模块的优先级,优先级设为40。
(5) OnTmrMainLoop——主控制环
主控制环任务是整个系统的心脏,为了保证主控制环的精度,将该任务放置在adcGroup1Interrupt中断服务程序中完成,因此该任务实际上是中断类型,由ADC中断触发。该任务的执行周期为200 μs,目的是根据当前的力矩、车速和角度信号,判断系统是处于回正还是助力状态,从而调用相应的回正控制算法或助力控制算法,驱动电机执行相应的动作。
扩展任务:
(6)Group0——采样电流信号采集
该任务由adcGroup0Interrupt中断触发,将中断采集到的采样电流信号进行平滑处理后保存。因此该任务是扩展任务,上电后处于Waiting状态。
(7) Group2——电机端电压、温度信号采集
该任务由adcGroup2Interrupt中断触发,将中断采集到的电机端电压、温度信号等进行平滑处理后保存。因此该任务是扩展任务,上电后处于Waiting状态。
(8)OnTmrOutPutCtr——故障处理
该任务是扩展任务,上电后处于Waiting状态。当故障检测任务检测到系统出现异常时,就触发故障处理任务对当前出现的故障进行处理。故障等级分为警告、一般、严重和致命4级,根据故障等级不同,故障处理措施也不一样。当发生致命故障时,需要立即断开离合器,使转向系统回到手动助力状态。
传统的编程方式中,模块与模块之间的通信机制通常是采样全局变量来实现的。这种方法的优点是简单,但是缺点也显而易见:维护性差,安全性低,这种做法和功能安全的思想是背道而驰的。此系统中采用两种方法来避免因为数据冲突而带来的安全问题。
第一种方法是用Message进行模块通信。
例如:两个Process(进程)同时对同一个变量x进行操作。这将会引起数据冲突,如图3(a)所示。解决方法其实很简单:Process1访问变量x时创建一个备份t,从而避免数据冲突,如图3(b)所示。
图3(b)中的备份变量t其实是Message的原型,因此Message的本质即为一个变量。它们在原则上既能被读也能被写。但是在实际应用中,经常需要对这种自由度作限制:有些Process只应该对某个Message进行读操作,而另一些只需对其进行写操作。通过这样的定义可以定义数据传输的流向。
第二种方法是采样统一的函数来访问其他模块的数据。
例如,助力控制模块需要得到当前的力矩值时,通过调用GetCurrentTs()函数来实现,而不是直接访问力矩模块中的变量,这样就能保证助力控制模块意外地修改力矩当前值,最大限度地防止数据冲突。
汽车电子的发展趋势对汽车助力转向器提出了新的要求,为了解决日益复杂的需求和落后的软件结构之间的矛盾,引入了旨在规范汽车电子软件开发规范的OSEK/VDX标准。该标准致力于解决软件的可移植性、兼容性和可重用性,提出了标准化的接口和协议。利用ETAS公司开发的完全符合OSEK/VDX标准的RTA-OSEK操作系统来开发汽车助力转向器的软件,提高了软件的效率和可重用性。基于Message和统一函数接口的模块通信方式也有效地避免了数据冲突。
【1】 田路.OSEK/VDX COM模块的设计与实现[D].哈尔滨:哈尔滨工业大学,2007:4-10.
【2】 毛亚茹.OSEK/VDX标准研究及应用[D].长春:吉林大学,2005:1-10.
【3】 臧怀泉,田超, 刘敏.基于OSEK/VDX的电动助力系统设计[J].单片机与嵌入式系统应用,2008(7):55-58.
【4】 RTA-OSEK User Guide[OL].http://www.etasgroup.com.
【5】 OSEK/VDX.OSEK Implementation Language Version 2.5.2004[OL].http://www.osek-vdx.org.