| Status: Active Development | 3×3 v1 — PCB Fab Ready | 4×4 — Design Phase |
Other RF Projects: Antenna / RF Overview — L-Band satellite tracking antenna, HAM radio, radar theory, and the broader RF learning journey that led here.
Overview
Designing a 5.8 GHz electronically-steered phased array antenna system for drone-mounted applications. The array uses digital phase shifters on each antenna element to steer the beam electronically — no moving parts — enabling a drone to maintain signal lock with a ground station even during aggressive maneuvers.
Goal: Replace fixed antennas on FPV drones with a self-steering array that actively tracks the ground station, extending range and link reliability.
Tech Stack: RF Design • Rogers 4350B • KiCad • Python • STM32H743 • SPI • Beamforming • Phased Arrays
Two-Variant Approach
Rather than committing to a full high-performance build immediately, the project uses a two-stage strategy:
| 3×3 Low-Cost (v1) | 4×4 High-Performance (v2) | |
|---|---|---|
| Elements | 9 | 16 |
| Phase Shifter | MAPS-010145 (4-bit) | HMC1133 (6-bit) |
| Phase Resolution | 22.5° | 5.625° |
| Theoretical Gain | 9.5 dBi | 12 dBi |
| Board Size | 150 × 180 mm | 200 × 250 mm |
| Est. Cost | ~$450 | ~$2,750 |
| Status | Fab Ready | Design Phase |
The 3×3 version validates the full architecture — RF stackup, control interface, beamforming algorithms, and drone integration — at 83% lower cost before committing to the high-performance build.
PCB Design
Programmatic Generation
The entire PCB — netlist, component placement, and routing — is generated via Python scripts using KiCad’s scripting API. There is no manually drawn schematic.
# Generate netlist and auto-place all components
exec(open('generate_3x3_array.py').read())
exec(open('layout_3x3_pcb.py').read())
This approach makes the design fully reproducible and parameterizable. Changing element count, spacing, or component values is a script edit rather than a manual redraw.
Hybrid RF Stackup
Standard FR4 has unacceptably high dielectric loss at 5.8 GHz. The board uses a hybrid 4-layer stackup:
| Layer | Material | Thickness | Purpose |
|---|---|---|---|
| F.Cu | Rogers 4350B | 0.508 mm | RF traces & antenna patches |
| In1.Cu | — | — | GND plane |
| In2.Cu | FR4 | — | VCC_5V plane |
| B.Cu | FR4 | 0.508 mm | Digital signals (SPI, GPIO) |
Rogers 4350B was chosen for its stable dielectric constant (εr = 3.66 ± 0.05) and low loss tangent (tan δ = 0.0037), critical for maintaining 50Ω impedance at RF frequencies. Using Rogers only on the top layer reduces cost by ~30% compared to a full Rogers build.
RF Trace Design
All RF traces run exclusively on F.Cu (Rogers layer) at 1.077 mm width for 50Ω impedance. Transitions from the distribution network to the phase shifter pads use 0.3 mm neck-downs with impedance-matched taper geometry. All corners are 45° or curved to minimize reflections.
Blind Via Strategy
The hybrid stackup requires blind vias to connect surface components to the inner planes:
- F.Cu → In1.Cu: GND connections (phase shifters, decoupling caps)
- F.Cu → In2.Cu: VCC_5V power distribution
Blind vias from both depths originate from F.Cu (top side only), requiring two controlled-depth drilling passes from a single side.
Antenna Elements
Each element is a microstrip patch antenna designed for 5.8 GHz on Rogers 4350B:
- Patch dimensions: 16.93 × 13.39 mm
- Element spacing: 25.84 mm (λ/2) — prevents grating lobes
- Feed: Inset microstrip feed for impedance matching
- Target return loss: S11 < −10 dB at 5.8 GHz
The patch footprints are generated programmatically with exact dimensions derived from the substrate properties, ensuring repeatable impedance matching across all 9 (or 16) elements.
Phase Shifters & Control
3×3: MAPS-010145
- 4-bit digital phase shifter (16 states, 22.5° resolution)
- 3.5–6.0 GHz bandwidth
- Single +5V supply — no negative rail needed
- Native SPI interface — no shift registers required
- 9 individual chip-select lines from STM32 GPIO (PB0–PB8)
4×4: HMC1133LP5E
- 6-bit digital phase shifter (64 states, 5.625° resolution)
- 4.8–6.2 GHz bandwidth
- Parallel control via 74HC595 shift registers (12× daisy-chained)
- Identical shift register architecture to 3×3 — same firmware structure
Microcontroller
Both versions use the STM32H743VIT6 (480 MHz Cortex-M7, LQFP-100):
- High-speed SPI up to 150 MHz for fast beam updates
- Enough GPIO for either control architecture
- Firmware developed on the 3×3 transfers directly to 4×4
Beamforming
The STM32H7 runs a real-time beamforming algorithm that converts a target angle into individual phase shifts for each element:
def calculate_phase_shifts(target_azimuth, target_elevation):
k = 2 * pi / wavelength
phase_shifts = []
for row in range(N):
for col in range(N):
x = (col - (N-1)/2) * element_spacing
y = (row - (N-1)/2) * element_spacing
phase = k * (x * sin(target_azimuth) * cos(target_elevation)
+ y * sin(target_elevation))
phase_code = int((phase % (2*pi)) / (2*pi) * num_states)
phase_shifts.append(phase_code)
return phase_shifts
At >1 kHz update rate, the array can track a moving ground station in real time, compensating for drone pitch, roll, and yaw when paired with an IMU.
Performance
| Metric | 3×3 Low-Cost | 4×4 High-Perf |
|---|---|---|
| Gain | 9.5 dBi | 12 dBi |
| Beam Width | ~30° | ~20° |
| Steering Range | ±60° | ±60° |
| Range Improvement | 2–3× vs dipole | 3–4× vs dipole |
| Phase Accuracy | ±11° | ±2.8° |
| Update Rate | >1 kHz | >1 kHz |
Current Status
3×3 v1 — Fab Ready
- ✅ Netlist programmatically generated
- ✅ Components auto-placed via scripting
- ✅ RF traces routed on Rogers layer (F.Cu)
- ✅ SPI digital routing on B.Cu
- ✅ GND plane (In1.Cu) and VCC_5V plane (In2.Cu) complete
- ✅ Blind vias placed and verified
- ✅ DRC: 0 unconnected pads, all remaining violations waived by design
- ✅ Gerbers generated — awaiting quote from RF specialty fab
- ⏳ Awaiting fabrication
4×4 High-Performance — Design Phase
- ✅ RF layout complete (antenna array, phase shifters, RF traces)
- ✅ Shift register architecture defined
- ⏳ Shift register integration into PCB pending
- ⏳ Full routing pending
Planned Testing
Once the 3×3 board arrives:
- Power-on test — verify 3.3V and 5V rails, current draw
- SPI comms — verify all 9 phase shifters respond to individual CS lines
- RF characterization — VNA measurement of S11 per patch, insertion loss through phase shifters, phase accuracy per state
- Beamforming — program target angles, measure actual beam pattern
- Drone integration — mount on drone, measure range improvement vs fixed antenna