Skip to the content
4 layers71.1 × 124.5 mmADL5375 revAR, the printed circuit board in 3D

Modulation signal generator for electronic sideband locking with a Pound-Drever-Hall cavity

Size
71.1 × 124.5 mm
Copper layers
4
Thickness
1.6 mm
Parts
143
Nets
74
Pads
468
Tracks, vias
742, 394
Pours
19
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
19 Apr 2024
Updated
16 Sep 2024

Overview

ADL5375 revAR is an open-source printed circuit board by JQIamo, from the JQIamo/ESB_Signal_Generator repository on GitHub. It is a 4-layer board of 71.1 × 124.5 mm with 143 parts on 74 nets, routed with 742 tracks and 394 vias.

It is built around the ADF4351BCP, ADP3334ARMZ-REEL7 and HMC1044LP3E, with the 535L250X2GT5 and XNCLH25M000THJA0P0 among its other parts. Its parts include 54 capacitors, 42 resistors, 12 inductors, 6 ICs and 6 connectors. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.

Main components

5

README

README.md

ESB_Signal_Generator

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.

Installation

Teensy code uploading

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:

  1. Install PlatformIO extension in VSCode.
  2. Create New Project.
  3. Input the project name; select Board: Teensy 4.1 (or corresponding Teensy board); select Framework: Arduino; choose the project location; click finish.
  4. When the project initialization is finished, enter the project folder and copy folders in Teensy_code/ into the project folder.
  5. Build the project in PlatformIO.
  6. 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.

Hardware Implementation

LAYOUT

Figure 1: ADL5375-based design layout

PLUTOLAYOUT

Figure 2: ADALM-PLUTO-based design layout

We present two architectures for generating the rf signal $V_{\textrm{EOM}}(t)$ and the phase-coherent demodulation signal $\sin \left(\Omega_m t+\varphi\right)$ for generating the electronic sideband (ESB) error signal. We refer to one of the architectures as the ADL5375-based design (see Figure 1) and the other variant as the ADALM-PLUTO-based design (see Figure 2). The baseband signals $I(t)$ and $Q(t)$ are digitally generated and reconstructed as analog signals by digital-to-analog converters (DACs) before being transmitted to quadrature modulators. The carrier wave is typically generated by filtering the square wave output of a Phase Locked Loop (PLL) integrated circuit. Both architectures are interfaced with a host PC. The host PC provides the values for all quadrature amplitude modulation (QAM) parameters: $\Omega_m, \Omega_c, \beta_m, \varphi, \phi', \xi_1', \xi_2', \Delta_I', \Delta_Q'$. The $\xi_1', \xi_2', \Delta_I', \Delta_Q', \phi'$ parameters help compensate for the intrinsic hardware I/Q impairments $\xi_1, \xi_2, \Delta_I, \Delta_Q, \phi$ by minimizing the RMS I/Q magnitude error.

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.

ADL5375-based design

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 $V_{\textrm{EOM}}(t)$ as well as the phase-coherent demodulation signal.

The unfiltered carrier wave is generated by the ADF4351 phase-locked loop (PLL) chip, which has a frequency output in the range of $35$ MHz to $4400$ MHz. A $25$ MHz temperature compensated crystal oscillator (Murata Electronics XNCLH25M000THJA0P0) provides the reference frequency signal for the PLL chip. The PCB can be readily modified to take in an external reference clock. The lock time for the PLL chip is $\simeq1$ ms, which sets the minimum time it takes to update the carrier wave frequency. However, it can be decreased to $\simeq100~\mu\textrm{s}$ at the cost of increased phase noise. Furthermore, in our design, the PLL chip is controlled by the Teensy 4.1 microcontroller over a serial peripheral interface (SPI) bus. Specifically, a host PC command to update the frequency of the carrier wave is routed through the Red Pitaya STEMLab 125-14 to the Teensy 4.1., which then updates the values in the corresponding registers on the PLL chip via the serial peripheral interface (SPI).

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 $I(t)$, $Q(t)$, and the phase-coherent demodulation signal. A Python script running on the STEMlab 125-14 board is used to control the I/Q baseband signal synthesis. The STEMlab 125-14 board contains two fast $125$-mega-samples-per-second 14 bit DACs, and two $125$-mega-samples-per-second 14 bit analog-to-digital converters (ADCs). One of the digital input/output pins on the STEMlab 125-14 board is configured to output a square wave with a tunable phase at frequency $\Omega_{m}$. The square wave is filtered by a low-pass filter to yield the demodulation signal $\sin \left(\Omega_m t+\varphi\right)$. $\Omega_m$ is tunable as well. The baseband modulation and demodulation signals are phase-locked to each other as they share the same reference clock, which facilitates phase-coherent demodulation. The relative phase $\varphi$ between the signals is also programmable.

