Librería Arduino PIDController


La librería PIDController permite ejecutar de forma sencilla un controlador PID en un microprocesador como Arduino.

PIDController está basado en la librería Arduino PID, un gran trabajo realizado por Brett Beauregard. En este post del autor se detallan las mejoras implementadas respecto a un controlador PID básico.

Sin embargo, la librería Arduino PID no ha sido actualizada desde 2017. PIDController continua con el trabajo en esta librería, a la vez que la adapta a los nuevos tiempos y procesadores.

Pese a estar basada en Arduino PID, la librería PIDController ha sido reescrita desde cero. Por ello, el código ha sido refactorizado y limpiado, para que sea más fácilmente entendible, mantenible y ampliado.

Por tanto, la librería PIDController no es retrocompatible con Arduino PID. Los proyectos deberán ser adaptados a la nueva librería, según lo explicado en "Diferencias con Arduino PID".

Una vez adaptado el código a la librería, la respuesta obtenida con PIDController ante las mismas entradas y parámetros del controlador será la mismo que la obtenido con Arduino PID.

Uso

Aquí tenemos un ejemplo de funcionamiento de la librería PIDController.

#include <PIDController.hpp>

const int PIN_INPUT = 0;
const int PIN_OUTPUT = 3;

PID::PIDParameters<double> parameters(4.0, 0.2, 1);
PID::PIDController<double> pidController(parameters);

void setup()
{
  pidController.Input = analogRead(PIN_INPUT);
  pidController.Setpoint = 100;

  pidController.TurnOn();
}

void loop()
{
  pidController.Input = analogRead(PIN_INPUT);
  pidController.Update();

  analogWrite(PIN_OUTPUT, pidController.Output);
}

Cambios respecto a Arduno-PID-Library

La librería PIDController incorpora las siguientes mejoras respecto a la librería Arduino PID. El código de tu proyecto deberá ser adaptado para tener en cuenta estos cambios.

  • La clase PID pasa a llamarse PIDController.
  • Se usa el namespace PID para evitar colisiones
  • Se hace uso de templating, así que ahora es posible usar tanto `double` como `float`
  • Input, Output y SetPoint dejan de ser punteros, para pasar a ser variables internas
  • El método `Calculate()` pasa a llamarse `Update()`
  • El método `SetMode` se reemplaza por las funciones `TurnOn`, `TurnOff` y `Toggle`
  • Añadido método `Update(T input)` que simultáneamente establece Input y llama al método `Update()`
  • Los parámetros Kp, Ki y Kd ahora están envueltos en una clase `PIDParameters`
  • #define para opciones son ahora enumeraciones.

Otras funciones de PIDController

Otras características añadidas a PIDController son las siguientes

  • Añadido parámetro `Resolution` para trabajar tanto con `millis()` como con `micros()`
  • Añadido el método `ForzeUpdate()` para actualizar incluso cuando el intervarlo de muestreo no haya pasado. (No es la opción preferida, pero es necesario en ciertos proyectos)
  • Añadidos parámetros separados para OutpuxMin, OutputMax, y AntiWindupMin, AntiWindupMax
  • Añadidas clases abstractas `IController` y `ISisoController`
  • Añadida clase PIDParametersAdaptative para simplificar el uso PID adaptativos.
  • Añadidos métodos `Get...()` para todas las propiedades del controladorAñadidos métodos para obtener la contribución de cada término (GetTermP, GetTermI, GetTermD)
  • Añadida integración trapezoidal para mejora calculo del término integral

Instalación

  • Descargar la última versión desde GitHub
  • Descomprimir el archivo
  • Copiar en tu carpeta de librerías (normalmente Mis Documentos\Arduino\libraries)
  • Relanzar el IDE de Arduino

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección
tutoriales de Arduino
4.5 2 votes
Article Rating
Previous Sensor de humedad del suelo capacitivo y Arduino
Next Marcha imperial con Arduino y motor paso a paso
0 Comments
Inline Feedbacks
View all comments