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.
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
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);
}
te amo
gracias por tu trabajo, bien explicado y entendible
Chulada
Chulada Master
Implemente uno con el PID fisico, plox :)
super channel, i like it
love it!!!!
Cómo lo implementará a mi planta a través de que pin de salida
Como mandas la referencia? con un boton externo o desde tu teclado? yo intento escribir algun numero y me mueve los baudrate
la envió por monitor serial por teclado
dentro del void loop
Que tal, buenas tardes, ¿tienes algún contacto de correo o número para que me puedas ayudar con una tarea?