1 / 50

Martha Mite M. Andrés Contreras O. MSc. Carlos Valdivie zo

Martha Mite M. Andrés Contreras O. MSc. Carlos Valdivie zo. “Interfaz gráfica con pantalla LCD táctil para analizar señales de termocuplas tipo K, J, T usando el integrado DS2760 de Dallas/Maxim y un microcontrolador”. Objetivos del proyecto:.

chesna
Download Presentation

Martha Mite M. Andrés Contreras O. MSc. Carlos Valdivie zo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Martha Mite M. Andrés Contreras O. MSc. Carlos Valdiviezo “Interfaz gráfica con pantalla LCD táctil para analizar señales de termocuplas tipo K, J, T usando el integrado DS2760 de Dallas/Maxim y un microcontrolador”

  2. Objetivos del proyecto: • El objetivo de nuestro proyecto es utilizar la interfaz gráfica de una pantalla GLCD táctil para mostrar a través de ésta, el comportamiento de las señales de las termocuplas, usando el kit de Termocuplas DS2760.

  3. Diagrama de Bloques

  4. Descripción del Proyecto: • El alcance del kit de las termocuplas es entender el funcionamiento de estas, para lograr obtener las temperaturas sensadas en los diferentes ambientes que se le presente. • Una vez que se logra la comunicación del módulo adquisitivo de datos con el microcontrolador se ingresan las tablas de datos de las temperaturas. Para mostrar el resultado que será una gráfica de Temperatura en función del tiempo.

  5. Pantalla GLCD. Conexión de GLCD táctil a microcontrolador:

  6. Kit de termocuplas DS2760, Dallas/Maxim. Esta compuesto por el módulo de adquisición de Datos el chip DS2760 y las termocuplas K, J, T.

  7. Termocuplas: • Una termocupla es un transductor de temperatura, es un dispositivo que traduce una magnitud física en una señal eléctrica. • Son sensores de temperatura utilizados a nivel industrial, y a altas temperaturas. • Está compuesta por dos alambres de diferentes metales, que unidos de forma conveniente generarán entre sus extremos libres una diferencia de potencial proporcional a la diferencia de temperatura entre ellos.

  8. Principio de las Termocuplas “Voltaje de Seebeck” Tiene este nombre debido a que el científico Seebeck realizó el descubrimiento en el año de 1821, este principio dice: “si se sueldan 2 metales diferentes, cuyos extremosestán a distintas temperaturas, aparece una fuerza electromotriz (voltaje de Seebeck)”.

  9. Los retos de utilizar las termocuplas en el proyecto, consiste en: • Obtener medición precisa muy baja ( en fracciones milivoltios). • Hallar el voltaje de Salida de termocupla (Voltaje de Seebeck). • Realizar la compensación de temperatura de la punta fría.

  10. Tipos de Termocuplas:

  11. Módulo DS2760: • Para resolver los retos que trae el uso de termocuplas en la medición de temperatura, se usa el chip DS2760, un módulo sencillo y eficaz, configurado para resolver esos inconvenientes. • El DS2760 es un circuito integrado utilizado para adquirir los datos y cuenta con una memoria de datos no volátil donde se almacenan los datos de la variable sensada. • Este puede comunicarse como esclavo por medio de la red 1-wire, compatible con software de programación del microcontrolador. • En este caso lo utilizaremos para la obtención de datos de temperatura.

  12. Características del módulo: • Interfaz de comunicación con protocolo 1-wire. • Módulo contiene un monitor de baterías Li de alta precisión. • Incluye un sensor de temperatura integrado en chip, que mide continuamente la temperatura de la batería. • Este es usado para calcular la compensación de voltaje según la temperatura en la punta de referencia de termocupla. • Bajo consumo de potencia, 90uA activo – 2uA suspensión.

  13. Protocolo 1-wire: • Dallas Semiconductor ha desarrollado una poderosa tecnología llamada 1-Wire, la cual utiliza un solo conductor más su conexión a tierra para efectuar las comunicaciones y la transmisión de energía entre un dispositivo maestro y múltiples esclavos. • Una red de dispositivos 1-Wire está conformada por un maestro y uno o más esclavos que poseen un único pin de datos de tipo “opendrain”, al que se conecta una resistencia de “Pull Up” anclada a +5VDC (nominal). • El BUS 1-Wire, tiene una comunicación serial asincrónica entre un dispositivo maestro y uno o varios dispositivos esclavos.

  14. PIC18F4520:

  15. Ejemplo práctico de medición de temperatura con termocuplas:

  16. Tabla de Termocupla J:

  17. Diagrama de flujo

  18. Diagrama de flujo

  19. FUNCIONAMIENTO DEL PROGRAMA

  20. ANTECEDENTES • COMPILADOR MIKRO C (LENGUAJE C) • LIBRERIAS A USAR: • ADC : CONVERTIR SEÑALES ANALOGAS EN BINARIAS • Adc_read • GLCD: FUNCIONES DE GLCD • Glcd_Image, Glcd_Write_Text, Glcd_Rectangle,Glcd_fill • ONE_WIRE :COMUNICACIÓN CON KIT DS2760 • Ow_Reset , Ow_Read, Ow_Write • EEPROM: GUARDAR DATOS DE TEMPERATURAS • EEPROM READ; EEPROM WRITE • CONVERSIONS : CONVERSIONES DE TIPOS DE DATOS • ByteToStr , WordToStr • TIME : PARA GENERAR RETARDOS • Delay_ms

  21. DECLARACION DE VARIABLES, CONSTANTES Y DEFINICION DE FUNCIONES PROGRAMA PRINCIPAL IMPLEMENTACION DE FUNCIONES Estructura del Programa

  22. Declaración de variables y funciones TABLAS DE CONVERSIÓN DE TERMOCUPLAS K ,J Y T unsigned temp_K,temp_J,temp_T; // VARIABLES TEMPORALES const code unsigned K_table_pos[1024]; // TABLA DE COMPENSACION DE TERMOCUPLA K const code unsigned J_table_pos[1024]; // TABLA DE COMPENSACION DE TERMOCUPLA J const code unsigned T_table_pos[401]; // TABLA DE COMPENSACION DE TERMOCUPLA T VARIABLES GLCD char GLCD_DataPort at PORTD; // CONFIGURACION PUERTOS PARA GLCD sbit GLCD_CS1 at RB0_bit; sbit GLCD_CS2 at RB1_bit; sbit GLCD_RS at RB2_bit; sbit GLCD_RW at RB3_bit; sbit GLCD_EN at RB4_bit; sbit GLCD_RST at RB5_bit; sbit GLCD_CS1_Direction at TRISB0_bit; sbit GLCD_CS2_Direction at TRISB1_bit; sbit GLCD_RS_Direction at TRISB2_bit; sbit GLCD_RW_Direction at TRISB3_bit; sbit GLCD_EN_Direction at TRISB4_bit; sbit GLCD_RST_Direction at TRISB5_bit; VARIABLES GLOBALES const code char PRESENTACION [1024]; // IMAGEN DE PRESENTACION unsigned Y,tmp5; unsigned X,tmp4; unsigned short flag; // bandera de seleccion de termocupla

  23. Variables Globales (2) unsigned x_coord128,y_coord64; //variables de posicion unsigned cjComp,temp, tCuV,tCuVtemp,tmpCJ,tmpCJtemp,tblHi,tblLo,eePntr,testVal; unsigned short tCuV_H,tCuV_L,sign, tmpCJ_H,tmpCJ_L,sign2,tempC,V_Seebeck,T_Union; int ii,i,error; char *Text=“ "; char *Text1=“ "; unsigned posx,tmpY; // grafico Tvst Definicion de funciones void Detecion_Tecla(); // detecta el toque del teclado unsigned short elegir_termo (unsigned x_coord128, unsigned y_coord64); void delay2S(); // Funcion de delay de 2s unsigned GetX(); // lee posicion x unsigned GetY(); // lee posicion y void Busqueda_Binaria(); // algoritmo para hallar la temperatura unsigned Voltaje_Seebeck(); unsigned Temperatura_Union (); // calcula la temperatura de contacto void CALCULA_TEMPERATURA(); // calcula la temperatura en grados void grafico_k(); grafica T vs t

  24. Programa Principal void main() { OSCCON=0X7E; ADCON0 = 0x17; ADCON1 = 0x0C; TRISA = 0x07; // RA0 i RA1 are analog inputs TRISC = 0; // PORTC is output PORTC = 0; Glcd_Init (); //Inicializa GLCD Glcd_Fill (0x00); tmp4=0; tmp5=0; X=0; Y=0; x_coord128=0; y_coord64=0; delay_ms(200); while (1) { Glcd_Image (truck_bmp); delay_ms(200); Detecion_Tecla(); Glcd_Fill (0x00); delay_ms(2); Glcd_Write_Text("MENU TERMOCUPLAS",20,0,1); Glcd_Rectangle(20,7,100,18,1) ; Glcd_Write_Text("TERMOCUPLA K",22,1,1); Glcd_Rectangle(20,23,100,34,1) ; Glcd_Write_Text("TERMOCUPLA J",32,3,1); Glcd_Rectangle(20,39,100,50,1) ; Glcd_Write_Text("TERMOCUPLA T",32,5,1); Glcd_Rectangle(30,55,90,64,1) ; Glcd_Write_Text("SALIR",35,7,1); Detecion_Tecla(); flag= elegir_termo(x_coord128,y_coord64); Glcd_Write_Text(txt,1,2,0); Glcd_Fill (0x00);

  25. continuación while(1) { Glcd_Fill (0x00); posx=0; ii=0; while(1) { CALCULA_TEMPERATURA(); EEPROM_Write(ii,tempC ); // escribe datos en la memoria eeprom Delay_ms(5); ii++; if(ii==83) break; } Detecion_Tecla(); ii=0; // selección de localidad de la memoria EEPROM while(1) { tempC=EEPROM_Read(ii); // lee los datos de EEPROM Delay_ms(2); grafico_k(); ByteToStr(tempC, txt); Glcd_Write_Text(txt,1,2,0); Delay_ms(10); ii++; if(ii==83) break; if(posx==83) { posx=0; break; } } Detecion_Tecla(); if (i==0) break; } } }

  26. Implementación de Funciones DETECTA POSICION X Y Y DETECCION DE TECLA MENU DE TERMOCUPLAS VOLTAJE SEEBECK ALGORITMO DE BUQUEDA BINARIA TEMPERATURA DE UNION FRIA CALCULA TEMPERATURA GRAFICA T VS t

  27. Detecta posición X yY // DEVUELVE POSICION EN X (Tmp4) unsigned GetX () { PORTC.B0 = 1;// DRIVEA = 1 (LEFT GND, RIGHT 5V, TOP OFF ) PORTC.B1 = 0 ;// DRIVEB = 0 (BOTTOM LEE X ) Delay_ms(10); X = ADC_Read(1); //' LEE X (BOTTOM) tmp4 = 128-((X*128)/1024); return tmp4; // VARIABLE GLOBAL } // DEVUELVE POSICION EN Y (Tmp5) unsigned GetY () { PORTC.B0 = 0 ;// DRIVEA = 0 (LEFT LEE Y , RIGHT OFF , TOP 5V ) PORTC.B1 = 1 ;//DRIVEB = 1 (BOTTOM GND) Delay_ms(10); Y = ADC_Read(2) ;// LEE Y (LEFT) tmp5=64-((Y*64)/1024); return tmp5; }

  28. Detección de tecla Menú de termocuplas unsigned short elegir_termo (unsigned x_coord128, unsigned y_coord64) { if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=46) && (y_coord64<=64))) return 1; // si es termocupla K if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=30) && (y_coord64<=45))) return 2; // si es termocupla J if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=14) && (y_coord64<=29))) return 3; // si es termocupla t if(((x_coord128>=28) && (x_coord128<=98)) && ((y_coord64>=0 ) && (y_coord64<= 13))) return 4; // si es salir } void Detecion_Tecla(); { while (1) { y_coord64 = GetY(); x_coord128 = GetX(); if(((x_coord128>=10) && (x_coord128<=80)&& ((y_coord64>=10) && y_coord64<=50)))) break; } }

  29. REGISTROS DS2760

  30. Rutinas de Termocupla VOLTAJE SEEBECK (tCuV en microvoltios) // LEE EL REGISTRO DE CORRIENTE Y EXTRAE EL VOLTAJE EN BITS // -- CADA BIT ES 15.625 Uv unsigned Voltaje_Seebeck() { Ow_Reset(&PORTA,4); // Onewire señal de reset Ow_Write(&PORTA,4 , 0xCC); // salta netaddress Ow_Write(&PORTA,4, 0x69); // comando para LEER registros Ow_Write(&PORTA,4, 0x0E); // Lee registro de corriente 0x0E y extrae el voltaje tCuV_H = Ow_Read(&PORTA,4 ); // lee el primer byte H tCuV_L = Ow_Read(&PORTA,4 ); // lee el segundo byte L sign = tCuV_H & 0x80 ; // verifico bit de signo tCuV = tCuV_L >> 3; tCuVtemp= tCuV_H; tCuVtemp=tCuVtemp << 5; tCuV =tCuV + tCuVtemp ; // realizo desplazamientos para registro de 16 bits if (sign == 0x80) // si es negativo tCuV = tCuV | 0XF000 ; // elimina calculos para temperaturas negativas tCuV = tCuV * 125/8; // x 15.625 uV y guarda en tCuV Return tCuV; } Valor maximo de tCuv es 64mV (64000 uV) para 10 bits

  31. Temperatura de Unión Fría // LEE LA TEMPERATURA DE LA UNION FRIA EN LOS CONTACTOS //-- CADA BIT 0.125 GRADOS C // -- RETORNA TEMPCJ EN GRADOS unsigned Temperatura_Union (); { Ow_Reset(&PORTA, 4); // Onewire SEÑAL DE RESET Ow_Write(&PORTA,4 , 0xCC); // SALTA NETADDRESS Ow_Write(&PORTA, 4, 0x69); // COMANDO PARA ACCEDER A REGISTRO Ow_Write(&PORTA, 4, 0x18); //LEE REGISTRO DE TEMPERATURA 0x18 tmpCJ_H = Ow_Read(&PORTA,4 ); // LEE EL PRIMER BYTE H tmpCJ_L = Ow_Read(&PORTA,4 ); // LEE EL SEGUNDO BYTE L sign2 = tmpCJ_H & 0x80 ; // VERIFICA BIT DE SIGNO if (sign2 == 0x80) tmpCJ = 0; // SI ES NEGATIVO else tmpCJ = tmpCJ_H; // TEMPCJ EN GRADOS RETURN tmpCJ; }

  32. Algoritmo de Búsqueda Binaria void Busqueda_Binaria() { // Usamos un algoritmo binario modificado para encontrar temperatura de cjComp // busqueda de la tabla a la inversa tblLo = 0; // valor mas bajo de temperatura tempC = 27; // temp. default del cuarto switch (flag) { case 1: testVal = K_table_pos[tblHi]; break; // chequeo la max temperatura case 2: testVal = J_table_pos[tblHi]; break; // tesval guarda la max temperatura case 3: testVal = T_table_pos[tblHi]; break; } if (cjComp > testVal) error = 1; // fuera del rango else while (1) { eePntr = (tblLo + tblHi) / 2 ; // buscamos en el punto medio del arreglo switch (flag) { case 1: testVal=K_table_pos[eePntr]; break; case 2: testVal=J_table_pos[eePntr]; break; // tesval guarda la temp. punto medio case 3: testVal=T_table_pos[eePntr]; break; } if (cjComp == testVal) break; // encontro y sale del lazo if (cjComp < testVal) tblHi = eePntr; else tblLo = eePntr; // busca de la mitad para arriba if ((tblHi - tblLo) < 2) { // eePntr guarda valor final de temperatura eePntr = tblLo; break; } } tempC = eePntr; }

  33. Cálculo de la Temperatura void CALCULA_TEMPERATURA() { V_Seebeck= Voltaje_Seebeck(); T_Union= Temperatura_Union (); if (flag==1) cjComp = K_table_pos[T_Union]; if (flag==2) cjComp = J_table_pos[ T_Union]; if (flag==3) cjComp = T_table_pos[T_Union]; // combina cjComp and tCuV if (sign == 0x80) { //TC por debajo de la temp de union fria if ((tCuV) < (cjComp)) { cjComp = cjComp - tCuV; } else cjComp = 0; // limita a 0C } else // TC esta sobre la temp de union fria cjComp = cjComp + tCuV; switch (flag) { case 1: tblHi=1023; break; // Elige el valor del tamaño de la tabla de termocuplas de acuerdo a flag case 2: tblHi=1023; break; case 3: tblHi=400; break; } Busqueda_Binaria(); }

  34. Graficar T vs t void grafico_k() { tmpY = 63-(tempC); Delay_ms(2); Glcd_Dot(posx, tmpY, 1); posx++; }

  35. Simulación

  36. RESULTADO DE LA MEDICION DE TEMPERATURA CON LA TERMOCUPLA K

  37. Conclusiones: • Logramos visualizar los resultados de las muestras de datos de Temperatura en función del Tiempo en la pantalla GLCD, datos que fueron obtenidos con la aplicación de fuentes externas a las termocuplas, en este caso utilizamos una secadora de cabello y un encendedor. • Debido a que la pantalla GLCD, utiliza 3 leds para generar el fondo de color blanco de la imagen, aumentando el consumo de corriente, cuyo valor aproximado es de 50mA. Y la única forma de bajar este consumo es utilizando un solo color y reducir el nivel del contraste. Pero esto bajaría la calidad de la imagen. • Para obtener y reflejar en pantalla los valores de temperatura, se necesito una mediana cantidad de memoria FLASH, por lo cual se utilizo el PIC18F4520. Suficiente para almacenar las tablas de datos y valores adecuados que permitirán la conversión de la señal en milivoltios que da la termocupla a un valor de temperatura en °C.

  38. Para calcular el voltaje de Seebeck, tenemos que hacer que el voltaje generado en los contactos entre la placa del DS2760 y las termocuplas sea 0, y esto lo logramos a traves de software, esto se realiza luego del llamado de dos subrutinas, la de voltaje de Seebeck y la de la temperatura de contacto. • Las termocuplas son muy practicas en aplicaciones industriales debido a su robustez mecánica y a la precisión a altas temperaturas, así como de rápida respuesta y bajo costo. • La subrutina de “búsqueda binaria”, es una de las más importantes del código, ya que aquí es donde se realizan los cálculos importantes para poder buscar en la tabla de termocuplas el valor de temperatura más cercano al medido y además de llevar el valor que se encuentra en la tabla al valor de temperatura decimal que corresponde. Para luego ser mostrada por pantalla.

  39. Para tomar muestras de datos reales, se ha considerado la ayuda del DS3234 que utiliza comunicación SPI, este integrado nos va a servir para mostrar las fechas y hora actuales de los datos de temperatura que se tomen. • Se tuvo que considerar una memoria externa SD, debido a que no había capacidad en el microcontrolador para almacenar los datos de temperatura. Y como se va a mostrar en pantalla la fecha y hora de las muestras de datos, fue necesario considerar el uso de esta memoria.

  40. Recomendaciones: • Es muy importante para realizar proyectos como el nuestro, contar con conocimientos suficientes en microcontroladores y lenguaje de programación MicroCPro (que es el utilizado aquí), ya que esto facilitará un mejor desarrollo, configuración e implementación del proyecto. • Leer, comprender y analizar de forma detenida las Hojas de Especificaciones Técnicas del microcontrolador PIC18F4520, Pantalla GLCD táctil y el Módulo de Adquisición DS2760. Ya que un mal entendimiento puede producir conexiones erróneas que nos harán tomar más del tiempo del necesario para el desarrollo del proyecto.

  41. Una vez implementado el Proyecto en el protoboard, ser cuidadoso en el traslado de éste, hasta su debida conexión en placas. • Realizar un algoritmo o diagrama de flujo del Código Fuente a utilizarse en la programación, para hallar así más pronto los errores lógicos con los que se pueda encontrar en la implementación del Proyecto, en lo que respecta a la parte de Software. • Hacer un buen analisis antes de elegir el microntrolador y el lenguaje en el que se va a desarrollar el proyecto, ya que en nuestro caso utilizamos por completo todos los recursos del integrado y tuvimos que agregar una memoria externa.

  42. Muchas gracias

More Related