Por Jeremy Cook
Para aquellas personas que trabajan en controles industriales, la teoría proporcional, integral y derivativa (PID, por sus siglas en inglés) es probablemente un concepto familiar. Para la mayoría de las personas, el término es muy extraño, pero es posible que usted esté más familiarizado con él de lo que piensa. Cuando apreta el acelerador en un auto, no solo considera cuánto demorará en alcanzar la velocidad ideal (la parte proporcional de PID), también toma en cuenta cómo acelera su vehículo en particular, así como condiciones como pendientes.
Para aquellas personas que trabajan en controles industriales, la teoría proporcional, integral y derivativa (PID, por sus siglas en inglés) es probablemente un concepto familiar. Para la mayoría de las personas, el término es muy extraño, pero es posible que usted esté más familiarizado con él de lo que piensa. Cuando apreta el acelerador en un auto, no solo considera cuánto demorará en alcanzar la velocidad ideal (la parte proporcional de PID), también toma en cuenta cómo acelera su vehículo en particular, así como condiciones como pendientes.
Estos efectos más sutiles son los que los términos "I" y "D" consideran de manera matemática. En este ejemplo, evitarían que la velocidad de un automóvil rebote de un límite superior a un límite inferior, y podemos aplicar el mismo concepto a una variedad de situaciones de control. Si bien el control basado en límites lo puede aproximar, el sistema tenderá a actuar de manera un poco errática.
Ecuación de PID
Podemos expresar el control de PID de manera matemática con la siguiente ecuación. P, I y D están representados por los tres términos que se agregan aquí. Kp, Ki y Kd son constantes que ajustan la manera en que el sistema reacciona a cada factor:

También podemos reemplazar Ki y Kd por 1/Ti y Td, respectivamente. Este cambio le da a la ecuación una mejor relación con su significado físico y permite a las unidades trabajar correctamente para obtener una cifra sin unidades:

También podemos transponer la ecuación para extraer el valor de Kp y aplicarlo a toda la ecuación, en lo que se conoce como la forma estándar. Una ventaja de esta forma es que podemos ajustar la constante general de Kp para toda la ecuación a la vez:

Todo esto puede parecer un poco intimidante, quizás incluso para alguien que se haya titulado de ingeniero. Lo positivo es que no es necesario que indague en su libro de modelamiento y análisis de sistemas dinámicos para comprender lo que sucede en este caso. Y si bien nunca está demás, ni siquiera debe hacer cálculos.
Al desglosar la ecuación, producimos u(t) (la salida del controlador sin unidades en el lado izquierdo de la ecuación) mediante la adición de tres elementos matemáticos en el lado derecho del signo igual: P, I y D. Cada elemento tiene un valor de "K" constante delante (Kp, Ki y Kd), que significa la ponderación de cada elemento, a medida que dan forma a u(t), o la salida del control en un momento específico. Podemos ajustar de manera individual cada valor de K para lograr un mejor rendimiento del sistema, lo que explicaremos más adelante:
Proporcional (P—Kp)
El primer término y más crucial en esta ecuación es la e(t). Como tal, el valor de Kp que viene antes es, por lo general, mayor que los otros valores de "K" en la ecuación. Aquí, e(t) es simplemente el error instantáneo en un momento determinado: el valor real de un dispositivo controlado menos el valor deseado. Multiplique esto por Kp y tendrá su contribución para la salida general del controlador.
Integral (I—KI)
El segundo término en esta ecuación tiene que ver con el error combinado a lo largo del tiempo. Es la suma de todos los errores que se experimentan en el dispositivo:
Cada vez que un controlador calcula u(t), agrega el error instantáneo a un recuento actualizado.
Esta cifra luego se multiplica por Ki y se suma a u(t).
Considere una situación donde una fuerza mantiene un motor en su lugar y no deja que regrese al punto de ajuste bajo condiciones normales. Ya que está fuera de las especificaciones cada vez más, el término "I" seguirá aumentando, para al final superar esta fuerza o llegar a los límites de la capacidad del motor.
Derivativa (D—Kd)
El tercer término de esta ecuación tiene que ver con la rapidez con la que cambia el error:
En teoría, si solo tuviera un término "D" en esta ecuación y su proceso mantuviera de manera constante el valor equivocado, este término se mantendría en cero y no contribuiría a la salida correcta. Por otro lado, si uno de los otros dos términos intenta que la salida del dispositivo vuelva a su lugar demasiado rápido, la derivativa puede ayudar a amortiguar el efecto.
Si bien la expresión basada en el cálculo de este concepto puede ser útil, la realidad del control PID es mucho menos mágica de lo que parece inicialmente. En términos prácticos, calculamos la salida usando solo suma, resta y multiplicación, teniendo en cuenta el error y el tiempo entre lecturas. De hecho, usamos sistemas neumáticos para implementar formas iniciales de control PID, mediante el uso de medios mecánicos para ingresar cada "término".
1. Los controladores toman una lectura de error instantánea.
2. Reste la lectura instantánea anterior de ella.
3. Multiplique ese valor resultante por Kd para calcular su contribución a u(t).
Tutorial del controlador PID Arduino
En muchas situaciones, es conveniente conectar un controlador PID dedicado a su proceso, pero puede fabricar uno propio con un Arduino u otra placa de desarrollo similar. Incluso puede redactar su propia rutina de PID. Exprese cada término del código de manera similar a:
- P:instanteneousError = punto de ajuste – entrada;
- I:cumulativeError = += error * elapsedTime;
- D:rateOfError = (error – errorLastCalculation)/elapsedTime
Para obtener la salida necesaria, multiplique cada uno de estos términos por su respectivo valor de "K" y súmelos. Por otro lado, si desea evitar tener que reinventar la rueda, puede revisar la biblioteca sobre PID de Brett Beuregard. Esta biblioteca se preocupa de los detalles por usted y deja que se concentre en el ajuste de los valores constantes de P, I y D según sea necesario.

