Documente Academic
Documente Profesional
Documente Cultură
I. INTRODUCCIN
Implementar una etapa de potencia para un motor dc y un relevo Implementar un circuito con pantalla grfica y teclado matricial usando un PIC16F877 con los sensores y actuadores mencionados. Implementar el sistema completo y graficar las temperaturas reales con las de referencia.
os sistemas de control varan segn su aplicacin y su robustez, sus ventajas y desventajas de acuerdo a la aplicacin. Decir que uno es mejor que otro siempre es una posicin relativa. Demostrar un sistema de control con aceptable costo beneficio es el propsito del presente proyecto.
II. PLANTEAMIENTO DEL PROBLEMA Los controles de temperatura para un tanque, y los controles de velocidad para un motor de corriente contnua son variados y diversos, aunque sigue siendo el control PID uno de los ms usados. Sin embargo para una determinada aplicacin el costo beneficio de un control PID puede ser desventajoso frente a un control menos complejo como el secuencial o el ON-OFF. Permitir un sistema de control secuencial y ON-OFF mantener una temperatura y una velocidad de mezcla constante programada? III. OBJETIVOS 2.1 General Determinar si un sistema de control ON-OFF y secuencial permiten lograr una temperatura constante y uniforme fijada por usuario en un tanque en pequea escala.
El sistema se basa en dos actuadores y dos sensores para la planta. Tal como lo muestra la figura 1.
Figura 1. Esquema general de los perifricos de salida y actuadores Se procedi a implementar los dos sensores y los dos actuadores de la siguiente forma: El sensor de temperatura se basa en el LM35, sensor de caractersticas lineales. Se le adiciona una etapa de acondicionamiento de una configuracin Seguidor y a continuacin un No inversor. Tal como se ilustra en la figura 2.
2.2 Especficos Implementar y Calibrar un sensor de temperatura basado en el lm35 Implementar y Calibrar un sensor de velocidad basado en un codificador.
INF-MCU
if((tempreal<tempsup)&&(cambiotemp==0)){ OUTPUT_HIGH(PIN_C3);} else{ if((tempreal<tempinf)&&(cambiotemp==1)){ cambiotemp=0;} else{ OUTPUT_LOW(PIN_C3); cambiotemp=1;} } Cuando la temperatura supera el valor fijado por el usuario el sistema apaga la resistencia calentadora. Cuando la temperatura est por debajo, la resistencia es encendida. Figura 2. Circuito de Acondicionamiento sensor LM35. Con R2 igual 5k y R1 igual a Diez 10k El sensor de velocidad se basa en un encoder instalado sobre un disco con seis orificios. Esto con el fin de que la frecuencia de los pulsos estuviera en un rango de 40 y 180 hz. Una interrupcin externa Con estos valores el microcontrolador era bastante preciso. La estapa de potencia para el motor dc se bas en el controlador de Altos y Bajos IR2110. Se implement con una compuerta lgica inversora seguida de un optoacoplador que entregaba los pulsos al controlador. Esto puede apreciarse en la figura 3. La interfaz de usuario principalmente est implementada sobre un teclado matricial y una pantalla grfica, cuyas conexiones se ilustran en los anexos de Arquitectura del Sistema. Se hizo necesario modificar la librera de la pantalla grfica para evitar ocupar el pin RB0, usado para las interrupciones. Esto reemplazando PIN_B0 por PIN_B6. #ifndef GLCD_CS1 #define GLCD_CS1 #endif
El sistema de control que se us es el Secuencial y el ON-OFF para la velocidad del motor y la temperatura respectivamente. Se ajusta el nivel de referencia para la velocidad, y se registra la velocidad dada por el encoder, sta diferencia se corrige de la siguiente manera: if((velreal<velref)) { valor++; } if((velreal>velref)) { valor--; } set_pwm1_duty(valor); Si el error es positivo se incrementa la variable Valor, que modifica el ciclo de trabajo. Si no es as, lo decrementa. La temperatura se controla de la siguente manera:
V. ARQUITECTURA ANEXOS A B
VI. PRESUPUESTO ANEXOS D VII. CONCLUSIONES El uso de un mezclador se hace fundamental en los procesos de control de temperatura, ya que la distribucin de temperatura no es homognea, y dificulta las mediciones. Otra opcin que se puede usar para no implementar el mezclador es usando ms de un sensor de temperatura en diferentes zonas y registrar los datos para compararlos. Usar un conversor de frecuencia a voltaje para bajas frecuencias no es recomendable debido a los
INF-MCU
rizados que se generan. Aunque esto puede atenuarse con un capacitor disminuye su capacidad de respuesta. Registrar las revoluciones por segundo a travs de interrupciones logra resultados precisos. Se evidenci que a falta de un sistema de enfriamiento bajar la temperatura es un proceso bastante lento al punto que no lo hace viable. Usar un sistema de control ms complejo no siempre significa que es mejor en todo sentido. Todos ofrecen ventajas y desventajas. REFERENCIAS
[1]
[2] [3]
E. G. Breijo, Compilador CCS C y Simulador Proteus para Microcontroladores PIC, 1st ed. vol. 1, Alfaomega, 2008, pp. 6365. http://www.irf.com/product-info/datasheets/data/irfz44n.pdf Datasheet Optoacoplador 4N25 disponible en: http://www.datasheetcatalog.org/datasheet/fairchild/4N25.pdf Datasheet IR2110 disponible en: http://www.irf.com/product-info/datasheets/data/ir2110.pdf
INF-MCU
INF-MCU
INF-MCU
ANEXO C. ALGORITMO
#use delay (clock= 4000000) #fuses XT,NOWDT,NOPROTECT,NOPUT #include <HDM64GS12.c> #include <graphics.c> #include <kbd.c> #use standard_io(C)
int16 TFB; int nuevopulso =0, cambio=0; int16 valor=0; char letraa[11][2]={"0","1","2","3","4","5","6","7","8","9","0"}; float teclas,AP; int x=20,f=1,y=0; char k=0; int n=1,ntres=1, num=0,numing=0; byte CONST variablex1[9] = {2,9,16,23,30,37,64,74,84}; int varx=0; int1 cambiotemp=0; int16 volt,tempreal,tempref=0,tempsup,tempinf; int16 tempreala=0,temprefa=0; int16 velref=0,velreal=00; int16 velrefa=30,velreala=20; int t1,t2,t3,t4, v1,v2,v3,v4,v5,v6; void pantalla(); void temperatura(); void velocidad(); void mostrar_menu(); char ufps[]="UFPS"; char cod1[]="1160150"; char cod2[]="1160160"; char cod3[]="1160161"; char ing[]="Ingenieria"; char ing1[]="Electronica"; char temp[]="Temp('c)"; char vel[]="Vel(Rpm)"; char real[]="Real"; char ref[]="Ref.";
INF-MCU
char menu[]="0. Menu"; char menua[]="*. Cambiar Temperatura"; char menub[]="#. Cambiar Velocidad";
#INT_EXT void funcion_ext_int(){ if (cambio==0){ set_timer1(0); ext_int_edge(0,H_TO_L); cambio=1; } else{ TFB=get_timer1(); ext_int_edge(L_TO_H); cambio=0; } if(nuevopulso==0){nuevopulso=1;} }
main() { glcd_init(ON) ; kbd_init(); port_b_pullups(true); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); ext_int_edge(0,L_TO_H); enable_interrupts(global); enable_interrupts(INT_EXT); setup_adc_ports(ALL_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); glcd_text57(1,4,ufps,4,1); glcd_text57(1,35,ing,1,1); glcd_text57(60,45,ing1,1,1); glcd_text57(85,5,cod1,1,1); glcd_text57(85,15,cod2,1,1); glcd_text57(85,25,cod3,1,1); while(f==1)
INF-MCU
{ k=kbd_getc(); if(k!=0) {f=0;} } setup_timer_2(T2_DIV_BY_1,244,1); setup_ccp1(ccp_pwm); pantalla(); while(true) { if((temprefa!=tempref)||(tempreala!=tempreal)||(velrefa!=velref)||(velreala!=velreal)){ if (temprefa!=tempref){ t1=tempref/10; t2=tempref%10; glcd_rect(25,17,75,28,1,0); glcd_text57(43,20,letraa[t1],1,1); glcd_text57(53,20,letraa[t2],1,1); temprefa=tempref; tempsup=tempref+2.0; tempinf=tempref-2.0;} if (tempreala!=tempreal){ t3=tempreal/10; t4=tempreal%10; glcd_rect(25,33,75,43,1,0); glcd_text57(43,36,letraa[t3],1,1); glcd_text57(53,36,letraa[t4],1,1); tempreala=tempreal;} if (velrefa!=velref){ v1=velref/(100); v2=(velref%100)/10; v3=(velref%100)%10; glcd_rect(79,17,125,28,1,0); glcd_text57(92,20,letraa[v1],1,1); glcd_text57(102,20,letraa[v2],1,1); glcd_text57(112,20,letraa[v3],1,1); velrefa=velref;} if (velreala!=velreal){ v4=velreal/(100); v5=(velreal%100)/10; v6=(velreal%100)%10;
INF-MCU
if((tempreal<tempsup)&&(cambiotemp==0)){ OUTPUT_HIGH(PIN_C3);} else{ if((tempreal<tempinf)&&(cambiotemp==1)){ cambiotemp=0;} else{ OUTPUT_LOW(PIN_C3); cambiotemp=1;} } if((velreal<velref)){ valor++;} if((velreal>velref)){ valor--;} set_pwm1_duty(valor); if(nuevopulso==1){ velreal=(500000.0/(TFB))+1; nuevopulso=0; } k=kbd_getc(); if ((k=='*')||(k=='#')||(k==48)){ if (k=='*'){ temperatura(); while (k!='#'){ k=20,x=20; k=kbd_getc(); x=k-48; if((x==1)||(x==2)||(x==3)||(x==4)||(x==5)||(x==6)||(x==7)||(x==8)||(x==9)||(x==0)) {numing++;y=1;}
INF-MCU
10
if ((numing==1)&&(y==1)){t1=x;temperatura();} if ((numing==2)&&(y==1)){t2=x;temperatura();} if (numing==2){numing=0;} y=0; } tempref=((t1*10)+t2); numing=0; K=0; } if (k=='#'){ velocidad(); while (k!='*'){ k=20,x=20; k=kbd_getc(); x=k-48; if((x==1)||(x==2)||(x==3)||(x==4)||(x==5)||(x==6)||(x==7)||(x==8)||(x==9)||(x==0)) {numing++;y=1;} if ((numing==1)&&(y==1)){v1=x;velocidad();} if ((numing==2)&&(y==1)){v2=x;velocidad();} if ((numing==3)&&(y==1)){v3=x;velocidad();} if (numing==3){numing=0;} y=0; } num=((v1*10)+v2); Velref=((num*10)); velref=velref+v3; numing=0; K=0; } if(k==48){ mostrar_menu(); }
pantalla(); } } }
void pantalla(){
INF-MCU
11
glcd_fillScreen(0); glcd_fillScreen(0); glcd_text57(25,5,temp,1,1); glcd_text57(80,5,vel,1,1); glcd_text57(1,20,ref,1,1); glcd_text57(1,36,real,1,1); glcd_rect(98,53,125,62,1,1); glcd_text57(100,55,ufps,1,0); glcd_text57(1,55,menu,1,1); glcd_line(25,15,126,15,1); glcd_line(25,31,126,31,1); glcd_line(25,47,126,47,1); glcd_line(77,1,77,47,1); glcd_text57(43,20,letraa[t1],1,1); glcd_text57(53,20,letraa[t2],1,1); glcd_text57(43,36,letraa[t3],1,1); glcd_text57(53,36,letraa[t4],1,1); glcd_text57(92,20,letraa[v1],1,1); glcd_text57(102,20,letraa[v2],1,1); glcd_text57(112,20,letraa[v3],1,1); glcd_text57(92,36,letraa[v4],1,1); glcd_text57(102,36,letraa[v5],1,1); glcd_text57(112,36,letraa[v6],1,1); } void temperatura(){ glcd_rect(25,17,75,28,1,1); glcd_text57(43,20,letraa[t1],1,0); glcd_text57(53,20,letraa[t2],1,0); } void velocidad(){ glcd_rect(79,17,125,28,1,1); glcd_text57(92,20,letraa[v1],1,0); glcd_text57(102,20,letraa[v2],1,0); glcd_text57(112,20,letraa[v3],1,0); } void mostrar_menu(){ glcd_fillScreen(0); glcd_fillScreen(0); glcd_text57(1,10,menua,1,1); glcd_text57(1,20,menub,1,1); delay_ms(3000); }
INF-MCU
12
ANEXOS D. PRESUESTO FUENTES RUBROS ESTUDIANTE Efectivo Personal Equipos Software Componentes Material Bibliogrfico TOTAL 60 60 910 Especie 240 320 250 UFPS Efectivo Especie EXTERNA Efectivo Especie 240 320 192 0 TOTAL
Tabla 1.Presupuesto Global del proyecto por fuentes de financiacin (en miles de $).
Dedicacin Horas/semana
$/h
Juan Jos Programado Quiroz r Omaa Jaime Programado Arturo r Dulc Juan Camilo Programado r Fonseca TOTAL
80
80
4 4
5 5
1 1
80 80
80 80 240
INF-MCU
13
Descripcin $/h
Horas de uso
Cantida d
Fuentes Justificacin Estudiante UFPS Externa Programacin del PIC y 320 simulacin en proteus. TOTAL
16
320
320
Fuentes Descripcin $/h Horas Cantidad Justificacin de uso 16 80 Software usado para programar el PIC 112 Software usado para simular circuitos con PIC Estudiante UFPS Externa Total
CCS Compiler
80
80
Proteus
16
112
112
192
INF-MCU
14
1 1 1 1 1 1
16 10 5 16 12 15
16 10 5 16 12 15
16 10 5 16 12 15
16 10 5 16 12 15 74