Cómo interpretar la salida PID en un sistema de respuesta lenta

@Actualización : Han pasado algunos días desde que hice esta pregunta y tuve la oportunidad de investigar un poco en función de las respuestas que recibí de @R Drast y @Spehro. No estoy seguro de que esta actualización sea lo correcto, pero mis nuevas preguntas aún están relacionadas con el tema original y el título sigue siendo relevante.

No me había dado cuenta de que "Posición" y "Velocidad" son dos tipos de algoritmos que determinan cómo se trata la salida PID (probablemente obvio a partir de mis respuestas originales a continuación). Por extraño que parezca, pensé que el método incremental y relativo (velocidad) era, intuitivamente, el más apropiado para mi situación y, sin embargo, fue rechazado rotundamente en las respuestas anteriores. Por lo tanto, tengo algunas preguntas sobre el método de posición relacionado con mi configuración específica (medición de temperatura, gran tiempo muerto, etc.).

En primer lugar, quiero asegurarme de tener una comprensión correcta de cómo funciona realmente el método de posición. Entiendo que significa que asigna una salida PID a cada posición (válida) en el actuador. Por ejemplo, una salida PID de -3 V sería una extensión del actuador, digamos completamente retraído (es decir, ventana cerrada/ventilación mínima), mientras que 3 V sería el otro extremo (completamente extendido o ventilación máxima). Esto pondría cero en algún punto intermedio. ¿Tengo este derecho?

Si la comprensión anterior es correcta, eso significaría que usted predetermina el punto en el actuador cuando el error es cero. ¿Está bien?

Entonces, ¿cómo lidias con el siguiente escenario: es media mañana y 25 grados en el gh. El SP es de 25 grados y el actuador está completamente retraído, el error es 0 (así que esto pone la posición cero como: actuador completamente retraído, bastante). A medida que avanza el mediodía, la temperatura sube, el actuador abre la ventana y la temperatura en el gh vuelve a caer. Ahora tenemos una nueva posición del actuador de punto 0. No puede pedirle al actuador que vuelva a la posición cero original, ¡eso cerraría la ventana!

Obviamente, me equivoqué en alguna parte y no sigo lo que @R Drast y @Spehro han dicho a continuación. ¿Pueden ustedes (o cualquier otra persona) aclararme esto?

================================================== ================== Pregunta original :

Soy relativamente nuevo en electrónica y he estado trabajando en un controlador de temperatura para mi invernadero desde hace algún tiempo. El sistema comprende un controlador PID y un actuador lineal, todo orquestado por un microcontrolador, muy probablemente ATTiny 2313 (ver imágenes). El diagrama de bloques no lo captura, pero el actuador está controlado por un tope final y el LDR está ahí para cerrar todo por la noche. Mi intención original era hacer esto sin un microcontrolador, por lo que piezas como el DAC parecen un poco redundantes ahora (aunque espero guardar algunos pines en mi uC). Ese es el trasfondo, con la mayoría de los componentes individuales construidos y probados en esta etapa.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Mi pregunta es esta, ¿cómo debo interpretar la salida PID en un sistema cuya retroalimentación es lenta? Entiendo que la salida PID es un "comando" de control, por lo que cuando la salida PID es +2V dice "ajuste la salida del sistema en +2V para alcanzar el objetivo del punto de ajuste". Puedo entender esto por ejemplo, control de velocidad del motor donde la retroalimentación es rápida. Hay pocas posibilidades de que el sistema se estire demasiado debido a una respuesta lenta del sistema, ya que el motor responderá inmediatamente al comando PID y, en el siguiente instante, el comando habrá cambiado de manera adecuada.

Para que quede claro y en respuesta a un comentario de un respondedor, entiendo que el comando es "posicional", lo que tiene sentido ya que una salida PID de 0 significa que no se mueva de su posición actual, se obtuvo el punto de referencia.

Sin embargo, puedo ver (usando la configuración de mi prototipo, vea la imagen) que el comando del PID puede emitirse durante bastante tiempo debido a la respuesta lenta del sistema que conduce al actuador hasta el tope final. Una idea que tuve fue ralentizar la entrega del comando muestreando la salida PID (usando el uC) de vez en cuando y luego actuando en consecuencia. Este es un intento de hacer coincidir el comando con la respuesta del sistema, pero no estoy seguro de si es lo correcto. ¿Qué es lo mejor que se puede hacer aquí? (Disculpas por la calidad del diagrama del circuito del controlador PID. Fue difícil encajarlo todo en una imagen).

