Bootstrap

Simulink 触发计数器(自制)

问题描述:simulink仿真中,需要进行上升沿触发计数,但是该触发不是连续的(simulink仿真是关于时间连续,该触发可以是外部信号)。

实现方法:使用Matlab函数根据当前输入值与上一次的输出值对比,如果是上升的那么就可以计数,如果没有上升,计数保持不变。

使用到的simulink模块:Rocker Switch,Constant,Memory,MATLAB Function,Display。

注意:仿真时间是inf。

Rocker Switch需要connect到Constant,以便于更改该数值。具体仿真模型如下图。

MATLAB Function的内容如下

function [y,z] = fcn(u, r,counter)
% r是当前输入,u前一时刻的值,counter是计数器,记录上升触发次数。
if r==1 && u==0
    y=1;
    z=counter+1;
elseif r == 1 && u==1
    y=1;
    z=counter;
else
    y=0;
    z=counter;
end

具体仿真如下:

;