基于Simulink的小型汽油机ECU底层驱动开发
2016-11-17李捷辉汤万飞尹必峰
李捷辉, 汤万飞, 尹必峰
(江苏大学汽车与交通工程学院, 江苏 镇江 212013)
·设计计算·
基于Simulink的小型汽油机ECU底层驱动开发
李捷辉, 汤万飞, 尹必峰
(江苏大学汽车与交通工程学院, 江苏 镇江 212013)
针对小型汽油机电控系统,选择freescale MC9S12P128芯片作为微处理器,使用Simulink软件模块化的开发方式,设计出适用于小型汽油机ECU的通用底层驱动模块。该方式可使底层驱动软件与发动机的控制软件完全独立,并具有便于移植和调试等优点。对电控系统底层驱动软件进行了输入信号采集试验、硬件在环试验和发动机台架试验,试验结果表明,开发的底层驱动模块程序可靠性好,实时性和快速响应能力强,满足发动机控制需求。
小型汽油机; 底层驱动模块; 电控系统; 软件开发
通用小型汽油机具有结构紧凑、性能可靠、可移动性好以及维修方便等优点,被广泛用于园艺修剪、应急发电、农业灌溉、小型工程机械等领域[1]。随着我国小型汽油机产量的迅速增长[2],能耗和排放增加,电控技术成为解决这些问题的最有效方法之一。为使电控小型汽油机具有强动力、低油耗、低排放和低噪声等性能优点,其电控系统不仅需要完善的控制策略,同时性能可靠、实时性强的ECU底层驱动也是必不可少的一部分[3]。底层驱动程序是发动机ECU 控制程序实施的基础,其实时性、可靠性和快速响应能力是影响发动机性能的重要因素,因此采用Simulink软件模块化的开发方式,开发一整套便于调试和移植的ECU底层驱动程序,对小型汽油机电控系统的开发具有重要意义。
1 汽油机ECU底层驱动方案设计
底层驱动程序是发动机电控系统的重要组成部分,是连接软件和硬件的桥梁。设计底层驱动程序时,首先根据发动机控制系统的总体流程来统计其需要的硬件资源,然后通过硬件资源确定ECU所选用的微控制器芯片类型和传感器、执行器等零部件,由此确定发动机所需设计的驱动模块。
1.1 ECU硬件资源统计
小型汽油机电控系统的控制流程:传感器采集发动机各工况的信号参数,由控制程序对信号进行处理,并向各执行器发出相应的控制信号,控制汽油机平稳运行[4]。电控系统从硬件的总体结构出发,主要由输入电路、微控制器电路以及输出电路组成(见图1)。输入电路接收各传感器模拟信号,并对其进行处理,转换为数字信号;输出电路接收到微控制器的信号后驱动执行器工作。由硬件资源可知底层驱动模块包括输入与输出模块、齿中断模块、喷油模块和点火模块。其中输入与输出模块分为模拟量输入模块、数字量输入模块和数字量输出模块,齿中断模块分为输入捕捉模块和定时器时间输入模块。
图1 小型汽油机ECU结构框图
1.2 ECU微控制器选型
由小型汽油机电控系统硬件资源确定主芯片类型和各传感器、执行器与主芯片连接的通道数,并对底层驱动程序进行具体设置。其电控系统选用MC9S12P128芯片作为MCU,采用64引脚、LQFP(Low-profile Quad Flat Package)形式封装。该芯片的主要功能:集成带有奇偶校验功能的128 kb flash,其中包含4 kb data flash;集成6 kb静态内存;带有内部过滤器的锁相环倍频器;4~16 MHz振幅可控皮尔斯振荡器;定时器模块提供8通道16位输入捕捉、输出比较、计数器、脉冲累加功能;6个8位PWM通道和10通道12位分辨率模数转换器;串行外围设备接口、串行通信接口,支持LIN总线通信和1个控制器局域网模块[5-7]。该芯片不仅能满足小型汽油机电控系统的功能要求,而且具有价格低廉、性能可靠和通用性高等优点。
1.3 ECU软件组成
小型汽油机电控系统软件包括底层驱动程序和发动机控制程序。发动机控制程序是电控系统的核心,但控制程序需要通过底层驱动程序方能实现对传感器和执行器的控制。底层驱动程序是整个发动机系统控制软件的基础部分,它承担着整个系统软件的调度和控制器输入输出的工作,即调度各功能软件模块,控制整个系统各部件之间协调工作,包括传感器、执行器、控制器内部的电路模块,同时还可实现输入输出功能[8]。虽然底层驱动软件往往被主控制软件开发者所忽视或被专业开发人员所固化隐藏,但它直接影响到控制系统可靠性、实时性和快速响应能力。
2 底层驱动模块软件设计
采用传统手写C语言代码的方式设计底层驱动程序不仅费时、费力、易错,还不便于调试和移植。由于底层驱动代码对于发动机控制系统来说相对固定,无需经常改动,所以利用Simulink中S-Function将底层驱动封装成模块型式,可直接拖动到模型中,这种图形化界面配置方式具有操作简单、便于调试和移植、参与整体代码生成、实现算法与底层驱动的无缝集成等优点[9-10]。
本研究采用Simulink软件模块化的设计方式,针对小型通用汽油机电控系统开发底层驱动程序。开发底层驱动程序首先根据Simulink软件编译底层驱动模块的工作原理,制定编写底层驱动模块的流程,主要流程包括:编写C MEX S-Function文件、编写TLC脚本文件和封装驱动模块。然后通过设计流程开发底层驱动模块。在设计小型汽油机电控系统底层驱动模块时,根据电控系统运行时执行任务的先后循序设计所需底层驱动程序,其中包括输入与输出模块、齿中断模块、喷油模块和点火模块。这些驱动模块分别用于驱动传感器信号采集、电磁阀与故障灯控制、捕捉齿信号进行转速计算与相位判断、驱动喷油器和点火线圈。最后将设计完成的底层驱动模块进行硬件在环测试和台架试验测试,验证底层驱动模块工作的实时性、可靠性和快速响应能力。
2.1 底层驱动模块软件设计流程
由Simulink软件编译驱动模块的工作原理可知,设计底层驱动模块主要由编写C MEX S-Function、编写TLC脚本文件和封装模块三步组成。
1) C MEX S-Function编写
编写S-Function用来扩展Simulink环境性能,可使用C语言编写,但需要用MEX工具编译后方可使用。S-Function文件主要分为三部分:文件头部、回调函数和文件尾部。首先在文件头部定义函数名和函数级别以及加入必要的头文件。其次通过编写回调函数来定义参数个数、输入和输出口的个数、采样时间等。其中主要的回调函数包括:mdlInitializeSizes函数用于指定SimStruct中各参数的值,如模块输入或输出个数;mdlInitializeSampleTimes函数用于指定模块的采样时间;mdlOutputs函数用于计算模块输出;mdlTerminate函数用于设置仿真终止时需要执行的动作[11]。最后编写文件尾部作为MEX文件与Real-Time Workshop 的接口。
2) TLC脚本文件编写
目标语言编译(Target Language Compiler,TLC)文件的编写主要包括两部分。首先需要定义文件名,必须和S-Function文件中的函数名一致,之后通过函数设置模块的代码生成形式。主要使用的函数有:BlockTypeSetup(block, system)函数用于定义全局变量、生成部分函数声明或初始化代码;Start(block, system)函数用于初始化代码;Outputs(block, system)函数用于生成模块执行代码[12]。
3) 封装模块
模块封装的作用是为mdlRTW函数中定义的参数制作配置界面,并对模块外观进行修饰,以增强模块的易用性。封装过程主要包括填写S-Function函数名、指定mdlRTW回调函数中定义的参数和对模块外观进行修饰。
完成底层驱动模块软件流程设计后,根据小型汽油机电控系统上电运行工作原理,分别进行MCU初始化、输入与输出、齿中断及喷油与点火等模块驱动程序设计。
2.2 MCU初始化模块
MCU初始化模块用于设置MCU总线频率,由于MC9S12P128芯片可设置的最高总线频率为32 MHz,为了提高芯片计算能力,所以通过外部晶振锁相环将总线频率设置为32 MHz。为提高底层软件的通用性和调试的便捷性,设置了8 MHz和16 MHz两种外部晶振,在自动生成代码时,RTW会根据不同的选择生成不同的总线时钟配置代码[13]。该模块最后需要设定完成代码生成后的动作,分别包括:Build,指代码生成后自动调用编译器完成代码编译;Run,指编译后自动下载到目标硬件ECU中;Null,指仅生成C语言代码,不调用编译器。
2.3 输入与输出模块
输入与输出底层驱动模块包括:模拟量输入模块、数字量输入模块和数字量输出模块。模拟量输入模块的功能是对AD模块进行初始化设置和输出指定通道的AD转换值。由于算法模型中需要多个模拟量输入模块,但模块的初始化代码只需执行一遍,为此需定义一个全局变量用于控制初始化代码只生成一遍。AD模块初始化设置如下:
void ADC _Init(void)
{
ATDCTL0 = 0x05; // 第5通道反转
ATDCTL1= 0x50; // 设置采样精度
ATDCTL2 =0x02; // 清除标志位
ATDCTL3= 0xB0; // 设置转换通道数
ATDCTL4= 0x33; // 设置时钟
ATDCTL5 = 0x30; // 设置采样方式
}
模拟量输入模块只输出一个通道转换值,数据类型为无符号整型,并且需要设定打开相应的通道采集模拟量信号。以机体温度采集驱动模块为例(见图2),机体温度采集驱动模块采集到小型汽油机的机体温度信号,将该模拟量信号转化为数字量信号输出给信号滤波模块filter5,该信号滤波模块采用算数平均滤波法对机体温度信号进行处理,可减少其他信号的干扰,最后得到汽油机的机体温度信号。
数字量输入模块用来接收MC33812驱动芯片故障反馈信号,包括喷油故障、点火故障和油泵继电器故障;数字量输出模块用来控制故障灯和油泵继电器。输入与输出的数据类型均为布尔量。
图2 机体温度采集驱动模块
2.4 齿中断模块
齿中断模块包括输入捕捉模块和定时器时间输入模块。输入捕捉模块用于产生周期性的齿中断任务。该模块只有一个输出端口,不是用来传递数据,而是在捕捉到齿信号上升沿后调用function-call子系统。输入捕捉模块的主要设置如下:
%function Start(block, system) Output
TSCR1=0x90; //定时器使能、清除标志位
TSCR2=0x05; //设置时钟周期
TIOS=0x80; //通道7为输入捕捉方式
TCTL3=0x40; //设置捕捉上升沿方式
TIE=0x80; // 允许通道7中断
%endfunction
定时器时间输入模块的功能是记录定时器的时间,程序中需要输出每次输入捕捉模块捕捉到齿信号的时刻,由此可以判断曲轴相位和计算发动机转速。
2.5 喷油与点火模块
设计的喷油与点火底层模块用于驱动单个喷油器和点火器,使用定时器模块设定0通道和2通道为输出比较功能。模块分别定义3个输入端口,分别为使能标志、喷油(点火)信号起始时刻和喷油脉宽(点火闭合时间),数据输入类型分别为布尔量、无符号整型、无符号整型。模块需要在子系统中调用,所以采样时间设置为继承。为了保证数据能及时传递给底层模块,需要设置每个输入端口信号直接馈通。TLC文件中设置定时器通道为输出比较模式,并先利用前两个输入信号控制驱动信号起始时刻,然后通过一个中断服务程序和第3个输入信号控制喷油或点火信号持续时间。以喷油底层驱动模块为例,其对定时器模块的设置如下:
TIOS_IOS0 = 1; //通道0为输出比较方式
if(Enable)
{
OCPD_OCPD0 = 0;
TCTL2_OM0 = 1;
TCTL2_OL0 = 1; //输出高电平
TC0 = Injection Time; //设置喷油始点
TIE_C0I = 1; //允许输出比较中断
}
Else
{
TIE_C0I = 0; //禁止中断
OCPD_OCPD0 = 1; //禁止引脚
PTT_PTT0 = 0;
}
输出比较中断设置如下:
void interrupt 8 Fuel_Control_Isr(void)
{
TC0 = TC0+Fuel Pulse; //设置喷油脉宽
TCTL2_OM0 = 1;
TCTL2_OL0 = 0; //输出低电平
TIE_C0I = 0; //禁止中断
}
3 试验结果及分析
为保证小型汽油机电控系统底层驱动模块工作的实时性、可靠性和快速响应能力,进行试验研究。试验分为三部分:首先验证模拟量输入模块的底层驱动程序;其次进行硬件在环测试,验证底层驱动程序的完整性;最后选用170F电控汽油机进行台架试验。
3.1 输入模块底层驱动程序验证
使用信号发生器、齿盘、油门踏板和示波器等模拟发动机运行时产生的信号。其中信号发生器用来模拟发动机各传感器输出电压信号;齿盘由电机驱动,结合曲轴位置传感器模拟发动机运转时产生的磁电信号;踏板可以控制电机的转速,以此模拟发动机转速的变化;示波器用来采集各驱动信号。
试验首先通过采集传感器信号来验证模拟量输入模块的底层驱动程序,采集的传感器信号包括蓄电池电压(vbat)、节气门位置(tps)、机体温度(etemp)、进气压力(map)和进气温度(atemp)信号。测试过程如下:
1) 将传感器信号对应的ECU引脚与模拟信号发生器连接;
2) 将底层驱动模块与测试软件结合,生成C语言代码下载到ECU中;
3) 将信号发生器旋钮从最小旋到最大,通过Codewarrior实时监测所采集到的数据。
传感器信号采集结果见图3。在信号发生器电压从0 V增大到+5 V过程中,采集到的数据除vbat外其余数据都从0增大到4 095,有极小的误差是由于信号发生器的不精确和ECU电路的设计引起的,属于正常误差范围,信号的变化规律与理论值基本一致。ECU直接由稳压电源供电,因此测试中vbat的值保持不变。说明模拟量输入模块功能正常,能准确地采集各传感器的信号。
图3 传感器信号采集
3.2 硬件在环测试
通过对底层驱动输入量精确测试,保证了发动机输入信号的可靠性和实时性。为验证控制系统能否准确输出驱动信号,编制了专用验证程序进行硬件在环测试。验证模型通过周期性任务调用喷油、点火驱动任务,用示波器采集喷油与点火驱动信号波形。分别改变喷油与点火底层模块的输入数据,包括喷油信号起始时刻偏移量、喷油脉宽、点火信号起始时刻偏移量、点火闭合时间。通过对采集的驱动信号波形的变化进行比较分析,验证喷油与点火底层驱动程序的准确性。
模型中喷油与点火任务的周期为20 ms,分别用IT,FP,ST,SD表示喷油信号起始时刻偏移量、喷油脉宽、点火信号起始时刻偏移量、点火闭合时间。第1组数据:IT=1 000,FP=5 000,ST=1 000,SD=1 500;第2组数据:IT=1 000,FP=8 000,ST=4 000,SD=3 000。采集到的波形见图4。上方波形为喷油信号,下方波形为点火信号,由图可见,各信号的频率均为50 Hz,与模型设置的20 ms任务周期一致,证明了齿中断模块的准确性。第1组数据中IT和ST相等,所以喷油与点火信号的起始时刻相同。第2组数据中ST大于IT,所以点火信号比喷油信号的起始时刻延迟。此外,FP和SD的改变均会引起对应输出波形的占空比的变化,表明喷油与点火底层驱动模块能够准确对输出数据作出反应,可以实现对发动机喷油与点火的精确控制。
图4 喷油与点火模块检测波形
3.3 台架试验测试
选用170F电控汽油机进行台架试验对底层驱动程序进一步验证。分别选取发动机常用工况,即稳态工况、瞬态工况和起动工况,使用示波器采集发动机不同工况下曲轴位置信号、进气压力信号、喷油驱动信号和点火驱动信号等,通过这些驱动信号之间的关系分析底层驱动程序的可靠性和快速响应能力。
首先,发动机在稳态下,选取转速为2 000 r/min的空载工况进行台架试验测试。如图5所示,上方为喷油器低端驱动信号,下方为进气压力信号,每一个工作循环内,喷油器喷油时刻和进气压力开始减小时刻一致,并且一个工作循环内只喷一次油,验证了喷油底层驱动程序可靠性好、快速响应能力强。
图5 喷油与进气压力信号
图6示出发动机2 000 r/min,空载工况时的喷油与点火驱动信号的相位关系,两者是近似交替地工作,二者相差的角度约为280°,与图5所示情况基本一致。并且一个工作循环内完成一次喷油和点火,符合控制软件中设计的任务执行目标,验证了底层驱动程序的可靠性。
图6 喷油与点火驱动信号
其次,选取瞬态工况进行底层驱动试验测试。图7示出发动机转速从1 500 r/min突然增加到2 800 r/min时的驱动信号波形,上方为喷油器低端驱动信号,下方为曲轴位置信号。由图可知,当发动机喷油脉宽突然增加时,曲轴位置信号波形周期随之减小,表示发动机转速增加。曲轴位置信号波形周期随喷油脉宽增加而减小,验证了底层驱动程序的快速响应能力强。
图7 瞬态工况驱动信号
最后,选取发动机起动工况进行底层驱动试验验证。图8示出喷油器低端驱动信号和曲轴位置信号。由图可知,发动机在刚开始起动时由于转速较低(曲轴位置信号波形周期较长),未达到起动要求,没有低端驱动信号,喷油器不工作。当发动机转速增大(曲轴位置信号波形周期减小),出现喷油器低端驱动信号,喷油器开始工作。两种波形变化与发动机控制策略相一致,进一步验证底层驱动程序的可靠性较好。
图8 起动工况驱动信号
4 结束语
根据底层驱动模块的设计思想,采用Simulink软件模块化的开发方式,针对小型汽油机电控系统设计硬件底层驱动软件流程和驱动模块。主要模块包括输入与输出模块、齿中断模块以及喷油与点火模块。自主开发了具有便于调试和移植、可参与整体代码生成、实现算法与底层驱动的无缝集成等优点的底层驱动模块程序。对电控系统底层驱动模块进行了输入信号采集试验、硬件在环试验和发动机台架试验,结果表明,开发的底层驱动模块程序能够满足小型汽油机ECU控制要求,并且其可靠性好,实时性和快速响应能力强。
[1] Yu-Wei Chen,Sheng-Ji Liu, Wang Jian.Factors Influencing Rope Force of Recoil Starter[J].Applied Mechanics and Materials,2012,220(1):494-498.
[2] 张爱群,贾滨,靳莉,等.中国通用小型汽油机行业发展现状及建议[J].内燃机与配件,2015(3):46-47.
[3] 邹群.电子技术创新推动汽车工业的发展[J].汽车与配件,2001(27):24-26.
[4] 王彦苏.汽油机16位ECU的设计与研究[D].太原:太原理工大学,2002.
[5] 张阳,吴晔,滕勤,等.MC9S12XS单片机原理及嵌入式系统开发[M].北京:电子工业出版社,2011.
[6] Freescale semiconductor. MC9S12P128 Reference Manual Covers MC9S12XS Family[M]. [S.l.]:[s.n.],2007:100-800.
[7] 王威.HCS12微控制器原理及应用[M].北京:北京航空航天大学出版社,2007:7-15.
[8] 宋君花,徐权奎,王都,等.天然气发动机控制器驱动软件设计[J].车用发动机,2012(2):7-10.
[9] 刘杰.基于模型的设计及其嵌入式实现[M].北京:北京航空航天大学出版社,2010:345-347.
[10] 章健勇,吕世亮,陈林.基于快速原型系统的汽油机控制策略开发[J].车用发动机,2011(2):25-28.
[11] Writing S-Functions[M].[S.l.]:The Math Works, Inc,2003.
[12] Simulink Coder Target Language Compiler[M].[S.l.]:The Math Works,Inc,2012.
[13] 齐振恒,孙中杰,李涛,等.RTW嵌入式代码自动生成机制与代码结构分析[J].计算机测量与控制, 2010,18(3):639-642.
[编辑: 李建新]
Development of ECU Underlying Driver for Small Gasoline Engine Based on Simulink
LI Jiehui, TANG Wanfei, YIN Bifeng
(School of Automotive and Traffic Engineering, Jiangsu University, Zhenjiang 212013, China)
For the electronic control system of small gasoline engine, the underlying driver based on freescale MC9S12P128 chip was designed with Simulink software modular method. With the method, the underlying driver software was easily transplanted and debugged and completely independent of engine control software. The input signal test, hardware in the loop test and engine bench test were further carried out to validate the underlying driver module of electronic control system. The results showed that the developed underlying driver module had good reliability, real-time and rapid response capability. Accordingly, the driver could meet the requirements of engine control.
small gasoline engine; underlying driver module; electronic control system; software development
2015-07-07;
2016-03-06
国家自然科学基金资助(51375213);江苏高校优势学科建设工程资助项目(苏政办发〔2011〕6号)
李捷辉(1963—),男,教授,博士,主要从事发动机电控技术研究;jhli@ujs.edu.cn。
汤万飞(1990—),男,硕士,研究方向为小型电控汽油机电控系统优化;tangwanfei_ujs@163.com。
10.3969/j.issn.1001-2222.2016.02.001
TK414.32
B
1001-2222(2016)02-0001-06