柴油机电控技术及故障维修
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.1 ECU软件框架和控制软件

ECU的软件是一些指令和数据的集合。通常是在个人电脑上建立一个集成的开发环境(integrated development environment,IDE),然后在这个环境中对代码的源程序进行设计、输入、调试、编译和连接生成目标代码,再由开发环境中提供的写入功能,将ECU的软件写入到ECU的Flash存储器中。

一般而言,不同生产厂家的单片机产品系列,都有着不同的IDE系统。如飞思卡尔公司单片机系列的IDE系统(称为Codewarrior),针对8位、16位和32位的产品系统就有着不同的Codewarrior版本。

(1)ECU软件框架

① ECU软件框架的构成。图2⁃11所示为ECU软件系统基本结构示意框图。如图2⁃11所示,将单片机系统控制有关的部分进行了集中表示。系统工作任务集合和系统工作中断集合包括了单片机系统工作的基础软件部分。而其他的部分可以看成是控制软件部分。初始化任务集合则既有系统初始化内容也有控制初始化内容。

图2⁃11 ECU软件系统基本结构

② 任务和中断处理程序。任务是指一段计算机子程序(在有的计算机语言中称为过程,在C语言中称为函数)。该子程序受任务处理函数调用,用于完成某项特定的控制工作。通俗而言,任务是一种可以通过软件调用的子程序。在程序中,与任务对应的子程序是否被执行,要由这项任务对应的状态标志来决定。状态标志是一个逻辑量,例如:当状态标志的值为1时,该任务就处于“激活”状态;如果状态标志为0,则该任务处于“休眠”状态。当任务处于“激活”状态时,会进入任务的执行队列中等待执行。

中断处理程序是由硬件事件引起的一段计算机子程序。这种硬件事件是由系统初始化程序或事件发生前执行的其他程序设定好的。例如:当曲轴传感器产生的脉冲信号出现下降沿时,将产生相应的中断。ECU程序将停止当前的程序执行,保护好当前的工作现场,然后跳转到曲轴中断服务子程序来执行。当这一子程序执行完成后,会返回到原来转出的程序位置,恢复原来的工作现场,然后接着执行原来的指令序列。不同的硬件事件将引向执行不同的处理程序,有时在中断处理程序执行时,可能会有新的中断发生,这称为中断的嵌套。

这种中断的嵌套会造成中断处理程序的嵌套,每一层嵌套的中断处理完成后,将返回上层中断处理程序继续执行。实际应用时,应注意避免中断处理过程时间过长。因为在处理某个中断信号时,对于该中断都是先做屏蔽的。如果在该中断信号下一次发生前未能完成处理,系统对下一次发生的中断信号将不会响应。如果中断处理过程时间过长,会在逻辑上造成混乱。例如:由曲轴信号齿下降沿信号引发的曲轴中断,如果在下一齿信号到来时中断服务程序还未执行完,则下一齿信号将被忽略,这就会造成在中断服务中的齿计数出现遗漏,造成错误。不过,目前的单片机系统由于工作速度很快,只要在设计时注意不要让中断处理程序执行时间太长,一般都不会出现这种问题。

任务与中断处理程序的相同之处在于:都是为实现一些功能而设置的计算机子程序,都可看作存在休眠和激活状态,处在激活状态时才能被执行,执行完成后都会返回到原来的程序位置执行下一句指令,并退出激活状态。其不同之处在于:任务是靠乞讨程序中的语句来激活的,而中断处理程序是靠硬件事件来激活的;任务在被激活后,对应的程序会进入任务执行队列等待执行,而中断处理在被激活后会立即开始执行。

(2)ECU软件的运行机理说明

图2⁃11中由“加电启动”框开始的框图是ECU程序主流程示意图。对于启动过程几乎是完全相同的:加电过程或复位过程使一个称为 reset(复位)的端口线被拉到低电平,这一动作会导致所有寄存器复位,并使指令地址寄存器处于全0状态,然后从指令地址寄存器所指向的0地址开始调用指令,在程序形成时,总是在0地址内放一条跳转指令,跳到所设计的指令入口地址。不过上述过程对于我们从事控制软件的工程人员而言不必过问,编译和连接程序会自动完成这些配置。

加电启动后,进入程序的初始化过程。初始化过程既有系统的初始化,又有控制的初始化。系统的初始化由基础软件部分来完成,而控制的初始化则需要在控制软件中实现。控制初始化主要是对一些控制变量赋初值。

完成初始化后,ECU系统将进入一种正常的工作状态。在我们的实例中,系统中断处于正常工作状态,将有以下中断功能存在:实时中断RTI每256μs产生一次;曲轴中断对曲轴信号下降沿响应;凸轮轴中断对凸轮轴信号下降沿响应。

