De Arossini

148 - Arduino y LM35 - Control de temperatura PID

Es un avance sobre el trabajo 147. Seguimos con el  módulo de potencia con  transistor TIP122 de 5 Amper y 50 Volt. Controlaremos la temperatura de una resistencia calefactora de porcelana de 8.2 Ohm 10 Watt con un algoritmo Proporcional Integrativo Diferencial o PID. Para ajustar los valores  de las constantes que ahora son tres,  Kp, Kd y Ki, usaremos el programa Ardu Graficador (Trabajo Número 128) que nos permite ver las curvas de Setpoint, Input y Output. Lo interesante es que puedan analizar las diferencias con el trabajo anterior.

Como siempre, en el archivo Zipeado está la información necesaria  y  los archivos.INO.  Pueden bajar un DOC, con el procedimiento y un ZIP con la información y  los archivos  INO

Este Control PID no requiere librerías, y es muy interesante para comprender como funciona un algoritmo PID.

Está basado en el siguiente trabajo: Guía de uso PID para Arduino.pdf. En él está la dirección WEB como referencia.

Si bien el título dice que es para Arduino, no es así y requiere de un cierto trabajo para adaptarlo realmente a Arduino. Por lo menos para Arduino IDE.

Seguimos los lineamientos del trabajo: 147 - Arduino + LM35 - Control de temperatura Proporcional. Este es Control P. Aquí evolucionamos agregándo el I y el D.

Podremos así comparar en los dos casos los diagramas obtenidos con el Ardu Graficador y ver como cambia el Control De P a PID.

El título de este trabajo, PID Caso 2, se refiere al segundo caso de Control PID que se presenta en la referencia.

Generalidades sobre Control PID y Control Proporcional solamente.

PID (Proporcional, Integral, Diferencial) es un algoritmo de control que trata de compensar las características de un sistema.

Hay tres componentes principales en un lazo de control PID. Cada componente se prefija con una ganancia constante, y cuando se suman, le dan el valor de control instantánea que utiliza para controlar el sistema.

Por lo general, se está generando una tensión para controlar el sistema, por lo que cada componente puede ser pensado como una contribución con un voltaje determinado a su salida final.

Va a haber una tensión correspondiente al estado actual del sistema (posición, temperatura, etc) que se llama Variable de proceso o PV. El PV es el valor que se pasa al lazo de control PID para decirle el estado del sistema.

Tenemos una (SP) Tensión de consigna, correspondiente al estado que desea PV para llegar. Básicamente, queremos el lazo PID para impulsar el sistema a que SP y PV sean iguales.

En tercer lugar, tenemos una tensión de control, u, que corresponde al valor de la tensión instantánea que utiliza para conducir el sistema hacia el voltaje SP. La tensión de control u puede ser pensada como lo que se envía realmente al sistema para dirigirlo hacia donde se quiere que vaya. Es análogo a un acelerador de automovil.

El algoritmo PID es mostrado en la Ecuación siguiente:

     

Está la parte proporcional, integral y diferencial en la ecuación

       

Las constantes son usadas para “setear” el signo y la ganancia de cada parte de esta ecuación.

es el “error” proporcional que es

   

La variable t corresponde al tiempo que corre en el sistema, y es simplemente una variable de integración.

La parte proporcional de la ecuación tiene en cuenta la separación entre PV y SP.

La parte diferencial tiene en cuenta lo rápido que nos estamos moviendo ( si se acerca al SP muy rápido puede pasarse de largo) , y se puede utilizar para reducir la parte proporcional si nos estamos acercando , o nos acelerará si no llegamos a pesar de nuestra contribución proporcional.

La parte integral de la ecuación tiene en cuenta el tiempo que hemos estado fuera del punto de ajuste , lo que contribuye más a nuestra salida cuanto más tiempo nos falta el PS . Esto es importante porque nuestras contribuciones P y D se suele llevar a nuestro PV a ceder ligeramente por encima o por debajo de nuestra variable SP .

Las tres variables se grafican en el Ardu Graficador, o se pueden ver los valores en el Serial.

Esquema

 

Programa

// El programa es PID_caso2.ino

// Variables utilizadas en el controlador PID Caso  2

unsigned long TiempoPasado;

double Input, Output, Setpoint;

double errSum, lastErr;

double kp, ki, kd;

int SampleTime = 100; // Seteamos el tiempo de muestreo en miliseg.

int Entrada = A0;

int Salida = 9;       // Es PIN PWM

 

double x;          // Temperatura                    Variable para el Ardu Graficador

double y;          // Salida PWM 0/255               Variable para el Ardu Graficador

