libreria arduino pidcontroller 608dfc9f4e5f0 - Electrogeek

Librería Arduino PIDController Deja un comentario

arduino pid library - Electrogeek

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.

Anuncio:

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á el mismo que el obtenido con Arduino PID.

Uso

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

#include 

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

PID::PIDParameters parameters(4.0, 0.2, 1);
PID::PIDController 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 PIDController como PIDController
  • 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 incluye establece Input y llama al metodo `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 muestro 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 controlador
  • Añadidos métodos para obtener la contribución de cada término (GetTermP, GetTermI, GetTermD)

Instalación

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

github logo - Electrogeek

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección
tutoriales de Arduino
5 1 vote
Article Rating

Anuncio:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0
    0
    Tu Carrito
    Tu carrito esta vacíoVolver a la tienda
    Enviar Whatsapp
    Hola 👋
    ¿En qué podemos ayudarte?