Está en la página 1de 8

DISEO DE CONTROLADORES PARA

UNA PLANTA DE TEMPERATURA


CONTROLADOR PID
Salazar David
Universidad de las Fuerzas Armadas ESPE
Ingeniera Mecatrnica
Quito, Ecuador
De la Cueva Christian
Universidad de las Fuerzas Armadas ESPE
Ingeniera Mecatrnica
Quito, Ecuador

En este documento se presenta el desarrollo de un controlador de tipo PID para el control
de temperatura de una planta usando un sensor LM35 y una niquelina controlada por
ancho de pulso. El modelamiento y control se llev a cabo mediante Arduino. Se
presentar los resultados obtenidos con el software Matlab.
This paper presents the development of a PI D controller for temperature control of a
plant, using a LM35 sensor and controlled niquelina pulse width. Modeling and control
are carried out by Arduino. The results obtained with the Matlab software.

I. INTRODUCCIN.-
Un controlador es un bloque electrnico encargado
de controlar uno o ms procesos.
En nuestro caso, el proceso fue la planta de
temperatura y esta a su vez fue controlada en
primera instancia con el software Matlab y con un
controlador PID.
La planta a controlar fue una de temperatura, por lo
que fue necesario en primera instancia la obtencin
de datos, realizada a travs de un programa con
comunicacin serial con Arduino, seguido de la
utilizacin de la herramienta Ident de Matlab para el
modelamiento. La planta fue controlada con un
controlador de tipo PID y el software Matlab
mediante un programa creado para control.
Uno de los parmetros importantes luego del control
fue el error, que sin duda tambin fue controlado y
cumpla con los rangos permitidos.

Despus se realiz el controlador FUZZY el cual
utiliza una metodologa que proporciona una
manera simple de obtener una solucin a partir de
una entrada ambigua e imprecisa. En general esta
lgica es una estrategia de control basada en
informacin de forma cualitativa en lugar de hacerlo
de forma cuantitativa, lo cual le permite trabajar con
datos imprecisos en relacin al controlador PID que
trabaja con datos claramente definidos y precisos.
Dichas caractersticas han permitido que en ciertas
aplicaciones este controlador brinde mejores
resultados que estrategias convencionales.
Al final de este primer parcial combinamos todo lo
anterior y se realiz un controlador PID-FUZZY el
cual tiene un tiempo de respuesta muy rpido
llevndole mucha ventaja a todos los controladores
ya mencionados.
II. MTODOS Y MATERIALES
Mtodos:
Un control de temperatura se lo realiza para variar
la temperatura dentro de un espacio cerrado.
Mediante pruebas a la planta y ancho de pulso
generado por Arduino se tom un promedio de los
datos adquiridos y se los proces en Matlab por
medio de la herramienta Ident.
Materiales:
La elaboracin de la planta se bas en la utilizacin
de materiales aislantes que no permitan la fcil fuga
de calor hacia el exterior, permitiendo que el calor
sea conservado para un mejor control, adems se
incluy un agitador para homogeneizar la
temperatura de la planta.
Niquelina de 300 W
Sensor LM35
Ventilador (agitador)
El circuito de potencia fue realizado en un
protoboard y posteriormente en una placa de
circuito impreso.
Conteniendo los siguientes elementos:
Triac BT16A
MOC 3041
Resistencias (270 y 330 ohm)
La conexin se realiza en forma serial mediante una
placa de Arduino.

Ilustracin2.- Construccin de la planta

Ilustracin3.- Construccin de la planta

Ilustracin4.- Referencia circuito de potencia

Ilustracin5.- Implementacin circuito de potencia
Interfaz grfica y diagrama de bloques con
Matlab Interfaz GUIDE:
En la interfaz grfica se coloc los grficos y text
box las cuales muestran las seales de control y del
error tambin se coloc as como el control PWM.

