1 votos

Entrada analógica dependiente de la cantidad de muestras utilizadas en el promediado

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

Código simplificado:

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

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

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

Gracias de antemano.

p.d: Sé cómo conseguir el cero constante mientras 'en el aire', la pregunta es un poco teórica.

1voto

chews Puntos 1507

Este es el aspecto del circuito de muestreo analógico a digital de ese chip...

enter image description here

Cuando empieces, es probable que la clavija que pase tenga algo de carga residual, lo que hace que aparezca un voltaje. Cada vez que muestres, un poco de esa carga se desprende para cargar el condensador interno. A medida que se va despidiendo más carga con cada muestreo posterior, el voltaje se acerca asintóticamente a Vcc/2.

En el lado opuesto, ese circuito de entrada tiene una impedancia de entrada muy alta, por lo que sólo se necesita un poco de carga para desarrollar un voltaje en el pin. Si conectas un cable colgante a la clavija, el cable se convertirá en una antena y el voltaje que leas en la clavija dependerá del CEM de la zona. En la mayoría de los lugares con corriente alterna, la frecuencia dominante de los CEM será de 50/60 Hz (dependiendo de dónde vivas) y procederá de las líneas eléctricas.

Hay otra posibilidad- sin ver el resto de su código, es posible que buffer se desborda. Si, por ejemplo, buffer es sólo un unsigned int , entonces eventualmente crecerá hasta ser mayor que 65536 (el mayor valor que puede contener un unsigned in) y se envolverá en un valor menor. Asegúrese de que buffer puede contener al menos 1024 * 5000.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X