Está en la página 1de 14

INSTITUTO TECNOLÓGICO DE

TUXTLA GUTIERREZ.

TUTORIAL PRESENTADO POR:


TORRES DIAZ MAGDIEL

FAGOAGA TOLEDO CARLOS

ESTRADA CASTELLANOS JAIRO YAIR

CABRERA GARCIA JESUS

GARCIA FLORES LUIS ALBERTO

CARRERA: INGENIERÍA ELECTRÓNICA.

MATERIA: CONTROL III

FECHA DE ENTREGA: 09-DIC-2010

FECHA DE ENTREGA: 21 DE OCTUBRE DEL 2010.

CATEDRÁTICO:
ING. ILDEBERTO DE LOS SANTOS RUIZ
INTRODUCCION:

Un sistema de control está definido como un conjunto de componentes que pueden regular su
propia conducta o la de otro sistema con el fin de lograr un funcionamiento predeterminado, de
modo que se reduzcan las probabilidades de fallos y se obtengan los resultados buscados. Hoy en
día los procesos de control son síntomas del proceso industrial que estamos viviendo. Estos
sistemas se usan típicamente en sustituir un trabajador pasivo que controla una determinado
sistema (ya sea eléctrico, mecánico, etc.) con una posibilidad nula o casi nula de error, y un grado
de eficiencia mucho más grande que el de un trabajador. Los sistemas de control más modernos
en ingeniería automatizan procesos en base a muchos parámetros

En el presente reporte se dan a conocer los pasos y partes de un sistema de control PID de
temperatura, que le da al usuario la opción de cambiar las ganancias y punto de referencia de
forma local o de forma remota. La visualización de los datos también puede ser de manera local
con un LCD o a distancia por medio de una interfaz grafica (en este proyecto se utilizo MATLAB). La
comunicación entre el sistema físico de control con PIC y la interfaz grafica amigable para un
usuario u operador se hizo utilizando el circuito SN75176, que es un tranceiver bidireccional muy
usado para la comunicación en la industria.

MARCO TEÓRICO:

RS485

RS-485 o también conocido como EIA-485, que lleva el nombre del comité que lo convirtió en
estándar en 1983. Es un estándar de comunicaciones en bus de la capa física del Modelo OSI.

Está definido como un sistema en bus de transmisión multipunto diferencial, es ideal para
transmitir a altas velocidades sobre largas distancias (35 Mbps hasta 10 metros y 100 Kbps en
1.200 metros) y a través de canales ruidosos, ya que reduce los ruidos que aparecen en los voltajes
producidos en la línea de transmisión. El medio físico de transmisión es un par entrelazado que
admite hasta 32 estaciones en 1 solo hilo, con una longitud máxima de 1.200 metros operando
entre 300 y 19.200 bps y la comunicación half-duplex (semiduplex). Soporta 32 transmisiones y 32
receptores. La transmisión diferencial permite múltiples drivers dando la posibilidad de una
configuración multipunto. Al tratarse de un estándar bastante abierto permite muchas y muy
diferentes configuraciones y utilizaciones.

Especificaciones:

 Interfaz diferencial
 Conexión multipunto
 Alimentación única de +5V
 Hasta 32 estaciones (ya existen interfaces que permiten conectar 256 estaciones)
 Velocidad máxima de 10 Mbps (a 12 metros)
 Longitud máxima de alcance de 1.200 metros (a 100 Kbps)
 Rango de bus de -7V a +12V

Aplicaciones:

 SCSI -2 y SCSI-3 usan esta especificación para ejecutar la capa física.


 RS-485 se usa con frecuencia en las UARTs para comunicaciones de datos de poca
velocidad en las cabinas de los aviones. Por ejemplo, algunas unidades de control del
pasajero lo utilizan, equipos de monitoreo de sistemas fotovoltaicos. Requiere el cableado
mínimo, y puede compartir el cableado entre varios asientos. Por lo tanto reduce el peso
del sistema.
 RS-485 se utiliza en sistemas grandes de sonido, como los conciertos de música y las
producciones de teatro, se usa software especial para controlar remotamente el equipo
de sonido de una computadora, es utilizado más generalmente para los micrófonos.
 RS-485 también se utiliza en la automatización de los edificios pues el cableado simple del
