Cómo ajustar un controlador PID a un proceso no lineal

Tengo un proceso térmico no lineal (la radiación no lineal se vuelve cada vez más presente a medida que aumenta la temperatura) al que me gustaría ajustar un controlador PID. Me gustaría controlar la temperatura con la mayor precisión posible.

He planeado dividir el rango de temperatura en N rangos pseudolineales (a definir), y para cada uno de estos rangos de temperatura: ajuste un modelo de primer orden usando un pequeño paso de temperatura y calcule los parámetros PID para adaptarse a este modelo. Los parámetros PID cambiarían automáticamente dependiendo de la temperatura del proceso*.

Mi problema es el siguiente: considere el punto de control de 70 ° C, por ejemplo. Los vatios P ​​ya están fluyendo para alcanzar esta temperatura. Inyectaré dP watt para aumentar la temperatura en 1°C. Luego tomaré nota de la constante de tiempo y la ganancia de estado estable será 1/dP °C/W. [Por favor, ¿puede tomarse un momento para pensar si esto es correcto?] Finalmente, ajustaré el PID a esa planta para obtener los parámetros para ese rango de temperatura y pasaré a los otros rangos.

Ahora, suponga que el proceso alcanza los 70°C. Se cargan los nuevos parámetros y se pone a cero el contador integral. El error puede ser de 1°C, pero la potencia requerida es mucho mayor que para alcanzar los 21°C, es seguro que el controlador demandará menos de P watt. Esto significa que la temperatura caerá mucho antes de que el término integral demande P watt, y solo entonces el dP watt adicional eventualmente llevará el proceso a 71°C (y ciertamente se sobrepasará). Cuanto mayor sea P en comparación con dP, peor será.

Casi parece que los calentadores deberían funcionar con la suma de la salida del controlador y la potencia necesaria para permanecer en la "temperatura de referencia" actual (p. ej., 70 °C). Pero los controladores comerciales no ofrecen eso, por lo que debe haber otra forma.

¿Qué me estoy perdiendo? ¿Cuál es la forma adecuada?

*: Es efectivamente Programación de Ganancias .

El controlador PID generalmente está destinado a sistemas lineales. Es lo suficientemente robusto como para controlar algunos sistemas no lineales también en torno a algún punto operativo "casi lineal". Si no es el caso, se pueden usar diferentes técnicas para linealizar la planta controlada (buscar "linealización de retroalimentación" o introducir algunos bucles internos)
Gracias por tu comentario. Eso es lo que estoy tratando de lograr: usar un controlador PID en un rango de temperaturas "casi lineal". Ya he buscado con esas palabras clave pero sin mucha suerte.
En lugar de entrenar múltiples modelos, ¿puede alimentar el valor de entrada a través de una función de 'linealización' antes de pasarlo al controlador PID y entrenarlo en base a eso?
Su enfoque suena bien para mí. Vas a ajustar la ganancia y la constante de tiempo dependiendo de la temperatura. Tendrás que pensar en lo que sucede en los puntos de cruce. ¿Has construido algo que no está funcionando tan bien como te gustaría? Un bucle de control puede ocultar mucha falta de linealidad. Y tal vez estarás bien sin ponerte elegante.
¿Por qué la radiación es no lineal? Si el horno pierde temperatura, entonces la pérdida de potencia es lineal Q=mc*delta_T. Si su sistema solo tiene fugas, casi todas las constantes permanecen, como el tiempo muerto, el tiempo de subida, excepto que la ganancia disminuye. Podría hacer que la variable Kp Kp(T_actual) sea una función lineal de Kp_initial y Kp_final.
George Herold: el sistema aún no está construido, esto es algo que me preocupa incluso antes de las pruebas. Traté de construir un modelo simulink, pero por un lado las funciones de transferencia tienen cero IC y no puedo alcanzar el estado estable con la potencia máxima permitida dada la baja ganancia de la planta; y no sé cuál es el vector de estado para el modelo de espacio de estado. @Marko Bursic: el calor puede fluir por convección, conducción o radiación. Mi sistema tiene un espacio de vacío, por lo que la radiación es dominante y la radiación ES no lineal (cuarta potencia).

Respuestas (3)

¿Cómo ajustar un controlador PID a un proceso no lineal?

tu no Usted linealiza el proceso, luego hace que el controlador PID trabaje en los valores lineales.

Por "linealizar el proceso", no me refiero a hacer que el proceso en sí sea lineal. Eso generalmente no se puede hacer debido a la física. Sin embargo, puede colocar algo no lineal entre la salida del controlador PID y la entrada del proceso para que la salida PID controle linealmente el proceso desde el punto de vista del controlador PID.

Tal linealizador no necesita ser muy preciso ya que está dentro del circuito de retroalimentación. Su propósito es dar la apariencia de una ganancia más o menos constante en todo el rango dinámico de control. Una forma simple y general es una función basada en una tabla lineal por partes. 16 o 32 segmentos suelen ser suficientes para todo menos para procesos muy no lineales.

El ejemplo del peor de los casos con el que me encontré fue controlar la corriente a través de un tubo de electrones cambiando la fuerza con la que se conducía el filamento del cátodo. La función de la temperatura del cátodo a la corriente del haz de electrones es altamente no lineal, y el sistema que controla la corriente del filamento del cátodo también era algo no lineal. En este caso, era demasiado difícil predecir todo este lío, así que utilicé un procedimiento de calibración durante la producción que atravesó los valores de control de la unidad de filamento, midió la corriente del haz para cada uno y luego calculó una tabla de búsqueda de 32 segmentos a partir de eso. Funcionó muy bien y pudimos ajustar el controlador PID de corriente del haz para obtener una buena respuesta en todo el rango.

