在嵌入式软件开发过程中,很多地方都会用到计时器这个模块,用来进行某个状态条件的确认。今天,脚主就分享下Simulink中计时器的5种实现方式。
Matlab Function的实现方式
计时器模块的本质是一个累加逻辑,所以用代码实现是比较方便的。在Simulink中实现代码功能,首先想到的就是MATLAB Function 。
MATLAB Function 模块可以帮助我们在Simulink 模型中实现MATLAB函数的功能,也可以生成可读、高效、紧凑的 C代码,应用于嵌入式系统中。
常用的计时器模块基本功能需求是:条件满足时,开始计时,时间逐渐累加;条件不满足时,停止计时,时间保持不变。所以使用MATLAB Function搭建的计时器Simulink模型如下图。
图中u模拟计时器的条件,是一个周期为5,占空比为50%的方波信 ,t 等于Simulnk模型的仿真步长,x是上一时刻的计时数值。MATLAB Function中的代码如下:
function y = fcn(u,t,x)
if u == 1
x = x + t;
end
y = x;
进行10秒的仿真,结果如下图:当输入条件等于1时,计时器逐渐累加;当输入条件等于0时,计时器保持不变。
Simulink基础模块的实现方式
脚主在平时的Simulink软件开发中,有一个个人的偏好,尽量使用Simulink基础模块实现功能需求,所以比较建议采用方式2来实现计时器功能。
使用基础模块搭建的Simulink模型如下图,主要借助switch和add来实现。
基本思路也是一样,条件满足就累加,不满足沿用上一时刻数值,其仿真结果与方式1完全一致。
Fcn的实现方式
对于仅仅使用数学计算就可以实现的功能,也可以考虑使用Fcn模块。
Fcn是适用于数学表达式的建立,可以很方便的进行数学计算。
使用Fcn模块搭建的Simulink模型如下图。
使用mux将3个输入封装成向量,在Fcn中分别使用u(1)、u(2)、u(3),再进行相应的数学计算,其仿真结果也与方式1完全一致。
Stateflow状态机的实现方式
计时器功能也可以分为两个状态,即累加状态和保持状态,所以也可以使用Stateflow来实现。
使用Stateflow状态机搭建的Simulink模型如下图,其仿真结果也与方式1完全一致。
Chart内部如下:
这里有一个细节留给大家思考:为什么要增加一个初始化的Junction?
Stateflow流程图的实现方式
在Simulink软件开发过程中,对于比较简单的Stateflow逻辑,尤其是条件选择逻辑,可以使用流程图代替状态图,以简化逻辑。
使用Stateflow流程图搭建的Simulink模型如下图,其仿真结果也与方式1完全一致。
Chart内部如下:
以上,在Simulink中使用了5种方式介绍计时器的实现方式。
虽然每一种方式看起来都比较简洁,但是常常做一下这种简单问题的多种思考,可以开阔我们的思维,也可以把我们自己的知识点、技能点整理一下,整理的多了,自己的知识体系也就慢慢形成了。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!