No entiendo la parte integral del controlador PID

12

No entiendo parte integral del controlador PID. Asumamos este pseudocódigo de Wikipedia:

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

Integral se establece en cero al principio. Y luego en el ciclo está integrando el error con el tiempo. Cuando realizo un cambio (positivo) en el punto de ajuste, el error se volverá positivo y la integral "comerá" los valores a lo largo del tiempo (desde el principio). Pero lo que no entiendo es que, cuando el error se estabiliza de nuevo a cero, la parte integral seguirá teniendo algún valor (errores integrados a lo largo del tiempo) y seguirá contribuyendo al valor de salida del controlador, pero no debería, porque si el error es cero, la salida de PID también debería ser cero, ¿verdad?

¿Alguien puede explicarme eso por favor?

usuario561838
fuente

Respuestas:

16

El propósito principal del término integral es eliminar el error de estado estacionario. En el caso normal, habrá un pequeño error de estado estacionario y la integral se usa principalmente para eliminar este error. Sin embargo, es cierto que cuando el error llega a 0, la integral seguirá siendo positiva y hará que se exceda. Luego, después del sobreimpulso, la integral comenzará a descender nuevamente. Este es el efecto negativo del término integral. Por lo tanto, siempre existe una compensación y debe ajustar el controlador PID para asegurarse de que el sobreimpulso sea lo más pequeño posible y que se minimice el error de estado estacionario. Aquí es donde entra en juego el término derivado. El término derivado ayuda a minimizar el sobreimpulso en el sistema.

JuliusG
fuente
8
Y un buen ejemplo de error de estado estacionario es la fricción en una articulación. Digamos que su controlador PD se asienta cerca de su ángulo de unión objetivo, pero no puede llegar allí debido a la fricción. El término "I" se acumulará lentamente y eventualmente generará una entrada lo suficientemente grande como para superar la fricción.
Ben
2
Otro ejemplo es el sesgo en la dirección. Si resulta que hay un ligero sesgo en el control de la dirección, o, para los robots de estilo de banda de rodadura, una banda de rodadura gira un poco más lenta que la otra a pesar de que el controlador los ajuste al mismo valor, habrá un sesgo. El término integral, establecido correctamente, corrige eso.
ViennaMike
8

Imagine que configura un controlador PID en su propio brazo, para poder sostener una taza de café directamente frente a usted.

  • El elemento proporcional controlaría la fuerza de su brazo en relación con la posición de su mano demasiado alta o demasiado baja.
  • El elemento derivado ajustaría esa fuerza en función de la rapidez con la que ya se estaba moviendo, para que no sobrepase su objetivo.
  • El elemento integral compensaría los efectos de la gravedad; sin ella, la copa se detendría donde la fuerza proporcional igualara la fuerza de la gravedad.

Parece que la parte del código en la que está atascado es que el sistema debe medir de alguna manera el peso del café, y una forma de hacerlo es acumular el error de posición con el tiempo. La mayoría de los controladores PID tienen un término adicional para especificar un límite razonable en el tamaño que puede tener el elemento integral.

Ian
fuente
2
+1. "si el error es cero, la salida de PID también debería ser cero, ¿verdad?" Como explica Ian, incluso cuando la taza de café está en la posición perfecta y el error es cero, la salida del PID debe tener cierta fuerza hacia arriba para mantener esa taza en su posición.
David Cary