17 votos

Algoritmo PID: cómo tener en cuenta los cambios rápidos del valor de entrada después de un largo retraso

Estoy tratando de implementar un algoritmo PID básico en un Arduino Leonardo para mezclar agua caliente y fría del grifo utilizando válvulas servocontroladas. El objetivo es mantener la temperatura lo más cerca posible de la consigna. Es especialmente importante evitar que la temperatura de salida sobrepase el punto de consigna para proteger al usuario de las quemaduras. En segundo lugar, es importante conseguir que la temperatura se acerque al punto de consigna lo más rápidamente posible.

Para pequeños cambios de temperatura, un implementación estándar del algoritmo PID parece funcionar bien. Pero no sé cómo tener en cuenta los largos retrasos que pueden producirse al esperar que el agua caliente llegue a la válvula, ya que estos retrasos son mucho más largos que los retrasos estándar después de cambiar las posiciones de la válvula.

Obviamente, dependiendo de la longitud de la línea de agua caliente y del tiempo transcurrido desde el último uso del agua caliente, el agua caliente puede tardar varias decenas de segundos en llegar a la válvula, por lo que durante este tiempo, la temperatura del agua se mantiene bastante constante a una temperatura baja y la válvula de agua caliente pronto se abre al 100%. La componente integral comienza a acumular un gran valor de error.

Cuando el agua caliente llega finalmente a la válvula, la temperatura detectada aumenta muy rápidamente hasta la temperatura máxima del agua caliente. Debido al gran error integral, la válvula de agua caliente se mantiene al 100% durante mucho tiempo después de que la temperatura supere el punto de ajuste, debido a la espera de que el valor integral se reduzca a niveles normales. Por lo tanto, el resultado es un agua a la máxima temperatura durante varias (decenas) de segundos.

No estoy seguro de cómo explicar esto posible un gran retraso. En este caso, ¿sería prudente establecer un límite superior (y un límite inferior) en el valor del error integral, para limitar el tiempo máximo de respuesta? Esto parece anular el propósito del componente integral, y además seguiría imponiendo algunos retraso después de alcanzar el punto de consigna.

¿O hay una manera mejor de manejar los cambios rápidos de entrada después de un largo retraso?

Gracias por cualquier consejo.

16voto

tomnexus Puntos 3958

Su problema se llama Enrollamiento integral es un problema de control común. En una región no lineal o acotada, el controlador no puede seguir el punto de consigna, y la integral aumenta hasta un gran valor. Esto provoca un gran rebasamiento cuando finalmente se alcanza el punto de consigna, que es exactamente lo que usted ha deducido que es el problema.

La solución más sencilla es limitar la Valor propio del integrador a un máximo razonable. Limitar la contribución integral no funcionará tan bien, porque el integrador seguirá siendo enrollado hasta algún valor grande.

Mathworks tiene una página con algunas otras soluciones para el enrollamiento integral.

En un controlador PID, generalmente se quiere el menor término integral posible. En una válvula de control de temperatura mecánica estándar, sólo se utiliza el control proporcional, y funcionan bien. Mantenga el término integral tan pequeño como pueda - el usuario no va a notar un pequeño error en la temperatura final. Usted puede encontrar que usted consigue un rendimiento aceptable con sólo PD.

Como se trata de un caso muy especial y conocido, podría considerar la posibilidad de tener un modo diferente para el controlador. Mide la temperatura de entrada del calor, y mientras esté por debajo del punto de consigna, haz funcionar el calor al 100% y el frío al 20%. Cuando se caliente, cambia al PID, con buenas condiciones iniciales.

4voto

Atsby Puntos 161

La clave para controlar este proceso de forma eficiente es darse cuenta de que los grifos calientes y fríos no funcionan de forma simétrica, y cualquier algoritmo óptimo tiene que tenerlo en cuenta.

Cuando no se utiliza el agua caliente durante un tiempo, se enfría en la tubería.

Cuando no usas el agua fría durante un tiempo, sigue siendo la misma de siempre (a no ser que el agua fría provenga de un depósito de agua fría con un refrigerador, lo que sería genial tener en los días calurosos de verano pero apuesto a que es bastante raro en la práctica).

Por lo tanto, asumimos que no sabemos lo que obtenemos de la tubería de agua caliente, pero podemos confiar en que la tubería de agua fría es más o menos constante a lo largo de un recorrido.

