De Arossini

147 - Control proporcional de una resistencia calefactora.

Este programa es un control P (Proporcional), de diseño propio. No es Control PIC. Es para seguir investigando.

Es un avance sobre el trabajo 146. Le agregamos al Arduino un módulo de potencia con un transistor TIP122 de 5 Amper y 50 Volt. Controlaremos la temperatura con un algoritmo Proporcional. Para ajustar el valor de la constante Kp, usaremos el programa Ardu Graficador (Trabajo Número 128) que nos permite ver las curvas de Setpoint, Input y Output. Es una introducción para el próximo trabajo que será sobre un Control PIC. 

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. Revisión del 02/12/2015.

El programa para el Arduino es: P_ResLM35.ino.

Calentamos una Resistencia de 8.2 Ohm de porcelana, usamos LM35 como sensor de temperatura y corrección de parámetro por Serial. El sensor está unido a la resistencia con un alambre de cobre fino. Se mejora el contacto con una gotita de aceite que una el sensor a la porcelana de la resistencia.

Usamos el Ardu Graficador, trabajo 128 de esta serie.

Anda bien con 12 / 13 V.

Para elegir un valor de Kp (Constante proporcional) hice la siguiente cuenta:

Temperatura inicial = 21 º C

Set Point                 = 40 º C

Error inicial              = 40 -21 = 19

Kp                            = 255 / 19 = 14 aprox. Luego a este valor lo llevé hasta 50, sin que y llegara a 255.

La idea es que cuando arranque no llegue el PWM a 255.

Esta es la imagen del Ardu Graficador, para Tensión de 13.3 Volt, Set Point(y) de 40 ºC, Kp = 50, ymax = 200, ymin = 0, Retardo = 100.

La diferencia de temperaturas (x) es siempre menor a 0.4 ºC.

Si se baja la tensión, aumentará el nivel de Output (y) o sea el PWM que calienta la resistencia.

  Los seteos del Graficador se ven en la pantalla.

La oscilación del PWM no afecta a la Temperatura.

 Después de muchos minutos de oscilar, llega y sigue en este estado.

Toda esa oscilación que se veía al principio, de los valores de la Salida al PWM que se notaban en el gráfico, y que no influían para nada en los valores de temperatura, quedaron estabilizados naturalmente, y siguen estabilizados aún luego de unas dos horas de funcionamiento.

Las oscilaciones de Temperatura están entre 39.70 y 40.10ºC, siendo 40 el Setpoint.

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 automóvil.

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

    

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

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 .

En este trabajo, por simplicidad, usaremos solo el primer término de la ecuación:

Lo que significa que el valor PWM que descargaremos en el Pin 9, es igual a la constante Kp por el valor del error de la temperatura, o sea Temperatura de Setpoint menos la temperatura real.

       y = Kp * ( z – x) (Ver el programa donde se usan estas variables)

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

 

Esquemas

Módulo de LM35, Módulo de Salida de Potencia y Módulo Arduino UNO (O cualquier otro, teniendo en cuenta su numeración de Pines)

 

Programa P_ResLM35.ino

// DEFINIR PINES

int PinSensor = A0;

int Res = 9;   // Es PIN PWM

// DEFINIR VARIABLES

double x;            // Temperatura

double y;            // Salida PWM 0/255               Variable para ajustar

double z = 40;       // Set Point                      Variable para ajustar

double Kp = 50;      // Constante de proporcionalidad  Variable para ajustar

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

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

int Retardo = 100;   // Retardo en milisegundos        Variable para ajustar

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

// SETUP

void setup()

{

Serial.begin(115200);

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

}

// LOOP

void loop()

{ // LEER X O SEA LA TEMPERATURA PROMEDIANDOLA CON 30 LECTURAS

  for (int B = 0; B <= 29; B++) { x = x + analogRead(PinSensor); }

  x = x /30;                 // Se leen 30 valores de x (Temperatura) para promediar

  x = x * 100 * 5 / 1024;    // Convertir a grados centigrados

  // HACER EL CALCULO DEL CONTROL PROPORCIONAL Y = Kp * ERROR O SEA SETPOINT - LECTURA DE TEMPERATURA

  // SE PROMEDIAN 10 CALCULOS DE Y

  y = Kp*(z-x); if (y < ymin) {y = ymin;}  // Calculo com max y min acotado

  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 valores para promediar

  analogWrite(Res,y);        // Cargar la salida y al PWM

  // CARGAR LA SALIDA O SEA EL CALCULO PROPORCIONAL AL PWM

  // PREPARAR LA SALIDA SERIAL PARA EL ARDU GRAFICADOR

  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");

    // IF QUE ESPERA EL ENVIO DE UN VALOR PARA CORREGIR EN EL PROGRAMA

    if (Serial.available() > 0)  // Espera un valor para cambiar seteos

    {int Ki;int Kd;

    for (int A = 0; A < 4; A++) { // Para recibir de 1 a 4 valores

    switch (A)

    {

    case 0:

    z = Serial.parseFloat();     // Serial.parseFloat(); recibe valores separados por coma (Kp)

    break;

    case 1:

    Ki = Serial.parseFloat();

    break;

    case 2:

    Kd = Serial.parseFloat();

    break;

    case 3:

    for (int B = Serial.available(); B == 0; B--) {

    Serial.read();               // Limpia el Buffer

    }

    break;

    }

    }/*

    Serial.print(" Kp,Ki,Kd = ");    // Imprime en el Serial los valores nuevos

    Serial.print(Kp);                // Imprime en el Serial los valores nuevos

    Serial.print(",");               // Imprime en el Serial los valores nuevos

    Serial.print(Ki);                // Imprime en el Serial los valores nuevos

    Serial.print(",");               // Imprime en el Serial los valores nuevos

    Serial.println(Kd);              // Imprime en el Serial los valores nuevos

    myPID.SetTunings(Kp, Ki, Kd);    // Setea las nuevas constantes y reinicia el calculo*/

    } // FIN del if (Serial.available() > 0)

  // RETARDO 

delay(Retardo);

} // FIN del void loop()

Fotografías

Módulo resistencia de Porcelana 8.2 Ohm 10 Watt AAR008

    

Módulo Salida de Potencia para Arduino

    

 

Módulo para conexión de LM35

     

 

Conjunto para el Ensayo

       

 

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