Selecting a DDS / DAC arbitrary function generator IC for audio application

Thread Starter


Joined May 23, 2011
I need to drive an analog VCO chip with a time varying voltage based on arbitrary waveforms (for frequency control, LFO type)
The problem using a DAC for anything other than a DC voltage is that its registers needs to be updated continually at fixed time intervals.
If the DAC is Arduino controlled, that works well (circling through a lookup table) unless the MCU does anything intensive in the meantime, which is the case, that leads to delay problems.

As far as I know, here are my options :
-use a Raspberry Pi, or any MCU sufficiently fast (80+ Mhz CPU) with multithreading/RTOS option so that the timing discrepancies are not perceptible.
-use a MCU per DAC and one main MCU to rule them all. (with serial communication between the main / dedicated MCUs), making my own DDS in the process.
-use a DDS+DAC IC that is capable of executing repeatedly a waveform pattern, load the pattern once for all from the MCU until an update in the waveform is needed.

I would preferably go for option 3, because of the lower footprint.
I've looked at AD9106 but it seems real overkill for my application (the fundamental frequency of the repeating pattern would be in the LFO range, that is, up to 50 Hz at most)

Any ideas for a relatively simple DDS or even an advanced DAC with a repeating pattern feature ?


Joined Feb 29, 2020
I think you've got a handle on the tradeoffs involved. The ARB waveform is the issue- most DDS chips have sine ROM, very few have a RAM for the waveform lookup. The AD9106 is probably the cleanest solution. A DSP or a CPU with good DSP extensions like an ARM M4 (Teensy 3/4) might be good. What you want is DMA so that you can set this up and then let it run. Another common way to tackle this is with a small FPGA. A phase accumulator is pretty simple, you then just take the MSB though your lookup table and push out the waveform. You might look at a tear down of this $60 Chinese Arb Waveform generators, I think they use some cheap FPGA and a pile of resistors for the DAC- pretty clever overall. There were people trying to improve these little sig gens and a lot of reverse engineering went on Somewhat tore one of these down and showed how they work- Dave Jones of EEVBlog maybe?


Joined Feb 29, 2020
I just read your last sentence again- at 50 Hz, an Arduino with a timer interupt and a phase accumulator in software should be more than adequate. Just make the IRQ a high priority so you don't get jitter. You can also have the interupt fire a bit early and then wait in the ISR a little for the exact right time to eliminate jitter. It would pretty much consume an Arduino.