Así, a partir de la temperatura del agua mezclada, y conociendo el ajuste de la válvula, y a partir de una estimación de la temperatura del agua fría, podemos estimar lo caliente que está el agua que sale actualmente de la tubería de agua caliente. Entonces se puede ajustar la válvula para obtener la temperatura de salida correcta sin PID, sólo basado en la evaluación de una fórmula termodinámica.

Para obtener la "estimación de la temperatura del agua fría" puedes dejar correr el agua fría durante un corto periodo de tiempo (unos pocos segundos quizás) al inicio del ciclo y leer la temperatura. Luego, asume que no cambiará después, ya que no tienes suficientes datos para resolver ambas temperaturas.

Este esquema no será perfectamente exacto, pero estimo que estará dentro de los límites sin la posibilidad de sobrepasar los límites drásticamente. Luego se ejecuta el PID en la parte superior de este esquema para afinar los resultados, pero limitar el cambio de la configuración de la válvula que el PID se permite producir. Y, posiblemente, restablecer el estado del PID cuando tenga cambios significativos en la temperatura de entrada del agua caliente.

Es posible encontrar soluciones más sofisticadas con múltiples sensores de temperatura.

2voto

bigint Puntos 191

Sólo quería añadir un detalle a las buenas respuestas anteriores sobre lo que hacen los ingenieros de control para las posibilidades de bobinado integral. Esto también ocurre en muchos procesos industriales y es un arte más que una ciencia.

Hay acciones típicas de libro de texto contra esto sin sacrificar de la ganancia integral que podría ser realmente necesario para la especificación de rendimiento.

  1. Cada vez que se cruza el nivel de error cero se reinicia el integrador. Esto hace que el integrador sea un elemento no lineal de tipo integrador a la carta en lugar de un acumulador ciego.

  2. Básicamente, se conecta el bloque de entrada de acción integral a un elemento indicativo del bucle. Puede ser la salida del integrador a juez si inició la acumulación (lo que requiere una comprensión del proceso para emitir un juicio adecuado). O comprueba si los actuadores se saturaron o no y forma un bucle de retroalimentación basado en esa información. Acabo de elegir al azar el primer enlace que salió de google y al final de este video hay una explicación gráfica de mi último punto. https://www.youtube.com/watch?v=H4YlL3rZaNw

1voto

brianpeiris Puntos 7693

A veces puede ser útil tener múltiples conjuntos de parámetros PID, para etapas de grano grueso del rango de operación del sistema, que usted cambia sobre la marcha cuando el sistema pasa de una etapa de comportamiento a otra. Por ejemplo, un conjunto de Kp, Ki y Kd para cuando abra el grifo de agua caliente y obtenga sólo agua fría; luego, una vez que comience a ver que la temperatura sube, cambie a otro conjunto de Kp, Ki y Kd. Entonces, afina los dos en consecuencia.

¿Está utilizando la biblioteca PID en el Arduino Playground por Brett Beauregard? Esta es bastante buena. Y hay un ejemplo 'adaptativo' de esto allí también.

1voto

JonRB Puntos 4599

¿Has modelado el sistema?

¿Tiene algunos datos basados en el tiempo que muestren el rebasamiento - especialmente la frecuencia

Estas son dos preguntas que deben hacerse con cualquier consulta basada en el control.

Por lo que has descrito, tu ganancia integral es demasiado alta, demasiado alta. Podría ser debido a un enrollamiento del integrador: el código mostrado tiene algunos problemas prácticos reales, uno de los cuales es que no es el mejor de los integradores discretos

  • Topología de integrador discreto muy pobre
  • No hay abrazaderas/límites en la salida I y mucho menos en la salida P+I

También puede ser porque es muy alta y tarda en bajar.

Así que sí, el valor almacenado en el registro I podría haberse enrollado hasta digamos... 1000C porque el P+I no se ajustó a la respuesta del sistema y entonces tiene que enrollarse.

Lo primero que haría es capturar los datos en tiempo real para el post-procesamiento. CASI la temperatura deseada (la teoría del control establece que no lo hará). El dependiendo de si

  1. El análisis de los datos de captura actuales facilita la determinación de la ganancia I adecuada
  2. Se deriva un modelo de planta para crear ganancias adecuadas

Empezaría por cambiar el código del PID para que sea una mejor implementación y luego añadiría un pequeño trozo de I, sólo para probar un punto.

Realmente hay que determinar a qué se destinan estas ganancias. La entrada es la temperatura, la salida es... ¿caudal? por lo que debería haber una función de transferencia caudal/C y una función de transferencia caudal/Cs.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X