bus y la longitud de cable es larga por lo que son ideales para ensamblar los dispositivos
que se encuentran alejados.

MODELADO

Modelado de nuestro horno

Obtención de las temperaturas:

Para la obtención de las temperaturas se uso el Kit de pruebas de Texas Instruments NI ELVIS2.
Con las medidas obtenidas se realizaron los siguientes pasos en MATLAB.

Realización del modelo del horno de temperatura usando MATLAB

1. Como primer paso se introducen datos en MATLAB.

>> t=[0:5:300];

>>T=[26.83,27.46,28.02,28.49,28.92,29.24,29.63,29.88,30.10,30.43,30.65,30.87,31.02,
31.25,31.41,31.51,31.65,31.82,31.85,32.02,32.05,32.16,32.29,32.32,32.38,32.48,32.51
,32.54,32.56,32.59,32.76,32.89,32.92,32.95,32.96,33.05,33.09,33.11,33.17,33.21,33.2
7,33.30,33.32,33.39,33.44,33.49,33.52,33.57,33.57,33.59,33.60,33.62,33.66,33.72,33.
74,33.75,33.78,33.81,33.81,33.84,33.85];

>>v=[11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11
,11,11,11,11,11,11,11];

A continuación, para fines de visualización de la curva que se obtuvo con los datos, se muestra la
siguiente grafica:
2. A continuación se utilizo el comando “ident” para encontrar la función de
transferencia de nuestro sistema de acuerdo a los datos reales medidos en el
paso anterior.

>>ident

3. Una vez teniendo ya el modelado con sus respectivos valores, se escribe la


función de transferencia en la pantalla de trabajo de MATLAB.
En matlab quedaría
>>H = tf(3.0694,[14.5753 , 1])

4. A continuación se procede a la obtención del controlador con el comando


“sisotool”

>>sisotool

Una vez teniendo el controlador tecleamos en MATLAB:

>> H = tf([1.5422,0.35867],[1,0])

Transfer function:

1.542 s + 0.3587

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

s
>> hd=c2d(H,1,'Tustin')

Transfer function:

1.722 z - 1.363

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

z–1

Una vezobteniendo la función en términos de z, hacemos lo siguiente:

Aplicando transformada Z inversa tenemos que:

OBTENCION DE CODIGO PARA PIC18F4520

El objetivo es tener una ecuación en tiempo discreto, para ello se realizó lo siguiente.

En forma general la el controlador PI es controlado por la ecuación siguiente:


Aplicando transformada de laplce tenemos:

Expresando lo en función de transferencia es:

………………….1

Pero “s” es iguala a: (en ecuación bilineal)

……………….. 2

Sustituyendo la ecuación 1 y 2, para obtenerlo en termino s del variable Z

Dividiendo todo entre Z:

Aplicando transformada Z inversa:

Simplificando más y expresando en término de u:

DIAGRAMAS ESQUEMÁTICOS:
Diagrama esquematico del control del horno

Diagrama esquemático de circuito para envió de datos por cable par trenzado
CODIGO EN MATLAB

function control
s = serial('COM2');
set(s,'BaudRate',9600);
fopen(s);
f = figure('Units','pixels','Position',[1,1,600,500],...
'MenuBar','none','Name','Controlador PI',...
'NumberTitle','off');
movegui(f,'center')
o0= uicontrol('Style','Text','String','Tem',...
'pos',[300 265 20 30],'visible','off');
o1= uicontrol('Style','Text','String','Ref',...
'pos',[350 265 20 30],'visible','off');
o2= uicontrol('Style','Text','String','KP',...
'pos',[400 265 20 30],'visible','off');
o3= uicontrol('Style','Text','String','KI',...
'pos',[450 265 20 30],'visible','off');

