Looking for DDS generator chip with arbitrary waveform - Page 1
Forum section: electronics / projects

author: leonerd
author_rank: Regular Contributor
timestamp: April 11, 2022, 01:51:39 pm
content: Analog Devices make some nice and quite cheap DDS synthesizer chips, like theAD9833orAD9834, which easily allow you to output a sine wave at a pre-programmed frequency. But what if you don't want a sine; you wanted some other shape?I imagined someone would make a chip similar, but uses RAM instead of the hard-coded sine function ROM, which would then allow you to make any custom wave shape at any frequency. But I'm having trouble finding anything at all like that. I'm aware of the AD9102, which has a "pattern RAM" inside. But it can't do waveform generation out of that; it uses that for a programmed pattern of frequency or phase modulations of its (fixed sine) DDS engine. I know fancy solutions to this often involve a high-speed DAC connected to an FPGA, but that involvesseriousamounts of money and development software/hardware to create such an FPGA.Does anyone do a pre-made chip for it?

author: ledtester
author_rank: Super Contributor
timestamp: April 11, 2022, 02:54:51 pm
content: What specs do you need? Clock speed, buffer length, etc.What about using an RP2040?https://www.instructables.com/Arbitrary-Wave-Generator-With-the-Raspberry-Pi-Pic/and:https://www.instructables.com/Poor-Mans-Waveform-Generator-Based-on-RP2040-Raspb/For a better DAC you can use the Alinx AN108 board:https://www.davidpilling.com/wiki/index.php/AN108?setskin=blog

author: MarkF
author_rank: Super Contributor
timestamp: April 11, 2022, 03:31:46 pm
content: There is theAnalog Devices AD9102. It looks like a bear to program though.

author: hgl
author_rank: Regular Contributor
timestamp: April 11, 2022, 10:08:21 pm
content: Take a look at the AD9910. It has a ramp generator, internal memory and a fast parallel interface. With this you can control frequency, phase and amplitude.As an example: triangle generated with the ramp generator.

author: leonerd
author_rank: Regular Contributor
timestamp: April 12, 2022, 10:29:32 am
content: Quote from: ledtester on April 11, 2022, 02:54:51 pmI think "need" is a strong word hereI'm really looking for something DIY'ed that's just better than I can make out of an AD9834. I'd say, if i can make 10MHz or so, with 256 8bit samples, I'd consider that good enough. Anything bigger/better would of course be niceQuoteOoh, cute. I hadn't imagined an RP2040 would be anywhere near fast enough, but actually that doesn't look too bad.It's not really a true fractional DDS though. A fractional DDS has a counter that is far wider than the count used to address the lookup table; it uses those fractional bits to carry over an increased resolution. E.g. the AD9834 uses a 28bit phase accumulator counter, only the top 14 bits of which are used to address the Sine ROM lookup table to convert it to a 10-bit DAC code. The more bits in your phase accumulator, the more precisely you can control the frequency.The way this is implemented on the RP2040 looks like an interesting use of the available DMA and PIO hardware, but it doesn't look possible to add fractional support into that.

author: leonerd
author_rank: Regular Contributor
timestamp: April 12, 2022, 10:33:00 am
content: Quote from: MarkF on April 11, 2022, 03:31:46 pmYes, I mentioned the AD9102 already. From the headline bullet points you'd think it lets you use the internal RAM as a DDS wavetable. But no, it can't. This chip can generate plain sine waves from its internal DDS engine, using the RAM to store modulation parameters; letting you do things like FSK and PSK on top of that generated sine wave. But the main carrier is still a fixed sine wave from fixed ROM.Quote from: hgl on April 11, 2022, 10:08:21 pmAs with the AD9102, this chip also uses that internal RAM to store control parameters for the fixed-sine DDS engine; this time allowing control of amplitude as well as frequency and phase, so letting you do ASK as well as FSK or PSK. But still, the actual output is just a sine wave. Additionally this chip does let you do some fancy control of sawtooth-type waves, with custom control of rising and falling edge times and top dwell time. It's parametric but it's not a true lookup-table style AWG.

author: DC1MC
author_rank: Super Contributor
timestamp: April 12, 2022, 10:38:04 am
content: Quote from: MarkF on April 11, 2022, 03:31:46 pmHuh ?!? you can program them with an Arduino classic, the development kit is specially designed for it ?!?