Lastly, the filtered sinusoidal carrier wave and the I/Q baseband signals are transmitted to the ADL5375 quadrature modulator. The quadrature modulator has a $400$ MHz to $6$ GHz output frequency range and a $-1$ dB baseband signal bandwidth of $\simeq400$ MHz. The quadrature modulator splits the carrier wave input internally to generate the in-phase and quadrature-phase carrier waves: $\cos(\Omega_{c}t),,\sin(\Omega_{c}t)$. The STEMlab 125-14 board provides the baseband signals that are transmitted to two of the four differential in-phase and quadrature-phase baseband inputs: QBBP, QBBN, IBBP, and IBBN. We externally DC bias the other two inputs. This arrangement converts the four differential baseband inputs to two single-ended baseband inputs: IBBP = QBBP = 0.5 V, IBBN = I(t) + 0.5 V, and QBBN = Q(t) +0.5 V. We use trimpots on the PCB to fine-tune the DC biasing of the IBBP, QBBP channels. This is done to null offsets between the differential inputs: IBBN - IBBP =I(t), QBBN - QBBP=Q(t). Furthermore, the offsets ($\Delta_I', \Delta_Q'$) in the baseband signal outputs can be programmed to perform fine offset nulling. Lastly, the PLL chip provides a differential power output with tunable power levels of $-4$ dB, $-1$ dB, $2$ dB, and $5$ dB referenced to one milliwatt, which we use to coarsely change the carrier level $\beta_c$. Fine control over $\beta_c$ is provided by controlling the amplitudes of the baseband signals $\xi_1'$ and $\xi_2'$ in STEMlab 125-14.

ADALM-PLUTO-based design

Here we present details on our modifications to the code base for the ADALM-PLUTO evaluation board to generate $V_{\textrm{EOM}}(t)$ and the phase-coherent demodulation signal $\sin \left(\Omega_m t+\varphi\right)$. The ADALM-PLUTO consists of two modules: an AD9363 rf agile transceiver Integrated Circuit from Analog Devices, and a Xilinx Zynq Z-7010 system-on-chip (SoC).
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 $325$ MHz to $3.8$ GHz with a tunable baseband channel bandwidth in the $200$ kHz to $20$ MHz range. The values of the parameters $\Omega_m,\Omega_c, \beta_m, \varphi, \xi_1', \xi_2', \Delta_I', \phi', \Delta_Q'$ are saved in FPGA registers that are mapped to the memory space of the ARM Cortex-A9 processor. The host PC can change their values by interacting with a local application on the processor that accesses these memory-mapped registers.

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 $\Omega_mt$ (that increments at the modulation frequency $\Omega_m$) to $\beta_m \sin \left(\Omega_m t\right)$. This $\beta_m \sin \left(\Omega_m t\right)$ serves as the accumulated phase for the last pair of phase-amplitude lookup tables, interpolators, and scalers: $\beta_m \sin \left(\Omega_m t\right)$ is mapped to $\xi_1'\sin(\beta_m \sin \left(\Omega_m t\right))+\Delta_I'$ for the I channel and $\xi_2'\cos(\beta_m \sin \left(\Omega_m t\right)+\phi')+\Delta_Q'$ for the Q channel. These digital baseband signals are then transmitted to the AD9363 transceiver, where they are reconstructed as analog I/Q waveforms. The AD9363 has a self-calibrating feature that we use to determine the values for $\Delta_I'$ and $\Delta_Q'$ to minimize carrier leakage errors. We manually tuned the phase offset ($\phi'$) and the baseband signal amplitudes ($\xi_1'$ and $\xi_2'$) to minimize the phase imbalance and gain imbalance errors.

In order to generate the phase-coherent demodulation signal $\sin \left(\Omega_m t+\varphi\right)$, we use one of the many $1.8$ V logic general purpose input/output (GPIO) ports on the ADALM-PLUTO board. The square wave output is referenced to the same phase accumulator used to generate the baseband signals. The square wave phase $\varphi$ is programmable. The square wave is low-pass filtered to generate the phase-coherent demodulation signal.