a0 = axes('visible','off','Units','pixels','Position', [300,300,20,160]);
a1 = axes('visible','off','Units','pixels','Position',[350,300,20,160]);
a2 = axes('visible','off','Units','pixels','Position',[400,300,20,160]);
a3 = axes('visible','off','Units','pixels','Position',[450,300,20,160]);
ma = uimenu('Label','Archivo');
mag = uimenu(ma,'Label','Guardar','Callback',@Guardar,...
'Accelerator','G');
quiere_guardar = false;
nombre_completo = 'noname.mat';
temperatura=[];
mam = uimenu(ma,'Label','Modificar','Callback',@Modificar,...
'Accelerator','M');
mas = uimenu(ma,'Label','Salir','Callback',@salir,...
'Accelerator','S');
ml = uimenu('Label','Leer');
mlt = uimenu(ml,'Label','Temperatura','Callback',@Lectura,...
'Accelerator','T');
mlr = uimenu(ml,'Label','Referencia','Callback',@R,...
'Accelerator','R');
mlkp = uimenu(ml,'Label','KP','Callback',@KP,...
'Accelerator','P');
mlki = uimenu(ml,'Label','KI','Callback',@KI,...
'Accelerator','I');

mac = uimenu('Label','Acerca de...');


maa = uimenu(mac,'Label','Tutorial','Callback',@Tutorial,...
'Accelerator','A');
mat = uimenu(mac,'Label','Autor','Callback',@Autor,...
'Accelerator','T');

h = uibuttongroup('Title','Modificar','visible','off','Position',[0 .5 .4
1]);
u0 = uicontrol('Style','Radio','String','Referencia',...
'pos',[10 200 100 30],'parent',h,'HandleVisibility','off');
ut0= uicontrol('Style','Edit',...
'pos',[100 200 50 30],'parent',h,'HandleVisibility','off');
u1 = uicontrol('Style','Radio','String','KP',...
'pos',[10 150 100 30],'parent',h,'HandleVisibility','off');
ut1= uicontrol('Style','Edit',...
'pos',[100 150 50 30],'parent',h,'HandleVisibility','off');
u2 = uicontrol('Style','Radio','String','KI',...
'pos',[10 100 100 30],'parent',h,'HandleVisibility','off');
ut2= uicontrol('Style','Edit',...
'pos',[100 100 50 30],'parent',h,'HandleVisibility','off');

b5 = uicontrol('Style','pushbutton',...
'Units','pixels','Position',[180 200 50 30],...
'parent',h,'HandleVisibility','off','String','OK','FontName','Courier
New',...
'Callback',@ok1);
b6 = uicontrol('Style','pushbutton',...
'Units','pixels','Position',[180 150 50 30],...
'parent',h,'HandleVisibility','off','String','OK','FontName','Courier
New',...
'Callback',@ok2);
b7 = uicontrol('Style','pushbutton',...
'Units','pixels','Position',[180 100 50 30],...
'parent',h,'HandleVisibility','off','String','OK','FontName','Courier
New',...
'Callback',@ok3);

function ok1(source,evento)
res1=get(ut0,'String');
F=str2num(res1);
fwrite(s,'E');
fwrite(s,F);
axes(a1)
bar(0,F)
res2=['Se envio REF = ',res1];
msgbox(res2,'Mensaje')

end
function ok2(source,evento)
res3=get(ut1,'String');
H=str2num(res3);
fwrite(s,'G');
fwrite(s,H);
axes(a2)
bar(0,H)
res4=['Se envio KP = ',res3];
msgbox(res4,'Mensaje')

end
function ok3(source,evento)
res5=get(ut2,'String');
J=str2num(res5);
fwrite(s,'I');
fwrite(s,J);
axes(a3)
bar(0,J)
res6=['Se envio KI = ',res5];
msgbox(res6,'Mensaje')

end

set(h,'SelectionChangeFcn');
set(h,'Visible','off');
function Lectura(objeto,evento)
t = timer('ExecutionMode','fixedRate','Period',10,...
'TasksToExecute',inf,'TimerFcn',@timer1s);
start(t)
end
function timer1s(objeto,evento)

fwrite(s,'T');
while (s.BytesAvailable < 1)
end
l1 = fread(s,1);
t1 = l1/2.56;
j=num2str(t1);
c=datestr(now);
v=' ';
temperatura=[j,v,c]
axes(a0)
bar(0,t1)
set(o0,'visible','on');
title(c)

