一、 概述
在控制系统算法开发中,需要对于某些重要信号做限制处理,对于限制条件恢复后,信号怎么输出的选择上也有多种选择,比如:限制条件满足,对输出信号作限制,限制条件恢复,输出信号立即恢复为正常值;或者限制条件恢复,输出信号按照一定的梯度逐渐恢复至正常值等等。具体选用哪种处理方式,取决于具体算法需求。本文就第二种处理方式,通过Simulink基本模块库,进行建模以及仿真验证。
二、 Simulink模型
根据以往的汽车电控软件开发经验,以整车跛行(整车出现故障,需要进行限速)扭矩限制搭建了如下图的Simulink算法模型:
模型输入信号说明:
LimCond_flg:信号限制条件
TqOrg_Nm:原始输入扭矩
TqLimMax_Nm:限制最大扭矩
模型输出信号说明:
TqOut_Nm:输出扭矩
模型参数说明:
TqStepInc_Nm:递增扭矩
算法说明
LimCond_flg为TRUE时,限制条件满足,按照如下图红色标记路径计算TqOut_Nm:
TqOut_Nm=Min(TqOrg_Nm,TqLimMax_Nm)
也即:选择原始输入扭矩和限制最大扭矩两者的最小值,作为输出扭矩。
LimCond_flg为FALSE时,限制条件不满足,按照如下图红色标记路径计算TqOut_Nm
TqOut_Nm=Min(TqOrg_Nm,TqOut_Nm+TqStepInc_Nm)
也即:选择原始输入扭矩,输出扭矩与递增扭矩之和,的两者最小值,作为输出扭矩。
说明:
1、 这样就能实现限制条件不满足时,每个计算周期,输出扭矩在限制前的扭矩基础上递增,从而逐渐恢复到正常的原始输入扭矩。
2、 其中通过限制条件的下降沿检测,以及原始输入扭矩与最大限制扭矩比较,置位S-R触发器的S端,使得S-R触发器的输出端Q置TRUE,从而使与S-R触发器相连的SWITCH选择输入1输出。
LimCond_flg为FALSE时,限制条件不满足,当输出扭矩增加到大于或等于输入原始扭矩时,按照如下图红色标记路径计算TqOut_Nm
TqOut_Nm=TqOrg_Nm 也即:选择原始输入扭矩,作为输出扭矩。
说明:
当输出扭矩增加到大于或等于输入原始扭矩时,S-R触发器的复位端R为TRUE,使得S-R触发器的输出端Q置FALSE,从而使与S-R触发器相连的SWITCH选择输入3输出。
三、 算法仿真验证
仿真模型
如上的仿真模型中:
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的方式来进行算法的建模及仿真验证,敬请期待!