Sin una función de linealización frente al proceso, debe ajustar el controlador PID para obtener estabilidad en el punto de ganancia incremental más alto del proceso. Esto luego da como resultado un comportamiento muy amortiguado en otros puntos.

Agregado

Nada en su pregunta actualizada dice nada sobre por qué el método anterior aún no es una buena idea y aplicable. Dices que estás usando un controlador analógico. Mi primera reacción es "La década de 1980 ya pasó, no hagas eso". Sin embargo, el controlador PID y el linealizador de planta pueden ser independientes.

Aparentemente, la entrada de la planta es potencia y la salida es temperatura. Mida la temperatura típica de estado estable en un rango de niveles de potencia. A partir de eso, puede calcular la función que convierte la "potencia" linealizada en la entrada de energía real de la planta. El controlador PID analógico presumiblemente emite un voltaje proporcional a la potencia. Todo lo que tiene que hacer es insertar una caja negra en línea con ese voltaje que hace la traducción de la medida lineal al nivel de potencia real.

Normalmente haría esto con un microcontrolador que tiene un A/D incorporado. Hacer esta búsqueda de tabla e interpolación lineal entre puntos es trivial. Luego emite el resultado de una manera que eventualmente se convierte en un voltaje. Dado que la planta es lenta en comparación con un microcontrolador, esto podría ser tan fácil como filtrar y almacenar en búfer una salida PWM. O podría conducir un D/A directamente, aunque eso no parece necesario en este caso.

De acuerdo con el tema de la década de 1980 de su controlador, podría hacer esto con A/D, memoria y D/A para esa sensación retro.

En cualquier caso, el controlador PID ahora está controlando efectivamente una planta lineal hasta donde sabe, y debería ser posible ajustarla para un buen rendimiento.

Hacer una transformación lineal por partes en la entrada de la planta en un lugar es más fácil que ajustar 3 valores dentro del controlador PID en el rango de salida. Este último es una chapuza, mientras que el primero aborda el problema directamente. También es mucho más fácil medir los datos para la función de linealización que determinar las ganancias de P, I y D en varios puntos. Incluso si lo hizo, todavía tiene problemas transitorios, ya que las ganancias correctas no se aplican de inmediato a la situación. Una vez más, la "programación de ganancias" es una chapuza.

Muy interesante, gracias por presentar el enfoque del linealizador. Sin embargo, estoy usando controladores de hardware que están conectados directamente a los relés, por lo que desafortunadamente tengo que programar la ganancia. ¿Es correcto mi enfoque de identificación? Se siente como si no lo fuera.
He editado mi pregunta para aclarar mi problema, en particular los dos últimos párrafos. (aún, +1)
Le pregunté al fabricante de los controladores si puedo insertar una tabla de búsqueda con interpolación lineal antes de la salida; si eso se puede hacer, definitivamente optaré por esa opción, incluso si eso significa que tendré que olvidarme de la herramientas de ajuste habituales basadas en la función de transferencia y tal. es elegante Si no lo hacen, tendré que hacer la muy tediosa programación de ganancias, pero aparentemente no hay nada de malo en mi enfoque, que es lo que quería verificar.

Recuerde que cuando linealiza un modelo, está suponiendo efectivamente que el modelo no lineal y = f(x) se reemplaza con y = A*(x-x0) + B. Observe que x0 es el punto de linealización. Cuando introduce rangos para x, termina con múltiples A, B y x0. De cualquier manera, la entrada a su controlador será el error con respecto al punto de linealización actual. Sin embargo, aún compensa la señal de entrada (con B), por lo que incluso si el error es 0 con respecto al punto de linealización actual, seguirá transmitiendo una señal.

Entonces, en su ejemplo, incluso si el error es de 0 grados (en el punto de ajuste de 70 grados), el controlador aún emitirá una potencia mayor que 0.

Gracias. Creo que estás en algo, pero realmente no entiendo. En términos generales, estoy usando controladores PID básicos (similares a los analógicos), de los cuales puedo cambiar los términos P, I, D en función de la temperatura. Sé que una vez fijado a 70°C, la potencia no será cero aunque el error sea cero. Lo que me preocupa es el asentamiento: básicamente estoy dejando caer el controlador a 70°C, y dado que es t=0s para él, el término integral tardará un tiempo en activarse, por lo que tendré una caída terrible. Casi parece que mi método es incorrecto.
(El controlador demandará muy poca potencia al principio, por debajo de la potencia requerida para permanecer a 70°C)
He editado mi pregunta para aclarar, los dos últimos párrafos en particular.
Es difícil dar consejos sin más detalles sobre su proceso, pero parece que tiene un sistema bastante inestable alrededor de los 70 grados y que alrededor de esa temperatura la mayor parte del control ocurre debido a la compensación intragral (la I en el PID).
70°C es solo un ejemplo, probablemente tendré 6 rangos de temperatura diferentes para sintonizar. Dicho de manera muy aproximada, estoy controlando la temperatura dentro de un termo calentando la superficie exterior.

Un enfoque para el control no lineal con controladores PID, un enfoque que se usa ampliamente en la industria, se denomina "programación de ganancia".

El problema de control no lineal se divide en una serie de regiones lo suficientemente lineales y se utilizan los parámetros apropiados para cada región.

Eso es lo que estoy tratando de lograr, como se puede leer en mi pregunta ("Los parámetros PID se cambiarían automáticamente según la temperatura del proceso *" "*: es efectivamente Programación de ganancia").