Ilustracin6.- Interfaz grfica de Matlab GUIDE
El diagrama de bloque muestra como estn
interconectados los elementos de la interfaz grfica.
Controlador PID:
Despus de modelada la planta, para la obtencin de
constantes proporcional, integral y derivativa se
utiliz la herramienta PIDTOOL de Matlab y se
encontr los valores:
Kp=606960.8519;
Ki=7706.4891;
Kd=475630.6494;


Ilustracin7.- Valores de Kp, Ki, Kd encontrados con PIDTOOL
El cdigo del programa implementado se podr
observar en la seccin de Anexos.


Controlador FUZZY:
Para el control difuso se procede a definir variables
de entrada y salida las mismas que a su vez tienen
membrecas y se las dividir con rangos, para al
final establecer reglas entre estas. (Ver ilustracin 3
y 4)

Ilustracin8.- Membrecas de la variable de entrada set point

Ilustracin9.- Membrecas de la variable de salida pwm
Establecimiento de reglas:
Una vez establecidas las funciones de membreca se
procede a establecer las reglas del sistema.(Ver
ilustracin 6)
Las reglas realizadas deben tener relacin de causa
y efecto, para el control del alabe se establecieron
las siguientes reglas:

Ilustracin10.- Reglas para el control difuso
Matlab nos permite evaluar las reglas colocadas de
modo que as podemos comprobar lo que nos dar
nuestra planta a la salida.

Ilustracin11.- Evaluacin en un setpoint y un valor del sensor
Controlador PID-FUZZY
En un control PID-FUZZY se realiz ciertos
cambios guiados en el paper de Yensheng se pudo
determinar las constantes y las variaciones que se
deba realizar.
El valor de kp lo multiplicbamos por un valor
previo y eso ingresaba al .fs para que evale,
posteriormente lo sumbamos mas la accin integral
y por medio de las frmulas que Yensheng da en su
artculo.
Los valores de kp y ki tambin fueron los mismos
pues nuestra planta fue la misma para todas las
prcticas.
III. Resultados
Control PID:
El control se realiz en Matlab con los resultados
esperados, el tiempo de establecimiento fue bueno
pero con un pequeo sobrepico.
El error en estado estacionario fue bueno, siendo
ste aproximadamente de 0.5 C.

Ilustracin12.- Grfica de control
Control FUZZY:
El control de la planta mediante este controlador fue
muy aceptable, alcanzando la temperatura ingresada
como setpoint de uuna menera rpida con resultados
superiores a los alcanzados en el control PID.
El resultado en cuanto a sobrepico se corrigi
completamente y el error fue muy reducido pues
los archivos .fis permiten que no se modele la planta
y obtener un valor a la salida con dos o ms valores
a la entrada.
Control PID FUZZY:
Este fue control PID-FUZZY y fue en mejor de
todos pues la respuesta a perturbaciones es muy
rpida y corrigi los sobrepicos


Ilustracin23.- Grfica de respuesta obtenida

IV. Discusin

El tiempo de muestreo es uno de los factores
primordiales, pues si no es elegido de manera
adecuada, la planta no se ver reflejada
correctamente y los datos que reciba sern
muchas veces descartados, interfiriendo en el
control.
Para disear cualquier controlador primero hay
que tener en claro todos los aspectos que
componen uno.
La adquisicin de datos se realiza de forma
serial con ayuda de una placa Arduino, la cual
ayuda en la comunicacin con el
microprocesador, y optimiza el trabajo pues al
ordenador le ayuda con tiempo de
comunicacin.

V. Conclusiones

