Arduino PID库 (6):初始化
参考:手把手教你看懂并理解Arduino PID控制库——初始化
Arduino PID库 (5):开启或关闭 PID 控制的影响
问题
在上一节中,我们实现了关闭和打开PID的功能。我们关闭了它,但现在让我们看看当我们重新打开它时会发生什么:
哎呀!PID 跳回到它发送的最后一个输出值,然后从那里开始调整。这会导致我们不希望有的输入凸起。
上一节,讨论的是 PID 控制由开转关的过程中存在的问题,那么紧接着上一节,如果在关闭后,突然再次开启,那么会产生什么问题呢?直观来看,对于被控量会出现图中,绿色线的一个 bump,这个 bump 是由于由关转开的一瞬间,输出突然放大,那么对于灵敏度高的系统,则会出现,滞后大的系统可能不会如此明显,但不管怎么说,为了杜绝一切不利因素,我们都应该想办法消除这个 bump。由于这个 bump 的根因是由于输出的突变而造成的,所以需要想办法控制这个输出的突变。
解决方案
想一想,所有此类问题都是发生在时间轴上的,那么 PID 控制中时间轴会影响的项只有积分项和微分项(可以想象,比例项为 Kp * (设定值 - 被控量)
,这是一个连续量,不存在突变的可能(除非是采样时间特别长,在改变输出前,被控量飞上天了),所以只需要从这两项上想办法,控制住这两项的突变,即可控制住输出的突变。首先,问题发生在 PID 关闭转开启的过程中,由于 PID 开启关闭控制的函数是 SetMode,所以在此函数中,增加一个 initial
函数用于控制积分项和微分项即可。具体做法是:
1、更新微分项上一次采样值为 PID 开启一瞬间的采样值,这样可以保持微分项维持在上一次开启结束的状态不变。
2、将积分项设置为当前的输出,为什么要这么做呢?积分项由于 PID 关闭长时间维持关闭前的状态,一旦开启,如果不改变积分项,输出会瞬间被拉回到上一次开启结束的状态,突变就这样产生了
这个很容易修复。由于我们现在知道何时打开(从手动到自动)