author: leonerd
author_rank: Regular Contributor
timestamp: April 12, 2022, 10:45:26 am
content: Quote from: DC1MC on April 12, 2022, 10:38:04 amIndeed; it's just SPI so really you can talk to it from any sort of microcontroller, PC-attached SPI master, or anything similar.I suspect what MarkF may have meant is more that it's quite a complex chip with lots of inter-relating features and controls on it, so the work of understanding and designing something to control it isn't easy.

author: RoGeorge
author_rank: Super Contributor
timestamp: April 12, 2022, 10:52:09 am
content: Quote from: leonerd on April 11, 2022, 01:51:39 pmSeems like you are looking for an AWG (Arbitrary Waveform Generator).A DDS works differently:https://en.wikipedia.org/wiki/Direct_digital_synthesisTektronix - Choosing Between Direct Digital Synthesis (DDS) and Variable Clock Architecture ("True Arb")https://www.eetree.cn/wiki/_media/tek_awg.pdfI don't know any AWG single chip, and I don't think there are any single chip AWG - would be too impractical, or too limited to a small and frozen design - so an AWG is usually found as an entire instrument, made out of many specialized chips: Clock + MCU + RAM + FPGA + DAC etc.

author: Marco
author_rank: Super Contributor
timestamp: April 12, 2022, 04:05:14 pm
content: If you can change the phase of a sinewave per sample can't you just use that for AWG?

author: Terry Bites
author_rank: Super Contributor
timestamp: April 12, 2022, 04:22:21 pm
content: OLd school. Some SRAM and a DAC. You can remove processor overhead with a simple address counter. Keep your presets in EEPROM, load them to RAM keep on clocking....I'm not sure if there is a big enough markets to support an ic that performs arb.

author: ledtester
author_rank: Super Contributor
timestamp: April 12, 2022, 06:27:01 pm
content: Quote from: leonerd on April 12, 2022, 10:29:32 amThat's true, but the rather large amount of memory you can use for the waveform data effectively gives you back some bits.

author: hgl
author_rank: Regular Contributor
timestamp: April 12, 2022, 07:55:49 pm
content: You can set phase and frequency to zero and manipulate only the amplitude as I did with the internal ramp generator. This is also possible over the parallel interface, with up to 100 Mhz clock. The 3 parameters are independent of each other. The internal ram is a bit too small.At ebay you can find boards with the chiphttps://www.ebay.de/itm/142445980703?hash=item212a712c1f:g:XBcAAOSw3QpZaZFj

author: ledtester
author_rank: Super Contributor
timestamp: April 13, 2022, 04:36:54 am
content: Quote from: hgl on April 12, 2022, 07:55:49 pmDepending on how exacting your requirements are you have to be careful about those aliexpress/ebay boards. These guys spun their own design after testing one bought on ebay:https://create.arduino.cc/projecthub/afch/rf-signal-generator-dds-arduino-shield-ad9910-600mhz-1e086fand:https://gra-afch.com/catalog/rf-units/dds-ad9910-arduino-shield/Quote from: leonerd on April 11, 2022, 01:51:39 pmHere's a somewhat recent DIY project that someone could start from:https://github.com/ts-manuel/DDS-Function-Generator

author: Circlotron
author_rank: Super Contributor
timestamp: April 13, 2022, 09:45:48 am
content: Quote from: leonerd on April 12, 2022, 10:29:32 amThat's rather interesting. Can someone point me to somewhere that explains this technique of increasing the frequency resolution in a bit more detail?

author: Someone
author_rank: Super Contributor
timestamp: April 13, 2022, 10:01:15 am
content: Quote from: Circlotron on April 13, 2022, 09:45:48 amSomeonecan:https://en.wikipedia.org/wiki/Numerically-controlled_oscillator

author: mogad
author_rank: Newbie
timestamp: December 16, 2024, 04:38:22 pm
content: (Registered to EEVb forums for this.)I think you might have missed some stuff in the AD9102's documentation. It should very much be able to generate an arbitrary waveform as you expect.There are many registers to program for that to work properly. Among other things, you need to:Set waveform select to SRAM in WAV_CONFIG (Register 0x27).Otherwise it has a "burst/periodic" mode selection, a "run" bit, a trigger input, pretty much everything a bench AWG has.See page 30 in the datasheet for setup instructions, and page 31 for an exmple waveform on a scope.I'm now ordering the Mikroe Waveform 4 Click which has the AD9106 which is essentially a quad AD9102.