Phasenoise

Figure 3: Carrier wave phase noise of the two designs

Red Pitaya code uploading

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:

  1. Connect the Red Pitaya to the computer with USB.
  2. Copy the files under RedPitaya_code\ folder into Red Pitaya scp -r FOLDER_PATH root@xxx.xxx.xx.xxx/home/redpitaya/TCPDH_controller.py. The default password of the Red Pitaya board is "root".
  3. Copy the loadscript.sh file into Red Pitaya scp -r FOLDER_PATH root@xxx.xxx.xx.xxx/home.
  4. Access the onboard Linux system through ssh ssh root@xxx.xxx.xx.xxx.
  5. Arrive at /home folder and run the bash file with bash -s loadscript.sh.

Interface with the Program

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.

Contact

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.

Parts

143
QtyValueFootprintReferences
181uADL5375_revAR:C_MLCC_0306C5, C6, C7, C10, C13, C14, C15, C16, C17, C21, C22, C39, C41, C44, C45, C69 +2
130.1uADL5375_revAR:C_MLCC_0204C18, C19, C20, C23, C28, C29, C30, C31, C37, C38, C40, C42, C43
12ADL5375_revAR:L_FERRITE_0603L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16
9JOHNSON_SMA_EDGE_LAUNCH_142-0701-851ADL5375_revAR:JOHNSON_SMA_EDGE_LAUNCH_142-0701-851DSOP0, IBBN0, IBBP0, LOIN0, LOIP0, QBBN0, QBBP0, TRIGGER1, TRIGGER2
9OPENADL5375_revAR:R_0603R5, R6, R8, R9, R11, R14, R18, R24, R25
60ADL5375_revAR:R_0603R3, R4, R10, R13, R22, R59
61nADL5375_revAR:C_MLCC_0402C46, C47, C48, C49, C50, C51
61uADL5375_revAR:C_MLCC_0603C4, C27, C32, C34, C56, C58
510kADL5375_revAR:R_0603R15, R16, R17, R19, R37
4MOLEX_22-03-2021MOLEX_22-03-2021_0_0ADL5375_revAR:MOLEX_22-03-2021_0J6, J7, J10, J11
31nADL5375_revAR:C_MLCC_0603C11, C12, C57
3TPB1,27ADL5375_revAR:B1,27VDD0, VOUT0, VPOS0
20ADL5375_revAR:R_0402R23, R27
2120pADL5375_revAR:C_MLCC_0402C24, C36
219k RADL5375_revAR:0603R29, R35
21kADL5375_revAR:R_0603R2, R38
22k RADL5375_revAR:0603R30, R36
22k RADL5375_revAR:RTRIM3296WR28, R34
250ADL5375_revAR:0402R20, R31
250 RADL5375_revAR:0402R26, R33
2ANALOG_DEVICES_ADP150AUJZ-3.3-R7ANALOG_DEVICES_ADP150AUJZ-3.3-R7_0_2ADL5375_revAR:ANALOG_DEVICES_ADP150AUJZ-3.3-R7_2U2, U3
2OPENADL5375_revAR:0402R21, R32
2VISUAL_COMMUNICATIONS_CMD17-21VGD-TR8VISUAL_COMMUNICATIONS_CMD17-21VGD-TR8_0_0ADL5375_revAR:VISUAL_COMMUNICATIONS_CMD17-21VGD-TR8_0D1, D5
1ADL5375_revAR:QKDLAB_JOSH_MECHANICAL_JOHNSON_SMA_18GHZ_4-LAYER_142-0761-891J4
1@HOLE0
1ADL5375_revAR:JQI_LOGO_POSITIVE-SILKSCREENU$2
1ADL5375_revAR:10X09MTAJ1
10.1uADL5375_revAR:C_MLCC_0402C25
1100ADL5375_revAR:R_0603R7
11n FADL5375_revAR:0402C55
12.7nADL5375_revAR:C_MLCC_0603C1
1210 RADL5375_revAR:0603R40
122-23-2021ADL5375_revAR:22-23-2021X2
122uADL5375_revAR:CT7343C33
1360ADL5375_revAR:R_0603R1
14.7kADL5375_revAR:R_0603R12
1450301014042ADL5375_revAR:450301014042S1
147nADL5375_revAR:C_MLCC_0603C2
1535L250X2GT5ADL5375_revAR:535L250X2GT5UNK535L250X2GT5
164.9K RADL5375_revAR:0603R39
1680pADL5375_revAR:C_MLCC_0603C3
1ADF4351ADL5375_revAR:ADF4351U1
1ADP3334ARMZ-REEL7ADL5375_revAR:RM_8_ADIU5
1ANALOG_DEVICES_ADL5375-05ACPZ-WPANALOG_DEVICES_ADL5375-05ACPZ-WP_0_1ADL5375_revAR:ANALOG_DEVICES_ADL5375-05ACPZ-WP_1U4
1BZX84CSMDADL5375_revAR:TO236D2
1DNPADL5375_revAR:0402R41
1HMC1044LP3EADL5375_revAR:HCP_16_3_ADIU6
1SMA_CONNECTORADL5375_revAR:QKDLAB_JOSH_MECHANICAL_JOHNSON_SMA_EDGE_LAUNCH_142-0701-851REFIN0
1TEENSY_3.5/3.6_BASICADL5375_revAR:TEENSY_3.5_3.6_BASICU$1
1XNCLH25M000THJA0P0ADL5375_revAR:XNCLH25M000THJA0P0U$3

