Problema de error de estado estable del regulador PID

Estoy trabajando con un controlador PI que regula la temperatura a través de un ciclo de trabajo pwm.

Generalmente se controla bien. Sin embargo, el sistema requiere un cierto ciclo de trabajo mínimo para equilibrar la pérdida de calor. Cuando el PI finalmente lo hace bien, es decir, cuando el error proporcional es cero y el error integral es cero, la salida también llega a cero y hace que el sistema se apague. Luego, el PI comienza a trabajar duro para minimizar el error y lo repite.

¿Hay una solución para esto?

información adicional

El calentador solo puede pasar de 0 a 1 como máximo 3 veces por unidad de tiempo (requisito estricto). Esto causa la onda de diente de sierra de frecuencia fija que ves.

Aquí está la descripción general:

Descripción general de la temperatura.  La línea rosa es la temperatura exterior del recipiente.

Aquí está el área problemática ampliada y marcada. La integral cruza cero y da como resultado una salida de gemido que luego provoca un gran error y el patrón se repite:

Temperatura ampliada, con área problemática marcada

Salida PID. Amarillo: Integral, Magenta: Proporcional, Cian: Error, Rojo: Salida.

Puede ver cuando el Proporcional y el Integral están cerca de cero, se produce el gemido.

La salida PI se pasa a través de un limitador de trabajo y un filtro de signo, lo que da como resultado solo 0 o 1 salidas. Luego se pasa al regulador de frecuencia que no permite más de una transición 0->1 en el mismo 1/3 de unidad de tiempo. Esto significa que durante una parte del ciclo, se elimina la salida del controlador pi. La parte integral sigue aumentando sin embargo y se compensa en el próximo período.

Salida PID.  Amarillo: Integral, Magenta: Proporcional, Cian: Error, Rojo: Salida

Sí, se llama "tuning". Obviamente tienes coeficientes no óptimos para P e I.
@OlinLathrop ¿Quizás podría explicar un poco el proceso?
@OlinLathrop: Kp * E + Ki * IntE. ¿Exactamente para qué Kp y Ki (afinados con precisión) la suma se vuelve distinta de cero cuando E e IntE son cero? Con respeto, disfruté de sus otras publicaciones, aunque la condescendencia aquí no es productiva.
@MandoMando ¿El error integral realmente llega a cero? Normalmente, crece hasta un valor constante distinto de cero, hasta que la ganancia de error integral es suficiente para equilibrar la causa del error.
@PhilFrost sí. Eventualmente cruza cero. En ese momento, la salida se cae. Nos gustaría que el sistema tuviera un error promedio de cero, lo que significa que el error integral debe reducirse a cero. Es bueno para seguir rutas, respuesta escalonada y rechazo de perturbaciones, pero no es bueno para ser un regulador.
@MandoMando eso no suena bien. No sé si estamos hablando de lo mismo. Creo que para obtener una buena respuesta, deberá incluir más detalles sobre lo que está sucediendo. Algunos gráficos que muestren el objetivo, la respuesta y los términos PI y D a lo largo del tiempo serían buenos.
@PhilFrost seguro, gráficos agregados y más información.
Si entiendo la redacción de su pregunta, su calentador solo puede encenderse o apagarse, y tiene restricciones para encenderlo o apagarlo con mucha frecuencia. De hecho, esto hará que controlar las cosas sea más difícil.
También me pregunto sobre el encendido/apagado como gbarry. Acerca del limitador de servicio: ¿quiere decir que la salida PWM solo puede ser de servicio completo o de servicio cero?
@gbarry, tienes razón. en cada período, la salida del controlador PI está por encima de cero, por lo que el calentador se enciende. En algún momento durante el ciclo, la salida se vuelve cero o inferior y el calentador se apaga. En este punto permanecerá apagado hasta que comience un nuevo período. técnicamente, el deber de pwm puede tener cualquier valor entre 0 y 100%.

Respuestas (4)

Sé exactamente de dónde vienes. El error que estás cometiendo es suponer que el término integral cae a cero en estado estacionario. Este no es el caso y, de hecho, depende en gran medida de los detalles de implementación.

