This project is a radio-frequency signal generator for performing electronic-sideband locking with a Pound-Drever-Hall cavity. Please refer to the paper for details on the system implementation. For the ADALM-PLUTO-based design, please see this repository.
This repository contains the following:
hardware_design\
: The EAGLE circuit board design files for the PLL board;RedPitaya_code\
: The source file for setting up the RedPitaya I/Q signal generation;Teensy_code\
: The source file to be written onto the Teensy microcontroller;example_interface.ipynb
: The example Jupyter Notebook to interface with the system;loadscript.sh
: The shell script to allow startup initialization on RedPitaya.
The program uses a Teensy 4.1 (also compatible with Teensy 3.5/3.6) microcontroller, which communicates with the host computer through USB. To write the code on Teensy, you can either use Arduino with Teensyduino add-on or Visual Studio Code with PlatformIO extension.
To upload the code with Arduino, please refer to the tutorial linked above. Here I only introduce the procedure of uploading with PlatformIO:
- Install PlatformIO extension in VSCode.
- Create
New Project
. - Input the project name; select
Board: Teensy 4.1
(or corresponding Teensy board); selectFramework: Arduino
; choose the project location; clickfinish
. - When the project initialization is finished, enter the project folder and copy folders in
Teensy_code/
into the project folder. Build
the project in PlatformIO.- Connect Teensy to the computer with USB and
Upload
the project to the Teensy. You should see the Teensyduino window pop out indicating the status of uploading.
Figure 2: ADALM-PLUTO-based design layout
We present two architectures for generating the rf signal
This repository contains only the design and documentation for the ADL5375 design variant while the ADALM-PLUTO variant is hosted in a separate repository https://github.com/JQIamo/Electronic_Sideband_Locking_Pluto
We elaborate on each design variant below.
The ADL5375-based design involves five modules, four of which are mounted on a custom printed circuit board (PCB). These modules are represented as pink boxes in Figure 1. The four modules on the custom PCB are a Teensy 4.1 microcontroller, an ADF4351 PLL chip, a HMC1044 programmable low-pass filter, and an ADL5375 I/Q modulator. The fifth module is a Red Pitaya STEMlab 125-14. These modules are connected to generate
The unfiltered carrier wave is generated by the ADF4351 phase-locked loop (PLL) chip, which has a frequency output in the range of
The unfiltered carrier wave output of the PLL chip is a square wave. The square wave output must be filtered in order to generate a sinusoidal carrier wave. As the carrier wave frequency needs to be tunable over a broad frequency range, we need a low pass filter (LPF) with a tunable cut-off frequency. We use a programmable low-pass filter (HMC1044) with a tunable cutoff frequency in the range of 1 GHz to 3 GHz to remove the higher-order harmonics. Like the PLL chip, the programmable LPF is also controlled by Teensy 4.1 over SPI.
In addition to controlling Teensy 4.1 and interfacing with the host PC, STEMlab 125-14 also serves as the arbitrary waveform generator (AWG) that generates the baseband modulation signals
Lastly, the filtered sinusoidal carrier wave and the I/Q baseband signals are transmitted to the ADL5375 quadrature modulator. The quadrature modulator has a
Here we present details on our modifications to the code base for the ADALM-PLUTO evaluation board to generate
Two DAC channels and a broadband carrier wave oscillator, both of which are integrated into the AD9363, are used for QAM. The carrier wave frequency ranges from
The baseband I/Q channel signals are generated by cascading two Direct Digital Frequency Synthesis (DDS) modules implemented in the programmable logic of the FPGA. A 32-bit phase accumulator and a 16-bit phase-amplitude lookup table, interpolator, and scaler convert the accumulated phase
In order to generate the phase-coherent demodulation signal
Red Pitaya STEMLab 125-14 contains both Ethernet and the USB interface. The program is designed to interface with the Red Pitaya board through Ethernet, whereas the installation requires the USB interface. Before installation, you may want to set the TCP/IP configuration of Red Pitaya board into "static IP" mode to avoid frequency change of program configuration.
The default port used for communication is 6750. To change it please modify the
RedPitaya/simple_server.py
file.
To upload the program to the Red Pitaya, you need:
- Connect the Red Pitaya to the computer with USB.
- Copy the files under
RedPitaya_code\
folder into Red Pitayascp -r FOLDER_PATH [email protected]/home/redpitaya/TCPDH_controller.py
. The default password of the Red Pitaya board is "root". - Copy the
loadscript.sh
file into Red Pitayascp -r FOLDER_PATH [email protected]/home
. - Access the onboard Linux system through ssh
ssh [email protected]
. - Arrive at
/home
folder and run the bash file withbash -s loadscript.sh
.
The program interfaces with Red Pitaya through TCP/IP. The Teensy board should be connected to the Red Pitaya through USB during operation. The set of controlling commands is documented in the example_interface.ipynb
notebook.
The project was originally developped by Tsz-chun Tsui and Alessandro Restelli. Please contact Alessandro Restelli (arestell"at"umd.edu) for any issues and comments about the project.