TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: Picuino en 31 de Agosto de 2014, 18:59:08

Título: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 31 de Agosto de 2014, 18:59:08
He estado estudiando la forma de medir temperaturas con una resistencia NTC
Quiero obtener la máxima precisión y linealidad en el rango de 10 a 40 grados centígrados con un circuito muy sencillo.

El circuito que se utilizará para polarizar la resistencia NTC es el siguiente:


                            R1                    NTC
   (+5V)----------[====]-----o-----[====]-------------(GND)
                                           |
                                           |_________________ Vout



La salida Vout irá conectada a la entrada de un conversor Analógico-Digital de un microcontrolador.


Valor nominal de la resistencia NTC
He escogido para la NTC un valor nominal a 25ºC de 10k ohm porque es un buen valor de compromiso:
   Si la resistencia es más baja, la corriente aumenta y la resistencia NTC se calienta con la corriente de polarización, con lo cual pierde precisión.
   Si la resistencia es más alta, la impedancia de Vout aumenta mucho y el error de lectura del ADC aumenta, perdiendo también precisión.



Valor de la resistencia NTC con la temperatura

He utilizado para los cálculos la fórmula de la resistencia NTC, con los parámetros del fabricante:


    R_ntc =   R_ntc_25 * exp( A + B / T + C / T^2 + D / T^3)


    Las constantes, según el fabricante, son:

    R_ntc_25  = 10000 ohms                  Resistencia a 25 grados
    A = -10,2296
    B = 2887,62
    C = 132336
    D = -25025100

La letra T representa la temperatura en grados kelvin, según la fórmula:

    T = ºC + 273.15



Valor nominal de R1
Ahora el problema es conseguir un valor de R1 que optimice la linealidad y resolución en un rango de 10ºC a 40ºC

He introducido todos los datos en una hoja de cálculo con un gráfico y he probado varias resistencias de polarización (R1) hasta llegar al valor estandar de 6800 ohmios.
El resultado es la gráfica que adjunto.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22491)

El eje X es la temperatura.
En la gráfica se puede ver en color azul el valor de tensión de salida (Vout). Esta va bajando a medida que la temperatura aumenta.
En color magenta se puede ver los puntos del conversor ADC que cambian con cada grado de temperatura (para una resolución de 10bits) .
Se puede ver cómo en el rango 15-35ºC la resolución se maximiza y se consiguen 8 puntos por grado ºC. Dicho de otra manera, se consigue una resolución de 1/8 = 0.125ºC
Con un conversor ADC de 12bits, se podría llegar a una resolución de 0.031ºC, que es un valor bastante bueno.

Otra ventaja de este valor de R1 consiste en que la gráfica es lo más lineal posible en este rango de temperaturas (10º - 40º).



Circuito final
Para conseguir estas curvas, el valor de R1 es de 6800 ohmios, y el circuito final es:


                          6800                NTC 10k
   (+5V)----------[====]-----o-----[====]-------------(GND)
                                           |
                                           |_________________ Vout



   He escogido a propósito un valor estandar para R1, para que sea más sencillo de encontrar y más barato.
   El valor realmente óptimo para R1 es 7157 que no se puede encontrar en tiendas y, además, depende de la variación de los parámetros de la resistencia NTC
   Es recomendable utilizar una resistencia del 1% con una deriva térmica de +-100ppm para minimizar las desviaciones.



Mejorar la precisión
Una vez conseguida la resolución y la máxima linealidad, para conseguir exactitud es necesario comparar la salida de tensión con un termómetro calibrado y:
   1.- Corregir la linealidad. Se puede conseguir con bastante precisión con una corrección cuadrática (polinomio de segundo grado)
   2.- Ajustar el offset. La desviación con el tiempo del circuito es bastante baja. Una vez corregido el Offset, la precisión se mantendrá bastante tiempo.

En mi caso sólo necesito resolución y no me hace falta precisión, de manera que el montaje tal y como está es suficiente.
El circuito me servirá para compensar la frecuencia de un oscilador a cuarzo, de manera que utilizaré una tabla (LUT) para corregir la frecuencia cierta cantidad en función de la temperatura medida.
Sólo tengo que cambiar la temperatura y medir la tensión Vout y la frecuencia real. En la tabla introduciré para cada Vout la compensación de frecuencia.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: MerLiNz en 31 de Agosto de 2014, 20:43:36
Para esa temperatura no te sale mejor usar un IC dedicado a este fin del tipo 5V-S-GND ??

Hace poco encontre uno muy interesante AD22100 echale un vistazo.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: micro_pepe en 31 de Agosto de 2014, 20:46:01
Excelente explicación  ((:-)) ((:-))

Por curiosidad, como compensarás la frecuencia, con un varicap?

Espero que puedas publicar el circuito final.

