Abstract
Sophisticated users may sometimes find themselves juggling with multiple audio input and output devices. We attempt to create a reference design of an audio-mixer to facilitate the combination and control of these devices, and in part, learn how to design audio circuits. After reviewing requirements, the approach is to take in and equally mix two stereo inputs, and have the result split into two separate audio outputs. Each audio output has its own digital potentiometer and line driver.
After some experimentation of the reference DRV632 amplifier design, we achieve a reasonable quality of audio for both standard headphones and amplified speakers. With minimal user inputs and controls. the on-board AT-mega328p allows different behaviors to be programmed. For this case, we allow the user to set the volume of each output via the rotary encoder, and another switch controls the fading between these outputs. This allows us to gracefully toggle between different audio outputs.
Amplifier
First, we realize that driving low-impedance loads (such as headphones, big or small) while using a simple digital potentiometer as a volume control is not trivial. As it would be a good practice to take a page from modern mature products, we refer to the teardown of the Chromecast Audio (https://www.ifixit.com/Teardown/Chromecast+2015+Teardown/50189) and it reveals the use of the DRV632. As a typical audio signal is about 1 volt peak-to-peak, we expect the input and output signals to be between +0.5V to -0.5V. The key benefit of this amplifier is that it does not require an external negative power supply nor output DC-blocking capacitors while ensuring that the output is conformant. It has an internal charge pump to generate the required negative voltage.
Fig 1. Amplifier testing on breadboard.
Brief breadboarding is done by hand to quickly test out this amplifier, try mixing different inputs, and attempt to evaluate how "noisy" it is. While initial assumptions of noise was due to long wires and haphazard resistor combinations, I actually forgot the first basic rule of using op=amps: Always ground unused inputs. Nevertheless, it felt fine and I went ahead to draw out the whole shebang.
With an Atmel mega328p at the core, it remembers the last-set output volume of each output. A rotary encoder and LEDs allows the user to adjust the volume of each output, or control the amount of "fading" between outputs. A switch allows an fading between outputs to be controlled by an external event.
// TODO