end
function Tutorial(objeto,evento)
open('C:\Documents and Settings\LEO\Escritorio\ejercicios de la
unidad 4.pdf')
end
function Autor(objeto,evento)
open('C:\Documents and Settings\LEO\Escritorio\Prueva\Autor.pdf')
end
function Modificar(objeto,evento)
set(h,'visible','on');
end

function R(objeto,evento)
fwrite(s,'U');
while (s.BytesAvailable < 1)
end
l1 = fread(s,1);
axes(a1)
bar(0,l1)
set(o1,'visible','on');
end
function KP(objeto,evento)
fwrite(s,'V');
while (s.BytesAvailable < 1)
end
l1 = fread(s,1);
axes(a2)
bar(0,l1)
set(o2,'visible','on');
end
function KI(objeto,evento)
fwrite(s,'W');
while (s.BytesAvailable < 1)
end
l1 = fread(s,1);
axes(a3)
bar(0,l1)
set(o3,'visible','on');
end

function Guardar(objeto,evento)
[nombre, ruta] = uiputfile('*.txt', 'Guardar datos');
nombre_completo = [ruta,nombre];
quiere_guardar = true;

end
function salir(objeto,evento)

if quiere_guardar
save(nombre_completo,'temperatura','-ascii')
end
delete(s)
delete(gcf)

end
end

CODIGO DE PIC EN CCS

#include <18f4520.h> setup_adc_ports(AN0_TO_AN1 |


#fuses HS, NOWDT, CCP2C1 VSS_VREF);
#device adc = 10 setup_adc(ADC_CLOCK_INTERNAL);
#use delay(clock = 8MHz)
#use rs232(baud = 9600, UART1)
set_adc_channel(0);
#include "lcd.c" delay_us(25);
#include "kbd_lib.c" t = read_adc()/10.24;
#include "teclado.c"
#use standard_io(e) setup_timer_2(T2_DIV_BY_1,255,1);
setup_ccp2(CCP_PWM);
float e=0,u=0,e_ant=0,u_ant=0,gan1=0,
gan2=0; CCP_1 = 1000;
float kp=0.1542,ki=0.0358,kd=1,ref=26.5; setup_timer_1(T1_INTERNAL |
int16 t,t1; T1_DIV_BY_1);
int x;
setup_ccp1(CCP_COMPARE_RESET_TIMER);
void presentacion(){
printf(lcd_putc,"\f Kp Ki \n %f %f
",kp,ki); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_6
delay_ms(500);
4);
printf(lcd_putc,"\f Temp Tref \n %ld //set_timer0(45536);
%f ",t,ref);
delay_ms(500);
enable_interrupts(GLOBAL);
} enable_interrupts(INT_RDA);
enable_interrupts(INT_CCP1);
void main(){ enable_interrupts(INT_TIMER0);
x=0;
lcd_init(); while(TRUE){
kbd_init(); if(input(pin_e2)==0){
port_b_pullups(TRUE);
disable_interrupts(INT_TIMER0);
teclado(kp, ki, kd, ref); break;
} case 'V':
enable_interrupts(INT_TIMER0); putc((int8)kp);
if(x==0){ break;
presentacion(); case 'W':
x=1; putc((int8)ki);
}}} break;
#INT_TIMER0 case 'E':
void timer0(){ ref = getc();
set_timer0(3036); break;
presentacion(); case 'G':
} kp = getc ();
#INT_CCP1 break;
void reloj() { case 'I':
set_adc_channel(0); ki = getc ();
delay_us(25); break;
t = read_adc()/10.24; }
}
gan1 = kp + 1000*ki/2;
gan2 = 1000*ki/2 - kp;
e = ref - t1*1.0;

u = u_ant + gan1*e - gan2*e_ant ;


u = (u < 0.0) ? 0.0 : ((u > 1023.0) ? 1023.0 :
u);
set_pwm2_duty((int16) u);
u_ant=u;
e_ant = e;
}

#int_RDA
void recibe()
{
set_adc_channel(0);
delay_us(25);
t1=read_adc();
int8 dato = getc();
switch(dato) {
case 'T':
putc((int8)(t1 >> 2));
case 'U':
putc((int8)ref);

También podría gustarte