Skip to the content
2 layers120 × 120 mmSwerve carrier board, the printed circuit board in 3D

Swerve carrier board

Eventide-03/Mini-Swerve

Designing and Building a mini version of a Swerve drive, commonly used in FRC, FTC, and VEX Robotics competitions. Utilizing custom circuitry and software in order to replicate the FRC Environment at a smaller scale.

Size
120 × 120 mm
Copper layers
2
Thickness
1.6 mm
Parts
14
Nets
51
Pads
80
Tracks, vias
104, 0
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
19 Apr 2026
Updated
6 Jul 2026

Overview

Swerve carrier board is an open-source printed circuit board by Eventide-03, from the Eventide-03/Mini-Swerve repository on GitHub. It is a 2-layer board of 120 × 120 mm with 14 parts on 51 nets, routed with 104 tracks and 0 vias.

Its parts include 6 connectors, 2 capacitors and 1 switch. It belongs with the computers and single-board computers boards of this library.

README

README.md

Swerve Drivetrain

A fully custom four-module swerve drivetrain built to replicate the FRC/FTC swerve drivetrains. Every part of this project was designed/planned by me.

Project Resources

Overview

Swerve drive is an omnidirectional drivetrain, which means each wheel module can independently steer and drive, allowing a robot to move and rotate at the same time. I thought it would be nice to make a tinier at-home version for my own enjoyment, normally they are pretty big, but this one is fun sized.

This build has the full swerve control system on a 12.25 × 12.25 inch chassis with four independent modules. Each module uses 5010 brushless motors for driving and steering, using gear reductions to achieve the required torque. This leaves us with a miniature platform that actslike a full-size competition swerve, but small enough to use in my own house.

In order to save money I designed a custom PCB in order to hold everything, making it much easier to wire. In addition I will be using my SpeedyBee f405 to control the drive motors to avoid having to pay for 4 extra motor controllers.

Specifications

AttributeDetail
Chassis footprint12.25 × 12.25 in
Modules4 (independent steer + drive)
Motors8 × 5010 360 kV brushless (4 drive, 4 steer)
Reduction8:1 per axis
Master controllerESP32-S3-DevKitC-1
Steering control2 × Makerbase (MKS) ESP32 Dual FOC ESC, controlled over UART via SimpleFOC Commander
Drive controlSpeedyBee F405 4-in-1 ESC (DSHOT600)
Steering feedback4 × AS5600 magnetic encoders (I²C)
Radio controlRadioMaster Pocket ELRS (TX + receiver)
Power4S LiPo (14.8 V) → Mini-360 buck converter (5 V) for logic

Architecture

The ESP32-S3-DevKitC-1 runs most of the code and is the brain reading commands from the ELRS receiver, and running the swerve kinematics, and sending the commands to the two motor-control subsystems:

  • Driving: The master sends DSHOT600 signals to the SpeedyBee F405 4-in-1 ESC, which drives the four drive motors.
  • Steering: The master sends addressed commands over a shared UART bus to two MKS ESP32 Dual FOC boards (using SimpleFOC Commander). Each board runs field-oriented control on two steering motors, using an AS5600 magnetic encoder per module for absolute angle feedback.

All of this lives on the carrier PCB that seats the ESP32-S3 and breaks out clean, labeled connectors for the ESC, MKS boards, encoders, receiver, and power.

Important: The steering magnets must be diametrically magnetized (poles across the diameter, not top-to-bottom), 6 × 2.5 mm, and mounted on the steering rotation axis, not the motor shaft or drive shaft. The AS5600 reports an absolute 0–360°, so it must rotate 1:1 with the module's steering angle.


Assembly Instructions

Work through these in order. Use the CAD exploded views go to the assembly and click the exploded views to the left.

1. Gather parts

Order everything on the BOM and 3D-print the printed components from the CAD. Confirm you have all fasteners, belts, bearings, and magnets before starting.

2. Populate and solder the PCB

  • Solder the through-hole headers and connectors to the custom carrier board, following the silkscreen labels.
  • Solder the decoupling capacitors near the ESP32 5 V pin.
  • Solder the pin-socket rows that the ESP32-S3-DevKitC-1 plugs into.
  • Before powering anything, use a multimeter to verify there are no shorts between 5 V, GND, and the battery rails.

3. Wire the drive ESC (SpeedyBee F405)

  • Connect the four drive-motor signal lines and a shared ground from the SpeedyBee ESC to the DSHOT header on the carrier board.
  • Use only the M1–M4 signal pads plus one GND pad (verify GND with a multimeter first — M5–M8 pads on the board have no hardware behind them).

4. Wire the steering controllers (MKS ESP32 Dual FOC)

  • Connect each MKS board's UART (TX/RX/GND) to the shared steering UART nets on the carrier board.
  • Both boards share the bus and are addressed individually in firmware via SimpleFOC Commander.

5. Set up the encoders (AS5600)

  • Mount each AS5600 so its chip faces the diametrically-magnetized magnet on the steering rotation axis of each module.
  • Wire each encoder's VCC / GND / SDA / SCL to its MKS board's encoder header, and tie DIR to GND.
  • Before final assembly, flash SimpleFOC firmware to the MKS boards, configure the motors, and run encoder calibration for each module.

6. Assemble the mechanical drivetrain

  • Build the four swerve modules and mount them to the chassis per the CAD exploded views.
  • Install belts, bearings, and wheels; verify each module steers freely and each drive wheel spins without binding.

7. Power distribution

  • Wire the 4S LiPo through the switch and fuse, then split to the SpeedyBee ESC, both MKS boards, and the Mini-360 buck converter input.
  • The buck's 5 V output feeds the carrier board's logic rail (ESP32 + receiver). The battery's 14.8 V never reaches the carrier board directly — only the buck input does.

8. Flash the ESP32-S3 and bring it up

  • Open the firmware in Arduino IDE 2.x and select the ESP32S3 Dev Module board.
  • Bring the system up progressively rather than all at once:
    1. Smoke test — confirm the board powers and blinks.
    2. Drive test — verify DSHOT control of a single drive motor.
    3. Steering test — send a UART target to an MKS board and confirm the steering motor holds position.
    4. Receiver test — confirm the ESP32 reads ELRS channels.
  • Once each subsystem checks out, run the full firmware to read the transmitter, compute swerve kinematics, and drive all eight motors together.

Notes

  • Some ESP32-S3-DevKitC-1 revisions have different row spacing (22.86 mm vs 25.4 mm), measure your board with calipers before finalizing the PCB.
  • Measure the Mini-360 buck module's pad spacing with calipers as well before ordering the board.
  • The library APIs (DSHOT, SimpleFOC, ELRS) may need small adjustments to match current versions, adapt from each library's examples.
image image image image

Parts

14
QtyValueFootprintReferences
2CCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC1, C2
1Conn_01x22_PinConnector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_Vertical_SMD_Pin1RightJ6
1Conn_01x22_PinConnector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_Vertical_SMD_Pin1LeftJ5
1DSHOT to SpeedyBeeConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ_DSHOT1
1Power input from batteryConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ_VBAT1
1RX_ELRSConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ_ELRS1
1SW_PushButton_Switch_Keyboard:SW_Cherry_MX_1.00u_PCBSW1
1TL Steering ControllerConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ_STEER1
1TR Steering ControllerConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ_STEER2
1VIN+Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ1
1VIN-Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ2
1VOUT+Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ3
1VOUT-Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ4

Similar boards

  • 2 layers116.8 × 30 mmType d, the printed circuit board in 3D

    Type d

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    14 parts3kApache-2.0
  • 2 layers32 × 22 mmDiff driver, the printed circuit board in 3D

    Diff driver

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    14 parts990GPL-3.0
  • 2 layers34 × 45 mm2032Charger, the printed circuit board in 3D

    2032Charger

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    14 parts915
  • 2 layers34 × 109.9 mmTdisplay s3, the printed circuit board in 3D

    Tdisplay s3

    landonr/homeThing

    Wifi Smart Home Remotes that run on ESPHome

    14 parts551GPL-3.0
  • 2 layers45.3 × 42.7 mmMainPcb, the printed circuit board in 3D

    MainPcb

    adamb314/ServoProject

    Getting the most out of your hobby servo

    14 parts545
  • 2 layers42.5 × 28.8 mmC5VRX JACK DIY, the printed circuit board in 3D

    C5VRX JACK DIY

    Twotoz/C5VRX

    Ultra-minimal, zero-CPU 5.8 GHz analog FPV video receiver using ESP32-C5 Wi-Fi 6 PHY MODEM_DIAG, BitScrambler WBFM demodulation & resistor DAC CVBS

    14 parts515GPL-3.0
  • 2 layers62 × 24 mmMai button, the printed circuit board in 3D

    Mai button

    whowechina/mai_pico

    Pico controller for Maimai

    14 parts475

Questions

How big is the Swerve carrier board PCB?

It measures 120 × 120 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Swerve carrier board use?

14 parts. 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 Swerve carrier board KiCad files?

From the Eventide-03/Mini-Swerve repository on GitHub, at the commit this page was made from: the board is PCB/swerve carrier board.kicad_pcb and its schematic PCB/swerve carrier board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Swerve carrier board design in my own project?

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