This project is based on a set of Python and C++ libraries for real-time control of an AD9958 direct digital synthesizer (DDS). The synthesizer has been successfully implemented in the group of Prof. Morgan Mitchell (ICFO) for RF/MW state preparation and manipulation of a Rb 87 Bose-Einstein Condensate.
The operation of this real-time RF source can be understood in terms of 3 effective layers.
- The first one is a Python API, designed to send commands to the RF synthesizer in a comprehensive and user-friendly way. Behind the scenes, this layer converts the commands into register addresses and register values of the AD9958. The sets of register addresses and values are forwarded (via serial communication) to a microcontroller
- The chipKit Max 32 microcontroller builds up a functions stack which saves the requested commands/tasks and executes them sequentially on demand. Note that the sequential execution of the commands is entirely performed on the side of the microcontroller (exact timing) and can be triggered by an external TTL trigger. During most of the tasks, the microcontroller communicates over an SPI bus with the AD9958, setting its internal registers.
- The AD9958 itself is the third effective layer, which generates the RF signal according to its internal registers and profile pins.
- Separate control of amplitude, phase and frequency of channel 0 (ch0) and channel 1 (ch1) of the AD9958.
- 2,4,8,16 bit modulation mode.
- Sweep mode with automatic ramp optimization.
- Triggered execution (<0.1 us time jitter).
- Progammable internal delay (~62.5ns step size, ~125ns minimum delay time).
- Up to 1000 programmble instructions.