首页 文章

Simulink中的块积分器溢出

提问于
浏览
2

我正在研究Matlab simulink块:均值(可变频率) . 该块显示在http://www.mathworks.com/help/physmod/sps/powersys/ref/meanvariablefrequency.html

该算法的第一步是整合输入信号 . 但是,当输入信号是常数时,积分器将累积直到它溢出 . 有谁知道如何在这样的块中解决这个问题 .

我还附上了下面这个块的图表:
enter image description here
稍后,我将它改为离散时间模型并在我的DSP中实现这样的算法 . 如果您有任何建议,我是一个很好的倾听者 .

2 回答

  • 1

    您需要实现 Anti-Windup 控件 . 最简单的方法是使用 PID-Controller 并将常数和差分增益设置为零 . 对于Anti-Windup,您通常有两种选择:反算和钳位 . 有关差异和参考,请查看本文:Anti-windup control using a PID-Controller

  • 1

    您正在实施的功能是

    y(t) = Integrate_{x=0->t} u(x) dx  -  Integrate_{y=0->t-T} u(y) dy          (1)
    

    其中 T 是传输延迟 . 这可以通过替换 z = y + T 并由于积分的线性来重新排序

    y(t) = Integrate_{x=0->t} u(x) dx  -  Integrate_{z=T->t} u(z - T) dz
         = Integrate_{x=0->t} [ u(x) - u(x - T) ] dx + C                        (2)
    

    哪里

    C = Integrate_{z=0->T} u(z) dz
    

    是一个有限常数,它取决于初始条件,如果你的信号 u 在初始时间为零,则可以假定为0 .

    如果我们看一下具有DC偏移的输入信号,例如

    u(t) = DC + sin(w*t)
    

    然后实现 (1) 将首先进行整合然后减去,这将使您的注意力饱和或导致精度损失 . 但 (2) 将首先减去并因此删除任何DC

    u(x) - u(x - T) = DC - DC + sin(w*t) - sin(w*t - w*T)
                    = 0         sin(w*t) - sin(w*t - w*T)
    

    然后集成,而不会有饱和度的风险 . 因此,我建议更改实现如下:

    simulink design

    或者,您可以将理想积分器 1/s 更改为在DC处具有有限增益的低通滤波器,例如, 1/(1+s) 虽然这(以及@thewaywewalk建议的抗饱和控制器)与理想行为相比会使您的信号失真 .

    PS:感谢stackoverflow不支持正确的数学符号... :-/

相关问题