3.3v referencia de voltaje del termistor ADC8

1

Actualmente estoy intentando ejecutar un termistor a través de 3.3v en mi mega arduino (progresando a mini pro 3.3v)

Cuando conecto 5.5v a un termistor de 100k y el voltaje lo divido (usando una resistencia de 100k) al pin analógico 8. Aquí está el código

#include <math.h>

double Thermistor(int RawADC) {
    double Temp;
    Temp = log(10000.0*((1024.0/RawADC-1))); 
    Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );// stienhartd equation
    Temp = Temp - 273.15;// k to c conversion
    //Temp = (Temp * 9.0)/ 5.0 + 32.0; 
    return Temp;
}

void setup() {
    Serial.begin(9600);
}

void loop() {             
    int val;                
    double temp;            
    val=analogRead(8);      
    temp=Thermistor(val);   
    Serial.print("Temperature = ");
    Serial.print(temp);   
    Serial.println(" C");
    delay(100);            
}

Cuando cambio de 5v a 3.3, la lectura se desactiva bastante. ¿Estoy tratando de entender el código y de alguna manera cambiar el código para que se ajuste a la referencia de voltaje del ADC?

Por favor ayuda.

    
pregunta Worapat Sopa

1 respuesta

2

Analice el problema un poco para entender lo que está pasando aquí:

1) Su termistor es una resistencia variable cuyo valor puede variar a medida que cambia su temperatura.

2) El cambio de resistencia no será lineal en un rango de temperatura suficientemente grande. La ecuación de Steinhart-Hart a la que se hace referencia en su código es una aproximación de tercer orden ampliamente utilizada a la relación Entre la temperatura y la resistencia para un termistor. Los tres números aparentemente aleatorios en su función Thermistor son los coeficientes de Steinhart-Hart, que pueden no ser los valores correctos para su termistor (vea la hoja de datos si es posible).

3) Cuando coloca el termistor en serie, forma un divisor de voltaje estándar como en el esquema a continuación. Siguiendo la Ley de Ohm, la tensión de salida del divisor viene dada por:

$$ V_ {adc} = {R_2 \ sobre R_ {termistor} + R_2} * V_1 $$

4) Debe conocer el rango de resistencia de su termistor para determinar el rango de voltaje que verá con su segunda resistencia a 100k ohm. Sería mejor tener la hoja de datos de su termistor, pero podría intentar realizar una ingeniería inversa tomando algunas medidas.

5) Su Arduino está midiendo el voltaje en el pin ADC en relación con un voltaje de referencia y convirtiendo a un número entero en [0, 1023] (el ADC de 10 bits puede medir 2 ^ 10 = 1024 valores únicos). Si el voltaje en el pin es igual a (o mayor que) el voltaje de referencia, entonces debe leer 1023, y si el voltaje es cero, entonces leerá 0.

6) Por defecto, el Arduino utilizará el voltaje de alimentación como la referencia del voltaje del ADC (por lo tanto, 5V o 3.3V, dependiendo de cómo lo esté alimentando). De acuerdo con esta referencia , puede cambiar la referencia de voltaje para que el ADC de Arduino Mega sea uno de varios valores diferentes, incluyendo proporcionar su propia referencia de voltaje externo.

7) Idealmente, su divisor de voltaje proporcionaría un cambio de voltaje desde cero al voltaje de referencia del ADC en el rango de temperatura que pretende medir para brindar la máxima precisión (el uso más eficiente de sus 10 bits disponibles). No obtendrás exactamente Vref o cero voltios del divisor, pero obtendrás la idea ...

simular este circuito : esquema creado usando CircuitLab

    
respondido por el billbo

Lea otras preguntas en las etiquetas