
Version 3.0
EObianom/ADF4351
This repository is for ADF4351 registory calculation and hardware design.

This repository is for ADF4351 registory calculation and hardware design.
Version 2.0 is an open-source printed circuit board by EObianom, from the EObianom/ADF4351 repository on GitHub, published under the MIT licence. It is a 4-layer board of 40 × 33 mm with 50 parts on 31 nets, routed with 211 tracks and 43 vias.
It is built around the ADF4351BCP. Its parts include 26 capacitors, 11 resistors, 4 connectors, 4 inductors and 1 IC.
| KiCad Hardware PCB Design | Software Output / RF Spectrum |
|---|---|
| https://github.com/user-attachments/assets/13627ffa-e069-458c-9974-3c6d26c1047d |
A complete open-source RF signal generation suite featuring a lightweight C++ driver and a custom open-hardware PCB design in KiCad for the Analog Devices ADF4351 wideband frequency synthesizer (35 MHz – 4.4 GHz).
hardware/ directory.#include <Arduino.h>
#include "ADF4351.h"
const int CS_PIN = 10;
ADF4351 adf;
// Helper function to send 32-bit register words over hardware SPI
void writeRegister(uint32_t regData) {
digitalWrite(CS_PIN, LOW);
SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE0));
SPI.transfer32(regValue);
SPI.endTransaction();
digitalWrite(CS_PIN, HIGH);
delayMicroseconds(1);
}
void setup() {
Serial.begin(115200);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
SPI.begin();
// 1. Configure synthesizer parameters (optional step; default is 25MHz ref clock)
adf.setRefFreqHz(25000000); // 25 MHz ReferenceADF4351
The primary class representing the ADF4351 synthesizer instance.
ADF4351 adf; // Instantiate with default configuration (25MHz TCXO/OCXO ref)Config
A configuration structure containing all chip settings.
ADF4351::Config myConfig;
myConfig.refFreqHz = 10000000; // Set reference clock to 10 MHz
myConfig.outputPower = 2; // Set power to +2 dBmcalculateRegisters(freqHz, outRegisters)
Computes the 6 required 32-bit register values for a given frequency in Hertz.
freqHz (uint64_t): Target output frequency in Hz (35,000,000 to 4,400,000,000 Hz).outRegisters (uint32_t[6]): Array to hold the resulting register words R0 through R5.uint32_t registers[6];
bool success = adf.calculateRegisters(1000000000ULL, registers); // 1.0 GHzsetConfig(config)
Overwrites the entire configuration struct in one operation.
ADF4351::Config cfg;
cfg.refFreqHz = 25000000;
cfg.outputPower = 3;
cfg.rfOutputEnable = 1;
adf.setConfig(cfg);getConfig()
Retrieves the currently loaded configuration struct.
ADF4351::Config activeCfg = adf.getConfig();
Serial.print("Current Ref Freq: ");
Serial.println(activeCfg.refFreqHz);setRefFreqHz(val)
Sets the reference input frequency in Hz.
adf.setRefFreqHz(25000000); // 25 MHz ReferencesetLdPinMode(val)
Configures the Lock Detect (LD) output pin mode (Bits [23:22], Mask: 0x03).
adf.setLdPinMode(1); // Digital Lock DetectsetFeedbackSelect(val)
Selects VCO feedback signal source to N-counter (Bit [23], Mask: 0x01).
adf.setFeedbackSelect(1);setVcoPowerdown(val)
Powers down the internal VCO (Bit [11], Mask: 0x01).
adf.setVcoPowerdown(0);setMtld(val)
Mute Till Lock Detect (Bit [10], Mask: 0x01).
adf.setMtld(1);setAuxOutputSelect(val)
Selects auxiliary RF output signal path (Bit [9], Mask: 0x01).
adf.setAuxOutputSelect(0);setAuxOutputEnable(val)
Enables or disables auxiliary RF output pin (Bit [8], Mask: 0x01).
adf.setAuxOutputEnable(0);setAuxOutputPower(val)
Configures auxiliary RF output power level (Bits [7:6], Mask: 0x03).
adf.setAuxOutputPower(0); // -4 dBmsetRfOutputEnable(val)
Main RF output power toggle (Bit [5], Mask: 0x01).
adf.setRfOutputEnable(1);setOutputPower(val)
Sets main RF output power level (Bits [4:3], Mask: 0x03).
adf.setOutputPower(3); // +5 dBm maximum powersetBandSelectMode(val)
Configures Band Select Clock logic mode (Bit [23], Mask: 0x01).
adf.setBandSelectMode(0);setAbp(val)
Anti-Backlash Pulse Width (Bit [22], Mask: 0x01).
adf.setAbp(0);setChargeCancel(val)
Charge pump cancellation control (Bit [21], Mask: 0x01).
adf.setChargeCancel(0);setCsr(val)
Cycle Slip Reduction (Bit [18], Mask: 0x01).
adf.setCsr(0);setClkDivMode(val)
Clock Divider Mode (Bits [16:15], Mask: 0x03).
adf.setClkDivMode(0);setClkDivValue(val)
12-bit clock divider value for fast-lock / resync (Bits [14:3], Mask: 0x0FFF).
Range: 0 to 4095.
adf.setClkDivValue(150);setNoiseMode(val)
Low Noise vs. Low Spur Mode configuration (Bits [30:29], Mask: 0x03).
adf.setNoiseMode(0); // Low noise modesetMuxout(val)
Configures the multiplexer output pin function (Bits [28:26], Mask: 0x07).
adf.setMuxout(0);setReferenceDoubler(val)
Enables input reference frequency multiplier (Bit [25], Mask: 0x01).
adf.setReferenceDoubler(0);setRdiv2(val)
Reference Divide-by-2 toggle (Bit [24], Mask: 0x01).
adf.setRdiv2(0);setRDivider(val)
10-bit Reference R-Divider value (Bits [23:14], Mask: 0x03FF).
Range: 1 to 1023.
adf.setRDivider(1);setDoubleBuff(val)
Double buffering control for Register 4 (Bit [13], Mask: 0x01).
adf.setDoubleBuff(0);setChargePumpCurr(val)
Configures charge pump current setting (Bits [12:9], Mask: 0x0F).
Range: 0 (0.31 mA) to 15 (5.00 mA). Default 7 = 2.50 mA.
adf.setChargePumpCurr(7); // 2.50 mAsetLdf(val)
Lock Detect Functionality selection (Bit [8], Mask: 0x01).
adf.setLdf(0);setLdp(val)
Lock Detect Precision pulse threshold (Bit [7], Mask: 0x01).
adf.setLdp(0);setPdPolarity(val)
Phase Detector Polarity (Bit [6], Mask: 0x01).
adf.setPdPolarity(1);setPowerDown(val)
Software chip power-down mode (Bit [5], Mask: 0x01).
adf.setPowerDown(0);setCpThreeState(val)
Charge Pump Three-State control (Bit [4], Mask: 0x01).
adf.setCpThreeState(0);setCounterReset(val)
Resets internal N and R counters (Bit [3], Mask: 0x01).
adf.setCounterReset(0);setAutoPrescaler(enable)
Enables automated dynamic prescaler selection (4/5 vs. 8/9).
Can be true or false.
adf.setAutoPrescaler(false);setPrescaler(val)
Manually overrides the dual-modulus prescaler setting (Bit [27], Mask: 0x01). Automatically disables autoPrescaler.
adf.setPrescaler(1); // Manual 8/9 prescalersetPhaseAdjust(val)
Phase adjustment control toggle (Bit [28], Mask: 0x01).
adf.setPhaseAdjust(0);setPhaseValue(val)
12-bit fractional phase word (Bits [26:15], Mask: 0x0FFF). Range: 0 to 4095.
adf.setPhaseValue(1);The open-source hardware files located in the hardware/ directory provide a complete, 4-layer PCB design built in KiCad. Depending on your RF output and clock reference requirements, the hardware architecture accommodates three tailored board configurations:
All KiCad design, manufacturing, and documentation assets are structured in the hardware/ directory:
| Asset / File Name | Description |
|---|---|
ADF4351.kicad_pro | Master KiCad project workspace file. |
ADF4351.kicad_sch | Schematic diagram featuring low-noise LDO regulation, loop filter topology, and 50 Ω matching networks. |
ADF4351.kicad_pcb | 4-layer controlled-impedance PCB layout. |
Production/ | Contains complete fabrication-ready Gerbers, Bill of Materials (BOM), and Component Placement List (CPL) for automated SMT assembly. |
Figures/ | High-resolution 3D renders of the assembled boards. |
This library is released under the MIT License. Free to use, modify, and distribute in both open-source and commercial applications.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 9 | 0.1uF | Capacitor_SMD:C_0402_1005Metric | C1, C3, C4, C7, C8, C13, C18, C20, C22 |
| 8 | 10pF | Capacitor_SMD:C_0402_1005Metric | C2, C5, C6, C9, C10, C19, C21, C23 |
| 5 | 10K | Resistor_SMD:R_0402_1005Metric | R2, R3, R4, R5, R6 |
| 4 | 1nF | Capacitor_SMD:C_0402_1005Metric | C11, C15, C16, C17 |
| 3 | Conn_Coaxial | Connector_Coaxial:SMA_Molex_73251-1153_EdgeMount_Horizontal | J2, J3, J4 |
| 2 | 1.9nH | Inductor_SMD:L_0402_1005Metric | L1, L4 |
| 2 | 120pF | Capacitor_SMD:C_0402_1005Metric | C12, C14 |
| 2 | 7.5nH | Inductor_SMD:L_0402_1005Metric | L2, L3 |
| 2 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2 |
| 1 | 0 | Resistor_SMD:R_0402_1005Metric | R8 |
| 1 | 100 | Resistor_SMD:R_0402_1005Metric | R1 |
| 1 | 1K | Resistor_SMD:R_0402_1005Metric | R9 |
| 1 | 2.7nF | Capacitor_SMD:C_0402_1005Metric | C24 |
| 1 | 360 | Resistor_SMD:R_0402_1005Metric | R11 |
| 1 | 4.7K | Resistor_SMD:R_0402_1005Metric | R10 |
| 1 | 47nF | Capacitor_SMD:C_0402_1005Metric | C25 |
| 1 | 680pF | Capacitor_SMD:C_0402_1005Metric | C26 |
| 1 | ADF4351 | Ekene_Footprints:LFCSP-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm | U1 |
| 1 | Conn_02x05_Counter_Clockwise | Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical | J1 |
| 1 | DNI | Resistor_SMD:R_0402_1005Metric | R7 |
| 1 | LED | LED_SMD:LED_0402_1005Metric | D1 |
| 1 | SG-5032CAN | Oscillator:Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm | Y1 |

EObianom/ADF4351
This repository is for ADF4351 registory calculation and hardware design.

QuantumVillage/UncutGem
A prototype Full Stack fully Open Source NV Center Diamond Magnetometer

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…

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



richardhosking/KicadSpecAnalayser-
KICAD Files for Spectrum Analyser design


It measures 40 × 33 mm and has 4 copper layers, 1.6 mm thick.
50 parts, built around the ADF4351BCP. 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.
From the EObianom/ADF4351 repository on GitHub, at the commit this page was made from: the board is hardware/Version_2.0/Version_2.0.kicad_pcb and its schematic hardware/Version_1.0/Version_1.0.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).