

OrbitESC
An attempt at creating my own ESC module
- Size
- 45.2 × 29.7 mm
- Copper layers
- 8
- Thickness
- 2.04 mm
- Parts
- 161
- Nets
- 124
- Pads
- 522
- Tracks, vias
- 1,028, 178
- Pours
- 28
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 15 Apr 2021
- Updated
- 27 Oct 2026
Overview
OrbitESC is an open-source printed circuit board by brandonbraun653, from the brandonbraun653/OrbitESC repository on GitHub, published under the MIT licence. It is an 8-layer board of 45.2 × 29.7 mm with 161 parts on 124 nets, routed with 1,028 tracks and 178 vias.
It is built around the TLE9250XLE, AT25SF128A-SHB-T and DRV8300DRGER-MS, with the AP2171WG, MCAC100N08YA-TP and B5819W among its other parts. Its parts include 61 resistors, 45 capacitors, 13 connectors, 11 ICs and 9 diodes. It belongs with the robots and motor control boards and the STM32 boards of this library.
Main components
6TLE9250XLE
TSON-8-EP(3x3)TSON-8-EP(3x3) CAN Transceivers ROHSInfineon TechnologiesCAN TransceiversAT25SF128A-SHB-T
SOIC-8-40℃~+85℃ 100,000 cycles 128Mbit 133MHz 13uA 2.7V~3.6V 250ms@(64KB) 6ms SPI SOP-8-208mil NOR FLASH ROHSRenesas ElectronicsNOR FLASHDRV8300DRGER-MS
VQFN-24(4x4)VQFN-24(4x4) Gate Drivers ROHSMSKSEMIGate DriversAP2171WG
SOT-25-5-40℃~+85℃ 1 1A 2.7V~5.5V 95mΩ Active High High Side Switch Overcurrent Protection(OCP)、Overtemperature protection (OTP) SOT-25-5 Power Distribution Switches ROHSDiodes IncorporatedPower Distribution SwitchesMCAC100N08YA-TP
DFN5060-55℃~+150℃ 1 N-channel 100A 152W 1V 28pF 4.5mΩ@10V 6.32nF 80V 90nC@10V DFN5060 MOSFETs ROHSMicro Commercial ComponentsMOSFETsB5819W
SOD-123-55℃~+125℃ 1.5A 1mA@40V 25A 40V 600mV@1A Standalone SOD-123 Schottky Diodes ROHSMDDSchottky Diodes
README
README.mdOrbitESC
Brushless motor controller development environment for STM32-based ESC firmware, a host-side simulator, and a Python GUI/tooling suite.
Features
- Field-oriented control (FOC)-centric ESC stack with FreeRTOS integration
- STM32F446RE target (embedded) and host simulator build (ChimeraSim)
- Protobuf/Nanopb command and telemetry schema for C/C++ and Python
- Python tools and PyQt5 GUI for monitoring, configuration, and testing
- CMake presets for embedded and simulator builds
Project Structure
| Path | Description |
|---|---|
src/ | C++ sources for firmware, simulator integration, startup, tasks, and libraries. |
lib/ | Third-party and in-tree libraries: Aurora, Chimera, ChimeraSim, CMSIS, FreeRTOS, Thor, tinyusb, db. |
pyorbit/ | Python package for host tools, GUI (pyorbit/app), serial/CAN clients, protobuf stubs. |
scripts/ | Helper scripts: build embedded, generate protobufs, CAN interface setup. |
model/ | MATLAB/Simulink models and notebooks related to control algorithms. |
CMakePresets.json | Configure/build presets for embedded and simulator targets. |
Quickstart (Python tooling & GUI)
This repo uses uv for Python dependency management. Python 3.11 is required and auto-detected from pyproject.toml.
- Create and sync the environment
uv venv
uv sync- Option A: Activate the environment
source .venv/bin/activate- Option B: Run one-off commands without activation
uv run <command>- Launch the GUI
uv run python -m pyorbit.app.mainCommon tasks
# Run unit tests
uv run pytest
# Type check
uv run mypy
# Lint / Format
uv run flake8
uv run black .Development workflow
- Add dependencies:
uv add <package> - Sync/update:
uv sync - Update lockfile:
uv lock
Protobuf/Nanopb workflow
Protobuf definitions live under src/core/com/proto. C bindings are generated with Nanopb for the firmware, and Python stubs for pyorbit.
Prerequisites
protocavailable in PATH- The repo includes the Nanopb generator under
lib/Aurora/lib/nanopb/...
Generate all bindings
cd scripts
./build_proto.shWhat it does
- Runs Nanopb to generate C/C++ descriptors into
src/core/com/proto - Runs
protocto generate Python modules and.pyiintopyorbit/nanopb
Embedded firmware build (STM32F446RE)
The firmware uses CMake presets and GCC ARM toolchain.
Prerequisites
- CMake ≥ 3.16, build-essential toolchain
- Arm GNU Toolchain
arm-none-eabi-*(seescripts/install_arm_gcc.shor install from Arm)
Configure & build (Debug)
cmake --preset "OrbitESC_V3 Debug"
cmake --build --preset "OrbitESC_V3 Debug"Configure & build (Release)
cmake --preset "OrbitESC_V3 Release"
cmake --build --preset "OrbitESC_V3 Release"Artifacts
- Build directories under
build/debugandbuild/release - The
OrbitESCimage and map file are produced; a copy of the image is placed under asys_imagefolder in the preset's runtime output directory
Flashing
- Flashing is board/debugger dependent (ST-Link, J-Link, OpenOCD). Provide your preferred tool or script; a generic OpenOCD flow is recommended.
Simulator build (host)
Build a host-executable with simulated hardware using ChimeraSim.
Host prerequisites (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y build-essential cmake pkg-config libzmq3-devConfigure & build
cmake --preset "OrbitESC Simulator"
cmake --build --preset "OrbitESC Simulator"Run
# Example path; adjust if your CMake generator places binaries differently
./build/sim/OrbitESCCAN bus setup (Linux)
Scripts are provided to bring up a can0 interface at 1 Mbit/s. Root privileges are required.
Open the CAN port
sudo ./scripts/open_can_port.shClose the CAN port
sudo ./scripts/close_can_port.shNote: Ensure a compatible CAN adapter/driver is present. The Python side uses python-can.
Testing & quality checks
All commands can be run with uv run ... without activating the venv.
# Python tests
uv run pytest -q
# Type checks
uv run mypy
# Linting / formatting
uv run flake8
uv run black --check .Pytest is configured to discover tests under pyorbit/tests.
Troubleshooting
- CMake cannot find
arm-none-eabi-gcc: install the Arm GNU Toolchain and ensure it is in PATH. - Simulator link fails on
zmq: installlibzmq3-dev(or the platform equivalent) and reconfigure. protoc: command not found: install protobuf compiler (sudo apt-get install -y protobuf-compiler).- GUI fails to start: ensure
PyQt5is installed (it is declared inpyproject.toml), thenuv syncagain.
License
MIT. See LICENSE.
Parts
161| Qty | Value | Footprint | References |
|---|---|---|---|
| 22 | 10k | Resistor_SMD:R_0402_1005Metric | R1, R19, R20, R23, R29, R30, R31, R34, R37, R38, R41, R42, R43, R44, R47, R53 +6 |
| 21 | 100nF | Capacitor_SMD:C_0402_1005Metric | C1, C11, C12, C16, C17, C24, C28, C34, C35, C36, C37, C39, C40, C41, C42, C43 +5 |
| 9 | 1k | Resistor_SMD:R_0402_1005Metric | R17, R32, R33, R35, R36, R39, R60, R61, R65 |
| 6 | 1 | Resistor_SMD:R_0402_1005Metric | R2, R4, R8, R10, R14, R16 |
| 6 | MCAC100N08YA-TP | Project Mosfets:TRANS_BSC076N06NS3-G | Q1, Q2, Q3, Q4, Q5, Q6 |
| 5 | 5.1k | Resistor_SMD:R_0402_1005Metric | R9, R13, R46, R48, R50 |
| 4 | 2.2uF | Capacitor_SMD:C_0402_1005Metric | C3, C15, C27, C29 |
| 4 | TLV9051IDBVR | Package_TO_SOT_SMD:SOT-23-5 | U4, U6, U13, U14 |
| 3 | 0.01 | Resistor_SMD:R_2512_6332Metric | R6, R12, R63 |
| 3 | 1.5k | Resistor_SMD:R_0402_1005Metric | R24, R52, R66 |
| 3 | 100k | Resistor_SMD:R_0402_1005Metric | R21, R22, R57 |
| 3 | 1nF | Capacitor_SMD:C_0402_1005Metric | C2, C5, C45 |
| 3 | 2.2uF | Capacitor_SMD:C_0805_2012Metric | C19, C20, C21 |
| 3 | 39k | Resistor_SMD:R_0402_1005Metric | R45, R49, R51 |
| 3 | 4.7nF | Capacitor_SMD:C_0402_1005Metric | C9, C13, C22 |
| 3 | 47uF | Capacitor_SMD:C_0805_2012Metric | C10, C25, C26 |
| 3 | CH | TestPoint:TestPoint_Pad_D1.0mm | TP1, TP2, TP18 |
| 2 | 1uF | Capacitor_SMD:C_0402_1005Metric | C30, C44 |
| 2 | 4.7uF | Capacitor_SMD:C_0402_1005Metric | C8, C46 |
| 2 | 470 | Resistor_SMD:R_0402_1005Metric | R7, R58 |
| 2 | 47uF | Capacitor_SMD:C_1206_3216Metric | C31, C33 |
| 2 | 56k | Resistor_SMD:R_0402_1005Metric | R40, R56 |
| 2 | B5819W | Diode_SMD:D_SOD-123 | D3, D8 |
| 2 | Green LED | Diode_SMD:D_0603_1608Metric | D5, D6 |
| 2 | Yellow LED | Diode_SMD:D_0603_1608Metric | D4, D9 |
| 1 | 100uH | Inductor_SMD:L_0805_2012Metric | L3 |
| 1 | 10uF | Capacitor_SMD:C_0805_2012Metric | C18 |
| 1 | 120 | Resistor_SMD:R_0402_1005Metric | R15 |
| 1 | 18v | Diode_SMD:D_SMA | D2 |
| 1 | 2.0k | Resistor_SMD:R_0402_1005Metric | R5 |
| 1 | 220uH | Inductor_SMD:L_1812_4532Metric_Pad1.30x3.40mm_HandSolder | L2 |
| 1 | 2N7002 | Package_TO_SOT_SMD:SOT-23 | Q7 |
| 1 | 33 | Resistor_SMD:R_0402_1005Metric | R11 |
| 1 | 33nF | Capacitor_SMD:C_0402_1005Metric | C14 |
| 1 | 4.7uH | Inductor_SMD:L_Bourns-SRN6028 | L1 |
| 1 | AH | TestPoint:TestPoint_Pad_D1.0mm | TP14 |
| 1 | AL | TestPoint:TestPoint_Pad_D1.0mm | TP15 |
| 1 | AP2120 | Package_TO_SOT_SMD:SOT-23 | U9 |
| 1 | AP2171W | Package_TO_SOT_SMD:SOT-23-5 | U8 |
| 1 | AP62200Z6-7 | Package_TO_SOT_SMD:SOT-563 | U7 |
| 1 | ASE-24MHz | Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm | X1 |
| 1 | AT25SF128A-SHB-T | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | BH | TestPoint:TestPoint_Pad_D1.0mm | TP16 |
| 1 | BL | TestPoint:TestPoint_Pad_D1.0mm | TP17 |
| 1 | Blue LED | Diode_SMD:D_0603_1608Metric | D1 |
| 1 | CANH | TestPoint:TestPoint_Pad_1.5x1.5mm | J2 |
| 1 | CANL | TestPoint:TestPoint_Pad_1.5x1.5mm | J7 |
| 1 | CL | TestPoint:TestPoint_Pad_D1.0mm | TP19 |
| 1 | DFU | Button_Switch_SMD:SW_SPST_EVQP2 | SW2 |
| 1 | DRV8300DRGER | Package_DFN_QFN:VQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm | U5 |
| 1 | FerriteBead_Small | Resistor_SMD:R_0603_1608Metric | FB1 |
| 1 | GND | TestPoint:TestPoint_Pad_2.5x2.5mm | J12 |
| 1 | GND | TestPoint:TestPoint_Pad_1.5x1.5mm | J6 |
| 1 | Micro_SD_Card_Det2 | Connector_Card:microSD_HC_Hirose_DM3D-SF | J8 |
| 1 | RX | TestPoint:TestPoint_Pad_1.5x1.5mm | J13 |
| 1 | Red LED | Diode_SMD:D_0603_1608Metric | D7 |
| 1 | Reset | Button_Switch_SMD:SW_SPST_EVQP2 | SW1 |
| 1 | STM32F446RETx | Package_QFP:LQFP-64_10x10mm_P0.5mm | U3 |
| 1 | TLE9250X | Package_SON:HVSON-8-1EP_3x3mm_P0.65mm_EP1.6x2.4mm | U1 |
| 1 | TX | TestPoint:TestPoint_Pad_1.5x1.5mm | J9 |
| 1 | TermA | TestPoint:TestPoint_Pad_2.5x2.5mm | J3 |
| 1 | TermB | TestPoint:TestPoint_Pad_2.5x2.5mm | J4 |
| 1 | TermC | TestPoint:TestPoint_Pad_2.5x2.5mm | J5 |
| 1 | USB_C_Receptacle_USB2.0 | Connector_USB:USB_C_Receptacle_GCT_USB4085 | J1 |
| 1 | VDC | TestPoint:TestPoint_Pad_2.5x2.5mm | J11 |
| 1 | ~ | Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical | J10 |
More from brandonbraun653/OrbitESC
1- 4 layers38.9 × 30 mm

Similar boards
- 4 layers92 × 88.9 mm

Cubesat obc
ephemeridis/cubesat_obc
A small CubeSat On-Board Computer with lots of processing headroom, utilizing a low power ARM Cortex M33 processor at its core.
311 parts2MIT - 2 layers

- 4 layers63.5 × 165.4 mm

- 4 layers310 × 125 mm

- 4 layers97.3 × 90.3 mm

- 4 layers50.8 × 50.8 mm

Controller
oats-center/avena-rs
Avena On The Road: Bringing pavement health data to your fingertips
63 parts3 - 2 layers

PDM
PGRacing/PDM
Rev 4.3 | ID | NAME | CAUSE |DIFFICULTY | PRIORITY | STATUS | | --- | --- | --- | --- | --- | --- | | 1. | Create test board for BTS50025-1TAE | Switch with higher Rds(on) should perform better in terms of diagnostics…
294 parts1 - 4 layers48.8 × 53.1 mm

ESC Board
FPV-Drone-STM32F411/DroneController
All-in-one FPV drone PCB with integrated flight controller, PDB, and ESCs built around STM32F411.
73 parts60
Questions
How big is the OrbitESC PCB?
It measures 45.2 × 29.7 mm and has 8 copper layers, 2.04 mm thick.
What parts does the OrbitESC use?
161 parts, built around the TLE9250XLE, AT25SF128A-SHB-T, DRV8300DRGER-MS and AP2171WG. 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 OrbitESC KiCad files?
From the brandonbraun653/OrbitESC repository on GitHub, at the commit this page was made from: the board is hw/pcb/OrbitESC_V3/OrbitESC.kicad_pcb and its schematic hw/pcb/OrbitESC/OrbitESC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the OrbitESC 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).