我不了解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

一开始将积分设置为零。然后,在循环中,随着时间的推移,它会整合错误。当我对设定值进行(正)更改时,误差将变为正,积分将随着时间(从头开始)“消耗”这些值。但是我不明白的是,当误差稳定回到零时,积分部分仍将具有一定的值(随着时间的推移而产生积分误差),并且仍将对控制器的输出值有所贡献,但不应这样做,因为如果误差为零, PID的输出也应该为零,对吗?

有人可以解释一下吗?

Answers:


16

积分项的主要目的是消除稳态误差。在正常情况下,会有一个很小的稳态误差,积分主要用于消除该误差。然而,的确是这样,当误差变为0时,积分仍将为正,并会使您超调。然后,在超调后,积分将再次开始下降。这是积分项的负面影响。因此,总要权衡取舍,您必须调整PID控制器以确保过冲尽可能小,并将稳态误差最小化。这是微分项起作用的地方。导数项有助于最小化系统中的过冲。


8
稳态误差的一个很好的例子是关节的摩擦。假设您的PD控制器稳定在目标关节角度附近,但由于摩擦而无法完全到达目标关节角度。“ I”项将逐渐建立,并最终产生足够大的输入以克服摩擦。

2
另一个例子是转向偏差。如果事实证明转向控制中存在轻微偏差,或者对于踏板式机器人,尽管控制器将它们设置为相同的值,但一个踏板的旋转速度却比另一个踏板稍慢。正确设置的积分项可以对此进行更正。
ViennaMike

8

想象一下,您在自己的手臂上设置了PID控制器,这样您就可以直接拿出一杯咖啡。

  • 比例元素将控制您的手臂力量(相对于您的手部位置而言,该位置过高或过低)。
  • 导数元素将根据您已经移动的速度来调整强度,以免您的目标超调。
  • 不可或缺的元素将补偿重力的影响。没有它,杯子将停在比例力等于重力的位置。

听起来,您所坚持的代码部分是系统必须以某种方式测量咖啡的重量,而这样做的一种方法是随着时间的推移累积位置误差。大多数PID控制器都有一个附加术语,用于指定积分元素可以大小的合理限制。


2
+1。“如果误差为零,那么PID的输出也应该为零,对吗?” 正如伊恩(Ian)解释的那样,即使咖啡杯处于理想位置且误差为零,PID的输出也需要向上施加一定的力才能将咖啡杯保持在适当的位置。
大卫·卡里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.