Skip to the content
4 layers46 × 238 mmAssembly review, the printed circuit board in 3D

Amateur rocket flight computer: single-board KiCad PCB (STM32H743), firmware and diagnostics

Size
46 × 238 mm
Copper layers
4
Thickness
1.6 mm
Parts
208
Nets
162
Pads
655
Tracks, vias
2,037, 608
Pours
13
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
25 Sep 2026
Updated
4 Nov 2026

Overview

Assembly review is an open-source printed circuit board by OAK-WJR, from the OAK-WJR/rocket-flight-computer repository on GitHub. It is a 4-layer board of 46 × 238 mm with 208 parts on 162 nets, routed with 2,037 tracks and 608 vias.

It is built around the SAM-M10Q-00B, MS561101BA03-50 and ICM-45686, with the AO3400A, AON6403 and AON7524 among its other parts. Its parts include 79 resistors, 63 capacitors, 6 transistors, 6 connectors and 5 ICs.

Main components

11

README

README.md

Rocket Flight Computer (M3, design only)

Status: design only. No board has been built, powered or flown. Every result below comes from CAD checks, circuit simulation or software tests on a computer, never from hardware.

This is a flight computer for a student high-power rocket. It is one 46 × 238 mm, four-layer circuit board that slides into a 54.66 mm inside-diameter airframe. It runs from a 2-cell LiPo battery, uses an STM32H743 microcontroller, reads an IMU (ICM-45686), a barometer (MS5611) and GPS (SAM-M10Q), logs to flash memory, talks over USB, powers a camera, drives four fin servos for roll control, and has two separately fused circuits to fire the parachute charge. The current design is revision M3-ASSY-R2 (28 Sep 2026).

M3-ASSY-R2, top side, KiCad 3D render

KiCad 3D render of the top side of M3-ASSY-R2 (46 × 238 mm).

Demo

There is no video, because the board has not been built. What can be shown and re-run today:

  1. Board checks. tools/check.sh runs KiCad's design-rule check, electrical-rule check and schematic-vs-PCB check. Output on 2026-11-01 (KiCad 10.0.6):
    text
    DRC violations 0  unconnected 0  schematic parity 0  ERC 0
    metadata / 3D model audit: OK
  2. Circuit simulation. The ngspice suite in m3_design/sim_r2/ found a flaw in the design: with a fresh 8.4 V battery, firing into a shorted igniter pulled the battery below 5 V for 3.9 ms (long enough that the computer could reset and miss the second parachute charge) and pushed 131 A through a transistor rated for 112 A. Adding a 2 Ω pulse resistor to each channel fixed it in simulation (4.1 A, battery stays above 8.2 V).

Shorted-igniter simulation before and after the fix

Simulated, not measured. Grey: before the fix. Black: with the 2 Ω resistors. The 20 ms pulse length is a rule the future firmware must follow.

The portfolio page for this project is 8a ("Rocket Flight Computer Design").

How it works

mermaid
flowchart LR
  BAT[2S LiPo battery] --> PWR[power switch, reverse and over-voltage protection, 3.3 V supply]
  PWR --> MCU[STM32H743 microcontroller]
  SEN[IMU, barometer, GPS] --> MCU
  MCU --> LOG[flash log]
  MCU --> USB[USB diagnostics]
  MCU --> CAM[camera power and UART]
  BAT --> ACT[actuator power switch]
  ACT --> SRV[four fin servos]
  ACT --> ARM[arming plug: a full break] --> PYRO[two fused parachute channels]
  MCU --> SRV
  MCU --> PYRO
  • One board instead of two. An earlier version split the design into an M1 power/actuator board and an M2 microcontroller/sensor board joined by harnesses; M3 merges them back into one board (one assembly order, no 21-wire harness); the old M1 board is kept in reference/m1_power_actuator/.
  • Safety by hardware. The arming plug is a complete electrical break in the parachute circuit; a script (m3_design/check_actuators.py) reads the PCB copper and fails if anything bypasses it.
  • Easy to diagnose. Test pads, voltage-sense dividers and fault lines on the power rails; the bench firmware (for the previous revision R1) reports them over USB, and the host tools in diagnostics/ turn a report into a list of likely faults.
  • Every part checked. All BOM lines were checked against the maker's datasheet for pinout, land pattern, polarity and 3D orientation (docs/R2_VERIFICATION.md).

How to run it

No hardware is needed for any of these. Tested on macOS with KiCad 10.0.6, ngspice 46 and Python 3.9 on 2026-11-01.

bash
git clone https://github.com/OAK-WJR/rocket-flight-computer.git
cd rocket-flight-computer

tools/check.sh                          # DRC + ERC + schematic parity + 3D/metadata audit (needs KiCad 10.0.x)
python3 m3_design/check_actuators.py    # arming / pyro / servo safety contract -> "actuator safety contract: OK"
python3 m3_design/sim_r2/run.py         # ngspice suite -> {'PASS': 135, 'OLD-FAIL': 6, 'INFO': 8, 'DEMO': 2}
python3 m3_design/sim_r2/plot_short.py  # redraws docs/images/shorted_igniter_sim.png (needs matplotlib)
python3 tools/export_fab.py             # Gerber zip + JLCPCB BOM/CPL into m3_design/assembly_review/fab/

python3 -m venv .venv && .venv/bin/pip install -r diagnostics/requirements-lock.txt
.venv/bin/python -m unittest discover -s diagnostics -t . -p 'test_*.py'      # 173 tests, OK (1 skipped)
(cd m3_firmware && PYTHONPATH=.. python3 -m unittest test_firmware test_gnss test_usb)  # 41 tests, OK

open m3_design/assembly_review/m3.kicad_pro   # open the design in KiCad 10
  • KiCad must be 10.0.x (older versions cannot open the files). On Linux/Windows set KICAD_CLI=/path/to/kicad-cli before tools/check.sh.
  • OLD-FAIL rows in the simulation are the pre-fix design, kept on purpose for comparison.
  • Firmware build: m3_firmware/build.py needs the Arm GNU Toolchain 15.2.rel1 in m3_firmware/toolchain/ and the maker datasheet PDFs it hash-checks (not committed, for copyright). It also refuses to build for R2 on purpose, because no R2 firmware exists yet. Prebuilt bench images for the older R1 board are in m3_firmware/build_assembly_*/. Do not run them on an R2 board.
  • To make a real board you would order it from JLCPCB with the files from tools/export_fab.py (see docs/ORDERING.md), then need a 2S LiPo, an ST-Link/SWD probe and a USB-C cable. None of this has been done.

Repo layout

PathWhat is in it
m3_design/assembly_review/The KiCad 10 project (the single source of truth): 14 schematic sheets, PCB, local footprints, symbols and 3D models, schematic PNG/SVG exports in sheets/, review notes
m3_design/sim_r2/ngspice suite for the actuator and parachute circuits (run.py, RESULTS.md, FINDINGS.md, plot_short.py)
m3_design/check_actuators.pySafety check that reads the PCB netlist
m3_firmware/Bench diagnostic firmware v0.8.1 (C, STM32 HAL + TinyUSB) for the R1 board, pin bindings, host-side tests
diagnostics/Python host tools: USB/SWD readout, log recovery, fault localisation, test-point map
docs/Ordering guide, part-by-part verification, actuator merge record, design rationale, FMEA, simulation notes, design history
quality_audit/Board audit: conflicting part numbers, 3D model paths, DRC/ERC evidence
reference/Older boards kept for comparison: M1 power/actuator board, M3-ASSY-R1
tools/check.sh (board gate), export_fab.py (fabrication files), JLCPCB stock and orientation helpers
STATUS.mdEvery requirement and what is and is not verified
AGENTS.md, CLAUDE.mdThe rules given to the AI coding assistants (see Credits)

Results and honest limits

What is done (on a computer only):

  • KiCad DRC, ERC and schematic parity all at zero; 183 placed parts, every one with a JLCPCB/LCSC part code.
  • 135 simulation checks pass for the current design; the shorted-igniter flaw was found and fixed in simulation.
  • 173 host diagnostic tests and 41 firmware host tests pass.

What is not done:

  • Nothing has been ordered, built, powered, measured or flown. Simulations use datasheet models, not measured parts.
  • No firmware exists for R2. The firmware here is bench diagnostics for R1 only; it has no flight logic, servo control or parachute firing.
  • Servo stall current through the board (about 7.7 A with all four stalled) is an estimate, not a measurement.
  • Fit in the sled and airframe, the arming plug hardware and the external power switch are still open (STATUS.md, docs/R2_VERIFICATION.md §4).

Other branches: m3-assy-r11 is the development line. It holds the later redesigns R3 to R10 (Oct 2026) and the compact R11 candidate (Nov 2026), committed by a collaborator, and the R10 bench diagnostics; each earlier revision is in its history. They are not part of the R2 design described here.

Credits

Jerry Wu (Jiarui Wu): the project and its requirements: one board that fits the 54.66 mm airframe, built-in USB diagnostics, at most three PCB iterations. I chose to merge the two earlier boards into one, set the system constraints, made the design decisions recorded as "owner rulings" (for example two independently fused parachute channels, and keeping the backup altimeter fully separate), and reviewed the layout, flagging routing problems such as unwanted zigzag traces.

AI coding assistants: they produced most of the schematics, PCB layout, simulations, firmware and scripts from my requirements and decisions.

  • Claude Code wrote the design documents, drew the first schematics through the EasyEDA API, wrote the KiCad board, routing and check scripts, and ran the ngspice simulations. It proposed and chose the 2 Ω per-channel pulse resistors shown above; I approved them. It also merged pull requests #1–#5 on my account, so those merge commits show my name.
  • Codex did the quality audit, the single-board versions up to M3-ASSY-R1, the bench firmware v0.1–v0.8.1 and the USB diagnostic tools.
  • Commits made with Claude Code carry a Co-Authored-By: Claude line. AGENTS.md (read by Codex, and by Claude Code through CLAUDE.md) holds the safety and routing rules they had to follow.

Collaborator and existing work:

  • Ethan Huang (collaborator) merged the four servo outputs, the two fused parachute channels with the arming break, the pull-pin and the buzzer into the board (pull request #1, 26 Sep 2026), also with Claude Code. He committed the later R3–R10 branches.
  • Open-source code and models: TinyUSB (MIT), STM32CubeH7 HAL (BSD-3-Clause) and CMSIS headers (Apache-2.0) in m3_firmware/vendor/; KiCad library 3D models (CC-BY-SA 4.0 with exception); footprints and 3D models converted from the EasyEDA/LCSC library with easyeda2kicad. Details and licences: THIRD_PARTY_NOTICES.md.
  • Tools: KiCad 10, ngspice, Python, Arm GNU Toolchain; part data from maker datasheets and LCSC/JLCPCB pages (linked in the review notes, not copied).

Parts

208
QtyValueFootprintReferences
2410krocket:R0402R10, R11, R104, R121, R124, R128, R129, R131, R132, R140, R141, R143, R144, R154, R155, R156 +8
15100nFrocket:C0402C5, C13, C14, C15, C16, C17, C18, C21, C24, C29, C30, C31, C32, C33, C160
1010k 0.1%rocket:R_0603_1608MetricR75, R76, R78, R88, R89, R90, R91, R92, R102, R110
922uFrocket:C0805C6, C7, C8, C9, C10, C11, C34, C150, C151
81krocket:R0402R105, R127, R130, R133, R139, R142, R145, R160
7100nF 50V X7R 10%rocket:C_0603_1608MetricC71, C74, C83, C90, C93, C128, C140
710nFrocket:C0603C60, C94, C122, C127, C129, C139, C141
622uF 25V X7R 10%rocket:M3_GRM32_1210C72, C73, C75, C76, C82, C92
51k 1%rocket:R_0603_1608MetricR74, R77, R100, R101, R103
5220Rrocket:R0805R32, R33, R126, R138, R162
4100krocket:R0402R60, R120, R122, R123
41k 0805rocket:R0805R150, R151, R152, R153
32.2uFrocket:C0603C19, C20, C120
34.7krocket:R0402R12, R13, R125
3GNDrocket:M3_TestPad_1.5TP74, TP88, TP124
210pFrocket:C0402C25, C26
21uF 50V X7R 10%rocket:C_1206_3216MetricC80, C91
2220nF 25V X7Rrocket:C0603C126, C138
22R 1% 2W pulserocket:R2512R134, R135
24.7nF 50V C0G 5%rocket:C_0603_1608MetricC70, C81
24.7uFrocket:C0603C23, C28
24.7uHrocket:IND-SMD_L4.0-W4.0L1, L2
25.1krocket:R0402R7, R8
2AO3400Arocket:SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BRQ122, Q123
2AON6403rocket:PDFN-8_L5.6-W5.2-P1.27-LS6.1-BLQ120, Q121
2AON7524rocket:M3_AON7524_DFN3x3AQ124, Q125
2RAW_PROTECTEDrocket:M3_TestPad_1.5TP70, TP81
11.65k 0.1%rocket:R_0603_1608MetricR84
11.78k 0.1%rocket:R_0603_1608MetricR70
1172k 0.1%rocket:R_0603_1608MetricR71
11M 0.1%rocket:R_0603_1608MetricR80
11N5819WSrocket:SOD-323_L1.8-W1.3-LS2.5-RDD123
11uFrocket:C0603C22
11uF 25V X7R 10%rocket:C_0603_1608MetricC86
125MHz CL8pFrocket:CRYSTAL-SMD_4P-L3.2-W2.5-BLY1
1280k 0.1%rocket:R_0603_1608MetricR81
12M 0.1%rocket:R_0603_1608MetricR82
130.9k 0.1%rocket:R_0603_1608MetricR72
1300k 0.1%rocket:R_0603_1608MetricR83
1330uF 35Vrocket:M3_OSCON_F12C84
144.2k 0.1%rocket:R_0603_1608MetricR87
1470nF 25V X7R 10%rocket:C_0603_1608MetricC85
1470uF 25Vrocket:CAP-SMD_BD8.0-L8.3-W8.3-LS9.0-FD_H10.5C121
147pF 50V C0G 5%rocket:C_0603_1608MetricC77
16.2k 1%rocket:R0402R9
16.8uHrocket:M3_SRP5030TAL3
166.5k 1%rocket:R_0603_1608MetricR85
180.6k 0.1%rocket:R_0603_1608MetricR86
1ACT_GATErocket:M3_TestPad_1.5TP121
1AP63203WU-7rocket:TSOT-26_L2.9-W1.6-P0.95-LS2.8-BLU2
1AP63300WU-7rocket:M3_AP63200_TSOT26U8
1ARM: RAW / BUS2 / BUS1 / RAWrocket:M3_DB128V_4PJ120
1B340A-13-Frocket:D_SMAD9
1BAT+ / GND / SW / SWrocket:M3_DB128V_4P_EntryJ1
1BAT54Arocket:SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BRD120
1BAT54Srocket:SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BRD122
1BAT_ENABLErocket:M3_TestPad_1.5TP84
1BAT_FAULT_Nrocket:M3_TestPad_1.5TP85
1BAT_ILIMrocket:M3_TestPad_1.5TP89
1BAT_INrocket:M3_TestPad_1.5TP80
1CAM 5V / GND / RX / TXrocket:M3_DB128V_4PJ9
1CAM_5Vrocket:M3_TestPad_1.5TP72
1CAM_ILIMrocket:M3_TestPad_1.5TP73
1CAM_INPUT_LIMITEDrocket:M3_TestPad_1.5TP71
1CAM_IO_3V3rocket:M3_TestPad_1.5TP90
1CAM_RX_TESTrocket:M3_TestPad_1.5TP75
1CAM_TX_TESTrocket:M3_TestPad_1.5TP76
1CAM_UART_OErocket:M3_TestPad_1.5TP91
1E1- / E1+ / E2+ / E2-rocket:M3_DB128V_4PJ121
1ICM-45686rocket:LGA-14_L3.0-W2.5-P0.50-TLU4
1LOGIC_SOURCE_STrocket:M3_TestPad_1.5TP87
1MLT-8530rocket:BUZ-SMD_4P-L8.5-W8.5-P8.50-BRLS120
1MS561101BA03rocket:SENSORS-SMD_MS5611-01BA03U5
1PULL-PIN 1x2rocket:M3_PULLPIN_1x2J123
1PYRO1_GATErocket:M3_TestPad_1.5TP122
1PYRO2_GATErocket:M3_TestPad_1.5TP123
1RAW_ACTrocket:M3_TestPad_1.5TP120
1REDrocket:M3_NCD0805R1_K1LED1
1SAM-M10Q-00Brocket:LCC-20_L15.5-W15.5-P1.90_SAM-M10Q-00BU6
1SERVO 3x4rocket:HDR-TH_12P-P2.54-V-M-R3-C4-S2.54J122

The 190 most common of 208 parts.

More from OAK-WJR/rocket-flight-computer

2
  • 4 layers46 × 186 mmM3 assy r1, the printed circuit board in 3D

    M3 assy r1

    OAK-WJR/rocket-flight-computer

    Amateur rocket flight computer: single-board KiCad PCB (STM32H743), firmware and diagnostics

    135 parts
  • 4 layers46 × 66 mmM1 power actuator, the printed circuit board in 3D

    M1 power actuator

    OAK-WJR/rocket-flight-computer

    Amateur rocket flight computer: single-board KiCad PCB (STM32H743), firmware and diagnostics

    36 parts

Similar boards

  • 4 layers110 × 90 mmUsb hub 3s, the printed circuit board in 3D

    Usb hub 3s

    misko/prompt2device

    The separate vNext PCB skill and orchestrator package is available alongside the reference workflow below; existing projects keep their accepted toolchain until an explicit migration.

    116 parts3MIT
  • 4 layers42 × 42 mmHuvud, the printed circuit board in 3D

    Huvud

    bondus/KlipperToolboard

    A 3D printer tool head controller board

    115 parts373GPL-3.0
  • 2 layers60 × 48 mmHub, the printed circuit board in 3D

    Hub

    cUDGk/vrc-fbt-hardware

    VRChat向けフルボディトラッキング基板 — ハブ+デイジーチェーン端末・数と位置を自由に変更可能・KiCad/OpenSCAD一式

    57 parts
  • 4 layers60 × 120 mmTheoros, the printed circuit board in 3D

    Theoros

    Majorwhiskey/gps-lora

    Theoros is a USB-C GPS logger and LoRa tracker built on the ESP32-S3. It logs 1 Hz u-blox M10 fixes to microSD, shows status on an OLED and sends AES-128-CCM encrypted position over 868 MHz LoRa.

    88 partsCERN-OHL-P-2.0
  • 8 layers21.3 × 27 mmFIRM v2.0, the printed circuit board in 3D

    FIRM v2.0

    NCSU-High-Powered-Rocketry-Club/FIRM-KiCad

    Full and open hardware design for FIRM

    82 parts1MIT
  • 2 layers60.4 × 112.5 mmCrowBot -V1.4-20220909, the printed circuit board in 3D

    CrowBot -V1.4-20220909

    rosmo-robot/CrowBot

    Design files for Elecrow CrowBot

    194 parts3CERN-OHL-P-2.0
  • 2 layers60 × 55 mmEsp32-dimmer slim, the printed circuit board in 3D

    Esp32-dimmer slim

    MikkoTervala/esp32-dimmer

    ESP32 multi channel dimmer

    51 parts1

Questions

How big is the Assembly review PCB?

It measures 46 × 238 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Assembly review use?

208 parts, built around the SAM-M10Q-00B, MS561101BA03-50, ICM-45686 and AO3400A. 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 Assembly review KiCad files?

From the OAK-WJR/rocket-flight-computer repository on GitHub, at the commit this page was made from: the board is m3_design/assembly_review/m3.kicad_pcb and its schematic m3_design/assembly_review/actuator_power.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Assembly review design in my own project?

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