More from JQIamo/ESB_Signal_Generator

1
  • 4 layers50.8 × 104.1 mmADF4351 Teensy, the printed circuit board in 3D

    ADF4351 Teensy

    JQIamo/ESB_Signal_Generator

    Modulation signal generator for electronic sideband locking with a Pound-Drever-Hall cavity

    100 parts2

Similar boards

  • 2 layers82.1 × 82.1 mmUncut Gem, the printed circuit board in 3D

    Uncut Gem

    QuantumVillage/UncutGem

    A prototype Full Stack fully Open Source NV Center Diamond Magnetometer

    207 parts210AGPL-3.0
  • 2 layers118.5 × 94.5 mmWaveLab24GHz, the printed circuit board in 3D

    WaveLab24GHz

    PA0MHE/Wavelab-24G-Addon-module

    Can be used as addon module for the Wavelab 23X1008XP module, which was available during the 2021-2022 timeframe on www.ebay.pl seller:bisonelectronics-sp2jyr The module converts the first-IF 2364MHz to 432MHz (or…

    207 parts5MIT
  • 4 layers40 × 33 mmVersion 2.0, the printed circuit board in 3D

    Version 2.0

    EObianom/ADF4351

    This repository is for ADF4351 registory calculation and hardware design.

    50 parts2MIT
  • 2 layers195 × 148.5 mmSpecAnFrontEnd, the printed circuit board in 3D

    SpecAnFrontEnd

    richardhosking/Spectrum-analyser-Front-End-KICAD

    PCB/Schematic files

    151 parts2
  • 2 layers60 × 40 mm8-4GHzDSN V2, the printed circuit board in 3D

    8-4GHzDSN V2

    PA0MHE/8-4GHz_DSN

    8.4 GHz DSN downconverter

    68 parts1
  • 2 layersOldSpecAnFrontEnd, the printed circuit board in 3D

    OldSpecAnFrontEnd

    richardhosking/KicadSpecAnalayser-

    KICAD Files for Spectrum Analyser design

    156 parts1
  • 4 layers127 × 101.6 mmS Band Transceiver, the printed circuit board in 3D

    S Band Transceiver

    tkeller12/openEPR

    Open-Source EPR Spectrometer

    224 parts1MIT
  • 4 layers37.6 × 15 mmRFRADAR1, the printed circuit board in 3D

    RFRADAR1

    AGH-Micro/CW-Radar-2.4GHz

    37 partsMIT

Questions

How big is the ADL5375 revAR PCB?

It measures 71.1 × 124.5 mm and has 4 copper layers, 1.6 mm thick.

What parts does the ADL5375 revAR use?

143 parts, built around the ADF4351BCP, ADP3334ARMZ-REEL7, HMC1044LP3E and 535L250X2GT5. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ADL5375 revAR KiCad files?

From the JQIamo/ESB_Signal_Generator repository on GitHub, at the commit this page was made from: the board is hardware_design/PLL_and_mixer/ADL5375_revAR.kicad_pcb and its schematic hardware_design/ADF4351_Teensy/ADF4351_Teensy.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ADL5375 revAR design in my own project?

Its repository states no licence, so its author keeps all rights: ask JQIamo before reusing the design.