Simulink中计时器的5种实现方式

在嵌入式软件开发过程中,很多地方都会用到计时器这个模块,用来进行某个状态条件的确认。今天,脚主就分享下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进行处理,非常感谢!

上一篇 2020年7月6日
下一篇 2020年7月6日

相关推荐