Arduino PID库 (6):初始化

Arduino PID库 (6):初始化

参考:手把手教你看懂并理解Arduino PID控制库——初始化
Arduino PID库 (5):开启或关闭 PID 控制的影响

问题

在上一节中,我们实现了关闭和打开PID的功能。我们关闭了它,但现在让我们看看当我们重新打开它时会发生什么:
NoInitialization

哎呀!PID 跳回到它发送的最后一个输出值,然后从那里开始调整。这会导致我们不希望有的输入凸起。
上一节,讨论的是 PID 控制由开转关的过程中存在的问题,那么紧接着上一节,如果在关闭后,突然再次开启,那么会产生什么问题呢?直观来看,对于被控量会出现图中,绿色线的一个 bump,这个 bump 是由于由关转开的一瞬间,输出突然放大,那么对于灵敏度高的系统,则会出现,滞后大的系统可能不会如此明显,但不管怎么说,为了杜绝一切不利因素,我们都应该想办法消除这个 bump。由于这个 bump 的根因是由于输出的突变而造成的,所以需要想办法控制这个输出的突变。

解决方案

想一想,所有此类问题都是发生在时间轴上的,那么 PID 控制中时间轴会影响的项只有积分项和微分项(可以想象,比例项为 Kp * (设定值 - 被控量),这是一个连续量,不存在突变的可能(除非是采样时间特别长,在改变输出前,被控量飞上天了),所以只需要从这两项上想办法,控制住这两项的突变,即可控制住输出的突变。首先,问题发生在 PID 关闭转开启的过程中,由于 PID 开启关闭控制的函数是 SetMode,所以在此函数中,增加一个 initial 函数用于控制积分项和微分项即可。具体做法是:

1、更新微分项上一次采样值为 PID 开启一瞬间的采样值,这样可以保持微分项维持在上一次开启结束的状态不变。

2、将积分项设置为当前的输出,为什么要这么做呢?积分项由于 PID 关闭长时间维持关闭前的状态,一旦开启,如果不改变积分项,输出会瞬间被拉回到上一次开启结束的状态,突变就这样产生了
这个很容易修复。由于我们现在知道何时打开(从手动到自动)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值