Tengo una MCU que controla un DAC de 16 bits a través de SPI (y una salida LDAC adicional, que activa la actualización de la salida DAC). La MCU tiene una onda sinusoidal de 1120 Hz precalculada en un búfer largo de 364 bytes (todos los cálculos en float32, redondeados a uint16 para la salida DAC), muestreada a 29120 Hz. En una interrupción del temporizador, la actualización del DAC se activa a través de LDAC y luego se carga un nuevo valor desde el búfer y se envía a través de SPI. La actualización al último valor se activa al principio para reducir la fluctuación debido a las carreras de acceso a la memoria contra DMA. La interrupción tiene una prioridad lo suficientemente alta como para no retrasarse.
Aunque visualmente el seno se ve bien , la FFT de mi Rigol DS1054Z detrás del DAC (antes del filtro de reconstrucción) muestra una distorsión significativa:
El pico más alto es el requerido de 1120 Hz, otros están igualmente espaciados por 260 Hz. ¡El pico derecho parece estar solo 5dB por debajo del principal!
El jitter en el pin LDAC es del orden de +/- 0.25us, lo que consideraría aceptable frente a 34.3us de tiempo de muestra. El temporizador en sí se ejecuta desde el cristal de MCU y debería ser lo suficientemente estable.
¿Qué tipo de problema conduciría a tal patrón de distorsión? ¿Cuáles podrían ser las formas de diagnosticarlo y reducirlo?
Por si acaso, el DAC es un AD5686, la referencia de escala completa es de 5 V, la amplitud sinusoidal es de 25 mV, lo que da como resultado que aproximadamente los 10 bits inferiores se "conmuten".
Conecté un generador de señal de laboratorio a la entrada del osciloscopio para compararlo con la señal medida y, sorprendentemente, vi exactamente el mismo espectro en su FFT. Subiendo la frecuencia, los subarmónicos desaparecieron a 1250 Hz. Cambiar la profundidad de la memoria en la configuración "Adquirir" de Auto a 6K eliminó el efecto. Parece que se está produciendo algún tipo de problema de aliasing en la FFT del DS1054Z.
===
EDITAR: si observa detenidamente la imagen, verá una frecuencia de muestreo de 5 kHz en la ventana FFT. Hubiera sido demasiado menos probar la salida DAC antes que el filtro. Es sorprendente que todavía se vea igual si se le proporciona una señal limpia de 1120 Hz, ya que todavía está por debajo de la frecuencia niquist.
david tweed
Andy alias
Andy alias
Neil_ES
mav
mav
david tweed
mav
Nils Pipenbrinck