基于simulink的周期采样与周期脉冲初探
前面我们了解了简单的基于simulink的常微分方程组和简单的时滞微分方程组的仿真,这次我们初步了解一下周期脉冲控制和周期采样控制的基本模块,为了给大家说清楚机理,我们不直接讲微分方程组,而是选择正弦信号作为例子,简要说明基于simulink的这两种控制方式的处理。一个正弦信号模块如下:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022221359958-38699085.png)
可能有的读者找到的正弦波信号的方框是有输入端的,如下:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022221503269-652030298.png)
我们在待会儿处理脉冲的时候要用到输入端,暂时不需要,不需要输入端即默认系统的仿真时间t,因此,我们可以点击正弦波信号模块,得到下图:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022221606004-1920620108.png)
选择“Use simulation time”即默认使用仿真的时刻,这样输入端就自然没有了。保存咱们搭建的框图,双击示波器“Scope”方框,运行(不记得怎么运行的看看前面的博文),得到下图:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022221801690-750135342.png)
这是一个很简单的正弦波信号,振幅是1,周期是$2\pi$,下面咱们考虑采样信号,这就需要借助“Zero-Order Hold”模块,如下图:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022221954957-1502859326.png)
双击此模块可以得到下图,输入采样周期,这里假定是0.5:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022222050584-866733764.png)
完成咱们的搭建如下:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022222116677-51168160.png)
保存后打开“Scope”模块,运行结果如图所示:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022222213156-1231053148.png)
大家很容易看到,每次信号都会保持0.5个单位的时间,即采样周期为0.5。
下面我们考虑脉冲信号输入,很惭愧,simulink我也是初窥,不知道哪个模块表示脉冲,但是,我可以借助自定义函数模块“Matlab Function”去写一个脉冲信号的输入。同样以正弦波信号为例,现在咱们希望每经过0.5个单位的时间,就有一次脉冲将信号振幅变成原来的2倍,该如何实现呢?这里需要对当前时刻做一个判断,它是不是0.5的整数倍?如果是,我们对信号就要做处理(乘以2),所以我们需要的自定义函数模块“Matlab Function”就得有两个输入(当前时刻和当前信号)和一个输出(改变之后的信号)。这里又带来一个问题是,时间怎么统一?这就需要借助“Clock”模块,这个模块就是输出当前的仿真时间,对整个框图都是统一的,因此,咱们可以搭建如下框图:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022223535944-1584336705.png)
其中,自定义函数模块“Matlab Function”的代码如下:
function y = fcn(t,u)
y = u;
T=0.5;%脉冲周期
if 0==mod(t,T)
y=2*u;%脉冲时刻信号处理
end
保存后,运行示波器“Scope”效果如下:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022223717076-59296343.png)
很明显,达到了咱们预期的脉冲效果。在这里需要说明一个问题,可能会有读者照着这个过程做,最后运行出来的脉冲效果如下:
![](https://img2018.cnblogs.com/blog/1450372/201910/1450372-20191022223823816-851768066.png)
出现这种情况的原因是仿真算法是变步长的,咱们可以根据前面的博文调整一下仿真算法为固定步长,而且步长取0.001或者0.01,都可以得到我们预期的效果。
今天这篇博文主要是对周期的脉冲和采样的处理一个初步探究,如何利用到系统的控制中去,我们后面再谈。
2019.10.22 王飞