El controlador difuso es muy fcil de
implementar, pues nicamente es necesario el
conocimiento de las condiciones de control y el
comportamiento de la plata. A diferencia de un
controlador de tipo PID el cual es necesario
conocer el modelo lineal de la plata y sus
constantes de control.
El modelamiento de nuestra planta de
temperatura fue realizada con Matlab, ya que el
software nos ofrece la herramienta Ident, la
cual nos permite dicho modelamiento de una
manera eficaz.
El procesamiento de la seal obtenida por el
sensor LM35, y la de PWM que activa el
encendido/apagado de la niquelina, fueron
procesados por una placa de Arduino, para la
cual se usaron dos de sus pines; uno para la
conversin de anlogo a digital y otra para la
salida de ancho de pulso PWM, de esta manera
se pudo obtener una rpida respuesta en la
planta, controlada desde MATLAB.
La programacin del controlador PID fue
realizada, de acuerdo al lazo de control que ha
sido explicado en clases, demostrando de esta
manera que esa es la forma adecuada de
realizar un control PID, y como esta
programacin el error se lo toma en
consideracin de varias maneras, el error que
obtenamos en nuestra planta, eran aceptables.
La aplicacin GUIDE de MATLAB, nos permite
una simulacin en tiempo real, al momento de
cambiar los setpoints impuestos.
El control ms ptimo fue sin duda el PID-FUZZY
pues el tiempo de respuesta fue relativamente
pequeo si lo comparamos con los otros
controladores.

VI. Fuentes de Informacin
Bibliografa

Jhon H. Lilly, Fuzzy Control and
Identification, Editorial Wiley, 2010
Yensheng Yang, Control PID_FUZZY
Ogata, Sistemas de Control, Controlador
PID,
BaezLopez David, Matlab con
Aplicaiones a la ingeniera fsica y
finanzas, Editorial ALFAOMEGA,
Primera Edicin,2006.
Webgraf
URL:www.campusv.uaem.mx/cicos/
memorias/3ercic2004/Articulos/artic
ulo3.pdf
URL:www.scribd.com/doc/9824079
2/Controlador-Fuzzy-con-matlab
URL:www.catarina.udlap.mx/u_dl_a
/tales/documentos/lmt/maza_c_ac/ap
endiceC.pdf
URL:www.politube.upv.es/play.php?
vid=6642
URL:www.itescam.edu.mx/principal
/sylabus/fpdb/recursos/r36274.PDF
URL:www.ftp-
urgell.upc.es/Electronica/H.Martinez
/Controlador%20PID.pdf
m6m5Karb

VII. Anexos
Anexo 1.- Cdigo de inicializacin:
clc
install_arduino
%%
a_UNO=arduino('COM20')
a_UNO.pinMode(9,'OUTPUT')
%% Para determinar la planta
clc
Temp=zeros(3000,1);

a_UNO.analogWrite(9,10);
%entrada 10/255

for i=0:1:3000
Temp(i+1,1)=a_UNO.analogRead(0);
Temp(i+1,1)=Temp(i+1,1)*5/1023*100;
pause (0.4)
end
Temp

%% Para borrar una conexion serial (Reset)
delete(instrfind({'Port'},{'COM20'}))

%%
%Planta
-0.1762 s + 17.03
G(s)= ----------------------------------
----
8.627e005 s^2 + 8.34e007 s +
8.153e004

Anexo 2.- Cdigo controlador PID:
%%
%Controlador
Kp=606960.8519;
Ki=7706.4891;
Kd=475630.6494;
integral=0;
error_anterior=0;

%tiempo de muestreo
i=1;
%inicializacion de vectores
vector_tiempo=[];
vector_temperatura=[];

setpoint=60;
dt=0.1;

while (true)
adc=a_UNO.analogRead(0);
temperatura=adc*5*100/1023
time=i*dt;
vector_tiempo(i)=time;
vector_temperatura(i)=temperatura;

error=setpoint-temperatura;
integral = integral + .5*error*dt;
%0.5 (suele mejorar la respuesta)
derivative = (error-
error_anterior)/dt;
control = Kp*error + Ki*integral +
Kd*derivative;
error_anterior=error;
% Limitando la accion de control para
evitar que se dispare el control
if control > 50
control=50;
end
if control < 0
control =0;
end

