Pregunta:
¿Cómo puedo filtrar el ruido de las líneas ADC sin demora ni cambio de señal?
user862
2014-03-30 03:24:57 UTC
view on stackexchange narkive permalink

Estoy trabajando en un proyecto con un joystick y trato de mantener todo lo más simple y con la menor latencia posible. Estoy leyendo las ollas con el ADC de 10 bits integrado en el ATmega 32u4, pero es posible que esté actualizando a un ADC de 16 bits o un ADC de 24 bits. ¿Cómo puedo filtrar el ruido de las señales?

¿Ya ha intentado promediar varias lecturas? ¿Utiliza el modo de reducción de ruido ADC?
lo intentaré ahora
¿Cómo se utiliza la reducción de ruido incorporada en el 32u4 del entorno de programación arduino?
No directamente. Debe pasar al código AVR sin procesar (aunque no * ensamblado *, solo manipulación directa de registros).
# no tengo ni idea de por dónde empezar con eso
tampoco estoy seguro de cuál es la mejor manera de implementar las lecturas múltiples
Además, promediar las lecturas tampoco funcionará, no quiero "suavizar la respuesta del joystick
¿Qué tipo de ruido recibes? ¿Alta o baja frecuencia? Tal vez su mejor opción sea utilizar un filtro RC simple, de paso alto o bajo, según el ruido que desee reducir.
La hoja de datos tiene un capítulo sobre el ADC y habla sobre la reducción de ruido. Hay muchos aspectos de la reducción de ruido, entre los que se encuentran los estados de suspensión y los rieles de suministro de energía analógicos filtrados. Para usar ADC de 16 bits (por no hablar de 24 bits, que es prácticamente de vanguardia) según las especificaciones, necesita un circuito y PCB muy bien diseñados y componentes de calidad. De lo contrario, es solo una pérdida de dinero. Puede comenzar cambiando el voltaje de referencia a una de las referencias internas de banda prohibida. * ¿Cuál es el problema exacto que está tratando de resolver? *
Esto suena un poco como otro problema XY http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem.
¿Cuál es el problema que está tratando de resolver? Incluso si tira 2 bits de los 10 bits de ADC debido al ruido, todavía tiene 256 niveles discretos, esto es mucha precisión. ¡Creo que los controladores de PS3 solo tienen 16!
Y con respecto a la latencia, ¿sabes cuánta latencia es demasiada latencia? No tiene sentido pasar horas tratando de obtener lecturas de ADC de 16 bits de bajo ruido a 1000 / s cuando solo podría promediar lecturas de ADC de 10 bits a 100 / s.
Tres respuestas:
#1
+5
David Cary
2014-11-10 22:25:03 UTC
view on stackexchange narkive permalink

La hoja de datos Atmel ATmega328, sección 24.6.1, recomienda que maneje el pin de entrada analógica con una impedancia de salida de 10 KOhm o menos. Además, recomienda que elimine los componentes de alta frecuencia con un filtro de paso bajo. (Ese paso bajo a veces se llama filtro antialiasing).

El filtro de paso bajo más simple posible es una resistencia y un condensador.

  + 5V + 5V | | (sensor) --- resistencia --- + --- (Arduino) | | | | condensador | | | | GND ---------------- GND -------- GND  

Contrariamente a la creencia popular, no es posible hacer un filtro antialiasing en software.

Para un prototipo inicial de baja resolución, una regla general rápida es elegir la constante de tiempo RC al menos 10 veces mayor que el tiempo entre muestras.

Entonces, si está muestreando alrededor de 1000 muestras / segundo (es decir, un intervalo de muestreo de 1 milisegundo), entonces 100 ohmios de resistencia y (aproximadamente) un capacitor cerámico de 100 uF pueden ser adecuados (la constante de tiempo RC aquí es RC == 100 ohmios x 100 uF = 10 milisegundos).

Muchos joysticks ya tienen una impedancia de salida relativamente alta; necesitará usar una resistencia con mucha menos resistencia para compensar (a veces no necesita ninguna resistencia adicional; pero aún necesita ese capacitor entre el pin de entrada analógica de Arduino y el pin de tierra de Arduino). (Muchos sensores tienen una impedancia de salida de más de 10 KOhm; las personas que los usan se ven obligadas a usar un chip de amplificador operacional para obtener señales limpias).

Se han escrito libros completos sobre filtrado de señales. muchas otras técnicas para obtener señales analógicas de mayor resolución, recopilación de datos a mayor velocidad e intercambiar entre ellas, pero probablemente sean excesivas para leer la posición de un joystick.

#2
+2
asheeshr
2014-03-31 08:29:01 UTC
view on stackexchange narkive permalink

Un enfoque posible es optar por una solución del lado del software.

Microsmooth es una biblioteca de procesamiento de señales en la que estoy trabajando y que está diseñada específicamente para baja latencia, baja suavizado de la señal de memoria. Todavía está en desarrollo, pero incluso ahora, la mayoría de los filtros funcionan en menos de 100 microsegundos por llamada y brindan una precisión y suavidad bastante buenas. Además, el archivo de encabezado permite una configuración simple para ciertos parámetros de filtro.

#3
-1
user7682
2015-03-04 14:19:10 UTC
view on stackexchange narkive permalink

El ruido de los potenciómetros del joystick ahogará cualquier resolución superior a ocho bits independientemente. Fueron diseñados para el puerto de juegos muy crudo en una PC y usan un limpiaparabrisas de cobre sobre una losa de carbono. No es una receta terrible para un generador de ruido.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...