En primer lugar, comprenda que el término integral en un PID matemático es la integral desde el comienzo del tiempo (o, bueno, el sistema) y no "error en los últimos ciclos". Su implementación de PID o PI no debería causar que los contribuyentes más antiguos del término integral disminuyan en el peso relativo del término I. Dejame explicar. Al escribir el código del término I, el primer instinto es asumir que el término divergirá, cruzará el tamaño variable y se desbordará, y las personas intentan arreglar esto usando promedios móviles, degradando el peso de los valores más antiguos y todo tipo de trucos extraños. . Esto no debería suceder en un sistema PI o PID implementado correctamente. En su lugar, simplemente debe calcular I como I = I + Ki*Error.

El nivel de referencia requerido para mantener el sistema, que menciona en su pregunta, debe proporcionarse mediante el término I. Dado que no sabe cuánto es esto a priori, debe permitir que el controlador descubra este valor por sí mismo. Ese, de hecho, es el trabajo del término I. El valor de Ki debe ser lo suficientemente pequeño para que el controlador converja antes de que se desborde. Algunos pensaron en cómo esto funciona en papel ayudará. Trate de visualizar el proceso, no las condiciones de contorno específicas. Una cosa que debe tener en cuenta es que el término I no se construye a partir del valor absoluto del error. Incluye valores de error tanto positivos como negativos.

Además, imagine la condición en la que el controlador está alcanzando el estado estacionario. Te darás cuenta de que I no es necesariamente cero en este punto. De hecho, soy en realidad la fuerza de control de referencia que menciona en la pregunta. Si el estado realmente permanece estable, y si el error de aquí en adelante es continuamente cero (o cero promediado a lo largo del tiempo), el valor de I permanecerá como está.

Ahora, cuando se trata de implementaciones reales, el problema al que se enfrentará es que incluso con una I pequeña, para cuando su sistema alcance el punto establecido, es posible que se haya saturado. El sistema tendrá entonces que errar en la dirección opuesta durante mucho tiempo para deshacerse del término que acumuló mientras aún estaba alcanzando el punto de referencia. De hecho, me he dado cuenta de que PI y PID funcionan mejor para un solo punto de ajuste y se degradan cuando tienes que seguir cambiando ese punto por un valor grande. Un gran contribuyente a esto es el hecho de que tengo una gran inercia. Es posible ajustar el valor de I para mantener el controlador en funcionamiento, pero cuando el propio sistema responde al estímulo lentamente (digamos que está calentando un bloque de metal), el ajuste suele ser difícil. En cambio, lo que puede ayudar es activar I solo cuando. El sistema está dentro de un cierto umbral del punto de ajuste. Cuando cambie el punto de referencia por algo mayor que este umbral, borre I y desactívelo (use solo el control P/PD) hasta que se acerque al nuevo punto de referencia. Al hacer esto, agrega otro parámetro ajustable (el umbral), pero hace que configurar Ki y el umbral sea más fácil que configurar Ki solo para que sea óptimo para ambas situaciones.

Me gusta tu manejo del yo frente a un "umbral", pero ¿no tienes miedo de haber inventado otro "truco extraño"?
Para ser justos, tengo. Y una vez que lo presenta, ya no es PID (o PI), sino una combinación multiplexada en el tiempo de PD (o P) y PID (o PI). Este esquema desordenado solo funciona cuando el sistema tiene una inercia ridículamente alta y, en mi opinión, es simplemente un reconocimiento explícito del hecho de que el estado de transición no es ideal para un control PID completo. Por supuesto, esto no es necesario si su sistema reacciona rápido, o si no le importa esperar el orden de tiempo que le tomó pasar de 0 al punto establecido para que se estabilice.
@ChintalagiriShashank gracias por la publicación. Lo que parece funcionar bien es limitar I a una pequeña saturación para que solo pueda compensar la caída y nada más. Aunque esa idea de umbral es similar.

Parece que no entiendes cómo se supone que funciona el sistema. Si los errores son cero, eso significa que la temperatura está en el punto establecido y la salida debe estar apagada. Cuando la temperatura cambia (presumiblemente cae), habrá errores correspondientes y debería haber una salida para corregir eso.

Un sistema como este, que usa solo P, puede lograr el equilibrio, pero no alcanzará la temperatura establecida. Con I agregado, el sistema puede lograr el equilibrio y alcanzar la temperatura establecida, pero habrá una compensación constante del término I para mantenerlo allí. Esta compensación representa el calor que el sistema pierde constantemente.

Parece que su sistema está funcionando según lo diseñado. Aunque es posible que desee un resultado diferente. Tuning ciertamente se aplica, ya que todos los comentarios lo piden.

Para aquellos que no tienen una buena comprensión de los sistemas PID, se recomienda encarecidamente el artículo "PID sin PHD". Busca en el título. El original, que apareció en Programación de sistemas integrados, tenía enlaces a las ilustraciones. Para una lectura más conveniente, con las ilustraciones incrustadas, busque uno de los PDF en su lugar.

Gracias @gbarry. Estoy familiarizado con el trabajo de Tim Wescott. He agregado más información, espero que aclare las cosas. La sintonización NO es el problema aquí, el problema es el efecto del limitador de frecuencia.

No parece que generalmente se controle bien. Un control de bucle de tipo PI debe dar como resultado un ciclo de trabajo PWM (en estado estable) que es básicamente un valor constante. No debe pasar de cero a un valor grande. Dado que se trata de un bucle térmico, sus constantes de tiempo serán largas y las oscilaciones durarán decenas de segundos. Además, con los sistemas térmicos, la ganancia de bucle abierto variará, quizás hasta en un orden de magnitud, en función de las condiciones ambientales. Algunas cosas a tener en cuenta para un sistema que tiene alguna carga:

  • La salida de la parte proporcional del lazo nunca será cero.
  • El error global, una vez corregido por la parte proporcional del bucle, tampoco será cero. Dado que la parte proporcional tiene una ganancia finita, no corregirá totalmente el error.
  • La parte integradora puede tener una ganancia infinita, pero se necesita un tiempo infinito para alcanzarla. Entonces, el integrador se usa para corregir el error que deja la parte proporcional, pero solo para bajas frecuencias. Esto significa que la salida del integrador tampoco será nunca cero para la operación en estado estable.

Debe elegir los valores para la ganancia de la parte proporcional y la parte integral para estabilizar el circuito cerrado del sistema. Parece que la ganancia de una o ambas partes es demasiado alta. En la historia de los bucles de estilo PI (D), la elección de estas ganancias se conocía como "Afinación", ya que las personas las elegirían empíricamente de forma iterativa en su lugar. Con un circuito o sistema térmico, ajustar empíricamente el circuito es una tarea larga.

Comience con solo la parte proporcional del bucle, desactive el integrador. Comience con un valor bajo de ganancia para la parte proporcional, tal vez la unidad. Luego aumenten lentamente la ganancia hasta que vea solo un indicio de oscilación (use condiciones ambientales que resulten en la ganancia máxima para el sistema de bucle abierto). Cuando vea alguna oscilación, reduzca la ganancia. Por ejemplo, reducir la ganancia a la mitad es una reducción de 3dB, que si ha hecho las cosas con cuidado le daría a su bucle 3dB de margen de ganancia... no es suficiente. Querrá disparar a 20dB de margen de ganancia.

En algunos sistemas de bajo rendimiento, todo lo que necesita es un bucle proporcional. Tendrá un error que varía con la carga del sistema, pero tal vez sea lo suficientemente bueno. Pero, si no es lo suficientemente bueno, se necesitará una parte integral. Como ahora tiene un sistema estable con la parte proporcional en su lugar, puede comenzar a agregar ganancia a la parte integral. Siga un proceso similar de agregar ganancia al integrador (como lo hizo con la parte proporcional) para encontrar la ganancia estable máxima. Para un sistema térmico, esto llevará días, y eso si lo hace bien la primera vez.

Es posible que en algún momento te encuentres con que, para una respuesta óptima, también necesites añadir una parte derivada al bucle... aunque con los sistemas térmicos esto no suele ser necesario.

Realmente, sin embargo, las personas que se toman en serio la compensación de las respuestas del bucle del sistema primero escribirán un modelo matemático del sistema. A partir de esto, podrán discernir los polos, los ceros y la ganancia que existe en el sistema, y ​​la sensibilidad de estos a los cambios en las condiciones ambientales y de carga. Luego, la parte proporcional de compensación y la parte integral requeridas se pueden calcular para obtener valores óptimos. Luego se ejecutarían simulaciones numéricas, al estilo de Monte Carlo, para cuidar la variabilidad del sistema. Esta es la única forma práctica de proceder en última instancia. Ya se hace muy poco "ajuste" empírico, y lo que se hace es en gran medida un ajuste fino.

Solución

Resulta que me equivoqué acerca de que la salida fue a cero (¿y nadie más vio esto en los gráficos?).

El problema torcido no fue causado por un ajuste subóptimo de P e I. ¡Fue causado por una tasa de muestreo demasiado baja! Una vez que duplicamos la frecuencia del bucle, la salida se volvió bastante estable. De cualquier manera, gracias por la entrada.