x=round(control);
a_UNO.analogWrite(9,x);

pause(dt)

%plot(vector_tiempo,vector_temperatura)

if mod(100,i)
integral=0;
end

pause(0.1)
end

Anexo 3.- Cdigo controlador FUZZY:

function inicio_Callback(hObject,
eventdata, handles)
a_UNO=arduino('COM7')
a_UNO.pinMode(9,'OUTPUT')
tiempo_muestreo=0.01;
i=1;
%inicializacion de vectores
tiempo=[];
gtem=[];
n=str2num(get(handles.setpoint,'string'));
fuz=readfis('LABO12');
SP=n;

while (true)

n=str2num(get(handles.setpoint,'string'));
SP=n;

temperatura=a_UNO.analogRead(0)*5/1023*100
;
val=num2str(temperatura)
set(handles.temp,'string',val);

ERROR=SP-temperatura
val2=num2str(ERROR);
set(handles.error,'string',val2);

time=i*tiempo_muestreo;
tiempo(i)=time;
gtem(i)=temperatura;
porcPWM=evalfis(ERROR,fuz);
PWM=(porcPWM*90)/100
if(temperatura >100)
PWM=0;
end

if PWM > 70
PWM=70;
end
if PWM < 0
PWM =0;
end

val3=num2str(PWM);
set(handles.pwm,'string',val3);

x=round(PWM);
a_UNO.analogWrite(9,x);

i=i+1;
% contador=contador+1;
% if contador>5
% contador=0;
% int_prev=0;
% end
plot(tiempo,gtem)
grid on

%handles.g1=plot(handles.graf,tiempo,gtem,
'b-+');

%set(handles.graf,'xgrid','on','ygrid','on
');
pause(0.1)
}

Anexo 4.- Cdigo controlador PID-FUZZY:
function inicio_Callback(hObject,
eventdata, handles)
a_UNO=arduino('COM7')
a_UNO.pinMode(9,'OUTPUT')
tiempo_muestreo=0.01;
i=1;
%inicializacion de vectores
tiempo=[];
gtem=[];
n=str2num(get(handles.setpoint,'string'));
fuz=readfis('LABOpidfuzzy');
SP=n;
Kp=606960.8519;
Ki=1/7706.4891;
Kd=475630.6494;
integral=0;
INT=0;
error_anterior=0;

%tiempo de muestreo
i=1;

while (true)

n=str2num(get(handles.setpoint,'string'));
SP=n;

temperatura=a_UNO.analogRead(0)*5/1023*100
;
val=num2str(temperatura)
set(handles.temp,'string',val);

ERROR=SP-temperatura
val2=num2str(ERROR);
set(handles.error,'string',val2);

time=i*tiempo_muestreo;
tiempo(i)=time;
gtem(i)=temperatura;
E=ERROR;

integral =integral +
.5*ERROR*tiempo_muestreo; %0.5 (suele
mejorar la respuesta)
derivative = (ERROR-
error_anterior)/tiempo_muestreo;

error_anterior=ERROR;
PROPORCIONAL=Kp*ERROR;

porcPWM=evalfis([PROPORCIONAL,derivative],
fuz);

porPWM = porcPWM+INT*Ki;
PWM=(porPWM*90)/100;
if(temperatura >100)
PWM=0;
end

if PWM > 70
PWM=70;
end
if PWM < 0
PWM =0;
end


val3=num2str(PWM);
set(handles.pwm,'string',val3)

x=round(PWM);
a_UNO.analogWrite(9,x);

i=i+1;
% contador=contador+1;
% if contador>5
% contador=0;
% int_prev=0;
% end
plot(tiempo,gtem)
grid on

%handles.g1=plot(handles.graf,tiempo,gtem,
'b-+');

%set(handles.graf,'xgrid','on','ygrid','on
');
pause(0.01)
end
pause(0.1)

Anexo 5.- Interfaz GUIDE