Control

Control de balancin PID con arduino

Un planta ideal para probar diferentes esquemas de control es un balancin.

Un balacin es un pendulo formado for una varilla con un motor con un helice en su extremo.

El objetivo es controlar la posiciòn angular  por medio de fuerza de empuje generada por la helices del motor

Para medir la posiciòn de la varilla se usa un potenciometro conectado al eje de rotaciòn, es decir el voltaje de salida de potenciometro es proporcional a la posiciòn angular.

La fuerza de empuje de la helice es proporcional a la fuerza a velocidad del motor y esta a su vez es proporcianal  a potencia pwm que se le alimente.

La entrada al control PID es el error de posiciòn angular y la salida es el ancho de pulso PWM.

 

#include <PID_v1.h>

 

int valorpote;     //Variable que recoge el valor del potenciómetro

int pwm1;          //Variable del PWM 1

int pin2=9;   //Entrada 2 del L293D  al Enable salida PWM

 

 

//Define Variables we'll be connecting to

double posicion, Setpoint,Output, error;

 

//Specify the links and initial tuning parameters


double Kp=68.77, Ki=10000, Kd=7.16;

//double Kp=1, Ki=0.1, Kd=0.23;

PID myPID(&posicion, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

 

 

 

void setup(){

 

    Setpoint = 96; //posicion referencia   Voltalje 80


   pinMode(pin2,OUTPUT);

 

  posicion = analogRead(0);  

 

  Serial.begin(9600);  //Iniciamos la comunicación con el puerto monitor serial

 

  myPID.SetMode(AUTOMATIC);
  myPID.SetOutputLimits(0, 255);

 

}

 

void loop(){

 

  posicion = analogRead(0);

 

  error = Setpoint - posicion;

 

 

 //  valorpote=analogRead(1);

 

 

   myPID.Compute();

 

 

   analogWrite(pin2,Output);

 

 

 

  Serial.println("x");

 

  Serial.println(posicion);

   Serial.println(error);

    Serial.println(Output);


 

 

  Serial.println("x");

 

 }

 

 

Deja un comentario

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