¿Amplificador de audio controlando el volumen con Arduino?

Estoy construyendo un proyecto que emite audio a través de un Arduino a un altavoz de computadora con alimentación. Esta señal de audio proviene de una búsqueda de tabla de ondas sinusoidales que paso a varias frecuencias, configurando un pin PWM en wave_table[0], luego wave_table[1], etc...

Me gustaría modular el volumen de esta señal, pero no quiero simplemente dividir el valor de la tabla de ondas por un número entero porque me preocupa que distorsione el audio, en lugar de tener un rango de 0-255 para la onda sinusoidal, solo puede ir de 0 a 3, por ejemplo, y luego ya no es una buena forma sinusoidal.

¿Hay alguna manera de que pueda usar un segundo pin Arduino PWM para controlar un amplificador para cambiar la señal analógica que proviene del Arduino para modificar el volumen antes de que llegue al altavoz?

¡¡Gracias!!

¿Por qué no ejecutar el PWM más rápido y usar la misma muestra varias veces?
¿Qué frecuencias de audio estás tratando de producir?
Sí, dividir la tabla de entrada distorsionará la señal. Para empezar, un PWM de 8 bits solo le brinda una SNR de 48 dB, y cada división por 2 lo reduce en otros 6 dB. Esta es la razón por la que no ha visto DAC de 8 bits en tarjetas de sonido de computadora desde principios de la década de 1990.
Por cierto, sabe que los chips DAC de audio de alta calidad están fácilmente disponibles, que aceptarán una tabla de ondas digital en un bus común, ¿verdad? I²S es común, pero probablemente también puedas encontrar versiones I²C o SPI. Incluso puede encontrar uno con un control de volumen incorporado.

Respuestas (2)

Probablemente pueda usar un segundo PWM para generar un voltaje y luego enviarlo a un VCA, u obtener un potenciómetro digital externo (DPOT) y usarlo para cambiar la ganancia de un amplificador operacional si está dispuesto a agregar circuitos integrados adicionales. Sin embargo, si no necesita tantos niveles de volumen y ya tiene un montón de PWM de hardware en su Arduino, puede conectarlos a través de algunas resistencias en serie para crear un circuito de verano. Suponiendo que el parlante de su computadora tiene un amplificador incorporado con alta resistencia de entrada, debería poder agregar varias (por ejemplo, 4) salidas PWM juntas a través de resistencias de 1K.

Siempre que los PWM estén sincronizados como deberían estar, debería obtener 1/4, 2/4, 3/4 y amplitud total usando 4 canales (por ejemplo). Simplemente haga que todos generen lo mismo y apague algunos de los PWM (configurándolo para que sea un 0 digital) si desea reducir el volumen.

[EDITAR] En realidad, pensando un poco más en el problema, puede hacerlo con incluso menos hardware si usa las salidas digitales como atenuación. Considere el siguiente circuito:

esquemático

simular este circuito : esquema creado con CircuitLab

Cada E/S digital básicamente le brinda un bit de control de volumen, y puede obtener tantos bits como E/S adicionales tenga. Su volumen más alto sería con todas las E / S digitales configuradas en "Z alto" o entrada, ya que su amplificador solo vería el PWM. Configurar cualquiera de las E/S digitales para emitir con un valor de '0' atenuaría la señal (por ejemplo, si el 0 digital emitiera un '0', su señal de audio se atenuaría en un 50% debido a la división de voltaje). en el caso anterior, tendría 8 niveles de volumen, pero puede extender fácilmente el circuito si necesita más bits. También puede convertirlo en una disminución logarítmica eligiendo cuidadosamente los valores de resistencia.

interesante: ¿podría usar un potenciómetro digital y usarlo en un divisor de voltaje? De todos modos, necesito un divisor de voltaje para reducir los 5V a 0.5V.
Sí, puede usar un potenciómetro digital como divisor de voltaje, o simplemente usarlo como una resistencia controlada digitalmente para establecer su ganancia en un circuito de amplificador operacional.
@Zuofu: cambiar el nivel de volumen en el software probablemente no funcione. Los oídos humanos responden en una escala logarítmica, por lo que necesitas muchos "bits" para jugar. Presumiblemente, una señal de escala completa sale del sistema en algún lugar alrededor de 90 dB SPL. Si el OP necesita bajar a los niveles de la biblioteca (30 dB), debe dividir la señal generada por 1,000 y dejar suficiente rango dinámico para que la señal no sea empujada al ruido de fondo. No, un Digpot o VCA es un plan mucho mejor. Sin embargo, los PWM sumados podrían ser útiles para obtener > 48 dB SNR, como se obtiene con un solo PWM de 8 bits.
Puede jugar con el valor de las resistencias si desea que la salida se pondere de alguna manera. No será muy de alta fidelidad, pero hay algo de valor en el diseño de circuitos utilizando hardware que ya se ha comprado y pagado sin agregar a la lista de materiales. Los viejos chips de sintetizador como los que se encuentran en las primeras consolas de juegos básicamente usan los mismos trucos.

Puede usar un potenciómetro controlado digitalmente entre la salida del filtro y la entrada de audio. Aquí hay un ejemplo usando el DS1669. ( http://pdfserv.maximintegrated.com/en/ds/DS1669.pdf)http://pdfserv.maximintegrated.com/en/ds/DS1669.pdf

ingrese la descripción de la imagen aquí