termorregulación 20 de octubre de 2009

Post on 02-Feb-2016

236 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Termorregulación

20 de octubre de 2009

http://en.wikipedia.org/wiki/PID_controller

http://www.mne.psu.edu/sommer/me445/ntcnotes.pdf

http://www.ferrotec.com/technology/thermoelectric/

http://www.engin.umich.edu/group/ctm/PID/PID.html

http://einstein.ciencias.uchile.cl

Potencia del calefactor, watt.

Temperatura del café, K.

cafecalefactorpiezacafecafe TTTTdt

dTcafeCp , watt

calefactorpiezacalefactorcalefactor UTTdt

dTcalefactorCp , watt

Tiempo

El nivel basal del trazo de la temperatura es la temperatura de la pieza. El de la potenciales cero.

Tasa más llena Pieza más fría

Potencia del calefactor, watt.

Temperatura del café, K.

cafecalefactorpiezacafecafe TTTTdt

dTCp watt

Tiempo

-Vcontrol Vout

Sistema de control con realimentación negativa

VVAVoutRVV

RVV outcontrol

outcontrol VVVV

outcontrol VVV 2

20 outcontrol

out

VVAV

outcontrolout VVAV 2

controlout AVAV 2

controlout VAA

V2

outcontrol VV

2A si outcontrol VV

2 V -20 V 2 V-2 V

Handout.pdf

Potencia = watt= iV= V2R-1

= i2RPotenciatemperatura

2 volt

-TsetT

-(T-Tset) = -Error P Error

5%

¿Potencia negativa? Elemento de efecto Peltier.http://www.ferrotec.com/technology/thermoelectric/

Potenciatemperatura

Traduzco la temperatura en un voltaje usando un termistor.

Traduzco el voltaje en potencia usando un elemento Peltier.

Elemento de efecto Peltier.http://www.ferrotec.com/technology/thermoelectric/

Si invierto el sentido de la corriente invierto el sentido del transporte de calor.

Elemento Termo Eléctrico, TE, ( efecto Peltier ).

Elemento de efecto Peltier.http://www.ferrotec.com/technology/thermoelectric/

2 volt

-TsetT

-(T-Tset) = -Error P Error

5%

2 volt

-TsetT

-(T-Tset) = -Error P Error

10%

2 volt

-TsetT

-(T-Tset) = -Error P Error

20%

2 volt

-TsetT

-(T-Tset) = -Error P Error

30%

2 volt

-TsetT

-(T-Tset) = -Error P Error

50%

http://en.wikipedia.org/wiki/PID_controller

Controlador Proporcional Integral Diferencial, PID.

-(T-Tset) = -Error

P Error

ErrorI

30%

0%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

10%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

30%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

75%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

100%

2 volt

-(T-Tset) = -Error

P Error

ErrorI2

30%

100%

2 volt

http://en.wikipedia.org/wiki/PID_controller

Controlador Proporcional Integral Diferencial, PID.

-(T-Tset) = -Error

P Error

ErrorI

30%

75%

dtdError

D

0%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

75%

dtdError

D

20%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

75%

dtdError

D

45%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

75%

dtdError

D

75%

2 volt

-(T-Tset) = -Error

P Error

ErrorI

30%

75%

dtdError

D

45%

2 volt

Fuente de poder

Arduinomicrocontrolador

Termistor

Potenciómetro

LCDSwitch

Demodulador

Amplificadorde potencia

Termocontrolador

Serial port

Entrada 220 volt

1.5 A

220 VACfase

220 neutro

Tierra

16 VAC 8A

16 VAC 8A

16 VAC 500 mA

16 VAC 500 mA

GND

GND

Fuente de poder no regulada

2pico

rms

VV

2rmspico VV

1 2

20V

200 ms

3

Resistencia de carga de 1 ohm

Fuente de poder regulada

16 VAC

16 VAC

GND

7815

7809

7915

+15 V

+9 V

-15 V

GND

Steinhart–Hart equationT is the temperature (in Kelvin) R is the resistance at T (in Ohms) A, B, and C are the Steinhart-Hart coefficients

Temperatura, grados Celsius

Res

iste

ncia

R2,

