Beruflich Dokumente
Kultur Dokumente
Ingeniero Electrónico
UNIVERSIDAD DE ANTIOQUIA
FACULTAD DE INGENIERÍA
MEDELLÍN
2010
DEDICATORIA
A mis padres Gabriela y Orlando, a mi esposa Yuli y mi hija Manuela que son lo
mejor que me ha pasado en la vida.
Jorge González
Obeymar Santana
2
AGRADECIMIENTOS
Jorge González
Al final de este logro tan representativo para nosotros como estudiantes, debemos
gratitud por todo lo vivido y experimentado a lo largo de este proceso;
primeramente a Dios que nos permitió culminar de forma exitosa este escalón en
la larga ruta y de forma muy especial a los profesores Orlando Carrillo y Juan
Pablo Urrea, quienes me ayudaron durante toda la carrera y en este proyecto, a mi
esposa Johanna Meza quien tuvo paciencia durante este tiempo, también a mis
hermanos y mis padres que me apoyaron moral y económicamente, a pesar de las
dificultades, a Freddy Castañeda de quien aprendí a moverme en el medio
industrial, y a mis compañeros de carrera sin los cuales no habría podido llegar al
final de esta meta.
Obeymar Santana
3
CONTENIDO
CONTENIDO ........................................................................................................................................ 4
INDICE DE TABLAS Y FIGURAS ............................................................................................................ 6
GLOSARIO ........................................................................................................................................... 7
RESUMEN ............................................................................................................................................ 8
INTRODUCCIÓN .................................................................................................................................. 9
PLANTEAMIENTO DEL PROBLEMA ................................................................................................... 10
OBJETIVOS......................................................................................................................................... 11
OBJETIVO GENERAL ...................................................................................................................... 11
OBJETIVOS ESPECIFICOS ............................................................................................................... 11
MARCO TEÓRICO ........................................................................................................................ 12
TEMPERATURA......................................................................................................................... 12
TÉCNICAS Y ELEMENTOS DE MEDICIÓN DE TEMPERATURA ................................ 12
TERMOCUPLA ........................................................................................................................... 14
PRINCIPIOS FÍSICOS DE LAS TERMOCUPLAS ............................................................ 15
EFECTO SEEBECK ............................................................................................................... 15
LEY DE LOS CIRCUITOS HOMOGÉNEOS ...................................................................... 17
LEY DE METALES INTERMEDIOS .................................................................................... 18
TECNOLOGÍA Y TIPOS DE TERMOCUPLAS .................................................................. 18
NORMAS “DIN” ....................................................................................................................... 19
CARACTERÍSTICA DE TRANSFERENCIA DE TERMOCUPLAS ................................ 20
ENCAPSULADOS PARA TERMOCUPLAS COMERCIALES ........................................ 21
ACONDICIONAMIENTO PARA TERMOCUPLAS ............................................................ 23
COMPENSACIÓN DE JUNTURA FRÍA ................................................................................. 25
COMPENSACIÓN POR HARDWARE ................................................................................ 25
COMPENSACIÓN POR SOFTWARE................................................................................. 25
CONVERSIÓN ANÁLOGA DIGITAL ....................................................................................... 29
4
JAVA ............................................................................................................................................. 32
MySQL ......................................................................................................................................... 32
MICROCONTROLADORES. .................................................................................................... 33
ARQUITECTURA INTERNA DE UN MICROPROCESADOR ........................................ 33
INTERFACES DE ENTRADA Y SALIDA DE LOS MICROPROCESADORES ............ 34
MICROCONTROLADORES PIC ......................................................................................... 35
TERMISTOR LM 35 ................................................................................................................... 35
CARACTERÍSTICAS DE TRANSFERENCIA: (LM 35) .................................................... 36
METODOLOGÍA............................................................................................................................. 37
SISTEMA DE ADQUISICIÓN DE DATOS.............................................................................. 37
DISEÑO E IMPLEMENTACIÓN DEL PROTOTIPO ............................................................. 39
SOFTWARE ................................................................................................................................ 41
Main: ......................................................................................................................................... 43
NewJFrame: ............................................................................................................................ 43
dataBase: ................................................................................................................................. 44
SerialIO: ................................................................................................................................... 44
RESULTADOS ............................................................................................................................... 49
CONCLUSIONES........................................................................................................................... 51
WEBGRAFÍA .................................................................................................................................. 53
ANEXOS ............................................................................................. ¡Error! Marcador no definido.
5
INDICE DE TABLAS Y FIGURAS
Figura 1. Termocupla, 14
Figura 10 Unión Termocupla con Circuito Impreso, 24
Figura 12 Diagrama de voltajes reales de termocuplas, 26
Figura 13. Conversor analógico digital de seguimiento., 31
Figura 14 Diagrama de Bloques de un procesador digital síncrono, 34
Figura 15 Esquema General Trabajo realizado, 37
Figura 16 Conexión y Amplificación Termocupla, 38
Figura 17 Esquemático montado, 39
Figura 18, Impreso Tarjeta de Adquisición de Datos, 40
Figura 19; Foto Tarjeta Adquisición de Datos, 41
Figura 2 Efecto Seebeck, 15
Figura 20. Diagrama de flujo del programa., 46
Figura 21. Aplicación en ejecución, 48
Figura 22; Resultados temperatura contra Tiempo, 50
Figura 3 Efecto Seebeck, Conducción de los metales, 16
Figura 4 Ley Metales Intermedios, 18
Figura 5 Curva Característica de termocuplas, 21
Figura 6 Dimensione Encapsulado Termocuplas, 21
Figura 7 Encapsulado Aislado, 22
Figura 8 Encapsulado a Masa o Tierra, 22
Figura 9 Encapsulado Expuesto, 23
Figura11 Diagrama eléctrico Unión Termocupla con Circuito Impreso, 24
Tabla 1: Algunos sensores de temperatura y sus características., 13
Tabla 2, Normas DIN para termocuplas, 19
Tabla 3 Característica de Transferencia termocupla Tipo J, 20
Tabla 5; Resultados temperatur, 50
6
GLOSARIO
7
RESUMEN
8
INTRODUCCIÓN
Hay varios métodos para efectuar la compensación de punta fría, entre ellos el
que emplea la ley de metal intermedio y ajuste por software, lo cual consiste en
insertar una porción de uno de los metales que conforman el termopar, en el
extremo contrario para alterar la medida, y luego se lleva ésta medida a un
sistema de adquisición de datos donde se le hace la corrección definitiva.
Finalmente los datos que arroja el sistema de adquisición de datos están listos
para ser visualizados o para pasar a controlar el proceso.
9
PLANTEAMIENTO DEL PROBLEMA
Los termopares son unos de los elementos más utilizados para la medición de
temperatura en ambientes industriales, ya que tienen mayor rango, robustez,
linealidad y una buena característica de transferencia. Pero su acople con los
elementos que procesan la medición es costoso y complicado debido a la cantidad
de hardware requerido.
Como se puede notar, una toma de una temperatura que se supone sencillo se
convierte en un proceso largo y tedioso, que incluye varios (mínimo dos),
sensores, y con ellos gran cantidad de elementos acondicionadores de la señal,
elevando así los costos del proceso.
10
OBJETIVOS
OBJETIVO GENERAL
OBJETIVOS ESPECIFICOS
Diseñar e implementar un software que tome los datos enviados por el hardware y
haga las correcciones necesarias para luego imprimirlos en pantalla y enviarlos a
una base de datos.
11
MARCO TEÓRICO
TEMPERATURA
Los instrumentos de temperatura utilizan diversos fenómenos que son influidos por
la temperatura y entre los cuales figuran:
1
Tomás Gómez-Acebo(2001), Termodinámica Básica, Capítulo 1 , Universidad de Navarra,
TECNUN Ediciones.
12
De este modo se emplean los instrumentos siguientes:
2
Antonio Creus Solé (1998), Instrumentación industrial, Capitulo 6, Sexta edición, México D.F.,
Alfaomega
13
TERMOCUPLA
Figura 1. Termocupla
14
PRINCIPIOS FÍSICOS DE LAS TERMOCUPLAS
EFECTO SEEBECK
Por el contrario, si se juntan los extremos libres tendremos una corriente continua
“IT” circulando, la cual es de origen termo eléctrico.
15
este tenderá a cargarse negativamente con respecto al extremo caliente, dicha
fuerza electromotriz está dada por:
T2
VT Q m dT
T1
En donde:
16
VT (T 2 T1 )
La cual dice que si los conductores de las termocuplas son homogéneos, no son
afectados por las temperaturas intermedias. Si la juntura de dos elementos
distintos se mantiene a Tp, mientras que la otra es Tm, la f.e.m. térmica que se
desarrolla es independiente y permanece inalterada por cualquier distribución de
temperatura a lo largo de los alambres Ta y Tb.
3
Carrillo Orlando (2010), Notas sobre termocuplas para el curso de Acondicionamiento de
Señales, Universidad de Antioquia.
17
LEY DE METALES INTERMEDIOS
Esta ley estipula que se puede introducir un tercer metal en el circuito sin crear
errores, si las junturas del tercer metal con los conductores de la termocupla se
encuentran a la misma temperatura.
18
Cuando se forma un termopar (dos metales) se puede medir la tensión generada
entre los dos metales, resultando valores en milivoltios, los cuales son difíciles de
manipular, dando lugar a tratamientos electrónicos para su correcta manipulación.
NORMAS “DIN”
Siendo el Constantano una aleación de 60% de cobre (Cu) y 40% de níquel (Ni)4
4
http://es.wikipedia.org/wiki/Termopar
19
CARACTERÍSTICA DE TRANSFERENCIA DE TERMOCUPLAS
¢ - tipo “J”
20
En la siguiente gráfica se puede ver la relación tensión contra temperatura para
los diferentes tipos de termocuplas.
21
El largo (A) del termo elemento esta normalizado a 30cm y el diámetro del tubo de
protección (B) varía entre 0.25mm – 1cm.
1. AISLADA
2. A MASA O TIERRA.
3. EXPUESTA
AISLADA
A MASA
ts = 2 segundos
22
EXPUESTA
23
pares de termocuplas adicionales, lo que se constituye en nuevas fuentes de error,
haciéndose necesario usar líneas de extensión un poco más lejanas al punto de
medición, y posteriormente la conexión a las tarjetas de circuitos impresos, donde
se generarán tensiones debidas a las uniones con el metal del impreso, pero
estando estas últimas a la temperatura de referencia
Y su equivalente eléctrico:
Donde se puede notar que para efectuar la compensación se adiciona una fuente
de voltaje que anule el efecto de V1- V2, si la temperatura ambiente es constante
muy fácilmente se corrige el problema, pero como ésta es variable es necesario
emplear electrónica que siga el cambio de dicha temperatura y vaya realizando la
compensación. Dicho procedimiento se denomina “simulación de cero grado
centígrado” o “compensación de juntura fría”.
24
COMPENSACIÓN DE JUNTURA FRÍA
Industrialmente dos tipos de técnicas de compensación de puta fría son utilizados:
compensación por hardware y compensación por software.
25
Figura 12 Diagrama de voltajes reales de termocuplas
VJ4 V J1
VM VJ3 VJ2
VM V J 3 (T P ) V J 2 (T ref )
También tenemos que las junturas J3 y J2 están hechas con los mismos metales
por tanto podemos decir que:
V J 2 (T ref ) V J 3 (Tref )
Si V J 3 V PCtte
26
Bajo estas condiciones si se conocen T ref y VM y conociendo la función de
transferencia (V/T) de la termocupla empelada es posible conocer la temperatura
en el punto de medición.
Tm Tc
27
COMPENSACIÓN POR SOFTWARE MÉTODO I:
Este primer método hace uso de los pasos de conversión Voltaje – Temperatura y
requiere de los siguientes pasos:
1. Medir Tref
2. Para la termocupla elegida convertir esta temperatura en un voltaje
equivalente VTe(Tref)
3. Adicionar este voltaje resultado a VM, con el cual se obtiene el verdadero
voltaje de circuito abierto a una temperatura de referencia 0°C
4. Convertir este voltaje resultado en su temperatura resultado TC
Este método más simplificado hace uso del hecho de que los voltajes de salida de
las “termocuplas” son aproximadamente lineales sobre pequeñas desviaciones en
temperatura. Bajo estas condiciones para pequeñas desviaciones de temperatura
es posible hacer uso de la expresión:
5
http://srdata.nist.gov/its90/download/allcoeff.tab
28
Temperatura, con referencia a 0°C, son idénticas a las curvas referenciadas a
“Tref”.
Los pasos a seguir con éste método simplificado son los siguientes:
29
Existe un variado número de conversores analógico-digitales con diferentes
características tales como la de velocidad de conversión, el número de bits de la
señal digital, entre otras. Y son estas características las que harán la diferencia a
la hora de elegir uno u otro tipo.
El conversor analógico digital más sencillo consiste en una serie de circuitos
comparadores ajustados cada uno de ellos a niveles de tensión de referencia
sucesivamente cada vez más elevado, obtenidos mediante un divisor resistivo de
una misma fuente de alta estabilidad. Al aplicar una tensión a la entrada del
conversor, conmutan todos los comparadores cuya tensión de referencia sea
menor a la de la entrada. Un circuito lógico codifica la salida de los comparadores
en el formato binario deseado. La gran velocidad de muestreo y el hecho de que la
conversión se haga en un solo pulso de reloj, hace que a este tipo de conversores
se les conozca como conversores flash.
30
Figura 13. Conversor analógico digital de seguimiento. La salida de un conversor
digital analógico se compara con la señal de entrada, según sea mayor o menor
se incrementa o decrementa un contador asociado al conversor digital analógico.
6
http://www.volcanesdecanarias.com/interna/Educacion/download/Instrumentacion
/04_SISTEMAS%20DE%20CONVERSION%20ANALOGICA%20DIGITAL.pdf
31
Criterios de selección de un modelo de conversor analógico digital:
JAVA7
Más de 4.500 millones de dispositivos utilizan la tecnología Java, entre los que
encontramos teléfonos móviles y de mano, tarjetas inteligentes, sintonizadores,
impresoras, cámaras web, juegos, sistemas de navegación para automóviles,
dispositivos médicos, etc.
MySQL8
MySQL es el software de bases de datos de fuente abierta más popular del mundo
con más de 100 millones de copias descargadas o distribuidas a lo largo de su
7
http://www.java.com/es/
8
http://www.mysql.com
32
historia. Con su velocidad, fiabilidad y facilidad de uso MySQL se ha convertido en
la opción preferida para la Web, Web 2.0, SaaS e ISV.
MICROCONTROLADORES9.
9
Mandado Pérez, Enrique (2007), Microcontroladores PIC, Sistema integrado para el
Autoaprendizaje, Primera Edición, MARCOMBO Ediciones Técnicas, Barcelona (España)
33
y una unidad operativa, la cual está conformada por dos partes una unidad de
memoria y unidad aritmético-lógica (ALU), como se puede ver en la figura 19.
Los datos ingresan del exterior, se almacenan en la memoria y se van pasando de
manera secuencial a la ALU, que los procesa y devuelve a la memoria según sea
el caso, debido a órdenes de la unidad de control.
La forma como trabaja la unidad control es lo que se conoce como las diferentes
arquitecturas de procesadores digitales síncronos, entre ellas Hardvard y
Princeton.
34
Tiene su propio juego de instrucciones de programación también llamado
“instruction Set”
MICROCONTROLADORES PIC
La marca fabricante de microprocesadores “Microchip” creó su propio grupo de
circuitos integrados llamados PIC, los cuales han invadido los mercados
mundiales, gracias a su versatilidad y amplia gama, también es de anotar que son
“open Source”, lo cual constituye el factor detonante que lleva a su amplio uso.
De acuerdo a los requerimientos de cada aplicación, Microchip ofrece un tipo de
PIC, es así como los hay de gama baja, media, alta y mejorada, cubriendo así
todos los flancos de los posibles usuarios, y llenado todas las expectativas.
Es así como se conocen las familias PIC12CXX, PIC16CXX, PIC16FXX,
PIC17CXX, PIC18FXX, y PIC18VTXX. Cada una con un número de instrucciones
en particular, número de bits a procesar y un tipo de encapsulado.
TERMISTOR LM 35
35
CARACTERÍSTICAS DE TRANSFERENCIA: (LM 35)
10
http://pwp.etb.net.co/SAIDPINZON/sensores.html#LM35
36
METODOLOGÍA
37
Rango de Valor Usado (°C) Rango de Valor Usado (mV)
Operación(°C) Operación (mV)
-200 a 750 0 a 450 -8.095 a 42.919 0 a 25.164mV
TABLA 4; Rango de operación Usado
El criterio de selección que se tuvo en cuenta para emplear estos valores, fue el
rango de trabajo de los componentes de acondicionamiento y adquisición de
datos.
Uno de los inconvenientes y donde más problemas ocurren en este tipo de
aplicaciones, es en el acondicionamiento de la señal, por lo cual se seleccionó un
amplificador de ganancia programable PGA204, el cual tiene dentro de sus
características el acondicionamiento apropiado para termocuplas. Como este
amplificador tiene ganancia programable se seleccionó una ganancia de 100, ya
que la señal proveniente de la termocupla es muy débil en promedio 56uV/°C,
quedando 5.6mV/°C, que ya es una señal que puede leer el A/D.
38
En el siguiente esquema se muestra todo el circuito realizado.
39
Figura 18, Impreso Tarjeta de Adquisición de Datos
Se tuvo en cuenta que la conexión señal de la termocupla y la del LM35
estuvieran a una corta distancia, para que los valores de referencia en la
compensación estén lo más cercano posible.
Por otra parte para la comunicación serial se emuló un puerto COM, mediante una
conexión USB entre el PC y el PIC. Como fuente de alimentación para polarizar
los integrados se usó el voltaje USB que entrega el PC, para la PGA que necesita
voltaje negativo se usó un integrado TC7660, que es un conversor DC/DC; el cual
se polariza con +vcc y entrega a la salida –vcc.
Finalmente se usó la técnica de planchado para imprimir el diseño en la placa de
fibra de vidrio recubierta de cobre, se perforó y se le soldaron los componentes.
40
Figura 19; Foto Tarjeta Adquisición de Datos
SOFTWARE
Se divide en; programación del PIC y el algoritmo de compensación.
Programación del PIC
Para programar el PIC se usó el “C CCS PIC Compiler” de la empresa microchip11,
con el cual se implementó el conversor análogo digital para procesar las señales
provenientes tanto del amplificador de la termocupla, como del LM35. También se
emuló una comunicación serial a través da una interfaz USB, entre el PIC y el PC.
11
García Breijo Eduardo (2008), Compilador C CCS y Simulador PROTEUS para
Microcontroladores PIC. Primera Edición, Alfaomega Grupo Editor S.A, México DF
41
Algoritmo de Compensación
Como lenguaje de programación se seleccionó Java por los grandes beneficios
que éste presta. Dentro de estos encontramos:
42
Cuando desarrollamos una aplicación en Java, para más orden y para conservar
la estructura de Programación Orientada a Objetos (POO) creamos una serie de
clases y cada clase va en un archivo diferente cuyo nombre es exactamente el
mismo de la clase.
Esta es la lista de clases empleadas en la aplicación:
Main:
Ésta clase es la principal, es con la que se inicia el programa y tiene el siguiente
método:
main
Aquí se crea una instancia de la clase NewJFrame para iniciar el entorno gráfico.
NewJFrame:
Es la encargada de todo el entorno gráfico, los paneles, los botones, los campos
de texto, las gráficas y los elementos de menú que se pueden utilizar en la
aplicación.
En esta clase se encuentran los siguientes elementos:
JFrame: es el marco principal, donde están contenidos los demás
elementos
jMenuBar1: barra ubicada en la parte superior con los elementos del menú
jPanel1: en este panel se encuentran las etiquetas, campos y botones que
conforman el formulario de acceso a la aplicación
jPanel2: este es el panel principal ya que aquí se visualizan los datos que
llegan del microcontrolador y posteriormente procesados como lo son el
voltaje de la termocupla y la temperatura del sensor LM35, y la gráfica de la
temperatura calculada mediante los algoritmos de la NITS expuestos
anteriormente.
43
dataBase:
Es quien gestiona todo lo relacionado con la base de datos tal como la conexión y
la desconexión a esta, la inserción, actualización y eliminación de datos.
Los métodos son:
dataBase: el constructor de la clase.
conectar: gestiona la conexión con la base de datos.
obtenerDatos: ejecuta sentencias de consulta a la base de datos.
guardarDatos: ejecuta sentencias de inserción o actualización a la base de datos.
desconectar: gestiona la desconexión de la base de datos.
SerialIO:
44
Control:
Termómetro:
45
Figura 20. Diagrama de flujo del Algoritmo.
Como se puede ver en el diagrama de flujo de la Figura 22, lo primero que hace el
programa es solicitar un nombre de usuario y una contraseña que se encuentran
46
almacenados en la base de datos. Si estos datos son incorrectos se vuelven a
solicitar hasta que se ingresen los solicitados.
Cuando se validan los datos de acceso se procede a tomar los datos del puerto
USB al que se ha conectado el sistema de adquisición de datos, como estos datos
son enviados al PC cada segundo, se toma este evento como disparador de las
siguientes acciones que son:
- Separar los datos que vienen juntos en una trama en el voltaje de la
termocupla y el voltaje del LM35.
- Hacer los cálculos para convertirlos a los valores reales sensados.
- Con estos valores se aplican las ecuaciones de corrección.
- Se imprime el valor calculado de la temperatura en un termómetro creado
con la clase jfree chart
- Se imprimen los valores en la gráfica temperatura contra tempo.
- Se guardan estos valores en la base de datos
Los anteriores pasos son realizados por la aplicación cada segundo cuando hay
disponibles datos en el puerto COM y se hacen indefinidamente hasta que se
cierra la ventana de la aplicación.
47
Figura 21. Aplicación en ejecución
48
RESULTADOS
49
24,219 72,357 49,061 71,9
23,828 70,521 47,584 71,1
23,828 68,331 45,363 69,3
23,828 66,868 43,88 67,6
23,828 66,137 43,137 66,3
24,219 65,051 41,651 64,9
23,828 62,474 39,42 63,7
23,828 62,474 39,42 62,5
23,828 61,006 37,929 61
24,219 59,917 36,436 59,8
24,219 59,182 35,69 58,9
23,828 58,066 34,943 58
23,828 57,33 34,195 57,2
24,219 56,238 32,697 55,9
24,219 54,765 31,198 55,1
Tabla 5; Resultados
100
90
80 LM35°C
70
60 Termocupla
50 Compensada
40 Termocupla sin
30 Compensar
20 termómetro
10
0
-10 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35
50
CONCLUSIONES
51
recomienda usar esta técnica en procesos de calentamiento donde la
temperatura sea mayor que la del ambiente.
Se observó que mediante este método se puede llegar a tener de los datos
de varias termocuplas en un solo sistema de adquisición de datos, con
estos valores es posible realizar la compensación de manera simultánea, se
pueden manipular los datos para; comparar, hacer promedios, sumatorias,
y llevar registros, lo cual permitiría tener un control más exacto del proceso
que se está monitoreando.
Finalmente se concluye que el método de compensación de punta fría para
termocuplas mediante software, es práctico para procesos que requieren de
varias mediciones y además donde se necesite monitorear en línea el
estado del proceso, y donde se necesite almacenar los datos para su
posterior uso.
52
BIBLIOGRAFÍA
[3] García Breijo Eduardo (2008), Compilador C CCS y Simulador PROTEUS para
Microcontroladores PIC. Primera Edición, Alfaomega Grupo Editor S.A, México DF
[1] http://es.wikipedia.org/wiki/Termopar
[2] http://srdata.nist.gov/its90/download/allcoeff.tab
[3]http://www.volcanesdecanarias.com/interna/Educacion/download/Instrumentacio
n/04_SISTEMAS%20DE%20CONVERSION%20ANALOGICA%20DIGITAL.pdf
[4] http://www.java.com/es/
[5] http://www.mysql.com
[6] http://pwp.etb.net.co/SAIDPINZON/sensores.html#LM35
53
ÍNDICE DE ANEXOS
ALGORITMO EN JAVA 59
54
TABLAS DE POLINOMIOS Y COEFICIENTES NIST
a0 = 0.118597600000x100
a1 = - 0.118343200000x10-3
a2 = 0.126968600000x103
55
PROGRAMACIÓN DEL PIC
include <18f4455.h>
#device adc=8
#fuses
Hspll,nowdt,NOPROTECT,nolvp,nodebug,usbdiv,pll5,cpudiv1,vregen,nomclr
#use delay(clock=48000000)
// #use standard_io(a)
#define usb_con_sense_pin pin_D7
#include <usb_cdc.h>
int contador=0;
int1 enviar=0;
//int dato=0;
int16 dato1=0;
int dato2=0;
int datof=0;
int i=0;
#INT_RTCC
void tiempo(){
if(contador==20){
contador=0;
enviar=1;
}
else{
contador++;
}
56
}
void main(){
SET_TRIS_A(0XFF);
SET_TRIS_B(0X00);
// SET_TRIS_C(0X00);
SET_TRIS_D(0b10111111);
SETUP_ADC(ADC_CLOCK_DIV_16);
SETUP_ADC_PORTS(AN0_TO_AN1|VSS_VREF);
set_adc_channel(0);
ENABLE_INTERRUPTS(INT_RTCC);
SETUP_COUNTERS(RTCC_INTERNAL,RTCC_DIV_2 );
ENABLE_INTERRUPTS(GLOBAL);
USB_CDC_INIT();
USB_INIT();
do{
usb_task();
if(usb_enumerated()){
//if( usb_cdc_kbhit()==1){
//dato= usb_cdc_getc();
//set_adc_channel((dato&0x07));
//usb_cdc_putc(read_adc());
//}
//datof=(int)(dato1>>2);
57
if(enviar==1){
enviar = 0;
dato1 = 0;
set_adc_channel(0);
for(i=0;i<=3;i++){
dato1=dato1+read_adc();
delay_ms(1);
}
datof=(int)(dato1>>2);
set_adc_channel(1);
delay_us(10);
dato2=read_adc();
delay_ms(1);
usb_cdc_putc(datof);
delay_ms(1);
usb_cdc_putc(dato2);
}
}
} while(true);
}
58
ALGORITMO EN JAVA
package correctorpf;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import javax.comm.CommPortIdentifier;
import javax.comm.NoSuchPortException;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
/**
* Realiza la conexión mediante el puerto serial entre el sistema embebido y el PC
* @author Jorge González
* @author Obeymar Santana
* @version 1.0
*/
public class serialIO implements SerialPortEventListener {
59
static String datos;
static Enumeration enumpuertos;
public double VTermoCupla;
public double TLM35;
public int Contador = 0;
sPort.setFlowControlMode(sPort.FLOWCONTROL_NONE);
sPort.setInputBufferSize(3);
try {
salida = sPort.getOutputStream();
entrada = sPort.getInputStream();
try {
sPort.addEventListener(this);
sPort.notifyOnDataAvailable(true);
} catch (TooManyListenersException e) {
}
} catch (IOException e) {
60
System.err.println("ERROR de I/O" + e);
}
} catch (PortInUseException e) {
System.err.println("ERROR al abrir puerto " + e);
} catch (Exception e) {
System.err.println("Error al abrir el puerto! STATUS: " +
e);
}
} catch (NoSuchPortException e) {
System.err.println("ERROR al identificar puerto " + e);
}
}
/**
* Captura los eventos del puerto serial y procesa la información tomada de
este
* @param event evento del puerto serial
*/
public void serialEvent(SerialPortEvent event) {
int numBytes = 0;
byte[] bufferLectura = new byte[8];
switch (event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
System.out.print("CD pasa a ");
if (event.getNewValue()) {
61
System.out.println("cierto");
} else {
System.out.println("falso");
}
break;
case SerialPortEvent.CTS:
System.out.print("CTS pasa a ");
if (event.getNewValue()) {
System.out.println("cierto");
} else {
System.out.println("falso");
}
break;
case SerialPortEvent.DSR:
System.out.print("DSR pasa a ");
if (event.getNewValue()) {
System.out.println("cierto");
} else {
System.out.println("falso");
}
break;
case SerialPortEvent.RI:
System.out.print("RI pasa a ");
if (event.getNewValue()) {
System.out.println("cierto");
} else {
System.out.println("falso");
}
break;
62
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
System.out.println("Buffer vacio");
break;
case SerialPortEvent.DATA_AVAILABLE:
// System.out.println("Datos disponibles");
try {
while (entrada.available() > 0) {
numBytes = entrada.read(bufferLectura);
}
String DatosLeidos = new String(bufferLectura);
// System.out.println("Bytes: " + numBytes);
// System.out.println("Datos: " + DatosLeidos);
char arrayDatos[];
arrayDatos = new char[2];
if (numBytes == 2) {
Contador = 0;
arrayDatos[0] =
DatosLeidos.charAt(0);
arrayDatos[1] =
DatosLeidos.charAt(1);
VTermoCupla = arrayDatos[0];
TLM35 = arrayDatos[1];
63
TLM35 = TLM35 * 100;
controlar.Calcular(VTermoCupla, TLM35);
} else if (numBytes == 1) {
Contador++;
if (Contador == 1) {
arrayDatos[0] =
DatosLeidos.charAt(0);
VTermoCupla = arrayDatos[0];
VTermoCupla = (VTermoCupla *
1.0) / 256;
VTermoCupla = VTermoCupla /
100;
} else if (Contador == 2) {
arrayDatos[0] =
DatosLeidos.charAt(0);
TLM35 = arrayDatos[0];
TLM35 = (TLM35 * 1.0) / 256;
TLM35 = TLM35 * 100;
Contador = 0;
controlar.Calcular(VTermoCupla,
TLM35);
}
}
} catch (IOException e) {
System.out.println("Error IO durante la lectura: " +
e);
} catch (Exception e) {
64
System.out.println("Error durante la lectura: " +
e);
}
break;
}
}
/**
* Envía los bytes de datos al sistema embebido
* @param dato String con información para enviar al micro del sistema
embebido
*/
public void enviarMicro(String dato) {
try {
datos = new String(dato);
System.out.println(datos);
salida.write(datos.getBytes());
// salida.flush();
} catch (IOException e) {
System.out.println("Error IO durante la escritura: " + e);
} catch (Exception e) {
System.out.println("Error durante la escritura: " + e);
}
}
}
65
package correctorpf;
import java.sql.SQLException;
import javax.swing.JLabel;
import org.jfree.data.time.Millisecond;
import org.jfree.ui.RefineryUtilities;
/**
*Realiza el control principal de la aplicación
* @author Jorge González
* @author Obeymar Santana
*/
public class Control {
/**
* Las constantes C son válidas para termocuplas tipo J desde -210 a 760 °C
* Las constantes A son válidas para termocuplas tipo J desde 0 a 760 °C
*/
final double C0 = 0.0;
final double C1 = 0.503811878150E-01;
final double C2 = 0.304758369300E-04;
final double C3 = -0.856810657200E-07;
final double C4 = 0.132281952950E-09;
final double C5 = -0.170529583370E-12;
final double C6 = 0.209480906970E-15;
final double C7 = -0.125383953360E-18;
final double C8 = 0.156317256970E-22;
final double A0 = 0.0;
final double A1 = 1.978425E+01;
66
final double A2 = -2.001204E-01;
final double A3 = 1.036969E-02;
final double A4 = -2.549687E-04;
final double A5 = 3.585153E-06;
final double A6 = -5.344285E-08;
final double A7 = 5.099890E-10;
double V_LM, V_TOTAL, T_TOTAL, T_MEDIDA;
int contadorSQL = 0;
int acumuladorTemp = 0;
double temperaturaC = 0;
double temperaturaS = 0;
NewJFrame panel;
Termometro termo_c;
Termometro termo_s;
serieTiempo serie;
/**
* Constructor de la clase
* @param panel
*/
public Control(NewJFrame mainPanel) {
termo_c = new Termometro();
termo_s = new Termometro();
termo_c.thermo1.addSubtitle("Temp. compensada");
termo_s.thermo1.addSubtitle("Temp. sin compensar");
panel = mainPanel;
serie = new serieTiempo("Gráfica de temperaturas contra el tiempo");
serie.pack();
RefineryUtilities.positionFrameOnScreen(serie, 0, 0);
67
// serie.setVisible(true);
/**
* Termómetro compensado
*/
org.jdesktop.layout.GroupLayout graficaLayout = new
org.jdesktop.layout.GroupLayout(panel.grafica);
panel.grafica.setLayout(graficaLayout);
graficaLayout.setHorizontalGroup(
graficaLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).ad
d(graficaLayout.createSequentialGroup().addContainerGap().add(termo_c,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 148,
Short.MAX_VALUE).addContainerGap()));
graficaLayout.setVerticalGroup(
graficaLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).ad
d(graficaLayout.createSequentialGroup().addContainerGap().add(termo_c).addCo
ntainerGap(183, Short.MAX_VALUE)));
/**
68
* Termómetro sin compensar
*/
org.jdesktop.layout.GroupLayout grafica1Layout = new
org.jdesktop.layout.GroupLayout(panel.grafica1);
panel.grafica1.setLayout(grafica1Layout);
grafica1Layout.setHorizontalGroup(
grafica1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).a
dd(grafica1Layout.createSequentialGroup().addContainerGap().add(termo_s,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 148,
Short.MAX_VALUE).addContainerGap()));
grafica1Layout.setVerticalGroup(
grafica1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).a
dd(grafica1Layout.createSequentialGroup().addContainerGap().add(termo_s).add
ContainerGap(183, Short.MAX_VALUE)));
panel.grafica.setVisible(true);
panel.grafica1.setVisible(true);
/**
* Calcula la temperatura real de la termocupla aplicando los polinomios de
conversión de punta fría
* @param Vt Voltaje de la termocupla
* @param T_LM Temperatura en el extremo frío de la termocupla la cual es
sensada por el LM35
69
*/
public void Calcular(double Vt, double T_LM) {
double V_T_TEMP;
V_LM = C0 + C1 * T_LM + C2 * Math.pow(T_LM, 2) + C3 * Math.pow(T_LM,
3) + C4 * Math.pow(T_LM, 4);
V_TOTAL = (V_LM * 1E-03) + Vt;
V_TOTAL = V_TOTAL * 1E+03;
V_T_TEMP = Vt * 1E+03;
T_TOTAL = A0 + A1 * V_TOTAL + A2 * Math.pow(V_TOTAL, 2) + A3 *
Math.pow(V_TOTAL, 3) + A4 * Math.pow(V_TOTAL, 4);
T_MEDIDA = A0 + A1 * V_T_TEMP + A2 * Math.pow(V_T_TEMP, 2) + A3 *
Math.pow(V_T_TEMP, 3) + A4 * Math.pow(V_TOTAL, 4);
temperaturaC += T_TOTAL;
temperaturaS += T_MEDIDA;
acumuladorTemp++;
if (acumuladorTemp == 4) {
acumuladorTemp = 0;
temperaturaC = temperaturaC / 4;
temperaturaS = temperaturaS / 4;
termo_c.setValue(temperaturaC);
termo_s.setValue(temperaturaS);
70
temperaturaC = 0;
temperaturaS = 0;
}
contadorSQL++;
if (contadorSQL == 10) {
contadorSQL = 0;
dataBase mysql = new dataBase();
mysql.conectar();
try {
mysql.guardarDatos("INSERT INTO historial (v_termocupla, t_lm35,
temp_calculada, temp_medida, fecha) VALUES ('" + Vt + "', '" + T_LM + "', '" +
T_TOTAL + "', '" + T_MEDIDA + "', now())");
mysql.desconectar();
} catch (SQLException e) {
}
}
}
}
71
ackage correctorpf;
import java.awt.BorderLayout;
import java.awt.Color;
import java.text.DecimalFormat;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.JThermometer;
import org.jfree.chart.plot.MeterPlot;
import org.jfree.data.general.DefaultValueDataset;
/**
*
* @author Jorge González
* @author Obeymar Santana
*/
public class Termometro extends JPanel {
/**
* Conjunto de datos
*/
private DefaultValueDataset data = new DefaultValueDataset(0.0);
/**
* Trama del medidor
*/
private MeterPlot meterplot = new MeterPlot(this.data);
72
/**
* Gráfica del medidor
*/
private JFreeChart meterchart = new JFreeChart("Termómetro",
JFreeChart.DEFAULT_TITLE_FONT, this.meterplot, false);
/**
* Diseño del borde
*/
private BorderLayout borderLayout1 = new BorderLayout();
/**
* Panel del medidor
*/
private ChartPanel panelMeter = new ChartPanel(this.meterchart);
/**
* Panel 1
*/
private JPanel jpanel1 = new JPanel();
/**
* Termómetro 1
*/
public JThermometer thermo1 = new JThermometer();
/**
* Constructor de la clase
*/
public Termometro() {
73
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Inisializa la clase
* @throws java.lang.Exception
*/
void jbInit() throws Exception {
this.thermo1.setValue(0.0);
this.thermo1.setOutlinePaint(null);
this.thermo1.setUnits(2);
this.thermo1.setShowValueLines(true);
this.thermo1.setFollowDataInSubranges(true);
this.thermo1.setForeground(Color.BLUE);
this.thermo1.setRange(0.0, 500.0);
this.thermo1.setSubrangeInfo(0, 000.0, 100.0, 0.0, 500.0);
this.thermo1.setSubrangeInfo(1, 100.0, 200.0, 0.0, 500.0);
this.thermo1.setSubrangeInfo(2, 200.0, 300.0, 0.0, 500.0);
this.thermo1.setSubrangeInfo(3, 300.0, 400.0, 0.0, 500.0);
this.thermo1.setSubrangeInfo(4, 400.0, 500.0, 0.0, 500.0);
// this.thermo1.addSubtitle("Temperatura Compensada");
this.thermo1.setValueFormat(new DecimalFormat("0.0"));
this.jpanel1.setLayout(this.borderLayout1);
this.jpanel1.add(this.thermo1, BorderLayout.CENTER);
add(this.jpanel1, null);
}
74
/**
* Marca la temperatura del termómetro dado
* @param value
*/
public void setValue(final double value) {
try {
this.thermo1.setValue(value);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Marcar el valor de medida
* @param value
*/
public void setMeterValue(final double value) {
try {
double newValue = value;
if (this.data.getValue() != null) {
newValue += this.data.getValue().doubleValue();
}
this.data.setValue(new Double(newValue));
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
75