double z;          // Set Point                      Variable para el Ardu Graficador

double ymax = 150; // Maximo admitido de y (PWM)     Variable para ajustar

double ymin = 0;   // Minimo admitido de y (PWM)     Variable para ajustar

int y1, y2, y3, y4, y5, y6, y7, y8, y9, y10;      // Para promediar la salida

 

void setup()

{

Serial.begin(115200);    // Configura el Serial

pinMode(Output, OUTPUT); // configura el (pin9) como salida

     

Setpoint = 40;           // Setpoint                       Variable para ajustar

kp = 30;                 // Constante de proporcionalidad  Variable para ajustar

ki = 0.01;               // Constante de proporcionalidad  Variable para ajustar

kd = 0.01;               // Constante de proporcionalidad  Variable para ajustar

}

 

void loop()

{

  // Leer la entrada 30 veces para evitar oscilaciones perjudiciales.

for (int B = 0; B <= 29; B++) { Input = Input + analogRead(Entrada); }

Input = Input /30;

Input = Input * 100 * 5 / 1024;    // Convertir a grados entigrados

//Serial.println(Input);           // Para experimentar solamente

 // Contador de tiempo. Es mejor que el retardo porque permite realizar

 //operaciones mientras no ha transcurrido el tiempo prefijado.

unsigned long Ahora = millis();

int CambioTiempo = (Ahora - TiempoPasado); // Si el tiempo ha pasado, sigue operando.

 

// Determina si hay que ejecutar el PID o retornar de la función.

if(CambioTiempo>=SampleTime)

{

// Calcula todas las variables de error.

double error = Setpoint - Input;

errSum += error;

double dErr = (error - lastErr);

// Calculamos la función de salida del PID.

//Serial.println(error);

Output = kp * error + ki * errSum + kd * dErr;

y = Output;

  y1 = y2; y2 = y3; y3 = y4; y4 = y5; y5 = y6; y6 = y7; y7 = y8; y8= y9; y9 = y10; y10 = y;

  y = (y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8 + y9 + y10)/10; // calculamos 10 veces para promediar

if (y < ymin) y = ymin;

if (y > ymax) y = ymax;

analogWrite(Salida,y);        // Cargar Output al PWM

// Guardamos el valor de algunas variables para el próximo ciclo de cálculo.

lastErr = error;

TiempoPasado = Ahora;

// Variables para graficar

 x = Input;

 // y para graficar ya está definido unas 11 lineas arriba.

 z = Setpoint;

 // Enviar al Serial para Graficar. Se debe mantener obligadamente este formato,

 // para que el Ardu Graficador no cometa errores.

Serial.print("ini");

Serial.print("x"); Serial.print(x); Serial.print("    ");

Serial.print("y"); Serial.print(y); Serial.print("    ");

Serial.print("z"); Serial.print(z); Serial.print("    ");

Serial.println("fin");

} // FIN del if(CambioTiempo>=SampleTime)

} // FIN del void loop()

Pantalla del Ardu Graficador

Son unos tres minutos de operación, luego de 10 minutos de iniciado el programa con Temperatura inicial de 21ºC. El error es de unos 0.10 ºC.

Z es el Set Point de 40ºC. Color amarillo.

Y es el valor de salida. Color Verde. Corresponde al PWM entre 0 y 255.

T es la temperatura medida con el LM35, en ºC. Color Rojo.

La tensión de alimentación de la resistencia es de 12 Volt. Correspondería al PWM de 255.

En el momento de la imagen, el PWM es de 13, que correspondería a 13 x 12 / 255 =

     = 0.62 Volt. Es más o menos la tensión estable, donde Temperatura = aprox. al Set Point.

Observar que hay un offset en el eje Y, para que no se encimen las imágenes con el X y el Z.

0
0
0
s2smodern

SONIDO AMBIENTAL

SONIDO AMBIENTAL

Ladelec instala el sonido ambiental a Centros Comerciales, Aeropuertos, Iglesias, escuelas, Colegios, Universidades, academias, oficinas, salas de espera, Clínicas...

leer mas

ASESORIA EN TESIS DE GRADO

MADRID1

Ladelec ofrece a estudiantes de ingeniería electrónica y afines, asi como a técnicos, tecnólogos y aficionados los servicios personalizados de ayuda para todo nivel de aprendizaje de la ciencia electrónica.

leer mas

ALQUILER AMPLIFICACIÓNES

ALQUILER AMPLIFICACIONES

Servicio de Alquiler de equipos amplificadores de potencia de audio para toda ocasión, que incuyen las cabinas de refuerzo de Sonido y los Amplificadores en potencias de hasta 20.000 W RMS.

leer mas