Al configurar el tiempo de muestreo para el ADC interno de un microcontrolador (STM32F446RE) para muestrear la salida de un sensor de corriente conectado a un motor controlado por PWM, el muestreo se dispara a 100kHz y tengo una ventana de entre 3 y 225 ciclos de reloj del ADC (22,5MHz) sobre la que mantener el muestreador abierto - mi suposición es que cuanto más tiempo esté abierto menos ruido voy a ver en los resultados. ¿Es esto correcto, o hay un punto en el que entran en juego otros factores que harían preferible una duración de muestreo más intermedia?
Respuestas
¿Demasiados anuncios?Ese entendimiento es correcto. Si los relojes de tu ADC son lo suficientemente rápidos como para que puedas hacer 225 ciclos de adquisición para una muestra, entonces por supuesto que hazlo.
Lo que puede fallar, como en básicamente todos los ADC, es que puedes estar cargando la fuente de voltaje que estás observando con tu ADC. Por supuesto, cargar el condensador de muestreo y retención del ADC durante más tiempo puede aumentar la carga total, pero también puede permitir que la fuente de tensión se ponga al día. La cantidad de corriente que entra en el ADC o la capacidad de muestreo y retención puede leerse normalmente en la hoja de datos. Si tienes dudas, añade un seguidor de tensión.
simular este circuito - Esquema creado con CircuitLab
Añadir un seguidor de tensión es también una excelente oportunidad para añadir también un filtro RC de paso bajo, si tu señal, incluyendo el ruido, no está intrínsecamente limitada a la banda por debajo de la frecuencia de Nyquist . Su ruido tiene un ancho de banda (casi) infinito, pero su ADC sólo está pensado para observar \$f_\text{Ny}=\frac{f_\text{sample}}2=50\,\text{kHz}\$ ¡de ancho de banda! Por lo tanto, filtrar todo lo que esté por encima de los 50 kHz hará que se produzca menos ruido en los 50 kHz que observa:
El ADC, por supuesto, cargará el divisor de voltaje que es el filtro de paso bajo RC, pero con la baja impedancia de R1 y la suficiente fuerza de accionamiento de cualquier amplificador óptico, esto debería ser insignificante. Si lo consideras más de cerca, te darás cuenta de que C1 ahora suaviza el ruido para empezar, por lo que puedes reducir el tiempo de muestreo (si hay alguna otra razón para hacerlo, por ejemplo, la necesidad de una mayor velocidad de muestreo por razones de sincronización en la MCU).
Por supuesto, si usted sabe mejor que yo qué rangos de frecuencia está buscando, podría diseño un mejor paso bajo RC, o incluso un filtro activo avanzado con herramientas en línea (o con lápiz y papel). El filtro de corte de 50 kHz que he esbozado más arriba probablemente no sea una buena elección - ¡pero es difícil saber una buena elección cuando no sabes a qué frecuencias esperar los componentes de la señal! En un sistema PWM, sin embargo, esperas armónicos en cada múltiplo impar de la frecuencia PWM, mientras que probablemente te importa sobre todo la corriente que fluye en promedio a lo largo de unos pocos ciclos PWM a través de tu motor - modelar lo rápido que la corriente a través de tu motor es supuestamente cambiar, y filtrar para que esto se conserve, pero no frecuencias mucho más altas.
En general, si su CPU no se rompe a sudar con 100 kS/s, entonces puede optar por el filtro analógico de 50 kHz (o que su señal esté limitada en banda por debajo de eso desde el principio), y hacer el filtrado y la decimación en software: un simple filtro FIR¹ ejecutado en su ARM puede tener una respuesta en frecuencia mucho más pronunciada que un filtro analógico razonablemente complejo. Eso es lo que hacemos los radioaficionados: filtrar analógicamente todo lo necesario para que el ADC y el sistema de computación puedan tratar la señal, y luego hacer el filtrado fino en el dominio digital, donde las matemáticas son exactas (a diferencia de los condensadores del mundo real) y fáciles, y pueden ser de fase lineal.
¹ por favor, no construyas un Butterworth "sólo porque fue el primer filtro que encontré" - no es un tipo de filtro típico para los filtros digitales, y rara vez es realmente lo que la gente quiere, sólo es agradable porque es plano en banda pasante y fácil de construir en analógico, no en digital)
Muchos ADC tienen unos 5pF Csample, y 1Kohm Rseries (más la resistencia del canal del FET de muestreo). Esto es un TAU de 5.000 picosegundos.
El Neper le indica la mejora de la precisión, dada cada Tau adicional de asentamiento.
Neper = 8,6 dB por Tau, es decir, unos 1,6 bits.
Para un ADC de 16 bits, se necesitan 10 nepers o 10 Tau de asentamiento, o 5*10 = 50 nanosegundos.
¿hay algún punto en el que entren en juego otros factores que hagan preferible una duración de muestreo más intermedia?
Una de esas razones podría ser sobremuestreo la señal, lo que significa tomar múltiples muestras de ADC y luego combinarlas en el software. Dependiendo del método utilizado para combinar/desmuestrear, esto puede reducir el ruido o aumentar la resolución, o ambas cosas.
Por ejemplo, si se toman 4 muestras en lugar de 1 y se suman, se suele reducir a la mitad el nivel de ruido y, por tanto, se aumenta la resolución en un bit. Pero un simple filtro de suma sólo funciona bien si el ruido es blanco, y puede aumentar el nivel de ruido si hay una señal de ruido de alta frecuencia.
En cualquier caso, tener más muestras disponibles para el software da más libertad de procesamiento de la señal, aunque requiere más potencia de la CPU y un menor tiempo de muestreo.