Un saludo!!
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 04:05:10
En realidad quiero compensar la frecuencia a un OCXO que tiene una entrada de tensión para el control de frecuencia (ya lleva un cto interno que la cambia).

Si tuviera que hacerlo en un cristal normal, se puede compensar sin necesidad de cambiar la frecuencia del cristal, numéricamente.
Por ejemplo, los relojes utilizan cristales de 32768Hz, pero esta frecuencia no es exacta.
Si un reloj resulta tener un cuarzo con frecuencia media de 32770.8Hz, el circuito interno puede mover la aguja de los segundos cada 32771 pulsos (durante 4 segundos) y por último mueve la aguja contando 32770 pulsos.
La media será de un segundo cada 32770.8 Hz (error de 3ppm, 8 segundos al mes) No hace falta que el cristal sea muy exacto, sólo es necesario que sea estable y contar bien.

Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 04:36:38
Para esa temperatura no te sale mejor usar un IC dedicado a este fin del tipo 5V-S-GND ??

Hace poco encontre uno muy interesante AD22100 echale un vistazo.

Había considerado otros chips de Analog Devices que te dan directamente la temperatura por SPI, pero este no lo conocía.
Conozco los LM35 (y tengo algunos samples por ahí guardados)

Estos chips tienen la ventaja de darte la temperatura de forma lineal.
Por otro lado tienen varias desventajas:

El problema de estos chips es que dan un rango muy grande de temperaturas, de forma que la salida de tensión varía poco con la temperatura.
    En el caso del LM35 sólo varía 10mV cada grado.
    El AD22100 veo que es mucho mejor, 22.5mV cada grado.
    La resistencia NTC da la mejor sensibilidad, varía 40 mV cada grado en el rango 15-35ºC. Es el doble de sensible en este rango que el anterior.

Otro problema es el precio:
   El AD22100KTZ  cuesta 3 Euros en Mouser
   El LM35 cuesta 1.26 Euros en Mouser
   Una resistencia NTC de 10k cuesta 0.09 Euros en formato smd y 0.28 Euros en formato through-hole radial (ambos en Mouser)


Desde luego con los samples de TI o de Analog Devices, el precio es de cero, pero quería estudiar la opción para comprar más barata.


