MAQUETA DIDÁCTICA DE CONTROL PID CON ARDUINO Ponente: Manuel Hidalgo Díaz Coautores: Igor Real – Alberto Yebra
Objetivos del proyecto Crear una maqueta con elementos de bajo coste y fácil adquisición para los centros educativos. Presentar los conceptos básicos de control de un proceso mediante PID. Visualizar los parámetros de control del proceso a controlar.
Maqueta didáctica Maqueta de Igor
Sistema de control Control en lazo abierto
Sistema de control Control en lazo cerrado
MAQUETA DIDÁCTICA Maqueta de Manuel
MAQUETA DIDÁCTICA Maqueta de Manuel
Sensor de temperatura
Sensor de temperatura Sensor de temperatura. Maqueta de Manuel Respuesta lineal del sensor de temperatura.
Sensor de temperatura R1 = 100 K temperatura+=(5.0*analogRead(lm35)*100.0)/1023.0
Actuador controlado Señal de control en la puerta (G) del transistor MOSFET. Control por PWM. Tensión variable a la salida del drenador (D). De esta manera variando el ciclo de trabajo de la señal PWM. A la salida se tiene una tensión variable aplicada al ventilador. Controlando la velocidad del ventilador
Control PID Ecuación matemática La señal de control u(t) es la suma de los tres términos de la siguiente ecuación Señal proporcional Señal derivativa Señal integral A CONTINUACIÓN SE VE EL EFECTO DE CADA TÉRMINO SOBRE EL CONTROL DE LA TEMPERATURA.
CÓDIGO DEL programa Previamente se determina el periodo de muestreo en función de la rapidez del proceso para aplicar el control. Error con respecto a valor de referencia. SampleTime=(millis()-LastTime); if (SampleTime>=100) { LastTime=millis(); //Calculo de error (diferencia entre SetPoint y temperatura actual prev_error=(float)error; error=(float)temperatura-(float)Referencia; …….
Control proporcional
Control P con Kp grande
CÓDIGO CONTROL P Proportional = (float)Kp * (float)error;
Control proporcional integral (PI)
CÓDIGO CONTROL i //El control integral solo entra cuando esta lo suficientemente cerca //Esto es para evitar saturar el control if ( (abs(error)<=Margen_Int)) { if (timeOutInt++ >10) //Si se cumple durante X veces el SampleTime (delay de la parte integral) Integral+=(float)Ki*(float)error; timeOutInt=3000; //Para evitar desbordamiento del numero si esta durante mucho tiempo } }else Integral=0; timeOutInt=0;
CÓDIGO CONTROL D //Parte derivativa Derivative=(float)Kd*((float)error-(float)prev_error);
CÓDIGO SEÑAL DEL ACTUADOR //-Suma de los tres terminos para la señal PWM que controla la velocidad del ventilador- dutycycle= 200 + (int)Proportional+ (int)Integral + (int)Derivative; //Limites de la salida. PWM de Arduino 0-255 (8 bits). if (dutycycle <0) { dutycycle=0; }else if (dutycycle>255) dutycycle=255; } //Actualizo salida analogWrite(9,(int)dutycycle);
Información del proyecto http://real2electronics.blogspot.com/2011/07 /maqueta-de-control-pid-con-arduino.html