Estoy tratando de escribir un programa de microcontrolador para controlar la temperatura en un sistema con las siguientes características:
- la salida solo puede estar activada o desactivada, con frecuencias de ciclo fijas (~ 2-10 por hora)
- La planta tarda en responder (los cambios medibles en la temperatura tardan mucho más de 10 minutos).
- La planta pierde temperatura en función de las condiciones ambientales.
- El punto de ajuste puede variar en grandes pasos en función de la demanda del usuario.
Estoy escribiendo un controlador que tiene como objetivo minimizar el error, así como cumplir con la tasa de ciclo proporcionada como entrada.
Esto podría hacerse fácilmente con un controlador PI y su salida se convierte al ciclo de trabajo. El problema es que el programa necesita autoajustar y elegir las constantes Kp, Ki correctas y adaptarse a las condiciones ambientales variables y los cambios en la capacidad de calefacción. Por lo tanto, sintonizar el controlador PI por adelantado no es demasiado útil.
El uso de un PI o PID real no es un requisito. Estoy abierto al uso de Fuzzy-Logic si ayuda, también tengo un algoritmo de aprendizaje automático en el chip que modela la respuesta del sistema y la pérdida de calor (lineal aprox.) Que sugiere información sobre la respuesta de paso medida . Simplemente no sé qué hacer con esa información.
Un par de publicaciones sugieren que podría usar los datos de modelado para ajustar el PI en línea, así como el manual de vista de laboratorio que sugiere que podría usar Fuzzy-Logic para ajustar el PI.
Mi pregunta es, ¿cuál es el mejor enfoque para este tipo de escenario (por ejemplo, PID, fuzzy-pid, convolución, etc.) y cómo lo haría para implementarlo realmente en software / práctica.
No soy un EE, por lo que cualquier aportación sería muy apreciada.
fuente
Respuestas:
No iría tan lejos como para llamar a PID desactualizado. Pero ciertamente hay margen de mejora. Una forma en la que tengo bucles de control PID autoajustados es usar el método Nelder-Mead, que es una forma de algoritmo simplex de escalada . Tiene la ventaja de poder converger y volver a converger en un parámetro objetivo que se mueve con el tiempo.
De este documento :
Mi aplicación particular fue para el control del motor. Teníamos dos bucles, un bucle de control de corriente PID y un bucle de control de velocidad PI. Establecimos nuestros vértices en P, I y D, respectivamente, y ejecutamos estadísticas en la salida del bucle. Luego ejecutamos la reflexión, expansión, contracción y reducción una y otra vez hasta que los objetivos de control de velocidad o de corriente generados estuvieron dentro de algunas desviaciones estándar.
Con nuestro producto, el VP estaba muy preocupado por cómo "sonaba" el motor. Y resultó que "sonó" mejor cuando el objetivo actual rebotó un poco más de lo que era matemáticamente óptimo. Por lo tanto, nuestra afinación se realizó "en vivo", ya que dejamos que el algoritmo buscara mientras el motor estaba funcionando para que la percepción del usuario del sonido del motor también se tuviera en cuenta. Después de encontrar los parámetros que nos gustaron, fueron codificados y no cambiaron.
Esto probablemente no sería ideal para usted, ya que usted afirma que "poner el sistema en oscilación incluso como parte del autoajuste no es aceptable para los usuarios". Nuestro sistema seguramente oscilaría y haría otras cosas horribles mientras se realizaba el autoajuste.
Sin embargo, puede ejecutar dos copias del controlador PID. Uno que estaba "en vivo" y que en realidad controlaba el proceso. Y un segundo que se estaba sintonizando constantemente mientras se alimentaban las mismas entradas que el controlador "en vivo". Cuando la salida del controlador autoajustado se vuelve "mejor" o más estable, puede intercambiar los coeficientes en el controlador "en vivo". El controlador luego realizaría correcciones en el proceso hasta lograr el rendimiento deseado. Esto evitaría oscilaciones que el usuario pueda percibir durante el autoajuste. Pero si las entradas cambian drásticamente y el controlador PID ya no es óptimo, el autoajuste puede intercambiar nuevos coeficientes a medida que estén disponibles.
fuente
Un controlador PID es útil en situaciones en las que el comportamiento del sistema que se controla puede aproximarse razonablemente como una suma del estímulo de control, la integral del estímulo de control y la integral de esa primera integral. Algunos sistemas de control de temperatura pueden satisfacer dicho criterio, si hay un objeto que se calienta de manera uniforme por el estímulo, y si ese objeto transfiere calor de manera uniforme a otro objeto a una velocidad proporcional a la diferencia de temperatura entre ellos. Por ejemplo, el primer objeto podría ser un elemento calefactor, y el segundo objeto podría ser el aire que circula en una habitación, si hay suficiente circulación de aire para que se considere que el aire tiene una temperatura uniforme única. Para modelos térmicos más complicados que eso (por ejemplo, los que pueden involucrar gradientes térmicos dentro de un medio sólido),
Sugeriría que un buen enfoque podría ser tener el controlador, cuando el calentador está encendido, estimar continuamente qué tan caliente se calentaría el dispositivo que se regula si la salida se apaga inmediatamente, y la temperatura a la que terminaría enfriándose si el calentador se encendió tan pronto como se permitió después de eso. También calcule cuáles serían esos valores si el calentador se dejara encendido por otro segundo, dos segundos, tres segundos, etc. Apague el calentador cuando esos valores sean tan buenos como van a ser. Luego, una vez que el calentador esté apagado, comience a realizar cálculos similares, pero intercambie los roles de encendido / apagado, caliente / frío, etc., para decidir cuándo volver a encenderlo. Dependiendo del comportamiento térmico del sistema, puede ser necesario utilizar una estrategia de anticipación 'mínimo / máximo' para mirar uno o dos pasos adelante.
fuente
Poder cambiar el estado del control (activar o desactivar) de 2 a 10 veces por hora no se presta para el control del ciclo de trabajo. La salida de un bucle PI será una señal de control que varía en magnitud en función del error, y su planta solo puede aceptar (de manera realista) una entrada binaria (apagado o encendido), ya que la 'frecuencia' del control El ciclo de trabajo que puede aceptarse es una fracción de hertz.
Es posible que desee simplificar las cosas e ir con control histérico:
fuente
Una forma típica (aunque ciertamente simplista de hacer esto) se llama programación de ganancia. Es un enfoque clásico para el control no lineal cuando tiene una variable observable (o variables) con las que su sistema cambia (parámetro de programación). En su sistema, esa variable probablemente sea la temperatura. La idea es que cree una lista de ganancias del controlador a diferentes valores del parámetro de programación (temperatura) y a medida que el parámetro de programación cambie, use esas ganancias en su controlador (ya sea PI, PID, retroalimentación de estado o lo que sea). Si esto suena realmente simple, es porque lo es. Sin embargo, funciona y se usa en algunos sistemas muy complicados.
Si quieres ponerte elegante, puedes implementar un algoritmo de aprendizaje automático para generar tu matriz de ganancia. Esto daría como resultado el controlador de evolución y aprendizaje que parece estar describiendo. Sin embargo, podría ser excesivo si el sistema se puede caracterizar por completo.
Editar: Lo siento, leí mal un poco. Está tratando de controlar la temperatura para que las "condiciones ambientales" de las que habló sean su parámetro de programación.
fuente
Podrías usar el controlador Recursive Least Squares, cf Astrom y Wittenmark , Adaptive Control, pero no sé si el microcontrolador tendrá suficiente empuje para hacer esto.
fuente