ohm V

oltaje, volt

3lnln1

RcRbaT

2.3 V

Amplificador del thermistor

Termistor

5 V

1.7-4.1V 0.1-4.9V

Al ADC

3.4-8.2V -(3.4-8.2V)

3.32 inout VV

7.46. outV

Salida del ADC

Tem

pera

tura

, gr

ados

Cel

sius

y = temperatura en 0Cx = Salida del ADC / 1000

DAC_cuentas = analogRead(thermistor); temperatura = cuentas_A_grados(DAC_cuentas);

Analog in pin 2

float cuentas_A_grados(int count){ double a = 51.191000000; //Parametros para V del thermistor de 10k double b= -0.0585000000; // unido a un resistencia de 7 kohm a +5 volt double c = 0.0000300000; // multiplicado por 2 double d =-0.0000000200; // menos 3.3 volt. double mil = 1000.0000; double dcount; double dcountN; double dresult; double dresult1;double dresult2; double dresult3;

float resultado; dcount =(double) count; dcount = dcount/mil; dresult1 = b*dcount; dcountN = dcount *dcount; dresult2 = dcountN*c; dcountN = dcountN *dcount; dresult3 = dcountN*d; dresult = a + dresult1 + dresult2 + dresult3; resultado = (float) dresult; return resultado;}

Analog in pin 2

10% 2V

20 ms2V

1 ms

Demodulación de las salidas análogas ( PWM @ 500 Hz)

analogWrite(5,128);

analogWrite(5,26);

analogWrite(5,230);

PWM demodulator

PWM channel 5

PWM channel 6

2V

20 ms

analogWrite(5,128);analogWrite(6,0);

analogWrite(5,0);analogWrite(6,128);

Amplificador de poder+22V+15V

-15V -22V

InputOutput

DBX33

DBX34

70%

70%

+/- 2 A+/- 6V sobre 3 ohm

Input

Out

put

Existen amplificadores operacionales de potencia, por ejemplo LM657http://www.national.com/mpf/LM/LM675.html

#include <LCD4Bit.h>#include <stdlib.h>#define thermistor 2#define potentiometer 3#define calentar 5#define enfriar 6

LCD4Bit lcd = LCD4Bit(2);// select the I/O pin for Digital Dispay

char S1[4]; // String S1 para itoachar S2[16] = " Funcion ";int funcion = 0;float temperatura = 25;float tempset = 25 ;long t;float KP=25; float KI=25; float KD = 5;float lasterror=0; float integral=0; float diferencial = 0;

void setup() { lcd.init(); lcd.clear(); lcd.cursorTo(1,0); lcd.printIn("Hola!"); Serial.begin(1200); Serial.println("Termostat"); lcd.clear(); pinMode(3,INPUT); lcd.cursorTo(2,0); lcd.printIn(S2); lcd.printIn(itoa(funcion,S1,10)); analogWrite(enfriar,0); analogWrite(calentar,0); delay(1000);}

