一种信号限制及恢复的优化处理算法
为你等待
|
2020.01.08
|
0
+关注

一、 概述

在控制系统算法开发中,需要对于某些重要信号做限制处理,对于限制条件恢复后,信号怎么输出的选择上也有多种选择,比如限制条件满足,对输出信号作限制,限制条件恢复,输出信号立即恢复为正常值;或者限制条件恢复,输出信号按照一定的梯度逐渐恢复至正常值等等。

具体选用哪种处理方式,取决于具体算法需求。之前的文章中详细介绍过用Simulink基本模块建模以及仿真验证的方法,本文就以上第二种信号处理方式,通过Simulink的状态流state flow来建模以及仿真验证。

二、 Simulink状态流State Flow

根据以往的汽车电控软件开发经验,以整车跛行(整车出现故障,需要进行限速)扭矩限制搭建了如下图的Simulink的状态流state flow算法模型:

模型输入信号说明:

LimCond_flg:信号限制条件

TqOrg_Nm:原始输入扭矩

TqLimMax_Nm:限制最大扭矩

模型输出信号说明:

TqOut_Nm:输出扭矩 模型参数说明:

TqStepInc_Nm:递增扭矩

Chart由三个状态组成,具体如下:

算法说明:

TqNormal状态

进入条件:上电默认状态或者TqInc状态跳出条件满足

处理:TqOut_Nm=TqOrg_Nm,并记录LimCond_flg上一次状态LimCondOld_flg=LimCond_flg

TqLimit状态

进入条件:LimCond_flg为TRUE

处理:TqOut_Nm=min(TqOrg_Nm,TqLimMax_Nm)

TqInc状态

进入条件:检测到LimCond_flg 下降沿LimCondOld_flg>LimCond_flg 且TqOrg_Nm>TqLimMax_Nm

处理:TqOut_Nm=Min(TqOrg_Nm,TqOut_Nm+TqStepInc_Nm)

跳出条件:当输出扭矩增加到大于或等于输入原始扭矩,也即:TqOrg_Nm<=(TqOutOld_Nm+TqStepInc_Nm)

通过三个状态转移的方法,实现了原来由Simulink基本模块搭建,逻辑看起来略显复杂,且要通过S-R触发器才能锁存状态的逻辑,如下图:

三、 算法仿真验证

仿真模型:

如上的仿真模型中,给定同样的输入激励:

1) 通过Signal Builder模块给定LimCond_flg,0s~2s为0,2s~6s为1,6s以后为0

2) 通过Constant模块给定TqOrg_Nm为100

3) 通过Constant模块给定TqLimMax_Nm为20

4) 给定TqStepInc_Nm为1

5) 设置离散求解器,仿真步长为0.01s,仿真时长为10s

仿真结果:

仿真结果分析如下:

1)0s~2s,TqOut_Nm为原始输入扭矩100,符合需求

2)2s,TqOut_Nm为限制最大扭矩20,符合需求

3)2s~6s,TqOut_Nm为限制最大扭矩20,符合需求

4)6s~6.8s,TqOut_Nm输出从20递增到100,递增时间0.8s((100-20)*0.01),符合需求

5)6.8s~10s,TqOut_Nm恢复为原始输入扭矩100,符合需求

小结

以上提及的算法是作者以往的实际电控项目实施中,以整车跛行扭矩限制及恢复需求为参考,该算法已经在代码生成以及实车测试中得到充分的验证。为了方便简要介绍,模型已经经过简化处理。

之前的篇幅专门对Simulink基本库模块搭建以及仿真做了讨论,本文通过Simulink转态机State Flow的方式来进行算法的建模。经过用同样的输入激励进行模型仿真,其结果也证明了该方法仿真结果与原来方法仿真结果的一致性,从而将原来的基本模块逻辑做了优化。在确保功能不变的前提下,提高算法的可读性,同时视觉上是不是也清爽了很多呢?

精选留言
JONE
文章很实用
2020.01.17
会飞的伞
好文章
2020.01.17
会飞的伞
文章不错
2020.01.10
延伸阅读
2020.10.02
13995阅读
更多报告干货
写留言
2355
阅读
收藏
回到顶部