En realidad, sí quería comparar el circuito final con un buen termómetro.
Utilizaré para eso el circuito ADT7410 (http://www.analog.com/en/mems-sensors/digital-temperature-sensors/adt7410/products/product.html): resolución de 0.008 ºC, máximo error de 0.050ºC a 25ºC, 2.82 Euros en Mouser (gratis como sample)
No me gustan este tipo de circuitos porque, al ser SMD, creo que miden la temperatura de la PCB más que la temperatura del aire, y en mi caso la PCB estará calentada por un regulador de tensión.
Voy a utilizar para el circuito de prueba una PCB que tengo de 0.5mm de grosor, para montar el circuito casi en el aire (en una tira muy estrecha)


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 04:59:05
Estoy comprobando el Datasheet del ADT7410 y tiene una precisión (Accuracy) de +-0.1 grado centigrado a 4Vcc.
A 5 Vcc sube la medida 0.1ºC y a 3 Vcc baja la medida 0.1ºC

El ADT7310 es igual al anterior, pero con interface SPI (más líneas). Parece ser que este modelo tiene mejor precisión (+-0.05ºC en el rango 0-80 ºC).
Adjunto imagen del Datasheet.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: MerLiNz en 01 de Septiembre de 2014, 07:41:23
Yo es que lo que necesito son sensores externos y entonces por spi no me valen es por eso que despues de buscar mucho encontre este, aparte de un gran rango (hasta 150ºC), no se porque no hacen mas sensores asi de este tipo, el lm35 sin amplificador no sirve de mucho para sensar externamente.
El problema de los NTC es que no es lineal, y si quieres sacar la temperatura necesitas que el pic (o lo que uses) te haga el calculo metiendole la beta y otros parametros que tienes en el datasheet, es lo unico que no me gusta de los ntc, aparte tambien el hecho de tener que hacer un divisor resistivo. Si por ejemplo quieres hacer una placa donde el usuario se busca el sensor (NTC) entonces se tiene que buscar uno que vaya a juego con la resistencia que tu pongas en la placa. Sin embargo un sensor lineal de este tipo no te tienes que preocupar de mas nada.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 09:03:33
Lo malo del LM35 es, además, que para valores de temperatura por debajo de 0ºC ... ¡ Su salida es negativa!
Es realmente horrible para trabajar con un microcontrolador.

Por supuesto, tiene sus ventajas. Puedes conectarlo directamente a un polímetro y te dará una lectura directa en grados sin necesidad de ningún componente más.
Como la sensibilidad es de 10mV/ºC, con el polímetro digital en el rango de 2 voltios, se leerán directamente décimas de grado. Una maravilla, pero no para un microcontrolador.


Puedes probar a utilizar un termómetro digital con interface CAN. No me refiero a que utilices el protocolo CAN, es demasiado, me refiero a utilizar el I2C o el SPI, pero traduciendo las tensiones con transceptores CAN en el sensor y en la placa receptora.
No creo que sea mucho peor que el envío de tensión analógica. Si AD22100 tuviese salida de corriente sería más inmune, pero la tensión no es inmune a interferencias.
El tamaño total quizás sea máyor, pero el precio no lo creo.

Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 09:24:53
El problema de los NTC es que no es lineal, y si quieres sacar la temperatura necesitas que el pic (o lo que uses) te haga el calculo metiendole la beta y otros parametros que tienes en el datasheet, es lo unico que no me gusta de los ntc, aparte tambien el hecho de tener que hacer un divisor resistivo. Si por ejemplo quieres hacer una placa donde el usuario se busca el sensor (NTC) entonces se tiene que buscar uno que vaya a juego con la resistencia que tu pongas en la placa. Sin embargo un sensor lineal de este tipo no te tienes que preocupar de mas nada.

Es cierto que la NTC es no lineal.
De hecho tiene una de las peores no linealidades que te puedes imaginar. Si tuviese una función senoidal, no habría problemas. Se podría corregir fácilmente. Pero la función de transferencia de la NTC es una exponencial, que tiene una no linealidad muy fuerte y dificil de corregir:
(http://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Exp.svg/800px-Exp.svg.png)

Por si esto no fuera poco, los términos de la exponencial tienen a la temperatura en una serie racional (dividiendo). Las series racionales son mucho menos lineales que los polinomios o que las series de Taylor.

Total, que antes de estudiarlo yo esperaba una curva con una no linealidad muy fuerte. Sin embargo me llevé una sorpresa al comprobar que la curva, en el intervalo que me interesaba, era bastante lineal:

Adjunto gráfica de la tensión de salida de la NTC (azul) y la tensión que debería salir si fuese lineal (magenta)

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22495;image)

El error máximo en el rango de 10ºC a 40ºC es de 0.2%. Dicho de otro modo, un error máximo de 0.2ºC. Todo esto sin linealizar el resultado.

Los únicos parámetros que hay que introducir son lineales (igual que en el AD22100):
   Una constante que multiplica a la lectura (40mV/ºC para la NTC   22.5mV/º para el AD22100)
   Un offset (a 25ºC, 2.92 Voltios para la NTC)


Mirando el datasheet del NTC, también descubrí que la estabilidad con el tiempo era muy buena. Casi no tienen deriva a las 1000 horas.

Por otro lado, es verdad que un divisor resistivo está expuesto a cambios en la tensión de alimentación, pero si se alimenta al ADC con la misma tensión que el divisor resistivo de la NTC, los cambios en la tensión de alimentación se compensan y no es necesario colocar una referencia de tensión de precisión.

No está nada mal para un componente de 28 céntimos.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 09:35:10
Adjunto gráfica con el error de temperatura del divisor resistivo con NTC, comparado con una función lineal centrada en 25º y con rampa de 40mV/ºC

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22499;image)


Se puede comprobar que en el rango de 15ºC a 35ºC, el error de linealidad es menor de 0.04ºC


Saludos.

P.D. Estas gráficas las he realizado suponiendo una resistencia de polarización más ajustada: 7130 Ohm = 6800 + 330 ohmios
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 15:49:13
Varias páginas interesante sobre NTC de precisión, no sabía que podían tener tanta precisión:
http://www.ussensor.com/products/thermistors/leaded-thermistors/interchangeable-thermistors/ultra-precision-interchangeable-thermistor
http://www.analogtechnologies.com/thermistor.htm?gclid=CLCN49rWwMACFU7MtAodPyYAqA

Saludos.

P.D. Por lo que he leído, el precio es mayor que el de un sensor de temperatura de precisión de Analog Devices.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: MerLiNz en 01 de Septiembre de 2014, 16:07:33
A ver si te enteras la forma de linearizar una ntc, he leido por algunos sitios que es posible pero no he encontrado como. Tambien en otros fabricantes he visto que venden IC's para adaptar las señales de las NTC, pero no era lo que yo buscaba.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 16:09:36
Si por ejemplo quieres hacer una placa donde el usuario se busca el sensor (NTC) entonces se tiene que buscar uno que vaya a juego con la resistencia que tu pongas en la placa. Sin embargo un sensor lineal de este tipo no te tienes que preocupar de mas nada.

Si, lo peor de los NTC es que tienes que calibrar cada uno a mano.
En los CIs, se supone que el fabricante ya lo ha hecho por tí antes de venderlo y es un ahorro de dinero.

También es verdad que existen NTC que no necesitan calibración (son muy exactos y todos los que te venden son iguales), pero son más caros todavía que los circuitos integrados sensores de temperatura.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 16:14:52
A ver si te enteras la forma de linearizar una ntc, he leido por algunos sitios que es posible pero no he encontrado como. Tambien en otros fabricantes he visto que venden IC's para adaptar las señales de las NTC, pero no era lo que yo buscaba.

Hay varias formas.

En este documento aparecen dos fórmulas, una muy exacta y otra menos exacta:

http://cp.literature.agilent.com/litweb/pdf/5965-7822E.pdf


Lo malo de las dos formulas es que necesitas calcular logaritmos. En ciertos microcontroladores esto es muy difícil.
Además con esas fórmulas se calcula la temperatura a partir de la resistencia. En el circuito que planteo no se conoce la resistencia, sino el la tensión de un divisor de tensión (la fórmula no sirve directamente)


Otra forma es mediante polinomios de Chebyshev. No soy muy optimista porque creo que la respuesta de la NTC es muy no lineal.
De todas formas voy a intentar calcularlos a ver que precisión dan y respondo. Igual me llevo otra sorpresa y descubro que es más lineal de lo que esperaba.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 20:34:30
Bueno, ya tengo los resultados y son bastante buenos.

He interpolado los valores de tensión de salida con 5 puntos:
   Temperatura = [-17.798, -1.450, 25.000, 51.450, 67.798]
   Vout = [4.388, 3.925, 2.923, 1.921, 1.428]


Polinomios de Chevyshev
Los valores de temperatura están escogidos según los puntos de chebyshev.
Estos puntos se calculan primero como el coseno de 5 ángulos equiespaciados en el rango 0-180:
18, 54, 90, 126, 162

El coseno de dichos ángulos es:
0,951    0,588    0,000   -0,588    -0,951

se colocan al revés para mayor claridad:
-0,951    -0,588    0,000   0,588    0,951


Ahora se divide el rango de temperaturas de -20 a 70ºC de forma proporcional a los valores coseno:

   Temperatura = [-17.798, -1.450, 25.000, 51.450, 67.798]

Y se calcula por interpolación la salida de tensión que debería tener cada temperatura:

   Vout = [4.388, 3.925, 2.923, 1.921, 1.428]


Después se construye un polinomio que pase por todos esos puntos:

    vout(x) = +3.87584680716 -0.0342556010336*x -0.000240808482527*x^2 +3.63995277358e-06*x^3 -7.23389909366e-09*x^4



Calculo del error cometido por el polinomio
Por último he calculado el error cometido por el polinomio en comparación con la fórmula más exacta dada por el fabricante.
El resultado es de un error máximo de:

     0.10ºC dentro del rango   -7º a 70ºC
     0.15ºC dentro del rango -20º a 70ºC

Adjunto gráfica.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22501;image)

Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 01 de Septiembre de 2014, 20:36:27
Ahora falta hacer lo contrario, que es lo que realmente interesa.
Hay que calcular la temperatura en función de la tensión de salida y comprobar el error cometido.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 02 de Septiembre de 2014, 11:06:04
Después de estudiar el tema, los resultados son bastante buenos.

Circuito a utilizar
Utilizaré el mismo circuito sencillo del comienzo. Una resistencia en serie con la NTC:

                            R1                    NTC
   (+5V)----------[====]-----o-----[====]-------------(GND)
                                           |
                                           |_________________ Vout



Rango de temperaturas
He escogido un rango de temperaturas bastante amplio para comprobar si el método era capaz de llegar a todas las temperaturas:

   Temperatura mínima =    -20ºC
   Temperatura máxima =  150ºC



Resistencia de polarizacion
Para escoger la resistencia de polarización R1 óptima, hay que calcular la sensibilidad del divisor de tensión en todo el rango de temperaturas.

En una hoja excel se calcula primero la resistencia NTC con la fórmula y los datos del fabricante, para varias temperaturas:

    R_ntc =   R_ntc_25 * exp( A + B / T + C / T^2 + D / T^3)

    R_ntc_25  = 10000 ohms
    A = -10,2296
    B = 2887,62
    C = 132336
    D = -25025100

    La letra T representa la temperatura en grados kelvin, según la fórmula:
    T = ºC + 273.15

A continuación en otra columna se calcula la tensión de salida del divisor según la fórmula:

   Vout = Vcc * R_ntc / (R1 + R_ntc)

Por último se calcula en otra columna la sensibilidad del sensor dividiendo la variación de la tensión de salida entre la variación de la temperatura

Un gráfico mostrará la sensibilidad en todo el rango. Con este gráfico, se puede ir variando R1 hasta que la sensibilidad sea máxima en el medio del intervalo de temperaturas y la sensibilidad en los extremos sea semejante.
Con estos criterios, el valor estandar de la serie E12 que más se ajusta es:

R1 = 3300 ohmios

Temp   Sensibilidad [mV/ºC]
-20       13,53
-10       17,83
0       22,43
10      26,90
20      30,71
30      33,38
40      34,63
50      34,39
60      32,86
70      30,38
80      27,34
90      24,07
100      20,85
110      17,84
120      15,14
130      12,79
140      10,77
150      9,06

La máxima sensibilidad está entre 40 y 50ºC
La sensibilidad en los extremos es aproximadamente de 10mV/ºC con poca variación entre ambos.


Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 02 de Septiembre de 2014, 12:52:58
Una vez calculada la mejor resistencia de polarización, el problema consiste en traducir la tensión que da el circuito en un valor de temperatura exacto.

Hay varias fórmulas que devuelven el valor de la temperatura a partir de la resistencia de la NTC. Estas fórmulas tienen dos problemas.
El primero consiste en que son complejas porque es necesario calcular logaritmos. No todos los microcontroladores disponen de esta función implementada y, además consume mucha memoria y tiempo de proceso.
Otro problema consiste en que no tenemos directamente el valor de resistencia de la NTC. Este habría que calcularle a partir de la tensión de salida del divisor resistivo, complicando los cálculos.

Para un pequeño microcontrolador, las funciones matemáticas más sencillas son la suma y la multiplicación.
Los polinomios se pueden calcular a partir sólo de sumas y multiplicaciones, por esa razón las aproximaciones polinómicas son muy utilizadas para aproximar funciones complejas.

En este problema, se ha escogido calcular un polinomio aproximador de grado 5, que puede obtenerse haciendo pasar el polinomio por 6 puntos de la gráfica.


Las temperaturas escogidas son las siguientes (dadas en grados centígrados):

    Temperaturas = [-17.0,   5.0,   43.0,   87.0,   125.0,   147.0]

Los puntos se han escogido según el criterio de Chevyshev (los puntos se escogen, dentro del rango de temperaturas, de forma proporcional al coseno de ángulos equiespaciados)


Ahora hay que averiguar la tensión de salida del divisor resistivo para esas temperaturas.
Se puede hacer de dos formas. A partir de los datos del fabricante o a partir del circuito real.
En este caso he calculado la tensión de salida del divisor de forma teórica a partir de la fórmula del fabricante:


    Temperaturas = [-17.0,    5.0,       43.0,     87.0,     125.0,   147.0]
    Vout                = [4.679,   4.293,   3.157,   1.745,   0.963,   0.687]


A partir de este conjunto de datos hay que calcular el polinomio de grado 5 que pasa por esos puntos. He utilizado para ello el algoritmo de Neville implementado en Python.
Hay muchos paquetes informáticos de matemáticas y algunas calculadoras que pueden hacer esta interpolación.

El resultado es el siguiente:

  Temperatura  = +245.698438861 -210.56120536*Vout +123.656004006*Vout^2 -43.487932545*Vout^3 +7.81600210811*Vout^4 -0.569044086852*Vout^5


Este polinomio se puede arreglar para facilitar los cálculos al microcontrolador:

   Temp = - 0.569044086852
   Temp *= Vout
   Temp += 7.81600210811
   Temp *= Vout
   Temp += -43.487932545
   Temp *= Vout
   Temp += 123.656004006
   Temp *= Vout
   Temp += -210.56120536
   Temp *= Vout
   Temp += 245.698438861


El resultado es una función que devuelve la temperatura cuando se le introduce la tensión del divisor resistivo.
El error se puede calcular restando la temperatura real de la temperatura calculada por el polinomio:

Temp   Error ºC
-20      0,347
-10      -0,385
0      -0,202
10      0,181
20      0,292
30      0,132
40      -0,002
50      0,083
60      0,281
70      0,353
80      0,195
90      -0,085
100      -0,292
110      -0,299
120      -0,120
130      0,102
140      0,165
150      -0,135





Adjunto gráficas:

Circuito eléctrico:


                       R1=3300             NTC 10k
   (+5V)----------[====]-----o-----[====]-------------(GND)
                                           |
                                           |_________________ Vout



Tensión de salida en función de la temperatura [voltios]:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22507;image)



Sensibilidad del circuito a la temperatura [milivoltios / grado centígrado]:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22505;image)



Puntos de interpolación y polinomio interpolador:


    Temperaturas = [-17.0,    5.0,       43.0,     87.0,     125.0,   147.0]
    Vout                = [4.679,   4.293,   3.157,   1.745,   0.963,   0.687]



    Temperatura  = +245.698438861 -210.56120536*Vout +123.656004006*Vout^2 -43.487932545*Vout^3 +7.81600210811*Vout^4 -0.569044086852*Vout^5




