PID(比例积分微分)中的 I 是最后几个先前误差的总和,仅通过其增益进行加权。
使用 error(-1) 表示前一个错误,使用 error(-2) 表示之前的错误等等...“I”可以描述为:
I = (错误(-1) + 错误(-2) + 错误(-3) + 错误(-4) 等...) * I_gain
为什么 PID 设计时不是将“I”设计为将重要性倾斜到过去,例如:
I = (错误(-1) + (错误(-2) * 0.9) + (错误(-3) * 0.81) + (错误(-4) * 0.729) + 等等...) * I_gain
编辑:改写
最佳答案
积分项是过去所有误差的总和。您只需在每个时间步将误差添加到“积分器”即可。如果需要限制此值,则在超出范围时将其限制为最小值或最大值。然后将此累积值复制到输出中,并添加比例项和导数项,并在必要时再次钳位输出。
导数项是当前误差与之前误差的差值(误差的变化率)。 P当然与误差成正比。
err = reference - new_measurement I += kI * err Derivative = err - old_err output = I - kD * Derivative + kP * err old_err = err
这就是你想要的。当然省略限制。
一旦 Controller 达到引用值,误差将变为零,积分器将停止变化。噪声自然会使其稍微反弹,但它将保持在满足目标所需的稳态值,而 P 和 D 项则完成了减少 transient 的大部分工作。
请注意,在稳态条件下,I 项是唯一提供任何输出的项。如果控制已达到引用值并且需要非零输出,则它仅由积分器提供,因为误差为零。如果 I 项使用加权误差,它将开始衰减回零并且无法维持所需的输出。
关于math - 比例积分导数中的 I,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372117/