Escogiendo un DAC para un amplificador de audio

3

Estoy tratando de usar un amplificador de audio específico, TPA3111D1 , para alimentar Un altavoz de 10 vatios de un microcontrolador. Me gustaría generar sonido desde un microcontrolador que no tiene un DAC integrado, por lo que estoy buscando un buen DAC que funcione con este amplificador. El amplificador permite entradas de fuente de audio única o diferencial y me gustaría que el DAC funcione con entradas TTL de 0 a 5 V desde 16 pines del microcontrolador.

Creo que 16 bits deben ser del tamaño apropiado para el DAC pero hay muchos para elegir. Si alguien tiene un buen tutorial sobre cómo usar un DAC para la generación de audio desde un microcontrolador, me encantaría verlo. ¿Alguien puede sugerir un DAC o al menos reducir mi búsqueda un poco? Gracias!

    
pregunta wcmartin

3 respuestas

4

Los DAC tienen diferentes requisitos según la aplicación. Encontrará soluciones de alta precisión que utilizan componentes caros para obtener una buena precisión absoluta, pero en el audio no necesita eso. La linealidad es el parámetro más importante.

Ya que usará un ATmega2560 que viene en un paquete de 100 pines. Probablemente pueda ahorrar 16 E / S, y luego elegiría E / S paralela. Tendrá menos problemas de tiempo que cuando trabaje con E / S en serie como I2S .

  

editar
  Will parece favorecer a I2S y tiene un punto a condición de que desee conectarse a otro equipo de audio (semi-) profesional . Según tengo entendido, su ruta de audio digital es muy local, restringida a la conexión entre su AVR y el DAC. Y luego me quedaría con el paralelo. Para una frecuencia de muestreo de 44.1 kHz, elija un cristal que le permita obtener una interrupción cada 22.676 \ $ \ mu \ $ s. Use la interrupción para bloquear automáticamente la última muestra en el DAC, y luego tiene mucho tiempo para preparar su próxima muestra. Ese es el único momento del que dependes. Con I2S por otro lado tendrás más cosas que hacer. Puede usar SPI para desplazar los datos, pero en el medio de una palabra tendrá que alternar el reloj de la palabra. Cosas de las que no tiene que preocuparse con la E / S paralela.

El ADC más simple es una escalera de resistencia R-2R . La linealidad depende de la coincidencia de las resistencias, y ahí radica el problema de una solución discreta. Necesitarías resistencias de precisión bastante caras. El enfoque integrado es mucho mejor. El AD5547 también utiliza una red de escalera R-2R (vea la figura 17 en la página 12 ), entonces, ¿por qué es esto mejor que discretos? Las resistencias integradas (y los condensadores) pueden tener cierta tolerancia en su valor nominal, pero su coincidencia mutua es lo mejor que puede obtener. Entonces, los resistores 80k \ $ \ Omega \ $ pueden tener un valor de 80.5k \ $ \ Omega \ $, pero está seguro de que son todos ese valor, y eso es más importante que el valor real en sí.
El AD5547 acepta una fuente de alimentación de 5 V y tiene una entrada paralela de 16 bits.

Elesquemadelaaplicaciónesdela hoja de datos , así que mire allí esto no es muy legible.

El DAC está registrado, lo que significa que puede usar el pestillo para actualizar varios DAC simultáneamente, pero también puede hacerlo asíncrono y transparente al hacer que / WR bajo y LDAC alto (consulte la página 13). Entonces la salida se actualizará continuamente. ¡Pero esto solo es posible si todas las entradas se actualizan simultáneamente! Con un microcontrolador de 8 bits probablemente escribirá en 2 puertos de E / S, ¡y luego necesitará el pestillo!
Como la mayoría de los DAC, es la salida de corriente, por lo que necesita convertirla a voltaje. En esta aplicación con el AD8628, utilizan un operador de RRIO (E / S de carril a carril) cuyas especificaciones coinciden con la resolución requerida, pero puede usar otro operador si lo desea.
El ADR03 es una referencia de voltaje de precisión, baja deriva, etc., que para una aplicación de audio es excesivo. ¡Sólo asegúrese de que su referencia de voltaje esté libre de ruido y rizado!

editar
David comenta con razón que esta es una tecnología algo más antigua, pero pensé que está bien, ya que de todos modos estás usando un microcontrolador (en lugar de un DSP) y un amplificador de clase D que no es perfecto. Elegí esto para mi respuesta también porque es fácil de entender.
David también menciona los DAC sigma-delta, que ciertamente tienen un mejor rendimiento, pero su principio de funcionamiento es un poco más complejo, y están (casi?) Sin excepción, controlados en serie, para los cuales el AVR no tiene el hardware.

    
respondido por el stevenvh
2

