introduccion-control-automatico

Introducción al control automático

  • 5 min

La Teoría de Control es la rama de la ingeniería y las matemáticas que estudia cómo manipular un sistema dinámico para que se comporte como queremos.

Como siempre digo, no estaría bien empezar un curso completo de algo sin sentar primero unas buenas bases. Vamos a adentrarnos en un mundo fascinante, a veces temido por sus matemáticas, pero que es el auténtico motor que hace que la robótica y la automatización funcionen.

En informática y programación a nivel de software, estamos muy acostumbrados a la inmediatez. Si cambiamos el valor de una variable en memoria, cambia al instante. Si enviamos un comando por red, esperamos una respuesta casi inmediata. La lógica pura es discreta y predecible.

¿Qué pasa cuando nuestro código tiene que interactuar con el mundo físico?

El mundo real no entiende de inmediatez. Las cosas tienen masa, inercia, fricción, capacidad térmica e inductancia. Si le decimos a un motor de 1000 W que se ponga a sus máximas revoluciones, no lo hará en cero milisegundos; tardará un tiempo. Y si le decimos que pare, seguirá girando por inercia.

Para eso usamos el Control Automático.

Por qué los programadores necesitamos el control

Imaginemos que estamos programando el firmware de una impresora 3D y queremos calentar el fusor (hotend) a 200°C.

El enfoque “ingenuo” de un programador que no conoce la teoría de control sería escribir algo como esto:

float temperatura_objetivo = 200.0;

void actualizar_calentador() {
    float temp_actual = leer_sensor_temperatura();
    
    if (temp_actual < temperatura_objetivo) {
        encender_resistencia(); // ¡A tope de potencia!
    } else {
        apagar_resistencia();   // ¡Apaga, que nos pasamos!
    }
}
Copied!

A primera vista, la lógica es impecable. Sin embargo, en el mundo real, esto es un desastre.

El bloque de aluminio del fusor tiene inercia térmica. Cuando llegues a 200°C y apagues la resistencia, el calor residual seguirá fluyendo hacia el sensor, y la temperatura subirá a 210°C o 215°C (lo que conocemos como overshoot o sobreoscilación). Luego bajará lentamente, caerá a 190°C antes de que la resistencia vuelva a hacer efecto, y se pasará la vida oscilando violentamente.

Necesitamos una forma de observar cómo reacciona el sistema y ajustar nuestras acciones. En lugar de limitarnos a encender y apagar, podemos graduar la señal de control para corregir el error sin provocar oscilaciones innecesarias. Necesitamos teoría de control.

Cómo vemos el mundo: el concepto de planta

En la teoría de control, a la cosa que queremos controlar (ya sea un motor, un dron, el nivel de agua de un depósito o un reactor químico) la llamamos planta o sistema.

Para nosotros, a partir de ahora, la planta va a ser una caja negra dinámica.

Para poder interactuar con esta caja negra de forma matemática y programática, definimos tres conceptos fundamentales:

  • Entrada u(t): Es la señal de control. Es lo que nosotros podemos manipular. En el mundo de los microcontroladores (Arduino, ESP32), suele ser un ciclo de trabajo PWM (voltaje) que le mandamos a un driver de motor o a un transistor MOSFET.
  • Salida y(t): Es la variable que queremos controlar. Es la realidad que medimos a través de nuestros sensores. Puede ser la posición de un encoder, los grados por segundo de un giroscopio o la temperatura de un termistor.
  • Estado x(t): Son las variables internas del sistema en un momento dado que determinan su comportamiento futuro. (Profundizaremos en esto cuando lleguemos a la representación en Espacio de Estados).

Fíjate en que usamos la notación (t). Esto nos recuerda constantemente que estamos trabajando con sistemas que varían en el tiempo. Todo en control trata sobre la dinámica temporal.

El objetivo del juego

Cuando diseñamos un controlador, nuestro objetivo principal es asegurar tres cosas críticas, en este orden de importancia:

Es la regla número uno. Si le pedimos a un dron que se incline 10 grados y, por un mal control, empieza a oscilar cada vez más rápido hasta darse la vuelta y estrellarse contra el suelo, el sistema es inestable.

Un sistema inestable es peligroso y completamente inútil.

El mundo real está lleno de sorpresas. Una ráfaga de viento golpea nuestro dron, o alguien abre la puerta del horno que estamos controlando.

Nuestro sistema de control debe ser capaz de detectar esa “desviación” y corregirla rápidamente sin que nosotros tengamos que intervenir.

Queremos que el sistema alcance el objetivo rápido, pero sin pasarse (overshoot).

Queremos minimizar el error estacionario (que si pido 200°C, se quede en 200.0°C y no en 198°C para siempre).

Qué vamos a ver en este curso

A lo largo de esta serie vamos a conocer las herramientas que se usan para controlar sistemas físicos.

Dejaremos de ver los sistemas como simples líneas de código secuencial y pasaremos a entenderlos mediante diagramas de bloques. Estudiaremos cómo hacer que un sistema se mida a sí mismo y corrija sus propios errores de forma autónoma.

Y, lo más importante, veremos cómo traducir todas esas matemáticas continuas (integrales y derivadas) a código real y discreto en C++ que podamos meter en un triste bucle de un microcontrolador de 2 euros.

Prepara el café, porque en el próximo artículo empezamos manchándonos las manos para ver la diferencia fundamental entre mandar a ciegas y gobernar con inteligencia.