I'm looking to create an AD9833 function generator (and have been, for too long) and keep getting stuck on the hurdle of digital control. I'd like a good way to be able to vary frequency (easy enough), waveform (easy enough) and voltage offset + amplitude, preferably with no more than 100mV steps, and all digitally.

The design requirements:

  • Hopefully, +/- 12V operation (supplying this is not an issue)
  • Full use of the 12.5MHz bandwidth of the AD9833
  • Complete digital control of everything for software level frequency/voltage sweeps if wanted

My main issue is finding suitable ICs, my original thought was digital pots, but they have varying impedance over frequency range, and it feels like a poor solution. I've been looking into PGAs, but they all tend to have poor ranges for amplification, or are way way way overbudget for this, plus they don't solve the voltage offset issue. Also, the signal by the AD9833 is +ve biased, and different for the square output vs the analog outputs, so I can't seem to think of a good way to deal with this without some digitally controlled low ripple DAC trimmed to average 0.

Any help would be appreciated, more than anything I just need pointing vaguely in the right direction.

  • \$\begingroup\$ AD9834 would be better to be software controlled analog.com/media/en/reference-design-documentation/… \$\endgroup\$
    – Antonio51
    Sep 4, 2023 at 16:17
  • \$\begingroup\$ Oh that looks awesome for what I need, for controlling the offset could I then just use a unity gain opamp with a DAC? I've already got a handful of (more good than I need) dacs + op amps with suitable slew, if thats the case I'm ordering a handful ASAP \$\endgroup\$ Sep 4, 2023 at 17:00

1 Answer 1


The best option for varying amplitude is probably a programmable-gain amplifier (which you can get as a single IC, or make from an op amp and a digital potentiometer), and to set the offset you can use a voltage DAC feeding the reference node of the amplifier.

Be aware that typical voltage-feedback op amps have lower bandwidth at higher gains, so make sure you have adequate bandwidth at the maximum gain you need. At only 12.5 MHz, that shouldn't be too difficult. Just don't think you can use a 741 or 358 for this.

If you use a pre-made PGA (which I would recommend, as it's simpler to deal with), you probably won't get the voltage range you want--but if you follow the PGA with a fixed-gain amplifier, and just compensate for that in code, you can still get the variation you want and the range you want. Make sure to check slew rates too; you might need a bandwidth significantly higher than just 12.5 MHz if you want fast edge times. I don't know what the AD9833 can output.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.