AD9833
The AD9833 is a programmable waveform generator. It is capable of producing sine, triangular, and square wave between 0MHz to 12.5MHz with a resolution of 0.1Hz.
It is used in the CJMCU-9833 signal generator module.
The data sheet can be found at: https://www.analog.com/media/en/technical-documentation/data-sheets/AD9833.pdf
CJMCU-9833 Module Usage
The CJMCU-9833 module bundles the AD9833 with the required 25MHz reference clock. The internal DAC is a 10-bit DAC with an on-board 200 ohm resistor and outputs a voltage of 0.6V peak to peak.
The module wirings are:
Pin | Description |
---|---|
REF | output from onboard 25MHz clock |
VCC | 2.3V - 5.5V input |
GND | |
DAT | data, MOSI |
CLK | clock, SCK |
FNC | Fsync, SS |
OUT | Signal Output |
The module has a 0.1uF ceramic capacitor and 10uF tantalum capacitor in parallel with the power input to the AD9833 as required by the data sheet.
Interfacing with the AD9833
Regardless of whether you're using the module or working with the chip directly, you control the unit by sending a 16bit control word via the SPI serial interface. This control word defines the configuration of the AD9833 and how it should operate.
Bits counted from 0...
When I refer to the 1st bit, I mean1UL << 1
.There are 4 additional registers that specify the frequency (FREQ0, FREQ1 -- both 28 bits each) and phase (PHASE0, PHASE1 -- both 12 bits each).
The frequency registers can be written to by setting the 13th bit of the control word followed by 2 16-bit words containing the LSB and MSBs of the 28-bit frequency value. Each of these words contain 2 bits for the target register (FREQ0, 01 or FREQ1, 10) with the remaining 14 bits for the frequency.
The phase is set by writing to the control word with bits 14 and 15 set, with the 13th bit defining whether it's for PHASE0 or PHASE1, followed by 1 bit that's ignored, then the 12 bits.
Working with the Output
The output signal will need be amplified if you want to use it as a proper signal generator. You could use a digital potentiometer such as X9C104P to make the signal's amplitude something desirable.
For something more serious, you can look at the schematics for the Ascel ae20125 function generator which also uses the AD9833 as a signal generator. The ae20125 uses a LM6181 opamp as well as provide the ability to control the signal's amplitude and DC offset.
See Also
There are some other instructable projects that build on this module, including:
- A less finished version: https://www.instructables.com/id/Signal-Generator-AD9833/
- A more detailed version: https://www.instructables.com/id/Portable-Function-Generator-on-Arduino/
- Ascel ae20125 manual and schematics: http://ascel.de/download/ae20125/ae20125_manual_en.pdf