

Controller
A 2-Axis Positioning System for use in RF anaechoic chambers
- Size
- 100 × 100 mm
- Copper layers
- 4
- Thickness
- 1.56 mm
- Parts
- 60
- Nets
- 76
- Pads
- 256
- Tracks, vias
- 256, 781
- Pours
- 40
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 22 Sep 2026
- Updated
- 23 Sep 2026
Overview
Controller is an open-source printed circuit board by Heinekamp, from the Heinekamp/RF-Positioning-System repository on GitHub. It is a 4-layer board of 100 × 100 mm with 60 parts on 76 nets, routed with 256 tracks and 781 vias.
It is built around the TMC2209, TPS26631PWP and SMCJ36CA. Its parts include 29 capacitors, 6 resistors, 4 ICs, 4 connectors and 4 inductors. It belongs with the radio and wireless boards and the ESP32 boards of this library.
Main components
3README
README.mdRF-Positioning-System
A cost-effective 2-axis RF positioning system for characterizing antenna directionality in azimuth and elevation, developed as a bachelor project at the EMES chair at the University of Freiburg. Both axes rotate independently around a fixed centre of rotation, controlled by an ESP32 over a standard SCPI interface over Ethernet or USB.
Key Specifications
| Parameter | Value |
|---|---|
| Positioning range | 360° independent rotation, azimuth and elevation |
| Positioning accuracy | 1.0° |
| Positioning speed | 0.1°/s – 180°/s |
| Frequency range | 600 MHz – 6 GHz |
| Payload | 500 g |
| DUT height above base | 1.0 m |
| Base footprint | 40 cm × 40 cm |
| Total weight | ~20 kg |
| Communication | USB, Ethernet (SCPI) |
| Power supply | 12 V DC |
Measured Performance
Repeatability of both rotation axes, measured with a motion-capture system across 10 repeated full revolutions:
![]() | ![]() |
| Azimuth positioning deviation from the commanded angle, measured after each of 10 repeated full revolutions. | Elevation positioning deviation from the commanded angle, measured the same way. |
Radiated emissions of the fully assembled, enclosed system were measured with the Ethernet link forced to 10 Mbit/s, against 20 dB under the CISPR 11 Class B radiated emissions limit:
![]() | ![]() |
| Radiated field strength from 0.5–4.5 GHz, vertical and horizontal antenna polarization, against the CISPR 11 Class B limit. | Detail view of the 0.6–1.0 GHz band from the same measurement — individual emission peaks all remain more than 20 dB below the compliance limit shown at left. |
Hardware
The controller is a custom PCB (KiCad project in Electrical/Controller) built around an ESP32, driving two TMC2209 stepper drivers over UART. The mechanical design was done in Autodesk Fusion 360; the full CAD model is available in the Fusion 360 online viewer.
Software
The firmware is written in C++ using the Arduino framework in PlatformIO (see Code/RF-Positioning-System), and exposes a standards-compliant SCPI command set over Ethernet and USB — see that folder's readme for the full command reference and a quick-start example.
Firmware documentation is generated with Doxygen and published here. If the following badge is green, it's up to date: .
Documentation
The Service Manual covers the system's theory of operation, the full SCPI interface, and maintenance/component-replacement procedures.
Parts
60| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 2n2F | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C22, C23, C24, C25, C26, C27, C28, C29 |
| 6 | 100nF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C2, C3, C5, C6, C13, C19 |
| 4 | 600Ω@100 MHz | Capacitor_SMD:C_2220_5750Metric_Pad1.97x5.40mm_HandSolder | L1, L2, L3, L4 |
| 4 | 744235900 | FootprintLibrary:WE-CNSW_1812 | FL1, FL2, FL3, FL4 |
| 3 | 1000uF | FootprintLibrary:WCAP-ATUL_13X25_DXL_ | C4, C7, C11 |
| 3 | 100uF | FootprintLibrary:WCAP-ATG8_6.3X11_DXL_ | C12, C17, C20 |
| 3 | 10uF | Capacitor_SMD:C_2220_5750Metric_Pad1.97x5.40mm_HandSolder | C9, C15, C16 |
| 2 | 10nF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C14, C18 |
| 2 | 2200uF | FootprintLibrary:WCAP-ATG8_16X25_DXL_ | C1, C10 |
| 2 | RJ45_LED_Shielded | FootprintLibrary:Wuerth 615008137421 | J3, J4 |
| 2 | TMC2209 | FootprintLibrary:BTT-TMC2209-V1.3 | U1, U2 |
| 1 | 10k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R3 |
| 1 | 12-28V IN | FootprintLibrary:BarrelJack_Wuerth_6941xx301002 | J1 |
| 1 | 1k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R1 |
| 1 | 1nF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C21 |
| 1 | 1uF | Capacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolder | C8 |
| 1 | 20k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R6 |
| 1 | 6.04k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R2 |
| 1 | 604k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R4 |
| 1 | 76.8k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R5 |
| 1 | DMN53D0LW-7 | Package_TO_SOT_SMD:SOT-323_SC-70_Handsoldering | Q2 |
| 1 | DMT10H015LK3-13 | Package_TO_SOT_SMD:TO-252-3_TabPin2 | Q1 |
| 1 | ESP32 | FootprintLibrary:Adafruit_Feather_ESP32 | A1 |
| 1 | LD1086D2M33TR | FootprintLibrary:TO-220-3_Vertical-v8508a | U5 |
| 1 | LOGO | LOGO | G*** |
| 1 | SMCJ36CA | Diode_SMD:D_SMC_Handsoldering | D1 |
| 1 | Screw_Terminal_01x02 | FootprintLibrary:691502710002 | J2 |
| 1 | TPS26631PWP | Package_SO:HTSSOP-20-1EP_4.4x6.5mm_P0.65mm_EP3.4x6.5mm_Mask2.75x3.43mm_ThermalVias_HandSolder | U3 |
The 56 most common of 60 parts.
Questions
How big is the Controller PCB?
It measures 100 × 100 mm and has 4 copper layers, 1.56 mm thick.
What parts does the Controller use?
60 parts, built around the TMC2209, TPS26631PWP and SMCJ36CA. 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 Controller KiCad files?
From the Heinekamp/RF-Positioning-System repository on GitHub, at the commit this page was made from: the board is Electrical/Controller/Controller.kicad_pcb and its schematic Electrical/Controller/Controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Controller design in my own project?
Its repository states no licence, so its author keeps all rights: ask Heinekamp before reusing the design.
Similar boards
- 4 layers90 × 100 mm

- 4 layers90 × 100 mm

- 2 layers58 × 35.5 mm

- 4 layers150 × 83 mm

Masthead Controller
Tuskar-Marine/hardware
All tools for the Mermaid's Rest open sailing tools
230 parts6 - 4 layers154.5 × 112.9 mm

LibrePLC32
AndreiVladescu/LibrePLC32
The goal of the project is to create a compact, hackable, and well-documented PLC platform for industrial automation experiments, prototyping, education, and open hardware development.
295 parts14CERN-OHL-P-2.0 - 2 layers72.8 × 38 mm

- 6 layers320.6 × 186.1 mm

- 6 layers111.8 × 61 mm




