Circuito de termistor NTC, conversión ADC, temperatura de cálculo

Aquí está el esquema de mi circuito NTC - ADC,

NTC NTC-ADC AREF

ADC 10bits, ADCVCC 2.56V

Vin = 5V

¿Alguien puede explicarme cómo obtengo RT, el valor de resistencia de NTC del valor de ADC? gracias.

Estoy usando la fórmula del divisor de voltaje:

Vout = ADCVCC * ADC_value / 1024
BETA = 3950
R25 = 4700
RT = 10K / (Vin - Vout - 1)
T = (1 / (1/298.16 + 1/BETA * ln(RT/R25 )) - 273.15

Pero obtuve resultados incorrectos:

el rango de mis temperaturas son:

adc = 1    -> T = 344 °C;
adc = 1023 -> T = 8

¿Cómo tengo que configurar el ADC en AVR? con referencia de voltaje interno o no?

¿Tengo la fórmula incorrecta?

Necesito leer la temperatura "exacta" en el rango de -10°C a +30°C más o menos.

¡Ya probé con la ecuación SH con coeficiente A, B, C pero obtuve los peores resultados!

Creo que no entiendo los esquemas de los circuitos NTC - ADC ...

Y configuré mi ATMega con parámetros incorrectos.

¿Alguien puede tratar de explicarme cómo convertir mi valor ADC a Resistencia del termistor con este esquema?

Gracias en consejos de ayuda.

[EDITAR]

Mi configuración para AVR ADC:

ADMUX |= (1<<REFS0) | (1<<REFS1);
ADCSRA |= (1<<ADEN) |(1<<ADSC) |(1<<ADIE);
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

y la fórmula utilizada para obtener la resistencia del valor ADC: Vin = 5V Vref = 2,56V (AREF)

Vout = adc_val * (Vref / 1024.0))
RT   = 10k / (Vin / Vout - 1.0)

¿Este código coincide con los esquemas? ¿Es correcto mi ADC configurado con esos esquemas? gracias en consejo.

Primera suposición para aclarar ... la resistencia del NTC disminuye a medida que se calienta. Entonces, cuando el NTC está frío, tiene una alta resistencia. Cuando está caliente, la resistencia baja. El voltaje en el termistor caerá a medida que aumente la temperatura... ¿Es esto lo que quieres? No he ejecutado el cálculo, pero sus resultados muestran que no puede obtener el rango que desea... ¿Coinciden el Beta y el R25 con su NTC? Son diferentes dependiendo de los números de modelo... ¿Y estaba el amplificador operacional allí en caso de que se necesitara un cambio de nivel y una escala?
Mis valores Beta y R25 son correctos. He tomado de la hoja de datos. Configuré ADC con referencia de voltaje interno de 2,56 V (AREF), por lo que en AVR-C Code es: ADMUX |= (1<<REFS0) | (1<<REF1); y el valor adc, se transforma con la fórmula del divisor de voltaje: Vref=2.56V Vin=5V Vout=(adc_val * (Vref / 1024.0)) RT= 10k / (Vin / Vout - 1.0) [He editado mi pregunta con más información]

Respuestas (2)

¿Alguien puede tratar de explicarme cómo convertir mi valor ADC a Resistencia del termistor con este esquema?

En primer lugar, el circuito del amplificador operacional hace muy poco más que agregar un pequeño error. Si tuviera ganancia, se podría argumentar que tuvo un beneficio.

En segundo lugar, este circuito se beneficia del uso de la tensión de alimentación como su referencia analógica porque elimina otro término de error que es la diferencia variable entre la tensión de alimentación en R1 y la tensión de referencia del ADC.

Entonces, el valor del ADC representa la relación t h mi r metro i s t o r   r mi s i s t a norte C mi t h mi r metro i s t o r   r mi s i s t a norte C mi + 10 k Ω

¿Puedes tomarlo desde aquí?

Supongo que el circuito del amplificador operacional está pensado como un "filtro de ruido" para obtener mejores resultados. Pero no estoy seguro. No sé la decisión para eso... :) para la ecuación que sugieres, edité mi pregunta con más información. pero ¿la fórmula del divisor de voltaje es correcta? Entrada/Salida = R1/(R1+R2)
si R1 es el termistor y R2 es la resistencia que lo alimenta desde el suministro, esa es la fórmula para el voltaje a través del termistor en relación con el suministro, pero si su ADC usa el suministro como referencia, entonces la fórmula es el valor ADC dividido por 1024.

Ejecuté su código en Python y obtuve 285 para adc_val = 1 y -84 para adc_val = 1023. Con un adc_val de 318, obtengo 25,9. RT en ese punto es 4504. Entonces parece que sus ecuaciones deberían ser correctas. ¿Está seguro de que se está implementando correctamente en términos de tipos? Tiene que ser todo punto flotante. Si algo se está convirtiendo en un número entero o algo así, podría obtener algunos resultados extraños.

>>> BETA = 3950
>>> R25 = 4700
>>> Vin = 5
>>> Vref = 5
>>> adc_val = 1
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT   = 10000 / (Vin / Vout - 1.0)
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
285.3553121325664
>>> adc_val = 1023
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT   = 10000 / (Vin / Vout - 1.0)
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
-84.45667531777428
>>> adc_val = 318
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT   = 10000 / (Vin / Vout - 1.0)
>>> RT
4504.249291784702
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
25.970525623383708
Bueno, me di cuenta en ese momento que había algunos errores en el prototipo (dispositivo). Cuando tuve esa intuición (no soy ingeniero electrónico) porque noté un comportamiento extraño de las respuestas del hardware. Los resultados fueron menos precisión de lo que era aceptable para el negocio porque era un prototipo. De todos modos: una vez más desajuste ideal y real! :D :D :D (por cierto, gracias)