Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Control de Temperatura con PID.

Enviado por   •  27 de Febrero de 2018  •  1.613 Palabras (7 Páginas)  •  396 Visitas

Página 1 de 7

...

}

El algoritmo final de control:

const float Kp =10;//ganancia proporcional como una constante q´puede tener decimales

const float Ki =.5;//ganancia integral

const float Td =0;//ganancia derivativa

const int referencia=26;// referencia o set-point constante entera

float temperatura = 0;

unsigned long lastTime;//variable de tiempo auxiliar para muestreos uniformes

float erroractual=0;// el error del sistema

float errorAcum=0;

float ultimoerror=0;

int T=10; // periodo de muestreo T deseado en milisegundos

int actuador=9; // el pin9 de salida "analogica" se llamará actuador

int actuador2=8; // el pin8 de salida

int inputPin = A0; // el pin A1 de entrada analogica se llamará inputPin

const int numReadings = 20;

int readings[numReadings]; // the readings from the analog input

int index = 0; // the index of the current reading

int total = 0; // the running total

double average = 0; // the average

void setup()

{

// inicializar comunicación seria con la pc:

Serial.begin(9600);

for (int thisReading = 0; thisReading

readings[thisReading] = 0;

//initialize the variables we're linked to

}

void loop() {

//subtract the last reading:

total= total - readings[index];

//read from the sensor:

readings[index] = analogRead(inputPin);

//add the reading to the total:

total= total + readings[index];

//advance to the next position in the array:

index = index + 1;

// if we're at the end of the array...

if (index >= numReadings)

// ...wrap around to the beginning:

index = 0;

// calculate the average:

average = total / numReadings;

int sensor=average;

sensor = (5.0 * sensor*100.0)/1023.0;

Serial.println (sensor); //escribe la temperatura en el serial

delay (500); //espera 3 segundos para la siguiente medicion

unsigned long now = millis(); //now sera el tiempo transcurrido desde el arranque

int timeChange=(now-lastTime); // tiempo transcurrido

if(timeChange>=T){ //hasta que el tiempo transcurrido sea >T se calcula el resto

erroractual=referencia-sensor; // calculo del error

errorAcum+=erroractual;//+ultimoerror;

float diferror=erroractual-ultimoerror;

int uP=(erroractual)*Kp+(errorAcum)*Ki+(diferror)*Td;//calculo de ley de controll proporcional al error,a la sumatoria del error (integral) y al cambio del error;

if (erroractual>0)

{

//then pin 9)

uP=constrain(uP,0,255);

analogWrite(actuador,uP);

}

else (erroractual

{

//then pin 8 )

uP=constrain(uP,0,255);

analogWrite(actuador2,uP);

}

Serial.println(sensor);

ultimoerror=erroractual;

lastTime=now;}// grabar el ultimo tiempo medido en la variable lastime

}

---------------------------------------------------------------

GRAFICA DEL CONTROL PID.

Grafica con control proporcional:

[pic 8]

Como podemos observar, en esta acción presenta un error en estado estable.

Grafica con control proporcional-integral:

[pic 9]

---------------------------------------------------------------

PROCEDIMIENTOS

El proceso elegido es el control de temperatura. Para ello un bulbo incandescente de corriente directa genera el calor y un ventilador actúa como control para la refrigeración. Un sensor resistivo de tipo NTC se encarga de registrar la temperatura del habitáculo, en este caso se utilizó el dispositivo electrónico LM-35.

Se ha instalado el sensor de temperatura junto a la lampara para que el proceso disponga de la menor inercia posible, y así se comporte más rápido ante cambios de la entrada.

Los objetivos del proyecto usando Arduino han sido:

...

Descargar como  txt (13 Kb)   pdf (68.5 Kb)   docx (22.4 Kb)  
Leer 6 páginas más »
Disponible sólo en Essays.club