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 1120Hz precalculada en un búfer de 364 bytes de longitud (todos los cálculos en float32, redondeados a uint16 para la salida DAC), muestreados a 29120Hz. En una interrupción de 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 el jitter debido a las carreras de acceso de memoria contra DMA. La interrupción tiene una prioridad suficientemente alta para no retrasarse.
Aunque visualmente el seno se ve bien , FFT de mi Rigol DS1054Z detrás del DAC (antes del filtro de reconstrucción) muestra una distorsión significativa:
Elpicomásaltoeselrequeridode1120Hz,otrosestánespaciadosporiguala260Hz.¡Elpicocorrectopareceestarsolo5dBpordebajodelprincipal!
EljitterenelpinLDACesdelordende+/-0.25us,loqueconsideraríaaceptablefrentealtiempodemuestreode34.3us.EltemporizadorseejecutadesdeelcristaldeMCUydeberíaserlosuficientementeestable.
¿Quétipodeproblemallevaríaatalpatróndedistorsión?¿Cuálespodríanserlasformasdediagnosticarloyreducirlo?
Soloenelcasorelevante:elDACesunAD5686,lareferenciaaescalacompletaes5V,laamplitudsinusoidales25mV,loquehacequeaproximadamentelos10bitsmásbajosse"cambien".