我不理解PID控制器的积分部分。

12

我不理解PID控制器的积分部分。假设这是来自维基百科的伪代码:

previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start

一开始积分被设为零。然后在循环中,它将随时间积分误差。当我对测量值或设定值做出(正面的)改变时,误差将变为正数,并且积分将“吃掉”(从一开始)经过一段时间的值。但我不理解的是,当误差回稳到零时,积分部分仍然会有一些值(随时间积分的误差),并且仍会对控制器的输出值产生贡献,但它不应该这样。

有人能给我解释一下吗?


对于任何感兴趣的人,我实现了这个确切的算法来控制循环速度。http://stackoverflow.com/questions/38377820/throttling-await-for-inbound-messages - Jim
6个回答

11

在稳态时,考虑输出结果......您希望测量值为设定值,误差为零,输出为保持过程稳定在测量值的任何设置。 (在某些情况下可能为零,但输出不一定总是需要为零--例如:您需要将加热器设置为6.5以保持室温在72华氏度。)

如果误差为零,则比例误差项对输出不起作用。

如果过程处于稳态,则误差-上一个误差为零,则导数项不起作用。

如果输出为适当的设置,并保持过程处于稳态状态,则积分项必须是提供输出值的唯一项。 它已经累积了正确的错误记忆(以测量单位乘以观察时间为单位),可以通过Ki项将其转换为输出单位,Ki项的单位为outputUnits /(error * measurementTime)。

以恒温器为例,如果输出位于电加热器旋钮上的0-11单位,并且您每1分钟测量一次房间与72F的设定点之间的华氏度数,则积分项会汇总您记录的degreesFtooCold * minute,并且Ki项将把观察到的误差总和转换为刻度盘上的单位。

在稳态时,积分项为非零是完全可以的且是预期的。


1

I项用于稳态误差。请参考维基百科上的示例图。

http://en.wikipedia.org/wiki/File:Change_with_Ki.png

您可以通过改变I项的增益来观察图表中的变化。显然,由于积分饱和现象,Ki = 2太高了,这就是导致那种剧烈超调的原因。Ki = .5看起来还不错,但如果您想尽快达到稳定状态,那么需要再增加一点Ki。看看Ki = 1,它稍微超调了一点,但仍比Ki = .5更快地达到稳定状态。所以您必须决定这种折衷是否值得。

1

让我们这样看待它:仅仅使误差本身稳定为零是不够的。需要使积分趋近于零,这意味着随着时间的推移,测量值的平均值与设定值相匹配。

一个糟糕的例子是试图使用一些Ki、Kp、Kd从零达到100%的值。

x = 0,60,80,90,98,99,100,100,100。

x的值是多少?平均值为80.777。离100还差得远。


1
我还是不明白,请你能再解释一下吗? - user561838
但是只有当测量值超过设定点时,积分才会变为零(因为我们需要负误差)。在您的示例中,如果(Ki为1且dt也为1),当测量值为100(=设定点)时,控制器的输出仍将非零(我认为它会振荡)。但是,如果PI(D)控制器调整得很好,就不会出现超调。我还是不明白 :( - user561838
3
我不同意。超调是I项的特性。而P/D项则具有无法到达目的地的特性。此外,积分通常是宽容的:I(n+1)= I(n)* alpha +(1-alpha)*误差会缓慢地遗忘早期的错误,更加强调当前时刻。 - Aki Suihkonen

1

根据您想要控制的系统和传感器的质量,控制器与系统/工厂之间总会存在某种干扰。当出现这种干扰时,控制器的积分部分不会变为零,而是会对抗干扰!这是由于积分将保持变化,直到系统输出等于参考值(即积分值与干扰相反)。

例如,请参见this page描述的控制参数:当系统和输入具有一定的特征时,可能会发生定态误差,积分会试图对抗这种误差,从而导致更低的最终误差,但在某些情况下可能会产生更多超调。

此外,传感器的准确性/噪音可能会对积分值的准确度造成限制,可能会围绕零震荡。


1
我认为这里的部分解释是,随着积分部分超调,比例部分将开始反对它。第二次超调因此会更小,第三次甚至更小,依此类推。但如上所述,通常会有一些过程噪声导致误差非零,控制器可能永远无法达到恒定输出,但输出的变化应该非常小。

0

恕我直言,您有理由质疑PID定义,因为它在PID控制中存在一个错误,涉及到积分项。

这个错误可以如下所示:

  1. 即使误差为零,积分项也会导致输出动作。
  2. 积分是基于先前不再相关的误差。

如果控制器将输入与输出进行比较,并通过负反馈将误差驱动到零,则比例控制可以产生0误差。

正确的PID术语:

  • D项:将变化(微分)添加到稳态输入中,以组合在求和结点中。
  • I项:将变化(微分)添加到稳态输出的负值(负反馈)中,以组合在求和结点中。
  • 积分是负反馈时的微分。
  • 输出与求和结点连接,具有非常高的增益和负极性(反相)。
  • P项:期望输出除以期望输入或输出信号与输入信号之比。
  • D项:微分加速输出响应输入,使输出更快地接近正确值。

当集成接近正确/期望值时,它会减慢输出响应速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接