medición de BandGap inexacta

2

He seguido los consejos en la web sobre cómo usar la referencia de voltaje de "intervalo de banda" para medir el voltaje de alimentación, sin embargo, las mediciones no son tan precisas como el ADC en un Arduino Mega.

Por un lado, he medido que la referencia de 1.1 V en realidad es 1.087 V usando un DMM para medir el voltaje a través de un condensador desde AREF a GND con el código apropiado.

Por otra parte, la medición interna de BG con el ADC usando el código adjunto devuelve una lectura promedio de 226.5 ADC que es 1.107V con un suministro de 5V (medido usando un DMM del pin de 5V). Este es un error de 20mV. Estoy obteniendo una precisión de 5 mV cuando uso el ADC para medir una fuente de voltaje externa.

El Arduino Mega se alimenta a través de USB.

  • Un suministro externo de 1.087V se midió simultáneamente (alternativamente) con el pin analógico para obtener una lectura diferente. ¿Cuál es la diferencia entre los dos pases?

    #define N 128
    #define ND 128.0D
    
    int analogReadBG(){
      uint8_t low, high;
      ADMUX = 0;
      bitClear(ADCSRB,MUX5); // Set ADC input as BG (1.1V)
      bitSet(ADMUX,MUX4);
      bitSet(ADMUX,MUX3);        
      bitSet(ADMUX,MUX2);
      bitSet(ADMUX,MUX1);        
      bitSet(ADMUX,REFS0);  // Set 5V as ADC reference voltage
    
      for (int i=0;i<7;i++){ // Perform several converstions for reading to settle
        bitSet(ADCSRA, ADSC);
        while (bit_is_set(ADCSRA, ADSC));
      }
      low  = ADCL;
      high = ADCH;
      return (high << 8) | low;
    }
    
    void setup() {
      Serial.begin(115200);
    }
    long movingSum;
    double movingAverage;
    void loop() {  
      movingSum = 0;
      for (int i=0;i<N;i++){
        movingSum += analogReadBG();
      }
      movingAverage = movingSum/ND;
      Serial.println(movingAverage);
      delay(1000);
    }
    
pregunta sas

1 respuesta

1

Parece que no se han tenido en cuenta dos grandes fuentes de error: el voltaje de referencia (voltaje de la fuente de alimentación USB), que fácilmente podría ser bajo en un 2%, y el error de ADC, que es del orden de 2 4LSBs. Ya que solo está utilizando el 20% más bajo del rango ADC, eso representa un error porcentual relativamente grande de 1-2% de la lectura. La promediación de muchas lecturas no reduce ninguno de esos errores.

También su número de 266.5 no tiene sentido con una referencia de 5.000V. Se esperaría 226.7 de su cálculo y 222.6 como el valor nominal exacto con una referencia de 5.000 V y una entrada de 1.087 V.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas