Aquí está el esquema de mi circuito NTC - ADC,
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.
¿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
¿Puedes tomarlo desde aquí?
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
Cuchara
Raffaello