¿Por 'controlado por tope final' quiere decir que el actuador solo puede estar completamente abierto o completamente cerrado?
Quiero decir que el actuador está equipado con microinterruptores (apenas visibles en la imagen) que limitan su recorrido en cualquier dirección.

Respuestas (2)

No debe usar la salida PID como un comando de velocidad en su sistema, ya que simplemente se volverá inestable y eventualmente oscilará entre un límite final y el otro, o no tendrá respuesta.

Usando un actuador lineal como lo está, debe usar la salida del PID como un comando de posición y hacer que el actuador siga la salida de esa manera. Al establecer los límites mínimo y máximo de PID, los interruptores de fin de carrera solo son medidas de seguridad si algo sale terriblemente mal.

Además, si detecta que su PID está en cualquiera de los límites (que podría tener que ser si la respuesta es muy lenta), desea inhibir el término integral mientras esté en un límite para que no sufra. de la liquidación del integrador.

Los PID funcionan bien en los controles de motor, es cierto, pero los uso industrialmente para controlar fácilmente las temperaturas en sistemas con varios minutos de retraso. El ajuste lo es todo... Recuerde lo básico, la ganancia proporcional solo lo llevará (aproximadamente) a la mitad o tres cuartos del punto de ajuste, la ganancia integral lo llevará el resto del camino. La derivada atempera el cambio.

Para los bucles de control de temperatura con un retraso prolongado, me resulta mucho más fácil aumentar el punto de ajuste lentamente hasta el punto de ajuste final en lugar de saltarlo de inmediato, lo que permite un ajuste más estricto del PID sin que entre en oscilación.

Edité la pregunta para señalar que entiendo que el comando es "posicional" en caso de que haya alguna confusión. El problema que tengo es interpretar este comando posicional. ¿Un límite máximo de PID significa colocar el actuador al final de su recorrido? ¿Ocurre esto a cada instante? O debería escalarse la respuesta del actuador de alguna manera. Me gusta su idea de aumentar el punto de referencia, pero no estoy seguro de cómo funcionaría con mi sistema.
Otro punto, dado que la ganancia de cada etapa está controlada por POT, estoy luchando por encontrar una manera de cerrar la integral cuando se alcanza el límite.
Primero: sobre todo, NO intente falsificar el PID jugando con su salida, eso hará que el bucle no se pueda sintonizar e inestable. Los límites de PID de los que hablé son abrazaderas electrónicas o de software en el PID CV (salida/variable de control). Una vez que el CV llega a un límite, el integrador se suspende para que no siga liquidándose. Si realmente está controlando la posición, es posible que su término integral sea demasiado rápido.
Pruebe lo básico del ajuste PID: establezca los términos I y D en cero, luego aumente P hasta que pueda observar la oscilación alrededor de su objetivo. Luego reduzca P hasta que la oscilación se detenga, y "un poco más". Luego comience a aumentar la ganancia I (lentamente) hasta que realmente alcance su objetivo.
Probaré los ajustes que sugieres, aunque, por lo que puedo recordar, el voltaje de salida del PID sigue subiendo/bajando incluso con la ganancia en cero. Sin embargo, el sensor de temperatura tarda tanto en responder que el PID podría emitir 3 V (por ejemplo) durante minutos. Entonces, mi pregunta es ¿cómo coloco el actuador para cada "instante" en que la salida es de 3V?
El PID completo parece demasiado complicado para esta aplicación. Normalmente, los términos I y D se activan cuando un controlador proporcional puro no hace el trabajo adecuadamente. Una compensación en la temperatura, entre la deseada y la real, no es un problema, ya que la perilla se puede calibrar, si es necesario. Por cierto, no hay un término D en su diagrama de circuito.
@Buck8pe Si la salida termina con el I Term establecido en cero, entonces hay un error en la ecuación PID. P es solo Pout=(SP-FB)*Pgain No hay lugar para la liquidación allí. Las salidas entrecortadas pueden ser causadas por el término D, que es (generalmente) Dout=dErr/dTime * DGain. Una vez más, no debería ser posible la liquidación. El término I es la integral del Error (SP-FB) en el tiempo * IGain. Los últimos tres términos se suman juntos. (Hay otras formas de la ecuación, pero esta es la básica). Si tienes tu bote I term 1M en el suelo, no deberías tener cuerda. Sin embargo, no se muestra conectado a tierra.
@R Drast Parece que debería experimentar y deshabilitar la contribución I. Le daré una oportunidad más tarde. Gracias.

Su rango de afinación del término 'I' es demasiado bajo por un factor enorme.

Normalmente, desearía una constante de tiempo ajustable en minutos (quizás ajustable de 1 a 30 minutos), no segundos, rango para un sistema de control térmico más grande. Lo que ha mostrado allí solo funcionará para desestabilizar muy bien el ciclo de control. De todos modos, a menudo no necesita realmente el control I: un control proporcional con alta ganancia puede hacer mucho (y la ganancia puede ser mayor si el término I no está allí mordisqueando la estabilidad, incluso cuando está correctamente ajustado). Si insiste en usarlo, necesitará un capacitor de baja fuga mucho más grande, un amplificador operacional que sea mejor y una resistencia de valor mucho más alto o hacerlo digitalmente. También hay trucos que se pueden jugar con voltajes más bajos y amplificadores operacionales de muy baja fuga.

Por lo general, desea restablecer el integrador o al menos detener la integración cuando la salida se interrumpe o obtendrá una liquidación del integrador que causará un exceso e incluso inestabilidad a medida que la variable del proceso alcanza el punto de ajuste. El mejor método para eso depende del esquema que esté usando, pero podría ser un interruptor analógico o un relé de láminas.

Sí, parece que debería desactivar la contribución I y ver cómo me va. Pero, todavía estoy confundido sobre cómo debo interpretar la salida. Dejando a un lado la contribución del integrador, cuando aparece una diferencia entre SP y FB (en el inicio o sale el sol, no sucede a menudo donde estoy :-) ¿debería experimentar cómo se relaciona el voltaje de salida con el movimiento? Por lo tanto, 2V podría significar abrir la ventana otros 2 cm (n señales intermitentes del codificador).
Elija una banda proporcional que sea sensible, digamos 3 grados C. Para la temperatura de -1,5 °C (o más) desde el punto de ajuste, su actuador está en un extremo, y para la temperatura de +1,5 °C (o más) desde el punto de ajuste, su actuador es llevado al extremo opuesto. Por lo general, es mejor reaccionar lo más rápido posible, pero no todos los actuadores se comportarán bien con cambios frecuentes y/o su señal de error puede ser demasiado ruidosa. El filtrado tiende a desestabilizar el sistema de circuito cerrado, pero es posible que tenga que hacerlo hasta cierto punto.
El integrador simplemente observa la diferencia entre el punto de ajuste y la retroalimentación y lo suma a lo largo del tiempo para generar un término de salida. Imagine un pulso de reloj de 1 segundo, una ganancia integral de 0,1 y un error de 20. Cada segundo, toma 20 * 0,1 y lo suma al término integral. En t=1, I=.2 En t=2, I=.4 en t=3, I=.6. Ahora, si su SP = FB en t=3, entonces tiene 0*.1 cada segundo, entonces I permanece en .6 El término proporcional es solo (SP-FB)* Pganancia, y se suma al término integral para su salida final
Gracias chicos, sé que esto está pasando un poco y @R Drast, entiendo bastante bien la teoría PID, pero permítanme decirlo de otra manera (y creo que Spehro es el más cercano aquí). Supongo (tal vez me equivoque) que el controlador del motor es "sin estado", no tiene memoria de lo que sucedió antes. Solo necesita un comando para posicionarlo hacia adelante o hacia atrás y debido a que este es un sistema de circuito cerrado, este comando (emitido por el PID) se ejecuta lo más rápido posible. Entonces, tal vez sea demasiado obvio, pero lo que entiendo ahora es que solo digo 1v = 50 vueltas del motor y...
si el sistema responde lentamente a la ventilación, el actuador llega al extremo.
Debe ser un comando de posición , no un comando de velocidad. En otras palabras, la salida del controlador le dice en qué posición debe estar el actuador. Como un servo en el que le da un comando para abrir el 50% o lo que sea, eso puede requerir retroalimentación local en el actuador (como el codificador de retroalimentación del servo o el potenciómetro). ). De lo contrario, se está integrando en su actuador, lo que no terminará bien aquí (en parte porque la integración es demasiado, demasiado rápida para la dinámica del sistema).