Autor Tema: Conversion bits a grados Celsius  (Leído 7182 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kotito

  • PIC10
  • *
  • Mensajes: 29
Conversion bits a grados Celsius
« en: 22 de Agosto de 2019, 04:57:47 »
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 como 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?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Conversion bits a grados Celsius
« Respuesta #1 en: 22 de Agosto de 2019, 06:39:36 »
Podes usar el Excel. Busca "Linea de tendencia" por google.

Vas a ver que es casi logaritmica la linea.
-24.1 * ln(x) + 139

Donde x es la entrada en ohms...

Con esa formula. tenes que el maximo error es de 6º para los -20ºC, y 5º para los 100ºC... Obviamente vas a tener que ver si te conviene hacer funciones lineales por tramos en ves de una sola.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #2 en: 22 de Agosto de 2019, 06:39:44 »
Te recomiendo un polinomio interpolador.

He tomado 3 valores:
X Volts     Y Temp
-3.0mV     0ºC
0.8mV     30ºC
6.0mV     60ºC

Y los he metido en mi hoja excel para interpolar:
https://www.todopic.com.ar/foros/index.php?topic=43336.msg388935#msg388935

El resultado es:
Y = 2,425E+01 + X*(7,375E+00 + X * -2,362E-01)
Y = 24,25 + X*(7,375 + X * -0,2362)
Un saludo.
« Última modificación: 22 de Agosto de 2019, 06:42:39 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #3 en: 22 de Agosto de 2019, 07:06:58 »
Me he equivocado y he tomado la curva de sensibilidad en vez de la resistencia.

Lo vuelvo a intentar.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #4 en: 22 de Agosto de 2019, 07:15:54 »
Voy a tomar como X los valores del logarítmo de la resistencia y como Y el valor de temperatura:

Ln(524)     -10º
Ln(53.15)   40º
Ln(8.75)     90º

La fórmula es:
X = Ln(Resistencia en kohm)
Y(temp) = 162,47 + X*(-36,519 + X * 1,4333)

Un saludo.

PD:
El error máximo es de 0.5ºC. Eso puedes minimizarlo utilizando 4 puntos para interpolar. 
En la última hoja del excel tienes una herramienta para calcular los puntos óptimos de temperatura para interpolar. Utiliza los que no tienen extremos, son más exactos.

Tendrás que ajustar el polinomio a tus valores reales exactos de resistencia.
« Última modificación: 22 de Agosto de 2019, 09:00:05 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #5 en: 22 de Agosto de 2019, 12:25:11 »
Pero en la práctica lo que tendrás que hacer con el termistor es un divisor de tensión con 50kohm debajo y el termistor arriba, conectado a 5V. Esto linealiza su respuesta bastante y no es necesario calcular el logaritmo, solo un polinomio de grado 3 relacionando la tensión en el punto medio con la temperatura.


Para el sensor IR tendrás que amplificar la tensión y aplicar un polinomio de grado 3 como el que puse arriba, pero con los valores leidos por el ADC.

Saludos.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Conversion bits a grados Celsius
« Respuesta #6 en: 22 de Agosto de 2019, 13:41:36 »
...
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 como 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?

Sugerencias? 

- Definir el rango de temperaturas de interés y el error tolerable sin ser muy ambicioso. 

¿Por que?  Porque si el rango chico y el error tolerable de 1/2 grado no hace falta linealizar nada, solamente compensar por temperatura ambiente.

En cambio, si el rango es amplio y el error bajo,  habrá que hacer una corrección polinomial e implementar una rutina de calibración con muchos puntos de control (== bolonki).  Pues no tenés valores precisos de tension_pila vs temperatura.
Como si fuera poco, para temperatura de referencia tiene un termistor, cuya salida en fuertemente no lineal.


Con la última opción el problema se divide en dos:

1- Lectura de los valores crudos de tensión_pila y resistencia_termistor para diferentes temperaturas --> Hace falta un termómetro de referencia.

2- Con esos datos, calcular con Excel o el software que te guste los coeficientes de los polinomios de ajuste.

Si te comés la primer etapa, o sea, metés los valores que  parece tener la gráfica, a la hora de medir temperatura vas a tener un error mucho mas grande del que imaginás. Haciendo que no tenga sentido tanta complicación en la corrección.


Desconectado kotito

  • PIC10
  • *
  • Mensajes: 29
Re:Conversion bits a grados Celsius
« Respuesta #7 en: 23 de Agosto de 2019, 02:42:19 »
Gracias chicos por la respuesta, especialmente a picuino, por molestarse en sacarme hasta una función. =)


Pues al final llegué a la conclusión de que el termistor lo tengo que utilizar. Lo que yo quiero hacer es medir temperatura corporal a base de infrarrojo, que por lo visto para saber la temperatura de las cosas hay un rollo físico y matemático detrás con un montón de formulita que me relaciona Temperatura ambiente con temperatura del objeto. Osea, que necesito meter dos sensores sí o sí.

Mi situacion es la siguiente: tengo un circuito acondicionador para ambos sensores con un rango de salida de 0 a 5v. Mi uControlador está a 3.3v de funcionamiento. Mi primera pregunta es: ¿estos dos valores distintos lo podría dejar asi o tengo que hacer que ambos sistemas funcione a la misma tensión de 5v?


Por otro lado, yo me puse a trabajar en el código paso por paso, mi idea es medir el termistor primeramente (porque lo necesito antes que la termopila) y mostrar por pantalla la tensión. De momento hasta ahí. Mi código es el siguiente:

Código: [Seleccionar]
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);           
}


