Documentos de Académico
Documentos de Profesional
Documentos de Cultura
http://www.engin.umich.edu/group/ctm/PID/PID.html
http://en.wikipedia.org/wiki/PID_controller
http://www.mne.psu.edu/sommer/me445/ntcnotes.pdf
http://www.ferrotec.com/technology/thermoelectric/
http://einstein.ciencias.uchile.cl
20 de octubre de 2009
Potencia del
calefactor, watt.
Temperatura del
caf, K.
Tiempo
Cp, calefactor
Cp, cafe
dTcafe
dt
dTcalefactor
dt
watt
watt
Potencia del
calefactor, watt.
Temperatura del
caf, K.
Tiempo
Tasa ms llena
Pieza ms fra
Cp
dTcafe
dt
watt
-Vcontrol
Vcontrol V V Vout
R
R
Vcontrol V V Vout
2V Vcontrol Vout
Vout
Vout AV V
Vout
Vcontrol Vout
A 0
A
Vcontrol Vout
Vcontrol
A 2
Vout si A 2
Vout
Vcontrol
2V
-20 V
-2 V
2V
Potencia = watt
= iV
= V2R-1
= i2R
Potencia
temperatura
Handout.pdf
T
-Tset
5%
-(T-Tset) = -Error
P Error
Traduzco la temperatura
en un voltaje usando un
termistor.
Traduzco el voltaje en
potencia usando un
elemento Peltier.
Potencia negativa?
2 volt
Potencia
temperatura
T
-Tset
5%
-(T-Tset) = -Error
P Error
2 volt
T
-Tset
10%
-(T-Tset) = -Error
P Error
2 volt
T
-Tset
20%
-(T-Tset) = -Error
P Error
2 volt
T
-Tset
30%
-(T-Tset) = -Error
P Error
2 volt
T
-Tset
50%
-(T-Tset) = -Error
P Error
2 volt
http://en.wikipedia.org/wiki/PID_controller
30%
P Error
0%
-(T-Tset) = -Error
I Error
2 volt
30%
P Error
10%
-(T-Tset) = -Error
I Error
2 volt
30%
P Error
30%
-(T-Tset) = -Error
I Error
2 volt
30%
P Error
75%
-(T-Tset) = -Error
I Error
2 volt
30%
P Error
100%
-(T-Tset) = -Error
I Error
2 volt
30%
P Error
100%
-(T-Tset) = -Error
2 I Error
2 volt
http://en.wikipedia.org/wiki/PID_controller
30%
P Error
75%
-(T-Tset) = -Error
I Error
0%
dError
D
dt
2 volt
30%
P Error
75%
-(T-Tset) = -Error
I Error
20%
dError
D
dt
2 volt
30%
P Error
75%
-(T-Tset) = -Error
I Error
45%
dError
D
dt
2 volt
30%
P Error
75%
-(T-Tset) = -Error
I Error
75%
dError
D
dt
2 volt
30%
P Error
75%
-(T-Tset) = -Error
I Error
45%
dError
D
dt
2 volt
Termocontrolador
Termistor
Potencimetro
Demodulador
Arduino
micro
controlador
Amplificador
de potencia
Switch
LCD
Serial port
Fuente de poder
220
VAC
fase
16 VAC 8A
1.5 A
GND
Tierra
16 VAC 8A
16 VAC 500 mA
220
neutro
GND
16 VAC 500 mA
Vrms
V pico
2
Resistencia de
carga de 1 ohm
Vpico Vrms 2
20V
200 ms
16 VAC
7815
+15 V
GND
7809
+9 V
16 VAC
7915
GND
-15 V
4.5
30000
25000
3.5
20000
3
15000
2.5
10000
5000
0
1.5
0
10
20
30
40
50
1
3
a b ln R c ln R
T
Voltaje, volt
35000
2.3 V
1.7-4.1V
3.4-8.2V
-(3.4-8.2V)
0.1-4.9V
Termistor
Al ADC
y = temperatura en 0C
x = Salida del ADC / 1000
Analog in pin 2
Analog in pin 2
analogWrite(5,230);
analogWrite(5,128);
10%
2V
1 ms
analogWrite(5,26);
2V
20 ms
PWM demodulator
PWM channel 5
analogWrite(5,128);
analogWrite(6,0);
analogWrite(5,0);
analogWrite(6,128);
PWM channel 6
2V
20 ms
Amplificador de poder
+15V
+22V
DBX33
70%
Output
Input
+/- 2 A
+/- 6V sobre 3 ohm
70%
DBX34
-22V
Output
-15V
Input
#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 itoa
char 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
Analog in pin 2
Digital
pin 3
5Kohm
Analog in pin 3
Digital
pin 3
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);
}
Case 3 Define KP
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 4 Define KI
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 3 Define KD
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
Tiempo, segundos
Set point