Qué opciones para muestreo de audio de 16 bits a microcontrolador de bajo costo

Tenemos una plataforma basada en LPC1313 -- 72Mhz M3. Este y muchos otros microcontroladores con especificaciones similares parecen limitados a A2D de 10 o 12 bits.

Si quiero muestrear audio de un solo canal de 16 bits (16 kHz), ¿cuáles son mis opciones de diseño?

Lo que dijeron los otros chicos es todo cierto. Me gustaría agregar que un ADC o DAC "AUDIO" de 16 bits es realmente difícil de encontrar en estos días. Casi todos ellos son de 24 bits. Está bien simplemente desechar los bits adicionales si no los necesita o no puede usarlos. Y realmente no está pagando dinero extra por esos bits no utilizados.

Respuestas (3)

A nivel de diseño del sistema, hay cuatro formas básicas de hacer audio:

La primera es usar el ADC y/o DAC integrados incluidos con su microcontrolador. En su LPC1313, no tiene un DAC; tendrías que actualizar a un LPC17xx para obtener esto. También puede elegir un controlador diferente (deseche el LPC1313) que tenga los periféricos integrados necesarios. Esta es una buena opción si la calidad de audio no es un gran problema para su proyecto, el espacio es una limitación importante y su procesador tiene los periféricos necesarios. Esta no es una buena opción si la calidad del audio es extremadamente importante, si no puede cambiar los microcontroladores. No estoy seguro de cuál es su aplicación de destino, pero si está haciendo algo más que reproducir música, el ADC de 12 bits en el LPC1313 debería estar bien.

El segundo sería utilizar un microprocesador que tenga los periféricos necesarios como procesador esclavo y comunicarse con el maestro a través de SPI u otro protocolo. Esta es una buena idea si necesita hacer un procesamiento previo de su audio y su host no tiene el ancho de banda para hacerlo: incluso los DSP económicos pueden realizar un filtrado básico de manera eficiente y transparente antes de que su host vea los datos. Esta no es una buena idea si tiene limitaciones de espacio o costo, probablemente desperdiciará una gran cantidad de silicio y espacio en la placa en componentes no utilizados en el chip esclavo. Piezas como la línea ADAU17xx de Analog Devices desdibujan la distinción entre DSP y códecs; un ADAU1781 sería una buena opción para un controlador de interfaz de audio.

El tercer método es construir uno propio a partir de ADC, DAC y amplificadores operacionales discretos. Esto le da el mejor control sobre los resultados, y si quiere gastar el dinero, puede construir un sistema 'perfecto', pero va a ser difícil y costoso. Es posible que pueda encontrar un ADC diseñado específicamente para audio, TI tiene 18 dedicados a este propósito .

La cuarta y, en mi opinión, la mejor solución es utilizar un codificador/descodificador de audio dedicado. Este tipo de chip se conoce como "códec". El chip integrará ADC y DAC que son ideales para audio estéreo en un solo paquete, y puede direccionarlo a través de un enlace en serie desde su microcontrolador. Es posible que necesite o no un amplificador, dependiendo de su salida. Ejemplos serían piezas como el NXP UDA1344 o el TI AIC3104. Estos son casi siempre una buena opción, porque son fáciles de diseñar, ahorran espacio en la placa sobre componentes discretos y ofrecen una calidad muy alta. Probablemente haya un chip de códec en la mayoría de los dispositivos de audio que usa. Pueden ser costosos (aunque no en comparación con un sistema de calidad equivalente) y no hacen mucho sin un procesador host dedicado, pero son la opción estándar.

Gracias por la gran respuesta. Tengo otro seguimiento sobre el envío de datos en serie desde el códec. En última instancia, quiero PCM de 16 kHz y 16 bits. Escuché que para hacer esto bien y evitar el ruido, necesito obtener el códec para muestrear a una velocidad más alta (cf. Nyquist), enviarlo a uC y reducir la muestra y promediar los valores allí (para (anti-alias ). Esto agrega una carga en el microcontrolador para lidiar con la frecuencia de muestreo más alta (> 2x16 kHz). ¿No hará el códec este anti-aliasing por mí si lo pido para 16 kHz, 16 bits?

Un chip ADC separado le permitirá hacer coincidir el convertidor con cualquier CPU que necesite para el diseño. Digi-Key tiene miles para elegir.

Por cierto, una cosa que vale la pena señalar acerca de los convertidores de digital a analógico es que mientras que un convertidor de 16 bits (ADC o DAC) en teoría debería tener una relación señal-ruido de ~90dB independientemente del contenido de la señal (con más de un LSB de ruido, uno también puede tener un convertidor de 15 bits o más pequeño), muchos chips convertidores diseñados para cosas como el audio de la PC tienen características que variarán con la señal que se produce. Por ejemplo, cuando la ganancia se establece en un voltio a escala completa, es posible que puedan reproducir una señal de 1 mv con solo 0,05 mV de ruido u otra desviación del "ideal", pero al reproducir una señal de un voltio, puede haber más de 5mV de ruido o desviación. Al muestrear o generar audio con el fin de que alguien lo escuche, tal comportamiento probablemente esté bien. Puede ser problemático, sin embargo,

Toda su respuesta es sobre DAC, mientras que toda su pregunta es sobre ADC. ¿Me estoy perdiendo de algo?
Lo siento. Los mismos factores exactos se aplican a ambos; Editaré mi respuesta para reflejar eso.