上述的工作状态会为完成柴油机工作控制创造必要的条件:RTI实时中断的操作,完成一些传感器信号的输入,这主要有进气压力和温度传感器、冷却液温度传感器、加速踏板传感器;曲轴中断响应机制能够捕获曲轴脉冲信号中的每一个下降沿,凸轮轴中断响应机制能够捕获凸轮轴脉冲信号中的每一个下降沿,这两者的综合处理能够确定柴油机的转速和相位,而依据转速和相位信号,柴油机供油驱动就可以工作了。

初始化后进入程序的主循环,对于大多数自动控制程序几乎都是这样。主循环中主要是执行一个任务处理函数。由于循环是无穷尽的,因此,任务处理函数被无限地循环执行,其实,这个任务处理函数的工作内容只有一项,就是将现有被激活任务按优先级排序后,执行其中优先级最高的任务,然后让这一任务回到休眠状态。

简单来说,当程序处在主循环过程中,会由于硬件中断引发ECU执行对应的服务程序,这些服务程序会激活一些任务进入执行队列。所有这些硬件中断服务程序和任务的协调就能够实现柴油机的工作控制:输入传感器信号,根据信号完成处理获得控制数据实现对供油系统定时、定位、定量的供油控制等。

(3)控制软件的主要变量及相关因素

对柴油机的控制受一些关键性的参数量值的影响,这里列出这台 EDBM ECU的部分变量参数。对于基础软件中用于自身层次工作使用的变量,是完全封闭在基础层内的,控制层用户可以不过问,但基础软件中也有部分变量是提供给控制层使用的。对于这些变量,控制层只能利用而不能改变;其他的变量是控制层定义并使用的。这里所说的在控制层用到的变量都是指全局变量。为了便于叙述,在这里对变量做了简单说明。在后面对其做应用时,会进一步了解到它们的意义和实际使用方法。

① 基础层软件变量参数。表2⁃1列出的基础层软件变量参数是由基础层软件定义并运用,但其值在控制层要进行引用的变量。

表2⁃1 基础层软件变量参数

② 控制层参数变量。控制层参数变量见表2⁃2。

表2⁃2 控制层参数变量

续表

续表

表2⁃3是一组用于高压共轨系统多次喷射控制用的变量。

表2⁃3 用于高压共轨系统多次喷射控制用的变量

表2⁃4是用于模拟量采样的变量。

表2⁃4 用于模拟量采样的变量

① 所谓瞬态量是针对每次采样所获得的即时值,由于这一值可能由于外部干扰等原因产生临时的误差,因此需要对其做滤波处理后才能用于实际控制。对于其他模拟量输入时的瞬态量,也是同样含义。
② 即对于瞬态量通过滤波获得的结果值。整定值才是用于物理量计算的值。
③ 进气压力采样值来自进气压力传感器,这类传感器一般是在电路上控制输入电压在0~5V的范围,而通过一个10位模数转换器,转换为0~1023的数字量。但对于具体的物理量传感器,除了断路或短路,输入值不会很极端,一般在50~950之间。进气压力采样值通过一个换算表来实现与进气压力值之间的换算,控制过程一般直接使用进气压力值来实现。针对不同的进气压力传感器,只要更新这一换算表,就可以实现控制程度的通用。对于其他的物理量传感器,如轨压、气温等,情况和方法都是类似的。
④ 当加速踏板有动作时为1,无动作时为0。但有的加速踏板部件无这一信号,而将加速踏板传感器采样低于一定值(如150)时认为加速踏板无动作。

表2⁃5所列的全局变量只是对于电控分配泵系统才有用,用于处理油量调节滑套位置传感器的数据。

表2⁃5 处理分配泵滑套位置传感器参数

表2⁃6是4组(?表示1~4)可用于扩展使用的模拟量输入变量组。这4组变量可以在对模拟量项目做扩展时使用。

表2⁃6 用于扩展的模拟量输入变量组

表2⁃7是用于开关量采样的变量。

表2⁃7 用于开关量采样的变量

表2⁃8是一些常用的控制变量。

表2⁃8 一些常用的控制变量

续表

③ 结构参数变量。结构参数是指对于曲轴与凸轮轴传动关系相位的不同位置关系。在电控柴油机中,这种位置关系既与燃油泵的安装位置有关,也与传感器的安装位置有关。

注意:这里介绍的结构参数内容只涉及电控共轨系统和电控单体泵系统。而对于电控分配泵系统,没有这样的结构特征,控制过程的相关要素有些不同。

在结构安装完毕后,这两种传感器输入的信号相对于曲轴相位的关系就确定了。如图2⁃12所示。在这一实例中,图中反映的是一个柴油机工作循环内的曲轴信号与凸轮轴信号的关系,上边是曲轴信号,下边是凸轮轴信号。曲轴信号重复了两次(两圈),对应着一圈凸轮轴信号。

