TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: WALTER ALEJANDRO en 15 de Enero de 2023, 15:54:06
-
hola,quisiera saber si alguieen encuentra xq no me funciona la lectura de temperatura
este es el codigo
#define CONFIG = 0x3f50
AllDigital
TRISA = 0
TRISB = 0
TRISB.3 = 1
Define SPI_CS_REG = PORTB
Define SPI_CS_BIT = 5
Define SPI_SCK_REG = PORTB
Define SPI_SCK_BIT = 4
Define SPI_SDI_REG = PORTB
Define SPI_SDI_BIT = 3
Define SPI_SDO_REG = PORTB
Define SPI_SDO_BIT = 2
'Define SPICS_INVERT = 1
Define SPICLOCK_STRETCH = 0 '0 es maxima velocidad asi son menos de 25us cada byte enviado a 4mhz
SPIPrepare
Dim mostrar As Word
Dim salida As Byte
Dim salidabaja As Byte
Define LCD_BITS = 4
Define LCD_DREG = RA
Define LCD_DBIT = 0
Define LCD_RSREG = RA
Define LCD_RSBIT = 6
Define LCD_EREG = RA
Define LCD_EBIT = 7
Define LCD_DATAUS = 100
Define LCD_COMMANDUS = 500
Define LCD_INITMS = 100
Lcdinit 0
'WaitMs 500
inicio:
Lcdcmdout LcdLine1Home
Lcdout " ", #mostrar, " "
Lcdcmdout LcdLine2Home
Lcdout " ", #salidabaja, " ", #salida
WaitMs 250
Lcdcmdout LcdClear
SPICSOn
SPIReceive salidabaja 'gurardo primero los 8 de la parte baja
SPIReceive salida 'ysigo con lla parte alta
SPICSOff
salida.7 = 0 'salida.7 es el bit 15 de la palabra transmitida
salidabaja.0 = 0 'son los primeros dos bits que son ceros
salidabaja.1 = 0
salidabaja.2 = 0 'este indica si la termocupla esta abierta, 1 mal, 0 bien
mostrar.LB = salidabaja
mostrar.HB = salida
mostrar = ShiftRight(mostrar, 3)'roto tres posiciones para usar solo los 12 bits de la conversion
Goto inicio
End
desde ya muchas gracias
-
bueno, por si alguien encontro algo, estaba mal la lectura de los bytes, primero lee el alto y despues el bajo
ahora tengo el problema de como linealizar la temperatura.....algua idea?
gracias
-
bueno, por si alguien encontro algo, estaba mal la lectura de los bytes, primero lee el alto y despues el bajo
ahora tengo el problema de como linealizar la temperatura.....algua idea?
Se corrige con una tabla.
Aunque también hay curvas polinómicas, el NIST tiene tablas con los coeficientes (Googleá NIST thermocouple equations). Pero no sé que grado de coincidencia tendrán con las tablas "de toda la vida", pues éstas no están hechas partiendo de mediciones grado por grado sino con puntos bastante separados que aproximan por parábolas.
La pregunta es: ¿Necesitás hacer corrección?
En una tipo K:
- Por debajo de 150° el error es < 1°C
- Hasta 400° el error es < 3°C
- Hasta 1200° el error es < 10°C
Además, en temperaturas altas la sonda tiene sus pegas. Pues los alambres deben tener aisladores cerámicos pues los plásticos ya no van (250°C con teflón)
-
bueno, por si alguien encontro algo, estaba mal la lectura de los bytes, primero lee el alto y despues el bajo
ahora tengo el problema de como linealizar la temperatura.....algua idea?
gracias
Lo que deberías indicar que es lo que obtienes (Curva medida) y que es lo que deseas obtener para determinar que corrección se debe aplicar.
-
hice lo siguiente:trabaje sin decimales, el resultado lo multiplique por 0.25 y le reste 6 grados , esos 6 grados es el offset de la medicion segun el fabricante, hice la comprobacion con una termocupla y un termometro digital y siempre me mantuvo esos 6 grados de diferencia
por lo tanto asumi que ese era el error, ahora me queda comprobarlo con temperaturas mayores a 200 grados pero para eso tendre que esperar que alguna maquina de las que trabajo se rompa para poder instalarlo
avisare en su momento
gracias x su dedicacion y tiempo
-
hice lo siguiente:trabaje sin decimales, el resultado lo multiplique por 0.25 y le reste 6 grados , esos 6 grados es el offset de la medicion segun el fabricante, hice la comprobacion con una termocupla y un termometro digital y siempre me mantuvo esos 6 grados de diferencia
por lo tanto asumi que ese era el error, ahora me queda comprobarlo con temperaturas mayores a 200 grados pero para eso tendre que esperar que alguna maquina de las que trabajo se rompa para poder instalarlo
avisare en su momento
gracias x su dedicacion y tiempo
No encuentro eso del offset que mencionas del fabricante.
Lo que muestra en las hojas de datos es que el voltaje que el ADC interno del circuito integrado mide, es proporcional a la diferencia de temperatura entre la termocupla y la temperatura ambiente:
(https://pbs.twimg.com/media/FmsoeJgWYAASsS_?format=png&name=small)
Por lo tanto para conocer la temperatura de la unión del termopar, debes conocer la temperatura ambiente, y eso suele hacerse con otro sensor, o asumir que es constante, obviamente no lo es y no considerarlo, genera un error.
-
hice lo siguiente:trabaje sin decimales, el resultado lo multiplique por 0.25 y le reste 6 grados , esos 6 grados es el offset de la medicion segun el fabricante, hice la comprobacion con una termocupla y un termometro digital y siempre me mantuvo esos 6 grados de diferencia
por lo tanto asumi que ese era el error, ahora me queda comprobarlo con temperaturas mayores a 200 grados pero para eso tendre que esperar que alguna maquina de las que trabajo se rompa para poder instalarlo
avisare en su momento
gracias x su dedicacion y tiempo
No encuentro eso del offset que mencionas del fabricante.
Lo que muestra en las hojas de datos es que el voltaje que el ADC interno del circuito integrado mide, es proporcional a la diferencia de temperatura entre la termocupla y la temperatura ambiente:
(https://pbs.twimg.com/media/FmsoeJgWYAASsS_?format=png&name=small)
Por lo tanto para conocer la temperatura de la unión del termopar, debes conocer la temperatura ambiente, y eso suele hacerse con otro sensor, o asumir que es constante, obviamente no lo es y no considerarlo, genera un error.
Estaba leyendo nuevamente las hojas de datos del circuito integrado, y veo que ya tiene un sensor de temperatura interno a base de un diodo (para medir la temperatura ambiente para compensar la lectura en el termo par). Así que no es necesario otro sensor.
Ahora bien, la lectura obtenida digital del ADC indica que 0 es 0 grados centígrados y 4095 es 1023.75 grados centígrados.
(https://pbs.twimg.com/media/FmwmuyeXoAEfGd5?format=png&name=small)
Por lo tanto cada bit equivale a 1023.75/4096 = 0.2499 (ese es el 0.25 que has explicado) y ese valor se debe multiplicar por el valor leído del ADC para conocer la temperatura en la termocupla. No entiendo porque necesitas sumar un desplazamiento de 6 como mencionas.