Electronic – arduino – Efficient way to get multiple analogue voltages out of an Arduino

analogarduinodachardware

I've read in my research that most microcontrollers are not built with DAC outputs as they are expensive to include on silicon chips. Also applications that require analogue outputs typically need a higher resolution than is feasible on a microcontroller and would probably use a dedicated IC anyway.

I am planning to build an analogue synthesizer with patch memory (storage and recall of voltage states). Apparently these functioned by reading the voltage of an analogue potentiometer into a microcontroller and applying a control voltage to the synthesizer using a DAC. This state could then be saved and recalled as 'presets'.


I would like to know a suitable way to control multiple analogue outputs to a circuit from an Arduino. The analogue outputs in most (if not all) Arduino boards are actually PWM, and I want to output a true analog signal.

Best Answer

The Due is the only Arduino board with a built in DAC. (Two of them.) If you need more than two outputs or want to use a board such as the Uno, then you need to consider building a DAC.

Option 1: PWM Using a RC-filter you can create a low-pass filter that allows you to create true analog voltages from a PWM pin. This method could be difficult to calibrate or may not work depending on the impedance of the circuit you are driving.

Option 2: R-2R The most common method is a R-2R ladder, explained here: http://en.wikipedia.org/wiki/Resistor_ladder

Option 3: DAC Chip The most efficient, but most expensive, method would be to use an external DAC chip. You can pick one that is designed specifically for the voltages you need and potentially find one with multiple outputs. Regardless, most DAC chips feature a SPI or I2C interface, so you can chain multiple chips to a single Arduino.

The Maxim MAX5214 is an example of a high resolution (14bit) single output DAC, with a SPI interface. http://www.maximintegrated.com/datasheet/index.mvp/id/7119