Supongo que este es un proyecto de hobby, y si es así, entonces la otra respuesta probablemente esté bien. Pero si este es un producto real, debería buscar un micro con una interfaz I2S y luego usar un DAC de audio adecuado (que podría llamarse un 'códec') diseñado para ejecutarse con eso.

Casi todo el audio D-to-A se realiza con partes I2S: aquí hay un toda la página de ellos, seleccionados sin mi cuidado o aprobación particular, pero le da una idea de los niveles típicos de integración.

Y aquí hay una nota de aplicación (de Atmel, por casualidad) sobre la adición de periféricos I2S a un micro no I2S. Que alguien piense que vale la pena tanto esfuerzo para llegar a I2S le da una idea del significado de la interfaz en este nicho.

I2S es extremadamente simple: no es como familiarizarse con USB o PCI, pero para un rendimiento realista, querrá un micro con soporte de hardware incorporado.

    
respondido por el user1844
2

Ok. A instancias de @stevenvh, así es como lo haría ...

La unidad uC que eligió no tiene una interfaz similar a I2C que normalmente se conectaría, más o menos, directamente a un DAC de audio. La solución ideal sería elegir otra unidad de usuario que soporte I2C directamente, pero, por supuesto, no siempre tenemos ese lujo. Podríamos usar algunos de los puertos de E / S en el uC, pero eso requeriría una gran cantidad de pines / señales. Una cosa que podría usarse es el periférico maestro SPI. Entonces, esto es lo que propongo.

Use un CPLD barato para conectar el puerto SPI en la unidad de control de datos con el puerto I2C en un convertidor de audio típico.

Comience con un oscilador de frecuencia apropiada, tal vez 24.576 MHz para una frecuencia de muestreo de 48 KHz. En el CPLD tienes un contador que se ejecuta fuera de este reloj. La salida del contador se utiliza para generar todos los relojes de audio: MCLK, BITCLK y LRCLK. También se utiliza para generar una o dos señales de control.

Otra sección del CPLD es un registro de desplazamiento de RX. El RX SR puede tener una longitud de 16, 24 o incluso 64 bits. Obtiene sus datos de la interfaz SPI en la unidad de control de datos, y transfiere sus datos al registro de cambios de TX a intervalos regulares. El registro de cambios de TX es del mismo tamaño que el registro de cambios de RX, y registra sus datos en el DAC a la misma velocidad que BITCLK.

El tamaño ideal de los SR es realmente un acto de equilibrio. Está equilibrando el tamaño del CPLD frente a la sobrecarga del software frente al número de bits en su audio. Por el momento, asumamos 1 canal de audio de 16 bits.

Para este ejemplo, los SR tienen 16 bits de longitud. Al comienzo de la muestra, el CPLD genera una IRQ a la CPU. La CPU responde enviando la siguiente muestra de 16 bits a través de la interfaz SPI al RX SR. Al final de la muestra, o al comienzo de la siguiente, los datos del RX SR se cargan en el TX SR, donde se transfieren al DAC. Por lo tanto, en un momento dado, podrían ocurrir dos transferencias al mismo tiempo: SPI a RX SR y TX SR a DAC.

El TX SR se configura de modo que a medida que los datos se desplazan, los ceros se desplazan hacia adentro. En realidad, envía 64 bits de datos al DAC, pero está bien si los bits "no utilizados" son todos cero.

Si desea enviar audio de 24 bits en lugar de 16 bits, simplemente alargue sus registros de desplazamiento a 24 bits. Pero si quieres ir al audio estéreo las cosas se ponen un poco más complicadas. Sé que al OP solo le importa el audio mono, pero lo incluiré aquí para que esté completo.

Puede elegir: puede dejar los SR a 16 o 24 bits, pero ejecutar los IRQ dos veces más rápido (y cargar el TX SR dos veces más rápido). O puede alargar los SR a casi 64 bits. La primera opción mantiene el CPLD pequeño, pero duplica la cantidad de IRQ que debe realizar. La segunda opción está invertida.

Para un canal simple de audio de 16 bits, necesitará un CPLD con aproximadamente 48 Flip-Flops: contador de 9 bits, dos SR de 16 bits, tres relojes de salida, un IRQ y un par de extras. Esto encajaría en una parte de Xilinx Coolrunner-II 64-macrocell que se ejecuta alrededor de US $ 1.50 en volúmenes medios. Altera tiene algunas partes de Max V que son más ricas en Flip-Flop que podrían ser más baratas.

En cuanto a un DAC adecuado, hay docenas para elegir. Cirrus Logic, Texas Instruments (Burr Brown) y AKM son los tres primeros que elegiría. Todos ellos tienen un DAC estéreo de bajo costo que funcionará bien. Cuanto más simple, mejor. Me gusta el Cirrus Logic CS4334 / 35/38/39 . Digikey tiene la parte por US $ 3. Pero los otros muchachos tienen partes muy similares por un costo similar.

    
respondido por el user3624

Lea otras preguntas en las etiquetas