void loop() { int DAC_cuentas; while (digitalRead(3)==LOW) { analogWrite(enfriar,0); analogWrite(calentar,0); funcion = funcion + 1; if (funcion >= 6 ) funcion = 0; lcd.cursorTo(2,0); lcd.printIn(S2); lcd.printIn(itoa(funcion,S1,10)); delay (1000); } switch (funcion) {

Digital pin 3

Digital pin 3

case 0: { lcd.cursorTo(0,5); lcd.printIn(" "); while (digitalRead(3)==HIGH) { DAC_cuentas = analogRead(thermistor); temperatura = cuentas_A_grados(DAC_cuentas); display_float(temperatura,1,0); delay(1000); } break; }

Digital pin 3

Case 0 Mide la temperatura

float cuentas_A_grados(int count){ double a = 51.191000000; //Parametros para V del thermistor de 10k double b= -0.0585000000; // unido a un resistencia de 7 kohm a +5 volt double c = 0.0000300000; // multiplicado por 2 double d =-0.0000000200; // menos 3.3 volt. double mil = 1000.0000; double dcount; double dcountN; double dresult; double dresult1;double dresult2; double dresult3;

float resultado; dcount =(double) count; dcount = dcount/mil; dresult1 = b*dcount; dcountN = dcount *dcount; dresult2 = dcountN*c; dcountN = dcountN *dcount; dresult3 = dcountN*d; dresult = a + dresult1 + dresult2 + dresult3; resultado = (float) dresult; return resultado;}

Analog in pin 2

void display_float(float datum, int fila, int columna){ int enteros; int decimas; int i; i = (int) 10*datum ; //Cast operator enteros= i/10; decimas = i% 10; lcd.cursorTo(fila,0+columna); if (enteros<10) lcd.printIn(" "); lcd.printIn(itoa(enteros,S1,10)); lcd.cursorTo(fila,2+columna); lcd.printIn("."); lcd.cursorTo(fila,3+columna); lcd.printIn(itoa(decimas,S1,10)); Serial.print(enteros); Serial.print("."); Serial.print(decimas); Serial.print(" "); }

case 1: { while (digitalRead(3)==HIGH) { tempset = omni(tempset); if (tempset <= 5.0) tempset = 5.0; if (tempset >= 50.0) tempset = 50.0; display_float(tempset,1,5); delay(100); } break; }

Digital pin 3

Case 1 Determina la temperatura a regular

float omni(float parameter) { int i; int j; i = analogRead(potentiometer); delay(50); j = analogRead(potentiometer); if (j > i+1) parameter = parameter -1; if (j < i-1) parameter = parameter +1; if (parameter > 100) parameter = 100; if (parameter < 0) parameter = 0; return (parameter); }

5Kohm Analog in pin 3

case 2: { integral = 0.0; while (digitalRead(3)==HIGH) { DAC_cuentas = analogRead(thermistor); temperatura = cuentas_A_grados(DAC_cuentas); display_float(temperatura,1,0); display_float(tempset,1,5); controla(temperatura,tempset,KP,KI,KD); t = t +1; Serial.print(t); display_float(temperatura,1,0); display_float(tempset,1,5); delay(1000); } break; }

Digital pin 3

Case 1 Controla la temperatura

void controla(float Tmedida, float Tset, float Kp, float Ki, float Kd) { float error; int potencia; error =(Tmedida - Tset); integral = (integral + error)/10; if ( integral >1000) integral = 1000; if ( integral <-1000) integral = -1000; diferencial = 10*(error-lasterror); lasterror = error; potencia =(int) Kp*error + Ki*integral + Kd*diferencial; sacawatts(potencia); }

void sacawatts( int watts) { int signo; int maxwatts = 255; signo = watts; if (watts <0) watts = -watts; if (watts > maxwatts) watts = maxwatts; lcd.cursorTo(2,1); if (watts <= 100) lcd.printIn(" "); if (watts <= 10) lcd.printIn(" "); lcd.printIn(itoa(watts,S1,10)); lcd.printIn(" "); lcd.cursorTo(2,0); if(signo > 0) { analogWrite(enfriar,watts); analogWrite(calentar,0); lcd.printIn("-"); } else { analogWrite(enfriar,0); analogWrite(calentar,watts); lcd.printIn("+"); } }

case 3: { while (digitalRead(3)==HIGH) { lcd.cursorTo(2,0); lcd.printIn("KP = "); lcd.printIn(itoa(KP,S1,10)); lcd.printIn(" "); KP = omni(KP); delay(100); } break; }

Digital pin 3

Case 3 Define KP

case 4: { while (digitalRead(3)==HIGH) { lcd.cursorTo(2,0); lcd.printIn("KI = "); lcd.printIn(itoa(KI,S1,10)); lcd.printIn(" "); KI = omni(KI); delay(100); } break; }

Digital pin 3

Case 4 Define KI

case 5: { while (digitalRead(3)==HIGH) { lcd.cursorTo(2,0); lcd.printIn("KD = "); lcd.printIn(itoa(KD,S1,10)); lcd.printIn(" "); KD= omni(KD); delay(100); } break; } }

Digital pin 3

Case 3 Define KD

Tem

pera

tura

, gr

ados

Cel

sius

Tiempo, segundos

Prueba del sistema

Set point Temperatura controlada Temperatura de la pieza

top related