我不了解PID控制器的积分部分

use*_*838 11 controller integral control-theory pid-controller

我不理解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
Run Code Online (Sandbox Code Playgroud)

积分在开始时设置为零.然后在循环中它整合了错误随着时间的推移.当我对测量值或设定值进行(正)变化时,误差将变为正值,积分将在整个时间内(从头开始)"吃掉"值.但我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随时间积分的误差),并且仍然会对控制器的输出值有所贡献,但它不应该.

请问有人解释一下吗?

Dav*_*e X 9

想想稳态下的输出......您希望measured_value是设定值,误差为零,输出是将过程保持稳定在测量值所需的任何值.(在某些情况下可能为零,但输出可能并不总是需要为零 - 例如:您需要将加热器设置为标记6.5以将房间保持在72F.)

如果误差为零,则比例误差项对输出没有任何贡献.

如果进程处于稳定状态,那么error-previous_error为零,并且派生项没有贡献.

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

作为恒温器示例,如果房间内电加热器旋钮上的输出为0-11单位,并且您正在测量房间中的度数F而不是每1分钟72F的设定值,那么积分总和你记录的degreesFtooCold*分钟,Ki术语会将观察到的错误总和转换为表盘上的单位.

它非常精细并且预期积分在稳态下不为零.


Aki*_*nen 1

让我们这样看:误差本身稳定为零是不够的。要求积分归零,即测量值随时间的平均值与设定值相符。

一个不好的例子是尝试使用一些 Ki、Kp、Kd 从零达到 100% 的值。

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

x 的值是多少?平均值为 80.777。连100都不到。

  • 我必须不同意。过冲是 I 的属性。另一方面,P/D 具有未到达目的地的属性。此外,积分通常是宽容的: I(n+1) = I(n)*alpha + (1-alpha)*error 会慢慢忘记早期的错误,更加强调当前时刻。 (3认同)