Para demostrar la teoría de PID en acción, saqué un Arduino Nano Every de mi caja de herramientas, junto con:
- Placa de controladores del motor
- Sensor infrarrojo
- Motor recuperado de un dron Hubsan H107C
Imprimí un montaje de placa de pruebas para el motor, junto con un "ventilador" que bloquea la luz el 50 % del tiempo para evitar los impulsos faltantes a medida que gira. El accionador del motor es la entrada al motor (de otro modo sin control) y la retroalimentación se basa en el tiempo entre impulsos.
Cuando finalmente terminé el código y obtuve las piezas impresas en 3D, pude controlar el motor de manera más sofisticada que al operar el botón de encendido con salida PWM constante (modulación por ancho de pulsos).

Fragmento de código de la rutina PID vinculada anteriormente
Entre los fragmentos de código destacados se encuentran el uso de una rutina de interrupción para registrar cada pulso a medida que el dispositivo de bloqueo gira y el cálculo del tiempo entre pulsos mediante el uso de milisegundos(). Configuré el PID en la primera parte del código fuera de las funciones con:
PID myPID (&difference, &driverOut, &setPoint,Kp,Ki,Kd, DIRECT)
Kp, Ki y Kd se definen antes de esta línea en el código, y &difference controla &driverOut, con &setPoint modificadas con el monitor en serie. Podemos manipular esta matemática para transformar esta diferencia de tiempo en RPM, pero las configuraciones de PID funcionan como salidas DIRECTAS, porque este controlador en particular se enciende cuando la entrada está baja. A medida que la salida analógica aumenta (motores apagados), también aumenta el retardo entre pulsos.

Una versión inicial de la rutina PID. Observe que CH1 lee los pulsos de entrada, mientras que la salida de CH2 se calcula mediante el uso de la rutina PID: los pulsos bajos son entradas al motor.
Este simple ejemplo de controlador PID se impulsó por piezas a mano (lo que incluye el nuevo Arduino Nano Every) y un motor con el que estaba ligeramente familiarizado. Pero pude demostrar cómo aplicar el control PID en una amplia variedad de situaciones, incluso sin todos los hechos. Ya sea que se trate del control del motor, el control de temperatura de un horno o equilibrar un robot, una pequeña configuración y ajuste de PID le brinda un sinfín de opciones de experimentación.