Error del polinomio interpolador [grados centígrados]:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22503;image)



Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 02 de Septiembre de 2014, 13:18:02
Con un polinomio de grado 5, se consigue un error máximo de linealidad de +- 0.4 ºC

Si se desea más precisión hay dos formas de conseguirlo.


Una forma es aumentar el grado del polinomio. Por ejemplo con un polinomio de grado 10, el error de temperatura se reduce a +- 0.04 ºC en el peor de los casos.


Otra forma, más sencilla, consiste en dividir la gráfica en varias zonas y calcular un polinomio para cada zona.
Con esta solución el grado de los polinomios se puede hacer menor.
Por ejemplo, si dividimos el rango total en rangos de 30 ºC, un polinomio interpolador en el rango de 10º a 40ºC de grado 2 (una parábola) puede aproximar la temperatura con un error de sólo 0.1 ºC

El polinomio en este caso es:

    Temperatura = +68.3176452207 +9.9456531719*x -5.7232176956*x^2

Que viene de interpolar los puntos:

   Temperaturas = [12.0, 25.0, 38.0]
   Tensión de salida = [4.124, 3.754, 3.329]



Con 6 polinomios semejantes, se puede cubrir todo el rango de temperaturas desde -20 a 150ºC



Saludos.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: MerLiNz en 02 de Septiembre de 2014, 15:36:48
Eres profesor de matematicas o algo picuino??  :shock: :shock:
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 02 de Septiembre de 2014, 16:22:14
Eres profesor de matematicas o algo picuino??  :shock: :shock:

No, pero me gustan bastante las matemáticas (creo que se nota  :) )



Adjunto una libro Excel sencillo para hacer interpolaciones de segundo y de tercer grado (polinómios cuadrádos y cúbicos)



No es complicado, lo único que hay que hacer es meter tres o cuatro puntos de una curva y la hoja calcula el polinomio que pasa por esos puntos.

El problema es escoger los mejores puntos para que el polinomio tenga poco error.
Para eso, una vez que se introduce el máximo y el mínimo rango, la hoja propone los puntos óptimos (con el nombre X chevy).

La hoja viene ya con los datos necesarios para interpolar la función seno(x) en el intervalo de 0 a 90 grados.

Se puede comprobar que la aproximación es bastante buena. En el caso del polinomio de 4 puntos (cúbico) el error es menor de 0.0015
También aparece un gráfico con el error cometido. Para que funcione bien, hay que introducir los valores de la función original que se quiere interpolar.
No es necesario hacer esto último, sólo si se quiere visualizar el error.

Con ayuda de esta hoja se pueden interpolar funciones en rangos pequeños para programarlas después en un microcontrolador.

Si el error es muy grande, se puede hacer el tramo más pequeño para reducir el error.
Si el error es demasiado pequeño, se puede hacer el rango mayor para reducir el número de tramos totales.

Si la función a interpolar es sencilla o necesitamos poca precisión, con un sólo tramo es suficiente.



Como experimento interesante, se puede comprobar qué pasa si se amplía o reduce el rango de valores de la función seno. Entre 0 y 15º la precisión es buenísima. Entre 0 y 360...bastante mala.


Un saludo.
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: akira_ve en 08 de Julio de 2016, 23:56:26
Vaya esta muy completo el analisis........pero esto como se traduciria en un programa para PIC......se podria escribir en ASM???
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 09 de Julio de 2016, 07:56:05
En ASM se podría hacer, pero es mucho más sencillo en c.
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: akira_ve en 09 de Julio de 2016, 14:41:47
ok amigo podrias orientarme como haria??
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 09 de Julio de 2016, 21:30:51
¿Qué es exactamente lo que quieres hacer y en qué punto estás?.
Ten en cuenta que esta es una solución más barata que un circuito especializado (te ahorras un par de euros) pero es mucho más complicado de implementar.

Otro punto a tener en cuenta es que para calibrar con precisión la NTC necesitas tener un buen termómetro.

¿Qué precisión necesitas? ¿Y qué resolución?

Saludos.
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: akira_ve en 09 de Julio de 2016, 22:17:09
Bueno estoy leyendo teorias............recabando informacion es para armar un monitor para bombas o motores, monitorear corriente tension y temperatura, pense en crear una tabla de valores que vaya desde 0 grados hasta 60, osea expresar un valor de temperatura un valor del ADC, companraria el valor de adc con con la tabla y darle una tolerancia superior e inferior asi cuando encaje con el valor del adc, ver a que valor de temperatura corrresponde.
la medicion de corriente, tension el manejo del lcd botones todo esta listo solo falta la parte de la temperatura, pensaba usar un NTC de 10 Kohm...........pero veo que hicistes un analisis bien profundo, por eso me llama la atension si se podria usar tu metodo
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 10 de Julio de 2016, 12:42:54
Creo que se puede utilizar sin problema una NTC para esa aplicación. Con una precisión de un grado imagino que tendrás suficiente.

