algoritmo PID: cómo explicar los cambios rápidos en el valor de entrada después de un largo retraso

15

Estoy intentando implementar un algoritmo PID básico en un Arduino Leonardo para mezclar agua de grifo caliente y fría mediante válvulas servocontroladas. El objetivo es mantener la temperatura lo más cerca posible de un punto de ajuste. Es especialmente importante evitar que la temperatura de salida supere el punto de ajuste para proteger al usuario de quemaduras. En segundo lugar, es importante obtener la temperatura cerca del punto de ajuste lo más rápido posible.

Para pequeños cambios de temperatura, una implementación estándar del algoritmo PID parece funcionar bien. Pero no sé cómo explicar los largos retrasos que pueden ocurrir cuando se espera 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 las válvulas.

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

Cuando el agua caliente finalmente llega a la válvula, la temperatura detectada aumenta muy rápidamente a 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 supera el punto de ajuste, debido a que la espera del valor integral se reduzca a niveles normales. Por lo tanto, el resultado es agua de temperatura máxima durante varios (decenas) de segundos.

No estoy seguro de cómo explicar este posible largo retraso. En tal caso, ¿sería prudente establecer un límite superior (e inferior) en el valor de error integral, para limitar el tiempo máximo de respuesta? Esto parece anular el propósito del componente integral, y también impondría un retraso de algo después de alcanzar el punto de ajuste.

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

Gracias por cualquier consejo!

    
pregunta Ryan Griggs

6 respuestas

15

Su problema se llama liquidación integral , es un problema de control común. En una región no lineal o limitada, el controlador no puede rastrear el punto de ajuste, y la integral aumenta a un valor grande. Esto provoca un gran rebasamiento cuando finalmente se alcanza el punto de ajuste, que es exactamente lo que dedujo que es el problema.

La solución más sencilla es limitar el valor del integrador en sí mismo a un máximo razonable. Limitar la contribución integral no funcionará también, porque el integrador aún tendrá un gran valor.

Mathworks tiene una página con algunas otras soluciones para la liquidación integral.

En un controlador PID, generalmente desea el menor término integral posible. En una válvula de control de temperatura mecánica estándar, solo se usa el control proporcional, y funcionan bien. Mantenga el término integral lo más pequeño que pueda; el usuario no notará un pequeño error en la temperatura final. Podría encontrar que obtiene un rendimiento aceptable solo con PD.

Como este es un caso conocido muy especial, puede considerar tener un modo diferente para el controlador. Mida la temperatura de la entrada caliente y, mientras está por debajo del punto de ajuste, simplemente ejecute el 100% caliente, el 20% frío. Cuando se calienta, cambie al PID, con buenas condiciones iniciales.

    
respondido por el tomnexus
4

La clave para controlar este proceso de manera eficiente es darse cuenta de que las tomas en caliente y en frío no funcionan simétricamente, y cualquier algoritmo óptimo debe tener esto en cuenta.

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

