Skip to the content
PCBKitNew board
4 layers40 × 50 mmCrawler schematic, the printed circuit board in 3D

Crawler schematic

SySch415/MITE-ESC5

Electronic Speed Controller for SCX24 rock crawlers

Size
40 × 50 mm
Copper layers
4
Thickness
1.57 mm
Parts
82
Nets
80
Pads
290
Tracks, vias
528, 69
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 May 2026
Updated
7 Nov 2026

Overview

Crawler schematic is an open-source printed circuit board by SySch415, from the SySch415/MITE-ESC repository on GitHub, published under the MIT licence. It is a 4-layer board of 40 × 50 mm with 82 parts on 80 nets, routed with 528 tracks and 69 vias.

It is built around the STM32F411CEU6, NRF24L01P-R and TB6612FNG,C,8,EL, with the RY8336, RC0603FR-0710KL and FTC303018D4R7MBCA among its other parts. Its parts include 5 ICs, 3 connectors, 2 resistors, 2 inductors and 1 transistor. It belongs with the STM32 boards of this library.

Main components

12

README

README.md

MITE - SCX24 Electronic Speed Controller

MITE v1 board render

MITE (Micro Inline Terrain ESC)

A from-scratch Electronic Speed Controller for SCX24 rock crawlers, built around the STM32F411. It has two parts:

  • Crawler: receives commands over a 2.4 GHz nRF24L01+ link and drives a brushed 050 motor through a TB6612FNG H-bridge plus a steering servo. Its custom board is MITE v1, shown above.
  • Controller: a handheld transmitter that reads a 2-axis joystick and sends throttle and steering to the crawler.

Both firmwares are bare-metal C++17: no vendor HAL and no CubeMX-generated code. They're built on a register-level HAL (STM32-HAL-Library, included as a submodule) and a custom nRF24L01+ driver.

Status

  • Crawler and controller firmware run on prototype (two Black Pill boards).
  • MITE v1 (custom crawler PCB): layout about 90% done, antenna needs impedance matching, then going through CDR, not yet fabricated. The firmware pin map has to be updated for the new board (see Pin maps).
  • Controller PCB: schematic captured, layout not started.

Contents


Repository layout

text
.
├── controller/            # Transmitter firmware (joystick → nRF24 TX)
│   ├── main.cpp
│   └── startup.cpp        # Vector table + Reset_Handler
├── crawler/               # Receiver firmware (nRF24 RX → motor + servo)
│   ├── main.cpp
│   └── startup.cpp
├── drivers/
│   ├── include/nrf24.hpp  # nRF24L01+ driver
│   └── src/nrf24.cpp
├── hal_lib/               # Submodule: SySch415/STM32-HAL-Library (GPIO, RCC, SPI, ADC, TIM)
├── hardware/
│   ├── crawler_schematic/     # KiCad project: MITE v1 crawler board
│   ├── controller_schematic/  # KiCad project: controller
│   └── original-schematic-STM32F411CEU6_WeAct_Black_Pill_V2.0.pdf  # reference
├── docs/images/           # README images
├── linker.ld              # STM32F411CE: 512 KB flash, 128 KB SRAM
└── CMakeLists.txt         # Builds controller.elf and crawler.elf

Building and flashing

Requirements

  • arm-none-eabi-gcc toolchain
  • CMake ≥ 3.20
  • OpenOCD and an ST-Link (V2 or clone)

Clone

The HAL is a git submodule, so clone recursively:

bash
git clone --recursive https://github.com/SySch415/stm32-crawler.git
# or, in an existing clone:
git submodule update --init

Build

bash
cmake -B build
cmake --build build

This produces controller.elf/.bin and crawler.elf/.bin in build/.

Flash

With the ST-Link connected to the target's SWD pins:

bash
cmake --build build --target flash-crawler
cmake --build build --target flash-controller

Each target erases, writes to 0x08000000, verifies, and resets the MCU through OpenOCD.


Radio link

The controller transmits continuously, and the crawler listens on pipe 0.

SettingValue
RF channel76 (2.476 GHz)
AddressE7:E7:E7:E7:E7 (5 bytes)
Data rate / power2 Mbps, 0 dBm
CRC1 byte
Auto-ack / retransmitDisabled
Payload4 bytes, fixed length

Payload format (little-endian):

BytesFieldRange
0–1Throttle (uint16_t)0–4095 (12-bit ADC), center ≈ 2048
2–3Steering (uint16_t)0–4095 (12-bit ADC), center ≈ 2048

Crawler control behavior

Throttle → TB6612FNG channel A

  • A dead band of ±100 counts around center (2048) gives neutral: AIN1 = AIN2 = high and PWM = 0, which puts the bridge in short brake. That's what keeps a crawler from rolling back down a slope.
  • Above the dead band: forward (AIN1 high, AIN2 low), with duty scaled to the distance from center.
  • Below the dead band: reverse (AIN1 low, AIN2 high).
  • Motor PWM: timer ARR = 15999, prescaler = 0.

Steering → servo

  • Standard RC servo frame of about 50 Hz, with a pulse of about 1.0–2.0 ms mapped linearly from the steering axis.
  • Within the steering dead band the servo holds center (1.5 ms).

Status LEDs (prototype firmware): throttle forward/reverse and steering left/right indicators.


Pin maps

Prototype (Black Pill), matching the current firmware

Crawler

SignalPinPeripheral
nRF CEPA3GPIO
nRF CSNPA4GPIO
nRF SCKPA5SPI1 (AF5)
nRF MISOPA6SPI1 (AF5)
nRF MOSIPA7SPI1 (AF5)
Motor PWM (PWMA)PB6TIM4_CH1 (AF2)
AIN1PB7GPIO
AIN2PB8GPIO
Servo PWMPB4TIM3_CH1 (AF2)
LED throttle up / downPA0 / PA1GPIO
LED steering left / rightPA11 / PA12GPIO

Controller

SignalPinPeripheral
Joystick Y (throttle)PA0ADC1_IN0
Joystick X (steering)PA1ADC1_IN1
nRF CE / CSNPA3 / PA4GPIO
nRF SCK / MISO / MOSIPA5 / PA6 / PA7SPI1 (AF5)

MITE v1 board (as routed, pending firmware update)

Several pins moved during PCB layout. The crawler firmware has to be updated before it runs on MITE v1.

SignalPinPeripheralChanged?
nRF CEPA3GPIO✱
nRF CSNPA4GPIO✱
nRF SCKPA5SPI1_SCK
nRF MISOPA6SPI1_MISO✱
nRF MOSIPA7SPI1_MOSI✱
nRF IRQnot connected(polled over SPI)
Motor PWM (PWMA)PB4TIM3_CH1✱
AIN1PB6GPIO✱
AIN2PB5GPIO✱
Servo PWMPB7TIM4_CH2✱
Status LEDPC13GPIO (active low)✱
SWDIO / SWCLKPA13 / PA14SWD

Hardware: MITE v1 crawler board

A 40 × 50 mm, 4-layer board that replaces the prototype's Black Pill, nRF module, H-bridge breakout and regulators. The KiCad project is in hardware/crawler_schematic/.

Main parts

BlockPartNotes
MCUSTM32F411CEU6 (UFQFPN48)25 MHz HSE crystal, BOOT0 and reset buttons
RadionRF24L01+ (bare QFN-20)16 MHz crystal, Johanson 2450AT43F0100 chip antenna, Nordic reference matching network
Motor driverTB6612FNG (SSOP-24)Channel A only; VM from battery
Reverse polarity protectionAO4407A P-channel MOSFETHigh-side, gate to GND through 10 kΩ
Servo railRY8336 synchronous buck → 5 V4.7 µH molded inductor
Logic / RF railRY8336 synchronous buck → 3.3 V4.7 µH molded inductor
Motor bulk capacitor47 µF aluminum electrolyticAt the H-bridge VM pins
Battery2S LiPo (7.4 V nominal, 8.4 V full)JST-PH
ConnectorsJST-PH battery, JST-PH motor, 1×3 servo, 1×4 SWD

Power architecture

mermaid
flowchart LR
    BAT[2S LiPo] --> FET[AO4407A<br/>reverse polarity]
    FET --> BULK[47 µF bulk cap<br/>star point]
    BULK --> HB[TB6612FNG VM] --> MOT[050 motor]
    BULK --> B5[RY8336 → 5 V] --> SERVO[Steering servo]
    BULK --> B3[RY8336 → 3.3 V]
    B3 --> MCU[STM32F411]
    B3 --> RF[nRF24L01+]

Why it's arranged this way:

  • The servo and the logic run on separate rails. On the prototype, servo current spikes and radio TX bursts browned out the shared 3.3 V supply. The servo now has its own 5 V buck, and the 3.3 V buck runs straight from the battery.
  • The STM32 and nRF share one 3.3 V rail, so neither chip can be back-powered through the SPI pins during power-up or power-down.
  • The battery supply splits at the bulk capacitor (star point), so motor switching current doesn't share copper with the buck inputs.

Stackup and layout rules

JLCPCB JLC04161H-3313, 1.6 mm, impedance controlled.

LayerUse
L1 (F.Cu)Components, signals, motor current
L2 (In1.Cu)Solid GND plane, no routing
L3 (In2.Cu)3.3 V pour
L4 (B.Cu)Signals
ItemValue
Default track / clearance0.2 mm / 0.2 mm
Motor nets (BAT_IN, +BATT, AO1, AO2)2.0 mm (sized for ~5 A stall)
Power nets (+3.3V, +5V)0.5 mm, necked down at fine-pitch pins
RF feed (50 Ω, grounded coplanar)0.40 mm width, 0.25 mm gap
Vias0.6 mm pad / 0.3 mm drill
Copper to board edge0.5 mm

RF notes

  • The antenna has a copper keepout on all four layers. Only the feed trace enters it, on F.Cu.
  • Following Nordic's product specification, the nRF24L01+ exposed die pad is left unconnected. Ground goes through the VSS pins, each with its own via.
  • Do a range test against a known-good nRF24 module before final assembly.

Fabrication and assembly

  • Fab: JLCPCB, 4 layers, 1.6 mm, JLC04161H-3313 with impedance control, with a top-side stencil.
  • Assembly: in-house. Solder paste and stencil, hot-plate reflow, top side only. Headers are hand-soldered afterward. QFN bridges are reworked with hot air.
  • The Interactive HTML BOM KiCad plugin is used as the placement map.

SWD header (J3)

PinSignal
1+3.3 V
2SWDIO (PA13)
3SWCLK (PA14)
4GND

Hardware: controller

Currently a prototype-level build. The KiCad schematic is in hardware/controller_schematic/, and the PCB isn't laid out yet.

PartNotes
DFRobot Black Pill (STM32F411)MCU board
nRF24L01+ moduleSPI1
2-axis analog joystickThrottle (Y) and steering (X)
18650 Li-ion cellPower
MT3608 boost module5 V for the Black Pill

First power-up checklist (MITE v1)

  1. Inspect under magnification: QFN bridges, and the orientation of the electrolytic cap, MOSFET and LEDs.
  2. Power it from a current-limited bench supply (about 7.4 V, 200 mA limit) before connecting a LiPo.
  3. Measure the rails: 3.3 V and 5 V.
  4. Measure STM32 VCAP_1 ≈ 1.2 V, which confirms the internal regulator is running.
  5. Connect the ST-Link and check that the MCU is detected (openocd -f interface/stlink.cfg -f target/stm32f4x.cfg).
  6. Bring up the subsystems one at a time: radio, then servo, then motor (wheels off the ground).

Roadmap

  • Impedance match the antenna (add pi network??)
  • Finish MITE v1 routing and DRC, then fabricate
  • Failsafe: stop the motor and center the steering if no packet arrives within a timeout
  • Range test of the chip antenna vs. an nRF24 module
  • Controller PCB layout
  • Battery voltage monitoring and low-voltage cutoff

License

Firmware (controller/, crawler/, drivers/): MIT © 2026 Simon Schmidt
Hardware design files (hardware/): CERN-OHL-P v2 © 2026 Simon Schmidt

The Kovali name and logo are trademarks of Kovali, a California limited liability company. All rights reserved.

The ARCS name and logo belong to Avionics, Robotics, and Control Systems, a nonprofit corporation and IRS-recognized 501(c)(3) public charity, and are used with permission.

If you build, modify, or distribute this board, please remove both logos from the silkscreen. The logo footprints are excluded from the CERN-OHL license.

Parts

82
QtyValueFootprintReferences
6DNPCapacitor_SMD:C_0603_1608MetricC_ref_1, C_ref_2, C_ref_3, C_ref_4, CFF_3.3, CFF_5
510 kOhmResistor_SMD:R_0603_1608MetricR_EN_3.3, R_EN_5, R1_5, R2_3.3, R3_5
5TestPointTestPoint:TestPoint_Pad_D1.5mmTP1, TP2, TP3, TP4, TP5
3100 nF, X7R, 16 VCapacitor_SMD:C_0402_1005MetricC_M_4, C_M_5, C_M_6
3100nFCapacitor_SMD:C_0603_1608MetricC_rst_1, C1_3.3, C1_5
210KResistor_SMD:R_0603_1608MetricR_B_1, R_B_2
210nFCapacitor_SMD:C_0402_1005MetricC_nrf_1, C_nrf_11
210uFCapacitor_SMD:C_0603_1608MetricC_H_1, C_H_2
222pFCapacitor_SMD:C_0402_1005MetricC_nrf_8, C_nrf_9
222uFCapacitor_SMD:C_0603_1608MetricCIN_3.3, CIN_5
222x2uFCapacitor_SMD:C_0603_1608MetricCOUT_3.3, COUT_5
24.3pFCapacitor_SMD:C_0603_1608MetricC_M_1, C_M_2
24.7uHeasyeda2kicad:IND-SMD_L3.0-W3.0_FTC303020DL1_3.3, L1_5
2Crystal_4pin_GND24Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY_M_1, Y_nrf_1
2JST-PHConnector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ1, J2
2RY8336easyeda2kicad:ESOP-8_L4.9-W3.9-P1.27-LS6.0-BL-EP-1U2, U3
11.0pFCapacitor_SMD:C_0402_1005MetricC_nrf_4
11.5pFCapacitor_SMD:C_0402_1005MetricC_nrf_5
1100 nF, X7RCapacitor_SMD:C_0402_1005MetricC_M_7
110k OhmResistor_SMD:R_0603_1608MetricR_H_1
110uH +-10%Inductor_SMD:L_0603_1608MetricL_M_1
11KResistor_SMD:R_0603_1608MetricR_L_1
11MResistor_SMD:R_0603_1608MetricR_nrf_2
11nFCapacitor_SMD:C_0402_1005MetricC_nrf_2
12.2nFCapacitor_SMD:C_0402_1005MetricC_nrf_7
12.2uFCapacitor_SMD:C_0603_1608MetricC_M_3
12.7nHInductor_SMD:L_0402_1005MetricL_nrf_3
122kResistor_SMD:R_0603_1608MetricR_nrf_1
125.68 kOhmResistor_SMD:R_0603_1608MetricR1_3.3
13.9nHInductor_SMD:L_0402_1005MetricL_nrf_2
133nFCapacitor_SMD:C_0402_1005MetricC_nrf_3
14.7pFCapacitor_SMD:C_0402_1005MetricC_nrf_6
144.05 kOhmResistor_SMD:R_0603_1608MetricR2_5
147uFCapacitor_SMD:CP_Elec_6.3x5.4C_H_3
15.1KResistor_SMD:R_0603_1608MetricR_L_2
150ohmRF_Antenna:Johanson_2450AT43F0100AE1
18.2nHInductor_SMD:L_0402_1005MetricL_nrf_1
1AO4407Aeasyeda2kicad:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BLQ1
1LED_pc13LED_SMD:LED_0805_2012MetricD_L_1
1LED_pwrLED_SMD:LED_0805_2012MetricD_L_2
1LOGOfootprints:arcs_8mm_logoG***
1LOGOfootprints:kovali_9mmG***
1Motor_ServoConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalM2
1NCResistor_SMD:R_0603_1608MetricR_rst_1
1NRF24L01Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mmU6
1STM32F411CEUxPackage_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mmU1
1SWD_HeaderConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1TB6612FNGPackage_SO:SSOP-24_5.3x8.2mm_P0.65mmU4
1boot switchButton_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2SW_B_1
1nrst_switchButton_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2SW_rst_2

The 78 most common of 82 parts.

Questions

How big is the Crawler schematic PCB?

It measures 40 × 50 mm and has 4 copper layers, 1.57 mm thick.

What parts does the Crawler schematic use?

82 parts, built around the STM32F411CEU6, NRF24L01P-R, TB6612FNG,C,8,EL and RY8336. 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 Crawler schematic KiCad files?

From the SySch415/MITE-ESC repository on GitHub, at the commit this page was made from: the board is hardware/crawler_schematic/crawler_schematic.kicad_pcb and its schematic hardware/controller_schematic/controller_schematic/controller_schematic.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Crawler schematic design in my own project?

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).

Similar boards

  • 4 layers19 × 34 mmNRF24PA, the printed circuit board in 3D

    NRF24PA

    bemelab/nrf24L01-modules

    nRF24L01+ tabanlı RF modül tasarımları. Her proje kendi klasöründe, kendi README'si ve tasarım notlarıyla durur.

    39 parts
  • 4 layers67.6 × 63 mm2.4ghz rf test pcb, the printed circuit board in 3D

    2.4ghz rf test pcb

    Galacs/2.4ghz-rf-test-pcb

    2.4GHz RF test pcb

    56 parts
  • 4 layersRound LED Flash, the printed circuit board in 3D

    Round LED Flash

    xmyoot/custom-round-pcb-led-flash

    Custom circular ring PCB LED flash controller prototype

    237 parts
  • 4 layers175 × 68.5 mmR1000AX, the printed circuit board in 3D

    R1000AX

    pluggee/R1000AX

    Variant A Base Platform Board

    146 parts15GPL-3.0
  • 2 layers102 × 103 mmOhmsprint, the printed circuit board in 3D

    Ohmsprint

    Jockkoo/Ohmsprint-2026-4Digitalca

    Ohmsprint hackaton 2026. KiCad

    123 parts1
  • 4 layers99.1 × 99.1 mmBldc controller, the printed circuit board in 3D

    Bldc controller

    aditelik/bldc_controller

    Brushless DC Motor Controller PCB Design for EE 91a Fall 2019

    184 parts
  • 2 layers21.6 × 80.6 mmFireFly, the printed circuit board in 3D

    FireFly

    rjhsun/FireFly

    Open source ATmega8 target board

    41 parts
  • 4 layers108 × 50 mmFED3, the printed circuit board in 3D

    FED3

    KravitzLabDevices/FED3

    Feeding Experimentation Device version 3

    114 parts36GPL-3.0