Conversion bits a grados Celsius

Hola comunidad!!

Aunque el título puede resultar de respuesta inmediata, es algo más complejo que del típico LM35 con su gráfica temp-volt que es muy lineal.

Estoy trabajando con un sensor de temperatura infrarrojo ZTP135RS cuya gráfica relación Temperatura-voltaje NO es lineal, sino curva. Muestro el datasheet:
https://www.alliedelec.com/m/d/9fa458adb9114ab6a505eed592be56aa.pdf

El problema es a la hora de la conversión porque cómo dice el datasheet, la sensibilidad de la termopila es de -0.10%/ºC y no tengo idea de como obtener solo los grados después de pasarlo por el convertidor ADC del microcontrolador.

Sugerencias?
 
a) Implementas en el microcontrolador la fórmula que indique el datasheet.
b)Haces una tabla de conversión que para la lectura x te devuelva el valor de 5temperatura y
c)Si el rango de temperaturas que vas a medir es pequeño aproximas ese trozo de la curva a una recta.

A elegir, la a ocupa menos y tarda más. La b tarda menos y ocupa más .
Tu mismo.
 
La curva tiene forma de función gaussiana, así que la función es algo complicada. Lo normal es que viniera en el documento.

Me sale algo parecido a 1*exp(-(x-0)^2/(2*25^2)), pero hay que afinar un poco más.
 
Última edición por un moderador:
Pues leyendo parece que lleva dos sensores, uno interno con una termoresistencia para compensar la temperatura ambiente y uno IR para leer la temperatura sin contacto. No es tan sencillo.
La función gaussiana es la normalizada.
Yo buscaría hojas de aplicación paro así a bulto me parece que eso no va a ir así sin mas a una pata de un pin AD
Ese me parece el "datasheet corto", suele haber uno mas extenso en el que se dan mas detalles.
 
chicos, gracias por responder.

Mientras esperaba a la respuesta de por aquí seguí dandole al coco.
Yo pensé primeramente en sacar la función de la gráfica, después me pregunté "¿Por qué la empresa pone todo esos datos y no pone la función de la gráfica?" osea, los clientes no se vana romper la cabeza sacando la función, ¿verdad? no creo que sea algo tan enreversedo.

También pensé en hacer la opción b) que decía scooter, pero vuelta a lo mismo.


Entonces mi solución sería la siguiente: al principio no usaba el termistor, porque pensaba en no utilizarlo. Yo quiero medir el cuerpo humano, ¿para qué querría yo saber la temperatura ambiente? Pero el caso es que para conocer la temperatura de los objetos es muy necesario saber la temperatura ambiente por un rollo físico que no voy a explicar, porque es extensísimo.

Entonces, ¿que tengo? Pues tengo un circuito con amplificadores operacionales; uno para la termopila y otro para el termistor. Por lo que tengo una serie de formulas matematicas que me relaciona temperatura ambiente con la temperatura del objeto. Ideal para meterlo en mi codigo del microcontrolador.
En mi microcontrolador, tengo conectado esos dos sensores (termopila y termistor). Para trabajar con la termopila, antes necesito pasar por el sensor del termistor, asi que me pongo a trabajar paso por paso con el termistor. Lo conecto al micro y escribo el siguiente código:

Código:
const int numeroSamples = 5;
const float Vdd = 3.3;

float voltios;

int indice;
int valorTermistor;
int valorMedio;


float leerTermistor(){
    
    indice = 0;
    valorTermistor = 0;
    while(indice < numeroSamples){
        ADCSC1_ADCH = 0;                //Selecciona el canal adc
        while(ADCSC1_COCO == 0);        //se pone a 1 cuando ha termina de leer señal analogica
        valorTermistor += ADCR;            //se van sumando los valores para realizar una media
        indice++;
    }
    
    valorMedio = valorTermistor / numeroSamples;    //se realiza la media
    
    //conversion de bit a voltios
    
    Voltios = (float) (valorMedio * Vdd/1024 * 1000);           
}


De momento hasta ahí. Este trozo que es la conversion A/D, tengo una serie de dudas:
En primer lugar yo he puesto que Vdd es 3.3v porque el micro esta funcionando a 3.3v, pero la señal de termistor/termopila tiene una salida de ente 0-5v. ¿Estas diferencias daría igual o ambos elementos tienen que trabajar con los mismo valores?

La otra duda es que cuando represento "voltios" por un lcd, el valor me sale muy distinto a cuando mido con el multimetro.

y ya aqui estoy perdido =S
 
Me parece que necesitas el datasheet "extenso"... Me parece.

Si no recuerdo mal tienes un termostato que eso ya sabemos para que vale, para corregir el otro, y un fotodiodof IR que es el que vale para medir la temperatura.
Los fotodiodos en general se pueden usar de dos modos, como sensores resistivos y como sensores generadores y en este caso, yo juraría que vas a tener que usar el segundo caso.
Para usarlo como sensor generador necesitarás un amplificador de instrumentación o al menos un operacional en configuración diferencial, y alguna etapa de amplificación más. No podrás medir directamente por las impedancias. El polímetero tiene varios MΩ de impedancia de entrada mientras que el pin del AD tiene algunos kΩ y con esa impedancia tumbas la señal.

Eso es lo que me imagino, yo he usado fotodiodos para hacer pulsioximetros en esa configuración porque es mucho más fiable que en forma de sensor resistivo, aunque más complicada de tratar la señal.

Por eso te digo que creo que necesitas el datasheet extenso y/o una nota de aplicación.
En ese datasheet me parece que hablaba de otro documento en el que se describen los filtros necesarios.
 
ya scooter, hubo un momento que estaba buscando un datasheet mas extenso precisamente, pero buscar y buscar no encontré nada. Y lo mismo, si n la página del vendedor no está el datasheet.... Si no lo hay ahí.. =S De todas formas les voy a escribir un correo.


Construí un acondicionamiento para la termopila con el AD8626 con una ganancia de 1000 y bueno, al pasarlo por el osciloscopio y experimentar con él, tenía sentido su funcionamiento. Pasaba la mano por encima y respondia la señal con un aumento de voltaje cuando lo tenia sobre el sensor.
El sensor termistor, simplemente es un divisor de tension y luego se le pasa una configuracion seguidor de tension.
 
Acabo de mirar el datasheet del ad8626, pero no indicas cómo lo has conectado.
Yo lo pondría como diferencial a ver qué pasa.
Luego que sí lo alimentas con alimentación simple el 0 son 2,5V lo cuál sería en el conversor, si es de 10 bits 512 y sobre ese valor se movería la medida.
Aunque sea rail yo rail algo se pierde en los extremos y poner la entrada no diferencial con unos mV de señal pegados al 0V seguramente distorsione. Hace años "solucioné" eso poniendo una masa a 0,7V con un simple diodo, eso era el 0
 
https://core.ac.uk/download/pdf/30046656.pdf basicamente segui este pdf y ya. igualito igualito. Ahí explica el desarrollo físico del infrarrojo como se relaciona los dos sensores etc etc.

Interesante dato a tener en cuanto eso del diodo. No se si en mi sistema hará falta, intuyo que el amplificador ira oscilando en torno a 36-40 grados mas o menos (lo normal en un cuerpo humano)
Aunque no entendí eso de alimetnacion simple, ademas ¿2^10 = 1024?
 
Si, es 1024. La mitad 512.
Si usas un amplificador diferencial y la entrada es 0 se queda a mitad de VCC, osea que cuando lees 0V el conversor dará 512 o 511 si agnd y aref están a 0 y +5V, claro.
 
Pues he leído la tesis y no entiendo cómo va ese circuito acondicionador. No digo que esté mal, digo que no lo entiendo.
Yo haría un amplificador diferencial "normal" con no mucha ganancia, ese integrado no tiene ajuste de offset y con ganancias grandes eso importa mucho, puede saturar o distorsionar mucho.
La configuración diferencial aporta la ventaja de que elimina muchos ruidos "per se" y te.ahorras filtros o los reduces.
 
Hombre, lo del offset, era que este amplificador tienen offset en torno a pocos microV, luego si lo amplificas por mil pues seran miliV. Si quiero amplificar 2mV que me genera la termopila a lo mejor en la salida del AD8626 voy a tener 2.0002V, luego... bué, no creo que sea necesario regular 2mV por arriba o por abajo. Precisamente AD8626 son amplificadores de precision.
 
Atrás
Arriba