Cómo implementar un controlador tipo PID autoajustable

14

Estoy intentando 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 responde con lentitud (los cambios mensurables en la temperatura llevan mucho tiempo > 10 minutos).
  • La planta pierde temperatura según las condiciones ambientales.
  • el punto de ajuste puede variar en grandes pasos según la demanda del usuario.

Estoy escribiendo un controlador que apunta a minimizar el error, así como a cumplir con la tasa de ciclos 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 debe ajustarse automáticamente y elegir Kp, Ki constantes correctas y adaptarse a las diferentes condiciones ambientales y cambios en la capacidad de calefacción. Por lo tanto, ajustar el controlador PI por adelantado no es muy ú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 (aproximadamente lineal) que sugiere información sobre respuesta de pasos medida . Simplemente no sé qué hacer con esa información.

Un par de publicaciones sugieren que podría utilizar los datos de modelado para sintonizar el PI en línea, así como el laboratorio -vista manual que sugiere que podría usar Fuzzy-Logic para sintonizar el PI.

Mi pregunta es: ¿cuál es el mejor enfoque para este tipo de escenario (por ejemplo, PID, fuzzy-pid, convolution, etc.) y cómo podría implementarlo en el software / práctica?

No soy un EE, por lo que cualquier entrada sería muy apreciada.

    
pregunta MandoMando

5 respuestas

6

No iría tan lejos como para llamar PID obsoleto. Pero ciertamente hay margen de mejora. Una forma en la que he sintonizado automáticamente los bucles de control PID es usar el método Nelder-Mead que es una forma de escalada de colinas algoritmo simplex . Tiene la ventaja de poder converger y reconvertirse en un parámetro de destino que se mueve con el tiempo.

De este documento :

  

Por ejemplo, en nuestro caso de ajuste de parámetros PID {K P ,   K I , K D } un simplex es tetraedro. Nelder – Mead   genera una nueva posición de prueba de simplex extrapolando el comportamiento   de la función objetivo medida en cada punto de prueba dispuesto como el   simplex El algoritmo luego elige reemplazar una de estas pruebas   puntos con el nuevo punto de prueba y así la técnica avanza.

Mi aplicación particular fue para control de 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 corriente generados se encontraban dentro de unas pocas desviaciones estándar.

Con nuestro producto, el vicepresidente estaba muy preocupado por cómo "sonaba" el motor. Y resultó que "sonaba" 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 en marcha, por lo que la percepción del sonido del motor por parte del usuario también se tuvo en cuenta. Después de encontrar los parámetros que nos gustaron, fueron codificados y no modificados.

Esto probablemente no sería ideal para usted, ya que indica que "poner el sistema en oscilación incluso como parte del ajuste automático no es aceptable para los usuarios". Nuestro sistema sin duda oscilaría y haría otras cosas horribles mientras se ajustaba automáticamente.

Sin embargo, puede ejecutar dos copias del controlador PID. Una que estaba "en vivo" y que en realidad controlaba el proceso. Y un segundo que se estaba sintonizando automáticamente mientras se alimentaban las mismas entradas que el controlador "en vivo". Cuando la salida del controlador sintonizado automáticamente se volvió "mejor" o más estable, podría cambiar los coeficientes al controlador "en vivo". El controlador realizaría correcciones en el proceso hasta que se lograra el rendimiento deseado. Esto evitaría las oscilaciones que pueden ser percibidas por el usuario 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.

    
respondido por el embedded.kyle
3

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 ese criterio, si hay un objeto que se calienta uniformemente por el estímulo, y si ese objeto transfiere calor de manera uniforme a algún otro objeto a una tasa proporcional a la diferencia de temperatura entre ellos. Por ejemplo, el primer objeto podría ser un elemento de calefacción, y el segundo 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 única y uniforme. Para los modelos térmicos más complicados que eso (por ejemplo, los que pueden involucrar gradientes térmicos dentro de un medio sólido), lograr resultados óptimos requerirá algo más sofisticado que un controlador PID.

Yo sugeriría que un buen enfoque podría ser tener el controlador, cuando el calentador está encendido, estimar continuamente qué tan caliente se pondría el dispositivo que se estaba regulando si la salida se apagara inmediatamente, y la temperatura a la que terminaría. enfriarse si el calentador se encendió tan pronto como sea permisible 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 los van a obtener. Luego, una vez que el calentador está apagado, comience a realizar cálculos similares, pero cambiando 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 usar una estrategia de anticipación 'mín / máx' para mirar uno o dos pasos hacia adelante.

    
respondido por el supercat
1

Ser capaz de cambiar el estado del control (activado o desactivado) 2-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 puede (de manera realista) solo aceptar una entrada binaria (apagada o encendida), ya que la "frecuencia" del control el ciclo de trabajo que puede aceptarse es una fracción de un hertz.

Es posible que desee simplificar las cosas e ir con el control histerético:

  • el sistema se enciende cuando la temperatura cruza un límite inferior
  • el sistema se apaga cuando la temperatura cruza un límite superior
  • hay suficiente distancia entre los límites superior e inferior para evitar el rebote de la salida de control
respondido por el Adam Lawrence
1

Una forma típica (aunque se admite que es una forma simplista de hacerlo) se llama programación de ganancias. Es un enfoque clásico para el control no lineal cuando tiene una variable (o variables) observable con las que su sistema cambia (parámetro de programación). En su sistema, esa variable sería la temperatura. La idea es que cree una lista de ganancias del controlador en 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 utiliza en algunos sistemas muy complicados.

Si desea obtener fantasía, podría implementar un algoritmo de aprendizaje automático para generar su matriz de ganancia. Esto resultaría en el controlador de evolución y aprendizaje que parece estar describiendo. Sin embargo, podría ser excesivo si el sistema se caracteriza por completo.

Edit: Lo siento, lo malinterpreté un poco. Estás tratando de controlar la temperatura, por lo que las "condiciones ambientales" de las que hablabas serían tu parámetro de programación.

    
respondido por el Matt
0

Puede usar el controlador de mínimos cuadrados recursivos en su totalidad, consulte Astrom and Wittenmark , Control adaptativo, pero no sé si el microcontrolador tendrá suficiente impulso para hacer esto.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas