PI y PID discreto en Arduino

Поділитися
Вставка
  • Опубліковано 1 гру 2024
  • en este video se muestran dos ejemplos de simulación e implementación de un PID discreto, utilizando su forma de ecuación en diferencias derivada de la transformada z, ademas se simulan las plantas de primer y segundo orden aplicando el controlador PI y PID discreto respectivamente.
    El proceso se implementa inicialmente en Matlab y posteriormente se traslada a la tarjeta de Arduino.

КОМЕНТАРІ •

  • @vazt9776
    @vazt9776 Рік тому

    Gracias master, necesitaba saber como simular una planta dentro del Arduino para hacer una implementación hardware in the loop y no sabía como hacerlo. Me acabas de salvar la vida

  • @proyectos-jc
    @proyectos-jc  2 роки тому +10

    va
    _____________________
    ______________________
    int strEntero;
    String cadena="";
    double uk=0;
    double xk=0;
    double ek=0;
    double ukm1=0;
    double ukm2=0;
    double xkm1=0;
    double xkm2=0;
    double ekm1=0;
    double ekm2=0;
    int i=1;
    float Ts=0.25;
    float kp=2.47; // Ts=0.25 ti=kp/ki kd=kp*td td=kd/kp
    float ti=1.2667;
    float td=0.1474;
    int ref;
    double A;
    double B;
    double C;
    void setup() {
    A=kp*(1+(Ts/(2*ti))+(td/Ts));
    B=-kp*(1-(Ts/(2*ti))+(2*td/Ts));
    C=kp*td/Ts;
    Serial.begin(9600);
    }
    void loop() {
    while(Serial.available()>0){
    int inChar = Serial.read();
    if (isDigit(inChar)) cadena+=(char)inChar; //guarda en cadena el caracter numero
    if (inChar=='
    '){
    strEntero=cadena.toInt();// guarda en strEntero el caracter de cadena convertido a numero
    cadena="";// vacia variable cadena
    }
    }

    ref=strEntero;

    xk=ukm1*0.09813+ukm2*0.0597+xkm1*1.065 - xkm2*0.2231; // para t= 0.5seg funcion de transferen
    ek=ref-xk; // error
    uk=ukm1+(A*ek)+(B*ekm1)+(C*ekm2);// PID discreto
    //uk=ukm1+(A*ek)+(B*ekm1); // PI discreto
    //***********************************
    if (uk>=255){
    uk=255;
    }
    if (uk=2){
    ukm2=ukm1;
    xkm2=xkm1;
    ekm2=ekm1;
    }

    xkm1=xk;
    ukm1=uk;
    ekm1=ek;
    Serial.print(uk);
    Serial.print(", ");
    Serial.print(ref);
    Serial.print(", ");
    Serial.println(xk);
    i+=1;
    delay(250);
    }

  • @aliflorezpedraza1387
    @aliflorezpedraza1387 Рік тому

    gracias por tu trabajo, bien explicado y entendible

  • @joelndlc7114
    @joelndlc7114 7 місяців тому +1

    Chulada

  • @cuauhtexis
    @cuauhtexis Рік тому +1

    Chulada Master

  • @manueldefranciscovazquezpa6983
    @manueldefranciscovazquezpa6983 2 роки тому +2

    Implemente uno con el PID fisico, plox :)

  • @Drxxx
    @Drxxx 2 роки тому +1

    super channel, i like it

  • @andreayalagonzalez4366
    @andreayalagonzalez4366 Рік тому

    love it!!!!

  • @eduardomeza7573
    @eduardomeza7573 2 роки тому

    Cómo lo implementará a mi planta a través de que pin de salida

  • @pemosavi14
    @pemosavi14 Рік тому +1

    Como mandas la referencia? con un boton externo o desde tu teclado? yo intento escribir algun numero y me mueve los baudrate

    • @proyectos-jc
      @proyectos-jc  Рік тому

      la envió por monitor serial por teclado
      dentro del void loop

  • @adrienfalcao7721
    @adrienfalcao7721 2 роки тому

    Que tal, buenas tardes, ¿tienes algún contacto de correo o número para que me puedas ayudar con una tarea?