图2⁃12 曲轴和凸轮轴信号图

从曲轴信号左侧第一个缺齿处开始曲轴齿计数,缺齿后第一齿定为0号齿,向右顺序编为1、2……缺齿也要进入齿计数,直到第一缺齿处最后一个缺齿编为119号齿。TDC对应气缸压缩上止点位置。例如:在上例中,当曲轴传感器接收到第11号齿的信号(下降沿)时,曲轴的位置位于第1缸上止点。

在对凸轮轴齿计数时,将多齿后第一齿定为1号齿,顺序编为2~4号齿,对于4+1凸轮齿结构,只有4个有效齿。在图2⁃12中,我们设定ECU捕获的都是下降沿信号。要确定柴油机工作相位,有两个结构角度需要确定。一是当曲轴处在第一缸上止点时,曲轴传感器对应的齿位置。也可以说第一缸上止点对应的齿位置。二是凸轮轴第一齿对应的曲轴传感器的齿位置。这就有了A_DePoI、A_DeCam这两个变量,都用整齿号表达,见表2⁃9。

表2⁃9 结构参数变量

① 在图2⁃12中可看出第一缸上止点对应的齿号是11;而凸轮轴第一齿对应曲轴齿号是88。上止点和凸轮轴第一齿位置都正对着曲轴齿的下降沿。这使对这两个位置的描述得到了简化(用整齿号即可)。在实际设计结构时,也确实应该尽量做到这一点。如果难以做到,则这两个变量就无法用整数表达,会给后续的处理造成一点麻烦。通过以上介绍也可以看出,A_DePoI描述了曲轴传感器与第一缸上止点的相对相位,A_DeCam描述了凸轮传感器与曲轴传感器的相对相位。

(4)控制软件所需要的基础软件资源

要完成对本章实例中电控柴油机基础模型EDBM工作的控制,就需要ECU基础软件部分提供一些对硬件操作的基本功能和可用资源。这些功能和资源用于完成对电控系统硬件的直接操作,与硬件有直接联系。ECU系统都应能够提供类似的基础软件功能和资源。例如:对于后文介绍的功能函数,在实际上任何一种ECU系统中都有类似的功能资源,但是这些功能不一定都对用户开放。作为柴油机控制软件开发人员,可以直接使用这些功能完成设计而不必关心这些基础软件功能的具体实现过程。相关基础软件资源见表2⁃10。

表2⁃10 控制软件的基础软件资源

续表

(5)控制软件的功能函数

在基础软件资源的支持下,控制软件部分可以获得对硬件的操作能力。控制软件必须利用这些能力实现对柴油机的控制,这才是ECU控制软件部分的任务,也是作为柴油机专业人员的目标。下面列出控制软件需要实现的一些功能,其中有的功能是根据实际需求可选择的。详见表2⁃11。

表2⁃11 控制软件的功能函数

续表

(6)控制软件的程序结构

在实例中,需要设置用于指导程序设计的基本程序结构。为了便于控制软件的设计人员实现设计制作,为这种设计工作提供技术支持的开发系统一般都提供基本的程序结构框架。在这一框架中既包括基础软件部分,也为控制软件确定了设计结构。下面采用虚拟的EDBM_ECU作为开发平台,同时为控制软件开发提供了简明的框架。EDBM_ECU的控制软件程序模块详见2⁃12。

表2⁃12 控制软件的程序结构

(7)上电和关电

ECU上电即给电控系统接通电源控制开关;关电则是指断开这一控制开关。这种操作其实并不是直接对为ECU供电的电源进行,而是操作控制回路打开或关断主回路。这就可以使对ECU的实际供电用一些较复杂的逻辑来控制。例如:在加电时,系统会在完成了一些必要的初始化操作后再对主回路接通电源;而在关电时,系统不会立即关掉主回路的电源,而是在完成一些必要的后处理后再真正关闭电源。

可以理解为:在上电时,系统要先执行系统主函数main();而在关电时,则要先执行一个系统关电函数 Sys_Off()。这两个函数都属于基础软件,但它们都为控制层留了“接口”。例如对于main()函数,在该函数的语句中有一函数执行语句:

main_Sub();  //执行 main_Sub()函数

  这一函数虽然是在基础软件函数main()中调用的,却是给控制层使用的。这一函数在EDBM_ECU_Control_Function.c中定义:

void main_Sub()

{       //在此加入控制层需要在初始化时完成的语句;

 

}

  对于 Sys_Off(),也对应一个 Sys_Off_Sub()函数。

这样,当加电后执行main()函数时,控制层的初始化功能也得以实现。关电时的情况也相似:Sys_Off_Sub()函数供用户加入自己的控制层代码,在关电时先执行完成这些代码才会最后关闭电源。