Realmente no me muestra "voltios" con la lectura que hace el tester cuando mido tensión en las patillas. y ya hasta este punto es donde estoy atascado =S

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #8 en: 23 de Agosto de 2019, 05:27:15 »
Pero esa ecuación no te vale, era un ejemplo. No vale porque no tiene en cuenta el acondicionador ni el ADC de tu microcontrolador.

¿Cómo es el circuito del acondicionador?
« Última modificación: 23 de Agosto de 2019, 05:49:45 por Picuino »

Desconectado kotito

  • PIC10
  • *
  • Mensajes: 29
Re:Conversion bits a grados Celsius
« Respuesta #9 en: 23 de Agosto de 2019, 08:56:19 »
https://core.ac.uk/download/pdf/30046656.pdf ---> he partido de aquí. En la pagina 25, se muestra el circuito acondicionador.


Hasta ahora, ya he conseguido mostrar el valor de la tension del termistor y el valor de la resistencia del termistor.

Poco a poco voy consiguiendo =)

Sigo teniendo la duda de los voltajes. Mi acondicionamiento esta entre 0 y 5 voltios mientras que el micro lo tengo a 3.3v. ¿Pasa algo? No se si a la hora de hacer la conversion A/D, se pierde algo =S

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #10 en: 23 de Agosto de 2019, 10:51:45 »
1. La resistencia de polarización es demasiado alta. Yo pondría una de 100k. La linealidad es óptima en un rango en torno a los 25ºC y las no linealidades las vas a compensar con ecuaciones.

2. No necesitas el operacional, puedes conectar el punto medio directamente a un ADC. Si tiene desviación, luego la vas a compensar con las ecuaciones.

3. Si utilizas un micro a 3.3V yo polarizaría la resistencia con 3.3V. Es lo más sencillo.

4. ¿Cuantos bits tiene el ADC 10 ó 12?

5. Falta saber cómo es el acondicionador del sensor IR

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #11 en: 23 de Agosto de 2019, 10:57:19 »
Como comentó Eduardo2, necesitarás un termometro de referencia y una cámara climática o algo semejante para poder realizar la calibración de los dos sensores. En caso contrario vas a tener mucho error. Ten en cuenta que para medir la temperatura de la piel es necesario tener mucha precisión, del orden de décimas de grado.

Un saludo.

Desconectado kotito

  • PIC10
  • *
  • Mensajes: 29
Re:Conversion bits a grados Celsius
« Respuesta #12 en: 24 de Agosto de 2019, 07:38:11 »
Los sistemas de referencias las dispongo, de eso no es problema =)

Me ha dejado un poco loco con esos puntos picuino xD Aver.


1.Yo pensaba que era indiferente este valor, porque luego tienes la Rth que está compensando sus resistencia con respecto a la Temperatura ambiente y te da una cierta salida en voltaje. =S No entiendo por qué tocar este valor exactamente

2. Mantuve el seguidor de tensión como forma de asegurar una señal limpia hacia el uControlador. Total, mi AD8626 tiene dos Amp.Op y la he querido aprovechar.

3. ¿y tener el sensor termopila trabajando a 5 y el termistor a 3.3? De todas formas, como comparten el mismo AD8626, sería que ambos sensores trabajen a 3.3v

4. puedo elegir entre 8, 10 y 12. De momento lo he puesto en 10 bits, lo mas probable que lo cambie a 12

5. En el pdf, en la página siguiente está la termopila



gracias picnuino por tus respuesta, lo aprecio mucho =)

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Conversion bits a grados Celsius
« Respuesta #13 en: 24 de Agosto de 2019, 08:41:59 »
1. No es indiferente. El divisor será más lineal alrededor del valor medio (Rth = R_polarización). En el caso de elegir R_polarización = 100kOhm, el valor medio se conseguirá a 25ºC

3. La termopila no trabaja a 5V, simplemente te da unos pocos milivoltios que luego tienes que amplificar. Los dos pueden  trabajar con un operacional alimentado a 5V o a  3.3V, lo importante es que el operacional no suministre más de 3.3V al micro.

4. Entonces te recomiendo un paso intermedio en tu programa que será pasar de puntos de ADC a voltios y a partir de ahí trabajas siempre con voltios del ADC y no importa que cambies la tensión de referencia o los bits del ADC, tu programa será el mismo y las ecuaciones también.

5. Ese circuito no te vale porque está diseñado para generar una señal de 0 a 5V y tú necesitas una señal de 0 a 3.3V
« Última modificación: 24 de Agosto de 2019, 08:44:13 por Picuino »

Desconectado kotito

  • PIC10
  • *
  • Mensajes: 29
Re:Conversion bits a grados Celsius
« Respuesta #14 en: 25 de Agosto de 2019, 07:48:40 »
vale vale, amigo  :)


Sobre el punto 1, ok. Lo he entendido. Recuerdo que mi sensor es para medir temperatura corporal, luego me conviene que el valor medio sea mayor de 25ºC, ¿no?  :?

En las pruebas que hice del osciloscopio, el sensor respondía cuando ponia la mano encima y la quitaba o cuando ponía mi café recién hecho por encima. Los resultados que veía por el osciloscopio (con la sonda puesta en la salida del amplificador) se mostraba una tensión máxima de 5v y eso iba después al micro de 3.3v

Vale, estos cambios será fácil de hacer. Estudiaré un poco con los nuevos valores y a ver como responde.

Corrígeme si me equivoco, ¿también tengo que cambiar el divisor de tensión que va a la termopila? Ahora lo tengo a 2V, pero lo podría bajar a 1V. Pensaba hacerlo también.