La entrada analógica depende de la cantidad de muestras utilizadas en el promedio

1

Encontré este problema usando arduino pero IMO esto se relaciona más con el eng electrónico. Uso pin0 sin ningún pull-up / pull-down / connection.

Código simplificado:

if (samplesQty >= 5000){
  Serial.println(buffer/samplesQty);
  buffer = samplesQty = 0;
} else { 
  buffer += analogRead(0);
  samplesQty++;
}

La pregunta es ¿por qué obtengo un valor ~ 450 (de un máximo de 1024) si tomo 2 muestras, ~ 390 si hay aproximadamente 800 muestras y 25 si hay 5700 muestras?

Definitivamente no estoy tomando todas estas muestras en consecuencia, es decir, si hay 800 muestras, hago un retraso de 1 ms después de samplesQty ++ , todas las muestras se toman en menos de 1 segundo.

Gracias de antemano.

p.s .: Sé cómo obtener un cero constante mientras 'en el aire', la pregunta es algo teórica.

    
pregunta z3dd

1 respuesta

1

Aquí es cómo se ve el circuito de muestra analógico a digital en ese chip ...

Cuando empieces por primera vez, es probable que el pin tenga algo de carga residual, lo que hace que aparezca un voltaje. Cada vez que muestrea, se descarga un poco de esa carga para cargar el condensador interno. A medida que se derrama más carga con cada muestra subsiguiente, cuanto más cerca se asintóticamente el voltaje llega a Vcc / 2.

En el lado opuesto, el circuito de entrada tiene una impedancia de entrada muy alta, por lo que solo toma un poco de carga desarrollar una tensión en el pin. Si conecta un cable colgante al pin, el cable se convertirá en una antena y el voltaje que lea en el pin dependerá de la EMF del área. En la mayoría de los lugares con alimentación de CA, la frecuencia EMF dominante será de 50 / 60Hz (dependiendo de dónde viva) que provenga de las líneas eléctricas.

Hay otra posibilidad: sin ver el resto de su código, es posible que buffer esté desbordado. Si, por ejemplo, buffer es solo un unsigned int , entonces eventualmente crecerá a ser más grande que 65536 (el valor más grande que puede contener un no firmado) y se ajustará a un valor más bajo. Asegúrese de que buffer pueda contener al menos 1024 * 5000.

    
respondido por el bigjosh

Lea otras preguntas en las etiquetas