Introducción
En primer lugar, debemos considerar qué es exactamente esa cosa llamada respuesta de impulso de un sistema y qué significa. Es un concepto abstracto que requiere un poco de reflexión para visualizarlo. No voy a entrar en matemáticas rigurosas. Mi punto es tratar de dar alguna intuición de lo que es esta cosa, que luego conduce a cómo se puede hacer uso de ella.
Ejemplo de problema de control
Imagina que tienes una gran resistencia de potencia con un sensor de temperatura montado en ella. Todo empieza apagado y a temperatura ambiente. Cuando enciendes la alimentación, sabes que la temperatura en el sensor acabará subiendo y se estabilizará, pero la ecuación exacta sería muy difícil de predecir. Digamos que el sistema tiene una constante de tiempo en torno a 1 minuto, aunque "constante de tiempo" no es del todo aplicable, ya que la temperatura no sube en una bonita exponencial como lo haría en un sistema con un solo polo, y por tanto una única constante de tiempo. Supongamos que quieres controlar la temperatura con precisión, y hacer que cambie a un nuevo nivel y se mantenga ahí de forma constante de forma significativamente más rápida que lo que haría si simplemente se encendiera al nivel de potencia adecuado y se esperara. Es posible que necesites unos 10 W en estado estable para la temperatura deseada, pero puedes descargar 100 W en la resistencia, al menos durante unas pocas decenas de segundos.
Básicamente, tienes un problema de sistema de control. La respuesta en bucle abierto es razonablemente repetible y hay una ecuación que la modela lo suficientemente bien, pero el problema es que hay demasiadas incógnitas para derivar esa ecuación.
Control PID
Una forma clásica de resolver esto es con un controlador PID. En el pleistoceno, cuando había que hacer esto en la electrónica analógica, la gente se puso a pensar en un esquema que funcionaba bien con las capacidades analógicas a mano. Ese esquema se llamó "PID", por Proporcional , Integral y Derivado .
P plazo
Se empieza midiendo el error. Se trata de la respuesta medida del sistema (la temperatura indicada por el sensor en nuestro caso) menos la entrada de control (el ajuste de temperatura deseado). Normalmente, estos pueden estar disponibles como señales de voltaje, por lo que encontrar el error era sólo una diferencia analógica, que es bastante fácil. Se podría pensar que esto es fácil. Todo lo que tienes que hacer es conducir la resistencia con mayor potencia cuanto mayor sea el error. Eso automáticamente tratará de hacerla más caliente cuando esté demasiado fría y más fría cuando esté demasiado caliente. Eso funciona, más o menos. Ten en cuenta que este esquema necesita algún error para causar cualquier salida de control distinta de cero (potencia que conduce la resistencia). De hecho, significa que cuanto mayor sea la potencia necesaria, mayor será el error, ya que es la única manera de obtener la alta potencia. Ahora se podría decir que todo lo que hay que hacer es aumentar la ganancia para que el error sea aceptable incluso a alta potencia. Después de todo, esa es más o menos la base de cómo se utilizan los opamps en muchos circuitos. Tienes razón, pero el mundo real no suele dejar que te salgas con la tuya. Esto puede funcionar para algunos sistemas de control sencillos, pero cuando hay todo tipo de arrugas sutiles en la respuesta y cuando puede tomar un tiempo significativo, terminas con algo que oscila cuando la ganancia es demasiado alta. Dicho de otro modo, el sistema se vuelve inestable.
Lo que he descrito anteriormente es la parte P (proprocional) de la EPI. Al igual que puedes hacer que la salida sea proporcional a la señal de error, también puedes añadir términos proprcionales a la derivada temporal y a la integral del error. Cada una de estas señales P, I y D tienen su propia ganancia separada antes de ser sumadas para producir la señal de salida de control.
I plazo
El término I permite que el error se anule con el tiempo. Mientras haya algún error positivo, el término I seguirá acumulándose, y finalmente elevará la salida de control hasta el punto en que el error global desaparezca. En nuestro ejemplo, si la temperatura es consistentemente baja, estará constantemente incrementando la potencia en la resistencia hasta que la temperatura de salida finalmente no sea más baja. Esperemos que pueda ver que esto puede volverse inestable incluso más rápido que un término P alto. Un término I por sí mismo puede fácilmente causar sobregiros, que se convierten en oscilaciones fácilmente.
Término D
A veces se omite el término D. El uso básico del término D es añadir un poco de estabilidad para que los términos P e I puedan ser más agresivos. El término D dice básicamente Si ya voy en la dirección correcta, deja de pisar el acelerador un poco, ya que lo que tengo ahora parece que nos lleva allí .
Ajuste del PID
Los fundamentos del control PID son bastante sencillos, pero acertar con los términos P, I y D no lo es. Esto suele hacerse con mucha experimentación y ajustes. El objetivo final es conseguir un sistema global en el que la salida responda lo más rápidamente posible, pero sin un exceso de sobreimpulso o timbre, y, por supuesto, tiene que ser estable (no empezar a oscilar por sí mismo). Se han escrito muchos libros sobre el control PID, sobre cómo añadir pequeñas arrugas a las ecuaciones, pero sobre todo sobre cómo "afinarlas". Afinar se refiere a adivinar las ganancias óptimas de P, I y D.
Los sistemas de control PID funcionan, y ciertamente hay muchos conocimientos y trucos por ahí para hacerlos funcionar bien. Sin embargo, el control PID no es la única respuesta correcta para un sistema de control. La gente parece haber olvidado por qué se eligió el PID en primer lugar, que tenía más que ver con las limitaciones de la electrónica analógica que con ser una especie de esquema de control óptimo universal. Desgraciadamente, demasiados ingenieros de hoy en día equiparan "sistema de control" con PID, lo cual no es más que una reacción visceral de pequeño pensamiento. Eso no hace que el control PID sea erróneo en el mundo actual, sino sólo una de las muchas formas de atacar un problema de control.
Más allá de la EPI
Hoy en día, un sistema de control de bucle cerrado para algo como el ejemplo de la temperatura se haría en un microcontrolador. Estos pueden hacer muchas más cosas que simplemente tomar la derivada y la integral de un valor de error. En un procesador se pueden hacer divisiones, raíces cuadradas, mantener un historial de valores recientes, y mucho más. Son posibles muchos otros esquemas de control además del PID.
Respuesta al impulso
Así que olvídate de las limitaciones de la electrónica analógica y piensa en cómo podríamos controlar un sistema volviendo a los primeros principios. ¿Qué pasaría si para cada pequeño trozo de salida de control supiéramos lo que haría el sistema? La salida de control continua es entonces sólo la suma de muchas piezas pequeñas. Como sabemos cuál es el resultado de cada pieza, podemos saber cuál es el resultado de cualquier historia anterior de salidas de control. Ahora, fíjate en que "un pequeño trozo" de la salida de control encaja muy bien con el control digital. Usted va a calcular lo que la salida de control debe ser y establecerlo, luego volver y medir las entradas de nuevo, calcular la nueva salida de control de los mismos y establecer de nuevo, etc. Estás ejecutando el algoritmo de control en un bucle, y mide las entradas y establece la salida de control de nuevo en cada iteración del bucle. Las entradas se "muestrean" en tiempos discretos, y la salida se ajusta igualmente a nuevos valores en un intervalo fijo. Mientras puedas hacer esto lo suficientemente rápido, puedes pensar que esto ocurre en un proceso continuo. En el caso del calentamiento de una resistencia que normalmente tarda unos minutos en asentarse, ciertamente varias veces por segundo es mucho más rápido de lo que el sistema responde intrínsecamente de una manera significativa que la actualización de la salida a digamos 4 Hz parecerá continua para el sistema. Esto es exactamente lo mismo que la música grabada digitalmente que cambia el valor de salida en pasos discretos en el rango de 40-50 kHz y que es tan rápido que nuestros oídos no pueden oírlo y suena continuo como el original.
Entonces, ¿qué podríamos hacer si tuviéramos esta forma mágica de saber qué hará el sistema a lo largo del tiempo debido a cualquier muestra de salida de control? Como la respuesta de control real es sólo una secuencia de muestras, podemos sumar la respuesta de todas las muestras y saber cuál será la respuesta del sistema resultante. En otras palabras, podemos predecir la respuesta del sistema para cualquier forma de onda de respuesta de control arbitraria.
Eso está bien, pero la mera predicción de la respuesta del sistema no resuelve el problema. Sin embargo, y aquí está el momento aha, puedes darle la vuelta a esto y encontrar la salida de control que se habría necesitado para obtener cualquier respuesta deseada del sistema. Obsérvese que eso es exactamente resolver el problema de control, pero sólo si podemos conocer de alguna manera la respuesta del sistema a una sola muestra de salida de control arbitraria.
Así que probablemente estés pensando, eso es fácil, sólo tienes que darle un gran pulso y ver lo que hace. Sí, eso funcionaría en teoría, pero en la práctica no suele ser así. Esto se debe a que cualquier muestra de control, incluso una grande, es tan pequeña en el esquema general de las cosas que el sistema apenas tiene una respuesta medible. Y recuerde que cada muestra de control tiene para que la secuencia de muestras de control resulte continua para el sistema. Así que no es que esta idea no funcione, sino que en la práctica la respuesta del sistema es tan pequeña que queda enterrada en el ruido de la medición. En el ejemplo de la resistencia, golpear la resistencia con 100 W durante 100 ms no va a causar suficiente cambio de temperatura para medir.
Respuesta al paso
Pero, todavía hay una manera. Mientras que al introducir una sola muestra de control en el sistema habríamos obtenido su respuesta a las muestras individuales directamente, aún podemos inferirla introduciendo una secuencia conocida y controlada de respuestas de control en el sistema y midiendo su respuesta a éstas. Por lo general, esto se hace poniendo un control paso en. Lo que realmente queremos es la respuesta a un pequeño bache, pero la respuesta a un solo paso es sólo la integral de eso. En el ejemplo de la resistencia, podemos asegurarnos de que todo está en estado estacionario a 0 W, y de repente encender la energía y poner 10 W en la resistencia. Esto causará un cambio de temperatura bien medible en la salida. La derivada de eso con la escala correcta nos dice la respuesta a una muestra de control individual, aunque no podamos medirla directamente.
Así que, para resumir, podemos poner una entrada de control de paso en un sistema desconocido y medir la salida resultante. Eso se llama respuesta al paso . Luego tomamos la derivada temporal de eso, que se llama respuesta de impulso . La salida del sistema resultante de cualquier muestra de entrada de control es simplemente la respuesta al impulso adecuadamente escalada a la fuerza de esa muestra de control. La respuesta del sistema a todo un historial de muestras de control es un montón de respuestas al impulso sumadas, escaladas y sesgadas en el tiempo para cada entrada de control. Esta última operación es muy frecuente y tiene el nombre especial de convolución .
Control de convolución
Así que ahora debería ser capaz de imaginar que para cualquier conjunto deseado de salidas del sistema, puede llegar a la secuencia de entradas de control para causar esa salida. Sin embargo, hay un problema. Si eres demasiado agresivo con lo que quieres del sistema, las entradas de control para conseguirlo requerirán valores altos y bajos inalcanzables. Básicamente, cuanto más rápido esperes que el sistema responda, mayores deberán ser los valores de control, en ambas direcciones. En el ejemplo de la resistencia, puedes decir matemáticamente que quieres que vaya inmediatamente a una nueva temperatura, pero eso requeriría una señal de control infinita para lograrlo. Cuanto más lento sea el cambio de temperatura al nuevo valor, menor será la potencia máxima que se necesita para poder volcar en la resistencia. Otra arruga es que la potencia en la resistencia a veces tendrá que bajar también. No puedes poner menos de 0 potencia en la resistencia, así que tienes que permitir una respuesta lo suficientemente lenta para que el sistema no quiera enfriar activamente la resistencia (poner potencia negativa), porque no puede.
Una forma de solucionar este problema es que el sistema de control filtre la entrada de control del usuario antes de utilizarla internamente. Que los usuarios hagan lo que quieran. Déjales que den un portazo a la entrada rápidamente. Internamente, filtras el paso bajo para suavizarlo y ralentizarlo a la mayor velocidad que sepas que puedes realizar dada la potencia máxima y mínima que puedes poner en la resistencia.
Ejemplo del mundo real
He aquí un ejemplo parcial con datos del mundo real. Se trata de un sistema integrado en un producto real que, entre otras cosas, tiene que controlar un par de docenas de calentadores para mantener varios depósitos de productos químicos a temperaturas específicas. En este caso, el cliente eligió hacer un control PID (es con lo que se sentían cómodos), pero el sistema en sí todavía existe y puede ser medido. Aquí están los datos en bruto de la conducción de uno de los calentadores con una entrada de paso. El tiempo de iteración del bucle fue de 500 ms, que es claramente un tiempo muy corto teniendo en cuenta que el sistema todavía se está asentando visiblemente en este gráfico de escala después de 2 horas.
En este caso se puede ver que el calentador fue conducido con un paso de alrededor de 0,35 de tamaño (el valor "Out"). Poner un paso completo de 1,0 durante mucho tiempo habría dado lugar a una temperatura demasiado alta. El desplazamiento inicial puede ser eliminado y el resultado escalado para tener en cuenta el pequeño paso de entrada para inferir la respuesta de paso de la unidad:
De esto se podría pensar que sólo hay que restar los valores sucesivos de la respuesta al paso para obtener la respuesta al impulso. Eso es correcto en teoría, pero en la práctica se obtiene sobre todo el ruido de medición y cuantificación, ya que el sistema cambia muy poco en 500 ms:
Obsérvese también la pequeña escala de los valores. La respuesta al impulso se muestra a escala de 10 6 .
Evidentemente, las grandes variaciones entre las lecturas individuales o incluso entre unas pocas son sólo ruido, por lo que podemos filtrarlas en paso bajo para eliminar las altas frecuencias (el ruido aleatorio), lo que nos permitirá ver la respuesta subyacente más lenta. He aquí un intento:
Eso es mejor y muestra que realmente hay datos significativos, pero todavía hay demasiado ruido. Aquí tenemos un resultado más útil obtenido con más filtros de paso bajo de los datos brutos de los impulsos:
Esto es algo con lo que realmente podemos trabajar. El ruido restante es pequeño en comparación con la señal global, por lo que no debería estorbar. Parece que la señal sigue estando prácticamente intacta. Una forma de ver esto es notar que el pico de 240 es más o menos correcto a partir de una rápida comprobación visual y filtrado a ojo del gráfico anterior.
Así que ahora párate a pensar en lo que significa realmente esta respuesta al impulso. En primer lugar, observa que se muestra por 1M, por lo que el pico es realmente 0,000240 de la escala completa. Esto significa que, en teoría, si el sistema fuera accionado con un solo impulso a escala completa durante uno de los intervalos de tiempo de 500 ms, ésta sería la temperatura resultante en relación con la que se hubiera dejado. La contribución de cualquier período de 500 ms es muy pequeña, como es lógico. Esta es también la razón por la que la medición de la respuesta al impulso directamente no funciona, ya que 0,000240 de la escala completa (aproximadamente 1 parte en 4000) está por debajo de nuestro nivel de ruido.
Ahora puede calcular fácilmente la respuesta del sistema para cualquier señal de entrada de control. Para cada muestra de salida de control de 500 ms, añada una de estas respuestas de impulso escalada por el tamaño de esa muestra de control. El tiempo 0 de la contribución de esa respuesta al impulso a la señal de salida final del sistema está en el momento de su muestra de control. Por lo tanto, la señal de salida del sistema es una sucesión de estas respuestas al impulso desplazadas 500 ms entre sí, cada una escalada al nivel de la muestra de control en ese momento.
La respuesta del sistema es la convolución de la entrada de control con esta respuesta al impulso, calculada cada muestra de control, que es cada 500 ms en este ejemplo. Para hacer un sistema de control a partir de esto se trabaja hacia atrás para determinar la entrada de control que resulta en la salida deseada del sistema.
Esta respuesta de impulso sigue siendo bastante útil incluso si quieres hacer un controlador PID clásico. Afinar un controlador PID requiere mucha experimentación. Cada iteración tomaría una hora o dos en el sistema real, lo que haría la sintonía iterativa muy, muy lenta. Con la respuesta al impulso, puedes simular la respuesta del sistema en un ordenador en una fracción de segundo. Ahora puede probar nuevos valores PID tan rápido como puede cambiarlos y no tener que esperar una hora o dos para que el sistema real le muestre su respuesta. Los valores finales, por supuesto, siempre deben ser comprobados en el sistema real, pero la mayor parte del trabajo se puede hacer con la simulación en una fracción de tiempo. Esto es lo que quiero decir con "Puedes usar esto como base de simulación para encontrar los parámetros del control PID antiguo" en el pasaje que ha citado en su pregunta.