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); }