Lo primero que tienes que hacer es montar el circuito con la NTC, una resistencia de polarización (6700 Ohm) y un microcontrolador con conversor ADC.

La segunda parte es la más compleja. Hay que modificar la temperatura de la NTC, medirla con un termómetro y tomar nota del valor leído por el ADC.
Esto lo puedes sustituir por las ecuaciones del fabricante, pero no es igual de preciso.
Lo ideal sería trabajar con temperaturas cercanas al punto de trabajo. Con calcular 4 ó 5 puntos sería suficiente, por ejemplo (20º, 50º, 80º, 110º, 140º). Las temperaturas no tienen por qué ser exactas, pero si hay que medir exactamente cuánto valen con un termómetro. Cuanto más preciso sea el termómetro, más precisa será tu NTC. Las temperaturas más altas las puedes conseguir con un soldador de aire.

La tercera parte es calcular un polinomio que traduzca los valores leídos por el ADC en valores de temperatura. En esta parte te puedo ayudar.

Un saludo.
Título: Re: Polarizar una resistencia NTC para medir temperatura.
Publicado por: elñato en 10 de Julio de 2016, 18:25:45
El problema de los NTC es que no es lineal, y si quieres sacar la temperatura necesitas que el pic (o lo que uses) te haga el calculo metiendole la beta y otros parametros que tienes en el datasheet, es lo unico que no me gusta de los ntc, aparte tambien el hecho de tener que hacer un divisor resistivo. Si por ejemplo quieres hacer una placa donde el usuario se busca el sensor (NTC) entonces se tiene que buscar uno que vaya a juego con la resistencia que tu pongas en la placa. Sin embargo un sensor lineal de este tipo no te tienes que preocupar de mas nada.

Es cierto que la NTC es no lineal.
De hecho tiene una de las peores no linealidades que te puedes imaginar. Si tuviese una función senoidal, no habría problemas. Se podría corregir fácilmente. Pero la función de transferencia de la NTC es una exponencial, que tiene una no linealidad muy fuerte y dificil de corregir:
(http://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Exp.svg/800px-Exp.svg.png)

Por si esto no fuera poco, los términos de la exponencial tienen a la temperatura en una serie racional (dividiendo). Las series racionales son mucho menos lineales que los polinomios o que las series de Taylor.

Total, que antes de estudiarlo yo esperaba una curva con una no linealidad muy fuerte. Sin embargo me llevé una sorpresa al comprobar que la curva, en el intervalo que me interesaba, era bastante lineal:

Adjunto gráfica de la tensión de salida de la NTC (azul) y la tensión que debería salir si fuese lineal (magenta)

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=43336.0;attach=22495;image)

El error máximo en el rango de 10ºC a 40ºC es de 0.2%. Dicho de otro modo, un error máximo de 0.2ºC. Todo esto sin linealizar el resultado.

Los únicos parámetros que hay que introducir son lineales (igual que en el AD22100):
   Una constante que multiplica a la lectura (40mV/ºC para la NTC   22.5mV/º para el AD22100)
   Un offset (a 25ºC, 2.92 Voltios para la NTC)


Mirando el datasheet del NTC, también descubrí que la estabilidad con el tiempo era muy buena. Casi no tienen deriva a las 1000 horas.

Por otro lado, es verdad que un divisor resistivo está expuesto a cambios en la tensión de alimentación, pero si se alimenta al ADC con la misma tensión que el divisor resistivo de la NTC, los cambios en la tensión de alimentación se compensan y no es necesario colocar una referencia de tensión de precisión.

No está nada mal para un componente de 28 céntimos.


Saludos.

vas a hacer UNA  placa y solo una para ti ??
si no es el caso hicieste la prueba con varias NTc de un lote ??  4 o 5 unidades ??
o hiciste la prueba con varias de distintos lotes ?? 
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: elñato en 10 de Julio de 2016, 18:33:29
lei tu tema de matematicas, polinomios y demas............no entiendo nada... nunnca lo use en mi vida laboral.
te consulto mi manera , solo en teoria ya que no lo haria yo:

1 -- mido y me hago una tabla asi que la tension que mida el pic  va a la tabla y la transforma en valores.
2 -- aunque la curva sea absolutamente no lineal cada "pedacito " o sea cada tramo de 2 valores que hice en mi tabla sera una seccion de la curva no lineal y ese tramo en general sera bastante lineal, ( solo ese tramo) .
3 -- el valor que lea el pic  si coincide bastante exacto  con el de tabla  >>> sale con fritas
si no coincide y esta entre 2 valores de mi tabla veo de hacerle un promedio, hace añooos que no me meto con micros, pero calculo hay maneras simples de hacerlo.

no es viable ?? y mas facil ?? o digamos mas amigable 

Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 10 de Julio de 2016, 19:58:18
lei tu tema de matematicas, polinomios y demas............no entiendo nada... nunnca lo use en mi vida laboral.
Probablemente los has usado sin saberlo. Te explico un poco el tema de las tablas y los polinomios.

Si utilizas una tabla y quieres tener buena precisión usando "promedios" necesitarás muchos puntos.
Las tablas son rápidas, pero ocupan mucha memoria. Cuanta más precisión quieras, más memoria utilizan.

Los promedios de los que hablas son en realidad polinomios de grado uno (una recta) y son poco precisos. Se calculan con sólo dos puntos y para ser precisos esos dos puntos tienen que estar cercanos entre sí.

Hay otro tipo de "promedio" que utiliza tres puntos. Eso ya no es una recta, es una ecuación cuadrada, un polinomio de grado dos. Con él puedes conseguir la misma precisión con menos puntos o con puntos más alejados entre sí. Con eso te ahorras memoria porque no son necesarios tantos puntos.

Si sigues así, puedes llegar a usar polinomios de 7 ó 9 puntos con muchísima precisión y una tabla muy pequeña. Eso es lo que utilizan las calculadoras para calcular los senos, cosenos, logaritmos, etc. Si no ¿Cómo podrían las calculadoras hallar 12 decimales de precisión en esas funciones? Sólo con tablas necesitarian una memoria tremenda.

El problema es calcular los polinomios a partir de tres o más puntos. Con dos puntos es más o menos sencillo, es un "promedio" como bien dices, pero con más puntos la cosa se complica. Para eso se puede utilizar una hoja excel como la que adjunto.

Un saludo.
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 10 de Julio de 2016, 20:28:13
Imagina que quieres interpolar esta función:
   y = seno(x)

Tienes los siguientes puntos:
x    y
0    0
5    0,08715574
10  0,17364818
15  0,25881905

Ahora quieres calcular el valor de y para x = 7.

1. La respuesta exacta es:
   y = seno(7) = 0,12186934

2. Con un promedio lineal harías algo así:
   y = 0,08715574 + (7 - 5)*(0,17364818 - 0,08715574)/(10 - 5) = 0,121752716

Tienes error en el cuarto decimal. Sólo tres cifras son correctas. El error es de 0,1%



3. Si ahora hacemos el polinomio cúbico poniendo todos los valores de la tabla en la hoja excel, sacamos el siguiente polinomio:
   A0 =   0,000000E+00
   A1 =   1,745360E-02
   A2 =   -1,009635E-07
   A3 =   -8,776795E-07

   y = A0 + x * (A1 + x * ( A2 + x * A3))
   y = x * (1,745360E-02 + x * ( -1,009635E-07 + x * (-8,776795E-07)))

Calculando ahora con el polinomio anterior para x = 7:
   y = 0,12186918

Que tiene las primeras 6 cifras correctas. El error ahora es del 0,0001%
Para conseguir lo mismo con "promedios" lineales necesitarías una tabla bastante más grande,  con unos 80 puntos en vez de sólo 4.

Saludos.
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 11 de Julio de 2016, 14:03:57
Adjunto hoja Excel para interpolar 3, 4, 5, 6 ó 7 puntos.

 - Tienes que ingresar para ver archivos adjuntos -

Saludos.
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: soymoe en 11 de Julio de 2016, 17:38:42
En la facultad nos enseñaron a medir con ntc y usabamos un puente de weaston y lo linealizabamos con una resistencia en paralelo a rx
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: PalitroqueZ en 11 de Julio de 2016, 18:52:27
hacia años que no escuchaba sobre CHEVYSHEV

muy buena la clase PICUINO

 ((:-))
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: akira_ve en 11 de Julio de 2016, 19:02:19
bueno en verdad, estoy interesado en hacer medidas de temperatura....................y estoy leyemdo sobre los ntc, no se facilita mas la cosa linealizando el NTC??
Título: Re:Polarizar una resistencia NTC para medir temperatura.
Publicado por: Picuino en 12 de Julio de 2016, 18:25:03
La resistencia de polarización linealiza algo, pero para terminar de linealizar se utilizan los polinomios.
No hay otra forma tan sencilla y barata de linealizar con precisión.
La hoja excel es sencilla de utilizar. En la columna de las X pones los valores leídos por el ADC. En la columna Y pones las temperaturas correspondientes a cada lectura del ADC.
Con que calibres 5 puntos puedes obtener bastante precisión.
Por último la hoja calcula los coeficientes del polinomio A0, A1, etc.
A partir de ahí cada lectura del ADC la metes en el valor X y con el polinomio calculas la temperatura que corresponde.
Un saludo.