Skip to the content
2 layers75 × 65 mmMotormodul, the printed circuit board in 3D

Motormodul

Meo98/picostack

Stackable, contract-driven module system for the Raspberry Pi Pico — open hardware, built by code

Size
75 × 65 mm
Copper layers
2
Thickness
1.6 mm
Parts
63
Nets
72
Pads
264
Tracks, vias
686, 144
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
3 Sep 2026
Updated
9 Sep 2026

Overview

Motormodul is an open-source printed circuit board by Meo98, from the Meo98/picostack repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 75 × 65 mm with 63 parts on 72 nets, routed with 686 tracks and 144 vias.

It is built around the STM32C011F6P6, SN74LVC1G07DBV and K7805-1000R3, with the SN74LVC1G08DBV, SN74LVC1G175DCK and IRFR5305 among its other parts. Its parts include 20 resistors, 14 capacitors, 11 ICs, 11 connectors and 2 diodes. It belongs with the robots and motor control boards and the RP2040 and STM32 boards of this library.

Main components

8

README

README.md

PicoStack

PicoStack

A stackable, contract-driven module system for the Raspberry Pi Pico.
Open hardware, generated by code, verified by tests that are proven to fail.

Hardware: CERN-OHL-S-2.0 Code: GPLv3 KiCad 10 Status: prototype

PicoStack motor module with a Raspberry Pi Pico plugged directly into its own stacking headers


One board plus a Pico is a working device. PicoStack v2 abolishes the separate base board that v1 needed: every 75 × 65 mm module now carries its own 6–30 V supply (reverse-polarity protection, TVS, a K7805-1000R3 regulator, Schottky-OR into VSYS) and a pair of Pico-native 1×20 socket rows (17.78 mm apart, the Pico's own pinout) — the Pico plugs straight into the top of the stack and all 40 pins run down through it. Stack several fed boards and they coexist; one is enough to power the whole chain. Every module also breaks out its 18 spare Pico GPIOs plus 3V3/GND as labelled solder pads on the board edge.

Power, I²C, emergency-stop and flashing signals run through the stack on the same contract pinout v1 defined — v2 changed the connector geometry, not a single pin's role — and any module can be flashed through the stack, selected by a hardware token chain, without touching a cable.

The unusual part: these boards are not drawn, they are built. Schematics, placement, routing, ground stitching and the manufacturing checks all come from Python that runs headless against KiCad. The stack's mechanical and electrical rules live in a single machine-readable file — the contract (see the design spec for the full v2 rationale) — and every board is measured against it before it may exist.

Why you might care

  • You want motorized / sensor / whatever hats for the Pico that stack instead of sprawling across a desk. Design one module and it composes with all the others.
  • You want to see a fully generative KiCad workflow — schematic generators, placement specs, headless autorouting (freerouting 2.3), copper-pour healing, DRC gates — all reproducible from the command line.
  • You like tests that can actually fail. Every check in this repository ships with a proof that it turns red when the thing it guards is broken. ERC and DRC caught none of the 14+ real bugs found during development — including a fail-unsafe emergency-stop gate (an intact loop blocked the motor, a broken wire released it) and a reverse-polarity FET wired so that reverse voltage crowbarred instead of being blocked. The custom gates caught all of them; that story is documented in the code.

The stack at a glance

PieceWhat it isState
Contract (tools/stack_spec.py)Connector positions, pin roles, per-module supply rules, edge-pad positions, landing-point copper rules, mating rules — the single source of truth for anyone building a modulestable, v2
Motor module (hardware/kicad/motor/)DRV8876 H-bridge, STM32C011 co-processor, opto-isolated dual-channel e-stop loop, own 6–30 V supply cell75 × 65 mm, routed, DRC-clean
Dimmer family (hardware/kicad/dimmer{1,3,4}/)1/3/4-channel low-side LED dimmers from one parametric description, own supply cell each75 × 65 mm, routed, DRC-clean
Base board (hardware/kicad/sockel/)v1's Pico socket + 24 V input + 5 V rail boardv1-only, archived — see release v0.1.0; not part of v2, not updated to the v2 contract
Toolchain (tools/)Schematic generators, board builder, autorouter driver, ground healer, contract probesworking, evolving

Motor module, isometric Four-channel LED dimmer module, isometric

Motor module, top view Four-channel LED dimmer module, top view

How a board gets built

text
tools/sch/<board>.py      →  KiCad schematic (generated, ERC-clean)
tools/pcb/spec_<board>.py →  placement + pre-routes + stitching, no KiCad needed
tools/pcb/build.py        →  fresh .kicad_pcb from netlist + spec
tools/pcb/autoroute.py    →  freerouting 2.3 headless, DSN repaired on the fly
tools/pcb/masseheiler.py  →  finds isolated copper islands, heals them with vias
tools/pcb/steckerprobe.py →  measures the finished board against the contract

Every stage is a plain Python file you can read, run and extend. The website walks through the architecture in detail.

Building a module of your own

The contract is deliberately small. A module must:

  1. use the 75 × 65 mm outline and M3 hole pattern from stack_spec.py,
  2. place the two Pico-native socket rows and the two connector pairs at the contract positions (the helpers compute them for you — never type the coordinates),
  3. give the board its own 6–30 V supply cell (reverse-polarity protection, TVS, Schottky-OR into VSYS) and bring every unused Pico GPIO out as a labelled edge pad,
  4. keep the landing-point areas free of exposed copper, so a stack that is assembled rotated cannot short anything,
  5. pass tests/ and the contract probes against the built board.

Start by copying tools/pcb/spec_motor.py and tools/sch/motormodul.py, then read CONTRIBUTING.md — it describes the workflow, the red-proof testing rule, and how to propose a new module.

Module ideas we would love to see: sensor hats, LED drivers, stepper drivers, CAN/RS-485 bridges, audio, battery management — anything that speaks the contract. Firmware in any language that runs on a Pico or the module MCUs (C, MicroPython, Rust, …) is equally welcome.

Repository layout

text
hardware/kicad/     KiCad projects (generated .kicad_sch + built .kicad_pcb)
tools/stack_spec.py the contract
tools/sch/          schematic generators
tools/pcb/          board builder, router driver, probes, healer
tests/              plain-python test suites (no pytest needed)
docs/               project website (GitHub Pages)

Building the boards yourself

You need KiCad 10, Python 3, and Java ≥ 25 for the bundled freerouting 2.3 flow. Then:

bash
python3 tests/run_all.py                 # every suite, no board tools needed
python3 tools/sch/motormodul.py          # regenerate a schematic
tools/pcb/kipy tools/pcb/build.py spec_motor \
  hardware/kicad/motor/Motormodul.kicad_pcb \
  hardware/kicad/motor/Motormodul.kicad_sch   # rebuild a board

(kipy is a small launcher that runs a script inside KiCad's Python. See CONTRIBUTING for the full toolchain walkthrough.)

Getting boards made

Gerbers, JLC-format BOM/CPL and pick-and-place files for all four v2 boards live under hardware/fertigung/{motor,dimmer1,dimmer3,dimmer4}/, and ship as ZIPs with every release. hardware/fertigung/ORDERING.md walks through ordering an assembled board at JLCPCB, including the traps that already cost real money in v1 (a diode package mix-up, a rotation-preview miss, a type-code encoding gotcha).

License

  • Hardware (everything under hardware/): CERN-OHL-S-2.0 — strongly reciprocal: if you ship a derived board, you publish your changes.
  • Code (tools, generators, firmware): GPL-3.0-or-later.
  • Documentation: CC-BY-SA 4.0.

Project language

The public face of this project is English. The code comments are currently German — they carry the full engineering rationale of every decision and are being translated over time. New contributions should be in English.

Parts

63
QtyValueFootprintReferences
60.1uC_0805_2012Metric_Pad1.18x1.45mm_HandSolderC9, C11, C13, C14, C15, C16
4100nC_0805_2012Metric_Pad1.18x1.45mm_HandSolderC17, C18, C19, C100
410kR_0805_2012Metric_Pad1.20x1.40mm_HandSolderR13, R15, R90, R91
43.3kR_1206_3216MetricR16, R17, R18, R19
4M3H1, H2, H3, H4
30.1kR_0805_2012Metric_Pad1.20x1.40mm_HandSolderR7, R8, R9
34.7kR_0805_2012Metric_Pad1.20x1.40mm_HandSolderR10, R20, R21
210000 (ID_OBEN)R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR104, R105
2Kennwiderstand (Modultyp)R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR100, R101
2PC817PC817_SMT_GullwingU4, U5
2SN74LVC1G07SOT-353_SC-70-5U6, U7
2SN74LVC1G08SOT-353_SC-70-5U3, U103
10.022uC_0805_2012Metric_Pad1.18x1.45mm_HandSolderC10
11.3kR_0805_2012Metric_Pad1.20x1.40mm_HandSolderR5
11000nC_0805_2012Metric_Pad1.18x1.45mm_HandSolderC101
1100kR_0805_2012Metric_Pad1.20x1.40mm_HandSolderR102
1220uCP_Radial_D8.0mm_P3.50mmC90
122uC_0805_2012Metric_Pad1.18x1.45mm_HandSolderC91
1DRV8876PWPRIC_DRV8876PWPRU1
1IRFR5305TO-252-3_TabPin2Q90
1K7805-1000R3Converter_DCDC_RECOM_R-78B-2.0_THTU90
1Kettenstecker, Buchse oben (SMD)PinSocket_1x02_P2.54mm_Vertical_SMD_Pin1LeftJ101
1Kettenstecker, Stift unten (SMD)PinHeader_1x02_P2.54mm_Vertical_SMD_Pin1LeftJ102
1Leistungsstecker, Buchse oben (SMD)PinSocket_2x02_P2.54mm_Vertical_SMDJ103
1Leistungsstecker, Stift unten (SMD)PinHeader_2x02_P2.54mm_Vertical_SMDJ104
1Motor-KlemmeTerminalBlock_Phoenix_MKDS-3-2-5.08_1x02_P5.08mm_HorizontalJ5
1Notaus-RuhestromPinHeader_1x04_P2.54mm_VerticalJ3
1Randpads GPIO, unbestueckt (SMD-Loetpad, Rueckseite)Randpad_Reihe_1x18J95
1Randpads Versorgung: 2x 3V3 + 2x GND, unbestueckt (SMD-Loetpad, Rueckseite)Randpad_Reihe_1x04J96
1SMCJ30AD_SMCD90
1SN74LVC1G175SOT-363_SC-70-6U101
1SN74LVC2G00DCURVSSOP-8_2.3x2mm_P0.5mmU102
1SS36CD_SMCD91
1STM32C011F6P6TSSOP-20_4.4x6.5mm_P0.65mmU100
1Stapelstecker links, Pico-Pins 1..20 (Buchse)PinSocket_1x20_P2.54mm_VerticalJ100
1Stapelstecker rechts, Pico-Pins 21..40 (Buchse)PinSocket_1x20_P2.54mm_VerticalJ105
1Versorgung EingangTerminalBlock_Phoenix_PT-1,5-2-3.5-H_1x02_P3.50mm_HorizontalJ90

More from Meo98/picostack

2
  • 2 layers75 × 65 mmDimmer4, the printed circuit board in 3D

    Dimmer4

    Meo98/picostack

    Stackable, contract-driven module system for the Raspberry Pi Pico — open hardware, built by code

    55 partsGPL-3.0
  • 2 layers64 × 60 mmSockelplatine, the printed circuit board in 3D

    Sockelplatine

    Meo98/picostack

    Stackable, contract-driven module system for the Raspberry Pi Pico — open hardware, built by code

    16 partsGPL-3.0

Similar boards

  • 2 layers99 × 90 mmEsp32-relay-24v, the printed circuit board in 3D

    Esp32-relay-24v

    LeanderM99/esp32-warmduscher-autoterm

    ESP32 controller board for a tigerexped Warmduscher Kit 2.0: 16 A relay for the 24 V/300 W boiler element plus AUTOTERM Air 4D 5 V UART control, driven from Home Assistant. KiCad PCB generated from Python.

    27 parts
  • 2 layers84.7 × 30 mmEurorack, the printed circuit board in 3D

    Eurorack

    scrambletools/AVB-Eurorack

    Eurorack interposer for the Scramble Hat-trik: bus power, 180° hat stacking, panel jacks

    29 parts
  • 4 layers35.6 × 17.8 mmLofive, the printed circuit board in 3D

    Lofive

    mwelling/lofive

    RISC-V microcontroller board based on SiFive FE310.

    35 parts161
  • 2 layers110.5 × 104.1 mmPjc kicad, the printed circuit board in 3D

    Pjc kicad

    jdeguire/pjcontroller

    Hardware and software for controlling your homebuilt video-beaming creation.

    89 partsGPL-3.0
  • 4 layers75 × 50 mmUsb3-gmm7550, the printed circuit board in 3D

    Usb3-gmm7550

    GMM-7550/gmm7550-hardware

    CologneChip GateMate FPGA Module: GMM-7550

    206 parts36
  • 6 layers254 × 115 mmHw openmower sabo, the printed circuit board in 3D

    Hw openmower sabo

    xtech/hw-openmower-sabo

    OpenMower is an open-source project that upgrades off-the-shelf robotic mowers into modern, smart lawn mowing robots with RTK GPS technology. For more details, check out the OpenMower project.

    356 parts5
  • 2 layers142.7 × 194.5 mmSoft Power Switch panelized, the printed circuit board in 3D

    Soft Power Switch panelized

    sparkfun/SparkFun_Soft_Power_Switch_Mk2

    Documentation, example code, and hardware for the SparkFun Soft Power Switch - JST 2mm.

    2,177 parts2

Questions

How big is the Motormodul PCB?

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

What parts does the Motormodul use?

63 parts, built around the STM32C011F6P6, SN74LVC1G07DBV, K7805-1000R3 and SN74LVC1G08DBV. 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 Motormodul KiCad files?

From the Meo98/picostack repository on GitHub, at the commit this page was made from: the board is hardware/kicad/motor/Motormodul.kicad_pcb and its schematic hardware/kicad/_vorschau/Modulsockel.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Motormodul design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).