c++ 计时器_Simulink中计时器的5种实现方式

在嵌入式软件开发过程中,很多地方都会用到计时器这个模块,用来进行某个状态条件的确认。今天,脚主就分享下Simulink中计时器的5种实现方式。

Matlab Function的实现方式

计时器模块的本质是一个累加逻辑,所以用代码实现是比较方便的。在Simulink中实现代码功能,首先想到的就是MATLAB Function 。

MATLAB Function 模块可以帮助我们在Simulink 模型中实现MATLAB函数的功能,也可以生成可读、高效、紧凑的 C代码,应用于嵌入式系统中。

常用的计时器模块基本功能需求是:条件满足时,开始计时,时间逐渐累加;条件不满足时,停止计时,时间保持不变。所以使用MATLAB Function搭建的计时器Simulink模型如下图。

629e489bf8032f164eb24ad44c66fa71.png

图中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时,计时器保持不变。

ceedd0c09f2ddac872dceb0c724155c5.png

Simulink基础模块的实现方式

脚主在平时的Simulink软件开发中,有一个个人的偏好,尽量使用Simulink基础模块实现功能需求,所以比较建议采用方式2来实现计时器功能。

使用基础模块搭建的Simulink模型如下图,主要借助switch和add来实现。

82e64c2b13b270c35565888d451beb9b.png

基本思路也是一样,条件满足就累加,不满足沿用上一时刻数值,其仿真结果与方式1完全一致。

Fcn的实现方式

对于仅仅使用数学计算就可以实现的功能,也可以考虑使用Fcn模块。

Fcn是适用于数学表达式的建立,可以很方便的进行数学计算。

使用Fcn模块搭建的Simulink模型如下图。

638a5c3db30ea5a20fe50d1a8611d9b7.png

使用mux将3个输入封装成向量,在Fcn中分别使用u(1)、u(2)、u(3),再进行相应的数学计算,其仿真结果也与方式1完全一致。

Stateflow状态机的实现方式

计时器功能也可以分为两个状态,即累加状态和保持状态,所以也可以使用Stateflow来实现。

使用Stateflow状态机搭建的Simulink模型如下图,其仿真结果也与方式1完全一致。

60fbbf3655bdbb23e7195029169d0511.png

Chart内部如下:

feebf78153cd2f4a16c73e22b00d4aaf.png

这里有一个细节留给大家思考:为什么要增加一个初始化的Junction?

Stateflow流程图的实现方式

在Simulink软件开发过程中,对于比较简单的Stateflow逻辑,尤其是条件选择逻辑,可以使用流程图代替状态图,以简化逻辑。

使用Stateflow流程图搭建的Simulink模型如下图,其仿真结果也与方式1完全一致。

60fbbf3655bdbb23e7195029169d0511.png

Chart内部如下:

c6e7837a4f43ca5e73902a03b5fd10d7.png

以上,在Simulink中使用了5种方式介绍计时器的实现方式。

虽然每一种方式看起来都比较简洁,但是常常做一下这种简单问题的多种思考,可以开阔我们的思维,也可以把我们自己的知识点、技能点整理一下,整理的多了,自己的知识体系也就慢慢形成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值