Cuando no usa el agua fría por un tiempo, permanece igual que siempre (a menos que el agua fría provenga de un tanque de agua fría con un enfriador, lo que sería increíble tener en los días calurosos de verano, pero Apuesto 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 sea prácticamente constante durante una carrera.

Por lo tanto, a partir de la temperatura del agua mezclada y de conocer la configuración de la válvula, y de una estimación de la temperatura del agua fría, podemos estimar cuán caliente está el agua que proviene actualmente de la tubería de agua caliente. Luego, puede ajustar la válvula para obtener la temperatura de salida correcta sin PID, solo en función de la evaluación de una fórmula termodinámica.

Para obtener la "estimación de la temperatura del agua fría", puede correr agua fría durante un breve período de tiempo (unos pocos segundos) al inicio del ciclo y leer la temperatura. Luego, asuma que no cambiará más adelante, ya que no tiene suficientes datos para resolver para ambas temperaturas.

Este esquema no será perfectamente exacto, pero estimo que se ubicará de manera confiable dentro del campo de juego sin la posibilidad de un exceso excesivo. Luego ejecuta PID sobre este esquema para ajustar los resultados, pero limita el cambio a la configuración de la válvula que el PID puede producir. Y posiblemente reinicie el estado PID cuando tenga cambios significativos en la temperatura de entrada del agua caliente.

Las soluciones más sofisticadas son posibles con múltiples sensores de temperatura.

    
respondido por el Atsby
2

Solo quería agregar un detalle a las bonitas respuestas anteriores sobre lo que hacen los ingenieros de control para las posibilidades de liquidación integrales. Esto también ocurre en muchos procesos industriales y es un arte más que una ciencia.

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

  1. Cada vez que cruza el nivel de error cero, restablece el integrador. Esto hace que el integrador sea un integrador de elementos no lineales a pedido en lugar de un acumulador ciego.

  2. Básicamente, conecta el bloque de entrada de acción integral a un elemento indicativo en el bucle. Esto podría ser la salida del integrador para juzgar si comenzó la acumulación (lo que requiere una comprensión del proceso para que el juicio sea adecuado). O verifica si tus actuadores están saturados o no y forman un circuito de retroalimentación basado en esa información. Simplemente escogí 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. enlace

respondido por el percusse
1

En ocasiones, puede ser útil tener varios conjuntos de parámetros PID, para las etapas generales del rango de operación del sistema, que cambia sobre la marcha cuando el sistema pasa de una etapa de comportamiento a otra. Por ejemplo, un conjunto de Kp, Ki, & Kd para cuando encienda el hot tap & obtener sólo agua fría; luego, una vez que comience a ver cómo aumenta la temperatura, cambie a otro conjunto de Kp, Ki & Kd. A continuación, sintonice los dos en consecuencia.

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

    
respondido por el Techydude
1

¿Has modelado el sistema?

¿Tiene algunos datos basados en el tiempo que muestran el exceso, especialmente la frecuencia

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

Por lo que ha descrito, su ganancia integral es demasiado alta, demasiado alta. Podría deberse al cierre del integrador: el código que se muestra tiene algunas preocupaciones prácticas reales, una de las cuales es que no es el mejor de los integradores discretos

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

Igualmente podría ser porque es muy alto y lleva tiempo disminuirse.

Entonces, sí, el valor almacenado en el registro I podría haber terminado para decir ... 1000C porque P + I no se ajustó a la respuesta del sistema y luego tiene que disminuir.

Lo primero que haría sería capturar datos en tiempo real para el procesamiento posterior. A continuación, ejecutaría solo P y me aseguraría de que la ganancia proporcional logre CASI la temperatura deseada (la teoría de control indica que no). El dependiendo de si

  1. Análisis de los datos de captura actuales que facilitan la determinación de las ganancias adecuadas
  2. Se deriva un modelo de planta para crear ganancias adecuadas

Comenzaría cambiando el código PID para que sea una mejor implementación y luego agregaría un poco de I, solo para demostrar un punto.

Realmente necesitas determinar contra qué están destinadas estas ganancias. La entrada es temperatura, la salida es ... ¿flujo? por lo tanto, debe haber una transferencia de flujo / C y una función de transferencia de flujo / Cs.

    
respondido por el JonRB
1

Una forma en que me gusta resolver el Cierre Integral es dejar de acumular el error cada vez que la salida de control se encuentre en su máxima desviación . O amplíelo según lo lejos que esté de la deflexión máxima. Entonces, cuando el controlador emita "agua caliente 100%, agua fría 0%", simplemente no acumule el error, pero tampoco lo reinicie a cero.

No me gusta limitar la integral a un máximo porque entonces hay un límite a qué error sistemático puede compensar tu PID.

También sugeriría que en lugar de hacer un PID "tonto" que solo tiene un parámetro que está tratando de controlar sin conocer el sistema subyacente, instale dos sensores de temperatura adicionales, tanto en la entrada de calor como en la de frío. Luego intenta encontrar una función que se aproxime a la posición deseada según las temperaturas de entrada, y solo usas el lazo PID para ajustar el error en la salida de esta función.

El error será significativo porque no mide el flujo (bueno, a menos que lo haga, por supuesto), que depende no solo de las posiciones de las válvulas (conocidas) sino también de la presión del agua (desconocidas).

Aún así, esto debería ayudar mucho con el problema de que el agua caliente llegue finalmente al grifo porque en un circuito PID bien amortiguado, debe confiar en que el elemento D esté bien calibrado para reducir rápidamente el flujo de calor. En mi experiencia, obtener el coeficiente de derivación correcto suele ser el más difícil. Pero si tuviera los dos sensores adicionales, la salida principal cambiaría exactamente tan rápido como la temperatura del agua de entrada, por lo que es básicamente instantánea, sin necesidad de ningún elemento derivado.

    
respondido por el Roman Starkov

Lea otras preguntas en las etiquetas