问题描述: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
具体仿真如下: