Skip to the content
PCBKitNew board
4 layers54 × 120 mmKartonaut, the printed circuit board in 3D

TVC model rocket (after BPS.space Scout F): Teensy 4.1 flight firmware, mainboard spec, project log

Size
54 × 120 mm
Copper layers
4
Thickness
1.6 mm
Parts
174
Nets
141
Pads
606
Tracks, vias
3,146, 469
Pours
20
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
15 Oct 2026
Updated
5 Nov 2026

Overview

Kartonaut is an open-source printed circuit board by Jan-Philipp-Munsch, from the Jan-Philipp-Munsch/kartonaut repository on GitHub, published under the MIT licence. It is a 4-layer board of 54 × 120 mm with 174 parts on 141 nets, routed with 3,146 tracks and 469 vias.

It is built around the E22-400T22S, BMP390 and DRV8833PWPR, with the INA239AIDGSR, LIS3MDL and SHT40-AD1B-R2 among its other parts. Its parts include 51 capacitors, 49 resistors, 19 connectors, 16 ICs and 9 transistors. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.

Main components

12

README

hardware/mainboard/kicad/README.md

Mainboard rev B1 – KiCad-Projekt

Stand 2026-10-22. Schaltplan und Platine werden hier aus Code erzeugt, nicht von Hand gezeichnet. Die Quelle der Wahrheit ist circuit.py: Schaltplan, Platine und Prüfungen werden daraus abgeleitet. Die Vorgabe ist die Spezifikation ../README.md, Stand B1: rev B plus Review A1 bis A8 (../review_kicad_2026-10-21.md) und die Entscheidungen E1 bis E10 (../Komponenten_2026-10-22.md). Dieses Dokument beschreibt, wie das Projekt entstanden ist, was fertig ist, was offen ist und wo bewusst von der Spezifikation abgewichen wurde. Die Fertigerwahl steht in ../Fertiger_2026-10-21.md.

Platine schräg

1. Stand auf einen Blick

SchrittStand
Schaltung als Daten (circuit.py)174 Bauteile (12 davon DNP), 114 Netze, 7 Schaltplanblätter
ERC0 Fehler, 0 Warnungen, 4 begründete Ausschlüsse (§6)
Netzliste gegen Spezifikation §4 (check_design.py)OK: 39 Teensy-Pins, 7 Chip-Selects, 7 Mux-Kanäle, 11 Schienen, Kelvin-Abgriff
Platzierungalle 174 Footprints, keine Überschneidung; die drei Sensoren vom 23.10. mit add_parts.py nachgesetzt
Strompfade2S-Pfad, Pyro-Ausgänge und VSYS_IN als F.Cu-Flächen (§5.4); kein 2S-Netz auf In2
Routing3145 Bahnsegmente, 469 Vias, vier Lagen (Stand 24.10.); ./make.sh pcb braucht etwa 25 Minuten, danach close_gaps.py (§5.5)
DRC (JLC-Regeln)0 Fehler, Schaltplan-Parität 0 Abweichungen
Offene Verbindungen0 (23.10., nach Handrouting und Skript-Router)
AbbildungenRenders oben, unten und schräg, Lagenbilder (img/)
RundgangRUNDGANG_PLATINE.pdf: Anleitung mit Bildern zu Aufbau, Lagen, Strompfaden, Vias und DRC (guide_dump.py, make_guide.py)
Fertigungsdaten (Gerber, BOM, CPL)./make.sh fab → fab/, Stand 23.10. mit den drei Sensoren (§8)
ObenUnten
obenunten

Die Lagen einzeln: img/layers.pdf (F.Cu, In1 GND, In2, B.Cu Versorgung, Bestückungsdruck) und img/layer_*.png.

2. Werkzeuge

  • KiCad 10.0.6. Die winget-Installation für alle Benutzer blieb an der Administrator-Abfrage hängen. Deshalb wurde der signierte Installer (KiCad Services Corp.) als Benutzerinstallation ausgeführt: /S /CurrentUser nach %LOCALAPPDATA%\Programs\KiCad\10.0. Die globalen Bibliothekstabellen (sym-lib-table, fp-lib-table) wurden aus dem Template nach %APPDATA%\kicad\10.0\ kopiert; das macht die GUI sonst beim ersten Start.
  • easyeda2kicad (pip) für die Teile, die nicht in der KiCad-Bibliothek sind: LSM6DSV16X (C5267406, Symbol; der Footprint ist der des ICM-42688-P C1850418, gleiches Land-Pattern), BMP390 (C5124834), TPS63070RNMR (C109322) und E22-400T22S (C2903765). Symbol, Footprint und 3D-Modell kommen direkt aus der LCSC/EasyEDA-Datenbank, also genau die Footprints, mit denen JLC bestückt.
  • Freerouting 2.5.0 als JAR mit einer portablen Temurin-25-JRE (Zip, keine Installation), beides unter %LOCALAPPDATA%\Programs\freerouting\, Prüfsummen kontrolliert. Die native freerouting-cli.exe derselben Version stürzt mit einem GraalVM-Fehler ab; die JAR braucht Java 25.
  • CadQuery für zwei 3D-Modelle, die fehlen: Teensy 4.1 (vereinfacht, auf 8,5-mm-Sockeln) und XT30PW-M (die KiCad-Bibliothek nennt das Modell, liefert es aber nicht).
  • Datenblätter für die eigenen Entscheidungen: TPS63070 (SLVSC58B: Pinbelegung, Teiler-Tabelle 4, Kondensatoren), ICM-42688-P (DS-000347) und LSM6DSV16X (AN5763 Tab. 1: Pins 9–11 offen, 2–3 an GND).

3. Aufbau und Ablauf

text
circuit.py          Schaltung als Daten: Bauteile, Werte, Footprints, LCSC-Nummern, Netze, Blätter, Blöcke, Netzklassen
build_lib.py        lib/mainboard.*: Teensy-Symbol, INA239-Symbol, Sockel-Footprint, Kelvin-Shunt-Footprint
                    R_2512_Kelvin, 3D-Modelle Teensy und XT30; Pin-Typen der LCSC-Symbole
gen_schematic.py    Projektdatei (JLC-Regeln, Netzklassen, ERC-Ausschlüsse), Wurzelblatt und 7 Unterblätter
check_design.py     Tor 1: Netzliste aus dem Schaltplan gegen die Pin-Tabelle der Spezifikation
gen_pcb.py          Platine: Umriss, Footprints, Platzierung, Flächen, Sperrflächen, Plane-Vias, DSN-Export, SES-Übernahme, Nachbesserung,
                    Bestückungsdruck (`gen_pcb.py silk`: nur der Druck, auf der gerouteten Platine)
logo.py             Kartonaut-Abzeichen als Polygone, für den Bestückungsdruck und docs/brand/*.svg
render.py           Lagenbilder zuschneiden und zusammenfügen, Renders auf die Platine zuschneiden
make.sh             ganze Kette: ./make.sh [sch|pcb|drc|img|fab]
fab.py              `./make.sh fab`: Bestelldateien für JLCPCB nach fab/ (Gerber/Bohrdaten als ZIP, BOM, CPL, FAB.md)
widen.py            verbreitert schmale Versorgungsstücke, soweit der DRC es zulässt (nach dem Handrouting)
add_parts.py        setzt neue Bauteile aus circuit.py an feste Positionen in die fertige Platine (Netze, Blattpfad, DNP),
                    räumt fremdes Kupfer unter ihren Pads weg; danach close_gaps.py / route_gaps.py
snapshot.py         schnelles Bild einzelner Lagen beim Entwickeln
gaps.py             die offenen Verbindungen aus out/drc.json: was, wo, wie weit; `gaps.py png` mit Bild je Häufung
close_gaps.py       `dump`: Geometrie der Platine und die offenen Verbindungen nach out/geom.json; `apply`: Ergebnis des
                    Gitter-Routers in die Platine (KiCad-Python)
route_gaps.py       Gitter-Router (System-Python mit numpy/scipy): A* auf 0,05 mm, F.Cu/In2 mit Vias, Rip-up von
                    Signalbahnen; `debug n` mit Bild und Kennzahlen je Lücke, `region x0 y0 x1 y1` reißt einen Bereich auf
lib/                lcsc.* (easyeda2kicad), mainboard.* (eigene)
out/                Schaltplan-PDF, ERC- und DRC-Bericht (alles andere dort ist Zwischenstand)
img/                Renders und Lagenbilder
fab/                Bestelldateien (ZIP, BOM, CPL, FAB.md); fab/gerber/ ist der ungepackte Zwischenstand

Neu erzeugen (Git Bash):

bash
./make.sh

make.sh ruft kicad-cli aus der Bash auf und nicht aus Python. Aus der Microsoft-Store-Python gestartet, findet kicad-cli die globalen Bibliothekstabellen nicht, denn der App-Container der Store-Python verdeckt sie. Der ERC meldet dann 265 Bibliotheksfehler, und die Renders haben keine Modelle.

Warum Code statt GUI: Schaltung, Schaltplan und Platine können nicht auseinanderlaufen, jede Änderung ist ein Diff in circuit.py, und ERC, Netzlistenprüfung und DRC laufen auf Knopfdruck. Die Dateien lassen sich normal in KiCad öffnen. Sobald dort von Hand geroutet wird (§5.4), ist die Platinendatei die Quelle und ./make.sh pcb darf nicht mehr laufen. ./make.sh sch und ./make.sh drc bleiben nutzbar.

4. Schaltplan

Jedes Pin bekommt einen kurzen Draht und ein globales Netzlabel. So sind die Netznamen in Netzliste, Platine, Netzklassen und Spezifikation dieselben (VSERVO, nicht /Versorgung/VSERVO). Jedes Blatt ist in umrahmte Funktionsblöcke gegliedert. Die Blätter heißen Versorgung, Teensy, Sensorik, Funk, Aktoren, Pyro und Signal. Die UUIDs werden aus Blatt und Referenz berechnet und sind deshalb bei jedem Lauf gleich. PDF: out/mainboard_schematic.pdf.

5. Platine

5.1 Lagen

LageInhalt
F.Cualle Bauteile, Signale, GND-Füllung
In1.Cudurchgehende GND-Fläche (Lagentyp power, wird nicht geroutet)
In2.CuSignale, GND-Füllung
B.Cugeteilte Versorgungsfläche: GND_PWR unter allem, was am 2S hängt (TVC-Band mit XT30 und Servos, Mitte unter den VSERVO-Puffern, rechter Streifen mit den Aktoren, äußerer rechter Streifen neben J_STACK, Spitzen-Band unter Pyro, Arming und Summer); 5V_SYS unter der 1S-Seite (linker Streifen, unter dem Teensy)

Die Spezifikation sah die Versorgungsflächen auf Lage 3 vor. B.Cu ist gleichwertig und trägt ohnehin keine Bauteile. In2 bleibt so als zweite Signallage frei; ohne sie war die Platine nicht zu entflechten. Jedes SMD-Pad von GND, GND_PWR und 5V_SYS bekommt ein eigenes Via zu seiner Fläche. Das Via sitzt nur dort, wo Pad und Via über dem eigenen Teil der Teilung liegen, außerhalb der Stromflächen (§5.4) und außerhalb der 5-mm-Zone um die IMU; nur die IMU und ihre Kondensatoren dürfen ihre eigenen Masse-Vias im Ring zwischen 2,6 und 5 mm setzen.

5.2 Netzklassen

KlasseBahnNetze
Strom1,0 mm (Router: 0,5 mm), nur F.CuVBAT2_RAW, VBAT2_REV, VBAT2_F, VBAT_PROT, VSERVO, VBAT_ARMED, PYRO1..4_NEG
Rückstrom0,8 mmGND_PWR (wo es nicht auf der Fläche läuft)
Versorgung0,6 mm1S-Pfad mit VSYS_IN (A7), 5V_SYS, 3V3_RF, 3V3_EXP, TEENSY_VIN, MOT_A/B, VBUS_CHG
Wandler0,4 mmU2_L1, U2_L2
Default0,2 mmSignale, 3V3, 3V3_SENS, GND (GND läuft über die Flächen)

Alles, was in der Klasse Strom wirklich Strom führt, ist keine Bahn, sondern eine Kupferfläche (§5.4), ebenso VSYS_IN am TPS63070. Was Freerouting an diese Netze noch anschließt, sind Messteiler, Gate-Widerstände, Abblockkondensatoren und Testpunkte. export_dsn gibt der Klasse Strom deshalb für den Router 0,5 mm statt 1,0 mm und (use_layer F.Cu) (A6); an 0603-Pads und durch die engen Kanäle kam eine 1-mm-Bahn nicht.

JLC-Regeln im Projekt: 0,127 mm Abstand, Bahn mindestens 0,09 mm (Freerouting verjüngt an Pins auf 0,10 bis 0,12 mm), Via 0,45/0,2 mm, 0,2 mm zum Rand.

5.3 Platzierung

Stecker, ICs, die Kette des 2S-Pfads, Elkos und die Pyro-Spalten sind fest gesetzt (ANCHORS, EDGE, PYRO_COLS in gen_pcb.py). Die übrigen Teile setzt eine gierige Suche je Funktionsblock in dessen Region an das Pad, mit dem sie ein Netz teilen, mit 0,35 mm Abstand für Routingkanäle. Abblockkondensatoren gehören über OWNERS fest zu ihrem IC. Findet ein Teil in seiner Region keinen Platz, sucht es auf der ganzen Platine möglichst nah an seinem Partner und wird gemeldet (heute JP2, R26 und die drei kleinen Kondensatoren des DRV8833, alle innerhalb weniger Millimeter). Die Flächen der Strompfade (§5.4) bleiben für andere Teile gesperrt.

BereichInhalt
TVC-KanteJ_SERVO1 und 2 liegend, XT30 liegend rechts davon
links, TVC-EndeJ_SW, J_BAT1, J_CHG1 stehend; 1S-Kette Q2 → F2 → Q7; Lader MCP73831 unter dem Teensy
Mitte, TVC-Ende (SD-Weg, nur flach)VSERVO-Puffer 2 × 330 µF, Shunt mit INA239 darunter
rechts, TVC-Ende2S-Kette XT30 → Q1 → F1 → Q6, Sternpunkt NT1 am XT30-Minus, J_CHG2
rechter StreifenJ_SERVO3 und 4, J_MOT, DRV8833; J_STACK neben der rechten Teensy-Reihe, daneben LDO 3V3_EXP, BMP390, J_ARM; Summer
unter dem Teensy (≤ 3 mm)CS-Decoder und Analogmux an ihren Pins, alle 33-k/100-n-Hälften der Messteiler, IMU, das zweite BMP390 (DNP), Hold-up 2 × 470 µF und D1 am VIN-Pin
linker StreifenBuck-Boost mit Spule (≥ 25 mm von der IMU), Funkmodul, dann GPS, Kamera, LED-Stecker, Pegelwandler mit beiden WS2812B, LDO 3V3_RF
Spitzen-Kantevier Pyro-Stecker liegend; darunter je Kanal eine Spalte mit TVS und FET, flach unter dem USB-Stecker; Qwiic rechts

Gemessene Regeln:

  • IMU genau auf der Rollachse unter dem Teensy; Pin 1 des LGA-14 liegt zur TVC-Seite links (Footprint des ICM-42688-P, gegen DS-000347 geprüft; der LSM6DSV16X sitzt seit 23.10. auf demselben Land-Pattern, seine Achsenlage zur Platine ist in der Firmware zu setzen). Im Radius 5 mm keine fremden Vias und keine In2-Bahnen, unter dem Chip gar keine Vias (B16).
  • LoRa-Modul im linken Streifen, Antennenseite zur Spitze, 0,5 mm vom Rand (B17).
  • Buck-Boost und Spule mehr als 25 mm von der IMU; L1 und L2 gehen ohne Kreuzung an ihre Pins.
  • SD- und USB-Freiraum gilt nur für hohe THT-Teile. Karte und Stecker sitzen auf Teensy-Höhe, flache SMD-Teile dürfen darunter.

5.4 Strompfade als Flächen (Review A6 bis A8, B13)

Der 2S-Pfad wird nicht dem Autorouter überlassen. CORRIDORS in gen_pcb.py beschreibt ihn als Wegpunkte zwischen Pads; der Generator macht daraus je Netz eine F.Cu-Fläche:

NetzWegBreite
VBAT2_RAW, VBAT2_REV, VBAT2_FXT30-Plus → Q1 → F1 → Q6, kurze Stücke1,0 bis 1,2 mm
VBAT_PROTQ6 → Shunt; Q6 → äußere Schiene am rechten Rand (u 24,9 bis 26,6) → J_ARM1,4 / 1,7 mm
VBAT_ARMEDJ_ARM → äußere Schiene → Band hinter den Pins der vier Pyro-Stecker → je TVS1,6 bis 2,0 mm
VSERVOShunt → Bus quer unter den Teensy-Buchsen (v 28,1 bis 29,5) → Puffer → Band an beiden TVC-Servo-Steckern; Bus → innere Schiene (u 22,9 bis 24,6) → J_SERVO3/4 (über der Pinreihe, am Minus-Pin vorbei), DRV8833 VM0,6 bis 4,2 mm
PYRO1..4_NEGFET-Drain senkrecht zu Pin 2 des Pyro-Steckers1,0 mm
VSYS_INC10 → beide Eingangspins des TPS63070; die Füllung wird erst am VQFN-Pin schmal (A7)0,6 bis 1,0 mm

Zwei Eigenheiten von Freerouting waren dafür zu umgehen. Erstens liest es eine Fläche als ihren bloßen Umriss, ohne die Aussparungen um fremde Pads; carve_corridors füllt die Flächen deshalb vor dem Export und übernimmt die gefüllte Form als Umriss. Zweitens ist eine Kupferfläche auf einer Signallage für fremde Netze kein Hindernis: Freerouting hat Signale quer durch die Flächen gelegt, und beim Füllen zerfielen sie in Inseln. Jede Fläche bekommt deshalb für den Routinglauf eine deckungsgleiche Sperrfläche für Bahnen und Vias; bei den breiten Netzen (VBAT_PROT, VBAT_ARMED, VSERVO) ist sie 0,6 mm kleiner, damit die 1-mm-Stiche des eigenen Netzes am Rand andocken. gen_pcb.py patch löscht diese Sperrflächen am Ende. Der Pyro-Rückstrom läuft über die GND_PWR-Fläche auf B.Cu direkt unter den Schienen.

5.5 Routing und was offen ist

Freerouting entflechtet den Großteil. Die Kette (route in make.sh) hat seit dem 22.10. abends diese Form:

  1. gen_pcb.py dsn exportiert die platzierte Platine. Alles, was schon auf der Platine liegt, ist für den Router fix (im ersten Lauf die 124 Plane-Vias mit ihren Stummeln, in den Nachläufen die ganze Verdrahtung); In1 und B.Cu sind Power-Lagen, die Klasse Strom bleibt auf F.Cu. Das 5-mm-Via-Verbot um die IMU ist ein Polygon mit Löchern um die eigenen Masse-Vias der IMU; als volle Scheibe meldete Freerouting sie bei jedem Lauf als 22 „unfixable violations“ (jetzt 12, alle an den Sperrflächen des LoRa-Moduls).
  2. Der Hauptlauf hält von selbst an, wenn sich der Score zehn Pässe lang nicht verbessert hat (28 bis 40 Pässe, 13 bis 17 Minuten).
  3. gen_pcb.py ses übernimmt die Session durch Zusammenführen, nicht durch Ersetzen: KiCads SES-Import löscht die vorhandene Verdrahtung, und Freerouting schreibt fixe Elemente nicht in die Session. Danach kommen die GND-Füllungen auf F.Cu und In2 dazu.
  4. Zwei Nachläufe mit je vier Pässen routen nur das Offene und werden zusammengeführt. Mit 100 Pässen kreisten sie zehn Minuten lang zwischen denselben drei Zuständen; der erste Pass war immer der beste.
  5. gen_pcb.py patch schließt Lücken mit dem Abstand der Platinenregel (0,2 mm; mit 0,13 mm entstanden DRC-Fehler): erst mit einem geraden Stummel auf einer Lage, dann über In2 mit zwei Vias (nicht für die Klasse Strom, nicht in der IMU-Zone, nicht durch fremde Stromflächen). Danach löscht es die Sperrflächen aus §5.4.

Ein ganzer Lauf dauert damit etwa 25 Minuten statt 40. Was Freerouting am Ende als „unrouted“ zählt (80 bis 90), ist nicht das Maß: rund 55 davon sind die Pads, die schon über Stummel und Via an ihrer Fläche hängen. Freerouting kennt die Flächen auf den Power-Lagen nicht als Verbindung, legt für diese Pads in seiner Fanout-Stufe eigene Vias und zählt sie dann als offen. Zwei Auswege wurden am 22.10. ausprobiert und verworfen: In1 und B.Cu als Signallagen unter einer Bahnensperre (668 Abstandsverletzungen, jedes fremde Via gegen die GND-Fläche) und die schon angebundenen Pads aus der Netzliste nehmen (146 Verletzungen, fixe Stummel gegen netzlose Pads). Das Maß ist der KiCad-DRC.

Drei Läufe am 22.10. abends endeten bei 25, 27 und 28 offenen Verbindungen, acht Läufe davor zwischen 26 und 35; die Liste ist von Lauf zu Lauf fast dieselbe. Die Platine ist gegenüber rev B um 32 Teile und vier Stromflächen dichter.

Skript-Routing der Reste (23.10. nachts): close_gaps.py dump schreibt die Geometrie der Platine und die offenen Verbindungen des DRC nach out/geom.json; route_gaps.py (System-Python mit numpy/scipy) rastert alles Kupfer mit 0,05 mm und sucht je Lücke mit A* einen Weg auf F.Cu und In2 mit Vias (Klasse Strom nur F.Cu, Versorgungsflächen-Netze auch B.Cu), Abstand nach Netzklasse, Sperrflächen und 5-mm-IMU-Zone beachtet; ein Endpunkt ist das ganze zusammenhängende Kupferstück (Pad, Stummel, Via). Wo ein Pin eingekesselt ist, reißt es Signalbahnen auf, routet und legt die aufgerissenen Netze neu; klappt das nicht, wird alles zurückgesetzt. close_gaps.py apply übernimmt das Ergebnis, dann ./make.sh drc. So gingen sechs der 27 zu, mit 0 DRC-Fehlern. Die übrigen 21 liegen in drei Häufungen, in denen das Aufreißen nicht konvergiert: um den DRV8833 mit der VSERVO-Schiene, um J_STACK mit CS-Decoder und Analogmux, und um den Shunt mit der 2S-Kette. Ein Versuch, den ganzen Bereich x 120..154 / y 85..133 aufzureißen und neu zu verlegen (route_gaps.py region), schloss zwar alle Lücken dort, ließ aber 24 Signalnetze offen: dafür braucht es einen echten Autorouter mit Schieben, also KiCads interaktiven Router.

Stand 23.10.2026 nachmittags: 0 offene Verbindungen, 0 DRC-Fehler, 0 Abweichungen vom Schaltplan. Der Weg dahin:

  1. Von Hand (KiCad, Schiebe-Router) und per Skript gingen vom alten Stand 7 der 21 zu (Commit 93a348c). Die übrigen 14 lagen nicht an Enge, sondern an der Platzierung: VBAT_PROT von Q6 zum Shunt musste F1/VBAT2_F und die VSERVO-Schiene kreuzen, C36/C38 saßen 8 bis 14 mm vom DRV8833 entfernt (U7_VINT lief 45 mm über die Platine), J15 Pin 5/6 und J18 hatten keinen Strompfad.
  2. Generator korrigiert (gen_pcb.py, Commit 80559dd):
    • add_corridor_spines(): in jedem Strompfad eine 0,2 mm breite Sperrfläche auf der Mittellinie (keine Bahnen, keine Vias). Die geschrumpfte Sperre aus carve_corridors() verschwand bei Pfaden unter 1,4 mm, und Freerouting schnitt sie durch (LORA_M0 und der R2-Abgriff durch VBAT_PROT über F1, 3V3 durch den VM-Stich des DRV8833). Wie die alten Sperren heißen sie „… frei halten“ und werden nach dem Routen gelöscht.
    • Q6 0,8 mm nach rechts, festes Via für sein Gate (ESCAPES); R2 und R4 fest unter Q6 mit eigenen VBAT2_F-Pfaden; J18 mit eigenem VBAT2_RAW-Pfad zum XT30; VSERVO-Schiene bis v 74 und weiter unter J4 durch zu J_STACK Pin 5/6.
    • C35, C36, C37, C38 fest an U7 bzw. an der VSERVO-Schiene (ANCHORS).
    • Ergebnis ./make.sh pcb: 18 offen, alle schweren Fälle von vorher verbunden.
  3. Nacharbeit der 18 (Commits 4018f02 bis e9c7124): Gitter-Router mit B.Cu für Signale (Signale dürfen kurz durch die Versorgungsflächen auf B.Cu, Freigabe 23.10.; Strom-Netze bleiben F.Cu ohne Via) und Einzelkorrekturen: GND-Vias an U6 Pin 7 und U2 Pin 15; PYRO3_SENSE ein Stück über In2, damit PYRO3_NEG Q8 → D5 direkt geht; PYRO4: VBAT_ARMED-Abgriff zu R28 rechts um D6 herum, R44 um 180° gedreht; DRV8833: ISEN-Pins 3 und 6 direkt ans Wärmepad (statt über eigene Vias links), MOT_A über zwei Vias und B.Cu zu J8.1, MOT_B über ein Via und B.Cu zu J8.2; LoRa: Fanout-Via von TXD versetzt, damit RXD eins bekommt.

B.Cu-Stücke von Signalen (Schlitze in den Versorgungsflächen; der DRC meldet keine zerfallene Fläche): VBAT1_SENSE 10,9 mm, U7_VINT 12 mm (statt 45 mm über In2) im alten Stand; im jetzigen Stand CS_EXT2 16 mm in drei Stücken unter dem Teensy, LORA_RXD 6,3 mm entlang der LoRa-Pinreihe, MOT_A 7 mm und MOT_B 5,6 mm unter dem DRV8833, 5V_SYS 1,6 mm. LORA_RXD ist 73 mm lang (Luftlinie 38 mm), CS_EXT2 37 mm, PYRO2_SENSE 41 mm. Seit dem SPI0-Umbau (24.10.) zusätzlich SPI0_MOSI 6,0 mm, SPI0_MISO 13,3 mm (vier Stücke), LORA_M0 19,4 mm, PYRO3_FIRE 12,2 mm, PWM_EXT 17,6 mm, MOT_NSLEEP 2,7 mm (Tabelle unten).

SPI0-Umbau (E11, 23./24.10.): Nach dem Umhängen von J_STACK Pin 7–9 auf SPI0 und dem Verlegen von nSLEEP, PYRO3_FIRE, PWM_EXT und LORA_M0 waren sieben Verbindungen offen. Vier automatische Anläufe schlossen keine davon (Gitter-Router mit Rip-up; Freerouting mit fester Verkabelung; Freerouting über die aufgerissene Region x 100–146 / y 88–141, danach 14 offene Signale und zerschnittene Versorgungsflächen, verworfen; Freerouting mit beweglichen statt festen Bahnen der Region, nichts bewegt). Geschlossen wurden sie in einer eigenen Sitzung (24.10.) mit einem Planer, der B.Cu nur dort nimmt, wo es nicht anders geht, danach begradigt; keine fremde Bahn und kein Bauteil wurde dafür bewegt, nur die Reststummel der entfernten SPI1-Äste gelöscht. Freigabe für B.Cu-Stücke der Signale: Jan, 24.10.

VerbindungLängeViasdavon auf B.Cu
SPI0_SCK A1-38 → J15-725 mm3–
SPI0_MOSI A1-13 → J15-855 mm56,0 mm
MOT_NSLEEP A1-41 → U7-126 mm42,7 mm
SPI0_MISO A1-14 → J15-9114 mm1613,3 mm in vier Stücken
PYRO3_FIRE R38-1 → A1-4086 mm1012,2 mm
PWM_EXT A1-48 → J15-1848 mm917,6 mm
LORA_M0 U10-20 → A1-3562 mm1219,4 mm

SPI0_MISO ist mit 114 mm und 16 Vias die längste Signalbahn der Platine; der SPI0-Takt zur Zusatzplatine bleibt deshalb bei höchstens 8 MHz (Firmware). Die Stücke auf B.Cu liegen als Schlitze von 2,5 bis 12 mm in der 5V_SYS-Fläche unter dem Teensy und in der GND_PWR-Fläche rechts daneben; beide Flächen bleiben zusammenhängend, der DRC meldet keine zerfallene Fläche. Dazu kamen beim IMU-Tausch (E12) die geöffneten Pads 9–11 des LSM6DSV16X: ihre GND-Stummel zu den Vias bei x 130 entfielen, die Massepads 2/3/6/7 hängen jetzt über Pad 7 an C26 (GND-Bahn 0,2 mm auf F.Cu), dafür läuft 3V3_SENS von Pad 5 über C26 und C28 nach unten zu Pad 8 statt quer unter dem Chip. AN5763 Tab. 1 bestätigt die Beschaltung: Pins 2/3 an GND, Pin 9 (INT2) ist ein Ausgang, Pins 10/11 „Vdd_IO oder offen“.

Die Platinendatei ist wieder die Quelle: ein neuer ./make.sh pcb erzeugt eine andere Restliste und löscht die Nacharbeit. Werkzeuge der Nacharbeit (Planer mit B.Cu, Kupfer-Bilder, Abstandsprüfung, Bearbeitung per JSON) lagen im Sitzungsordner, nicht im Repository; die Klick-für-Klick-Anleitung für KiCad steht in HANDROUTING_KLICKS.md.

Breiten der Versorgung nach dem Handrouting (23.10., widen.py): Das Skript setzt jedes Stück der Versorgungsnetze unter 0,25 mm und alle Stücke von MOT_A/MOT_B auf 0,6 / 0,4 / 0,3 mm, soweit der DRC es zulässt. Ergebnis: VSYS_IN 0,6 mm durchgehend (A7 erfüllt), MOT_A und MOT_B 0,6 mm, an den DRV8833-Pins 0,4; der 5V_SYS-Zweig zum LDO 3V3_EXP 0,4 mm auf In2 und 0,3 an U14; der GND_PWR-Stich zu J_SW 0,6 mm. Nicht breiter zu bekommen: das 1,9-mm-Stück GND_PWR am DRV8833 Pin 13 (0,15 mm, x 144,5 / y 114,9); der Rückstrom der Brücke läuft hauptsächlich über das Wärmepad mit seinen Vias, das Stück ist ein Reviewpunkt. MOT_A und MOT_B laufen über zwei Vias auf B.Cu zum Motorstecker J8 und schneiden dort die GND_PWR-Fläche an (Reviewpunkt).

Zusatzsensoren (23.10.): Magnetometer, SHT40 und der DNP-ADXL375 wurden nach dem Handrouting mit add_parts.py gesetzt und ihre Leitungen mit dem Skript-Router gezogen (I²C vom Qwiic-Stecker zur Spitze, 3V3 vom nächsten Zweig, Masse-Vias in die neuen Inseln der GND-Füllung). Danach DRC 0/0, Parität 0.

Gemessen mit ../review_check_layout.py: kein 2S-Netz auf In2 (A6); im Umkreis von 5 mm um die IMU nur deren eigene Masse-Vias, keine In2-Bahnen (B16); die Sense-Netze berühren nur die Sense-Pads des Shunts (A5).

5.6 Bestückungsdruck

add_silk in gen_pcb.py setzt den ganzen Druck; gen_pcb.py silk macht nur diesen Schritt auf der gerouteten Platine (Bauteile, Bahnen und Flächen bleiben). Regeln nach JLC: 1,0 mm Schrift, 0,15 mm Strich, nur 0° und 90°. Jeder Text sucht sich einen Platz rund um sein Bauteil, der frei ist von offenen Pads, Bauteilumrissen, fremden Courtyards, dem Rand und schon gesetztem Text. Findet er keinen, bleibt die Referenz nur auf F.Fab; das Skript listet sie. Auf der dichteren B1-Platine sind das 27 Referenzen (unter anderem J2, J8, J10, J13, J15, J17, U2, U3, U5, U6, U8, U12 bis U15, die Pyro-FETs und drei Testpunkte) und das kleine Abzeichen der Vorderseite. Die Steckernamen (LABELS) stehen fast alle.

  • Vorderseite: Stecker mit Kurznamen (LABELS: ARM, PYRO1, YAW …) statt J-Nummer, Referenzen der ICs, Transistoren, LEDs und Jumper, Testpunkte mit Netznamen (TP_LABELS), IMU-Achsen und JLCJLCJLCJLC unter dem Teensy, ein kleines Abzeichen (6 mm) an der ersten freien Stelle.
  • Rückseite: Abzeichen 20 mm mit „KARTONAUT“ und „MAINBOARD REV B1“, Datum, Steckerbelegung (PINOUT, Pin 1 zuerst, Wortzahl gegen circuit.py geprüft) in ein oder zwei Blöcken.
  • Lötstopp blau: MASK_COLOR, als Stackup JLC04161H-7628 ins Board geschrieben (set_stackup); die Renders nutzen die Stackup-Farben.

Der DRC meldet 17 Druckwarnungen, alle aus Footprint-Grafik (Teensy-Umriss über den Randpads des LoRa-Moduls, Umriss-Kreuzungen); JLC schneidet den Druck über Pads weg.

6. Entscheidungen, die die Spezifikation offen ließ oder die von ihr abweichen

PunktEntscheidungGrund
ReferenzenStandard (J1 bis J20, U2 bis U15, Q1 bis Q9, A1 = Teensy); der Name aus der Spezifikation steht im Feld Funktion. Entfallene Teile (U1, U9, L1) lassen ihre Nummer freiKiCad-Annotation braucht Präfix plus Zahl; Zuordnung in §7
Stecker an der TVC-StirnseiteXT30 und die zwei TVC-Servos liegend; alle anderen stehendnutzbar sind 41 mm Kante
Stecker an der Spitzevier Pyro-Stecker liegend an der Kante; ARM, GPS, Kamera, LED und Qwiic stehenddie vier Pyro-Stecker füllen die 41 mm
Sternpunkteigenes Netz GND_PWR, eine Netzbrücke NT1 (0,5-mm-Pads) am 2S-Minus, als Fläche auf B.Cumacht §3/§8 im Layout prüfbar
Versorgungsflächenauf B.Cu statt In2 (§5.1)In2 wird als Signallage gebraucht
2S-PfadKupferflächen statt 2-mm-Bahnen (§5.4)Review B13; 2 mm passen nicht an 2,0/2,5-mm-Steckerpins
Lastschalter (E1)AO3401A wie der Verpolschutz, Gate 100 k nach Source und 1 k zum SteckerBasic-Teil; im 1S-Pfad bei −3 V Gate knapp (Review B5), am Bestelltag einen bei −2,5 V spezifizierten Typ prüfen
Ladeanschlüsse (E2)Lader-IC MCP73831 auf der Platine; USB-C, CC-Widerstände und Lade-LED am Schalterbrett (J_CHG1: VBUS, GND, LED-Kathode). 2S-Ladestecker J_CHG2 als JST-PH 2 (≤ 1 A) direkt am Akku-Plusdas CAD legt Buchsen und LED auf das Schalterbrett an Luke B (cad/README.md)
Teensy-Pinbelegung (E10)74HC138 und 74HC4051 teilen die Adresse SEL0..2 (Pins 38, 25, 30); CS_EN an Pin 31; Mux-Ausgang an Pin 24; 16, 40, 41 seit E11 belegtKomponenten §9; alle Flugsensoren direkt auf dem Decoder
Messteiler100 k sitzt am gemessenen Knoten, 33 k und 100 nF am Mux-Eingang unter dem Teensygleicher Teiler, Filter direkt am ADC-Pfad; an der Spitze war kein Platz
J_STACK Pin 2GND_PWR statt zweitem GNDRückleiter für VSERVO an Pin 5/6; auf der Zusatzplatine nicht mit GND verbinden
J_STACK Pin 19 (ARM)ARM_SENSE (0 bis 2,1 V) über 10 kLogikpegel ohne Zusatzteil; die Zusatzplatine vergleicht
INA239 VBUSam Kelvin-Abgriff ISENS_N (8 µA) statt an VSERVOVSERVO erbt 0,2 mm Netzklassenabstand, der zwischen die 0,5-mm-Pins nicht passt
TVSSMAJ12CA (SMA, 400 W) statt SMBJ12CAvier Kanäle unter dem USB-Stecker; Review C3 nennt SMAJ als Alternative
DRV8833 nSLEEPdirekt an Pin 40 (bis 22.10. Pin 11), ohne externen Widerstandinterner Pull-down hält den Motor beim Booten aus
SPI0 auf J_STACK (E11, 23.10.)J_STACK Pin 7/8/9 an SPI0 (Teensy 13/11/12) statt SPI1; dafür nSLEEP → 40, PYRO3_FIRE → 41, PWM_EXT → 33, LORA_M0 → 16; keine Reservepins mehrein Fehler auf der Zusatzplatine kann den Flugbus SPI1 nicht stören; nSLEEP und LORA_M0 gegenüber dem Vorschlag (16/40) getauscht, weil Pin 40 in der rechten Reihe neben dem DRV8833 und Pin 16 in der linken Reihe zum Funkmodul hin liegt. Geroutet von Hand mit kurzen Stücken auf B.Cu (§5.5), SPI0_MISO 114 mm: SPI0-Takt zur Zusatzplatine höchstens 8 MHz
TPS63070FB 680 k / 130 k (4,98 V); EN-Teiler 330 k / 115 k: an ab 3,1 V, aus unter 2,7 V (A2); FB2 offen (B2); PS/SYNC hoch
LSM6DSV16X (E12, 23.10.; war ICM-42688-P)SDx/SCx an GND, INT2/OCS_Aux/SDO_Aux offen, Vdd 100 n + 2,2 µ, Vdd_IO 10 n, an 3V3_SENS; CS aus dem Decoder; Footprint und Kondensatoren vom ICM übernommenAN5763 Tab. 1; JLC-Preis 3,4 statt 21,5 USD, Bestand 7000 statt 453
Servo-Signale220 Ω in ReiheSchutz der Teensy-Pins
E22ANT-Pad offen, Antenne über die IPEX-Buchse; NRST mit 10 k nach 3V3_RF an Pin 6B9
LCSC-Nummernnur bei den Teilen aus ../ORDER.md §3.3 und dem LaderPassive beim Bestellen mit dem JLC-Plugin zuordnen
ERC-AusschlüsseDRV8833: Brückenausgänge parallel; AISEN/BISEN direkt an GND_PWRgewollt
Zusatzsensoren (23.10.)LIS3MDL (Magnetometer, 0x1E) und SHT40 (Feuchte/Temperatur, 0x44) bestückt, ADXL375 (±200 g, 0x53) als DNP-Footprint; alle drei an I²C und an 3V3 statt 3V3_SENS; Magnetometer und seine Kondensatoren in der linken Spitzenecke (45 mm von der 2S-Schiene), SHT40 neben J_QWIIC, ADXL375 im Streifen hinter dem USB-Ende des TeensyZukunftsfähigkeit (Jan, 23.10.); die Spitze ist nur über das I²C-Paar erreichbar, SPI1 bleibt der Flugbus unter dem Teensy; 3V3_SENS liegt 45 mm entfernt; im Flug ist das Magnetometer durch Servo-, Motor- und Pyroströme gestört

7. Referenzen ↔ Namen der Spezifikation

RefSpezifikationRefSpezifikation
A1U_TEENSYJ11J_GPS
J1J_BAT2 (XT30)J12J_QWIIC
J2J_BAT1J13J_CAM
J3J_SWJ14J_LED
J4J_ARMJ15J_STACK
J5, J6, J7, J16J_SERVO1, 2, 3, 4J17, J18J_CHG1, J_CHG2
J8J_MOTJ9, J10, J19, J20J_PYRO1, 2, 3, 4
R_SH1R_SHUNTF1, F2F_BAT2, F_BAT1
Q6, Q7Q_SW2, Q_SW1 (Lastschalter)Q3, Q4, Q8, Q9Q_P1 bis Q_P4
Q5Q_BZD2, D3, D5, D6D_TVS Pyro 1 bis 4
U12, U13CS-Decoder, AnalogmuxU11, U14Lader, LDO 3V3_EXP
U5, U15Barometer, zweites (DNP)NT1Sternpunkt GND_PWR/GND
U16Magnetometer LIS3MDLU18SHT40
U17ADXL375 (DNP)

8. Nächste Schritte

  1. Offene Verbindungen schließen: erledigt 23.10., 0 offen, 0 DRC-Fehler (§5.5). Ab hier ist die Platinendatei die Quelle; ./make.sh pcb nicht mehr laufen lassen.
  2. ../review_check_layout.py: 23.10. ohne Befund (kein 2S-Netz auf In2, im IMU-Umfeld nur die fünf GND-Vias, Sense-Netze nur am Shunt, Strom-Netze nur F.Cu ohne Via).
  3. Review mit dem Kollegen anhand von Schaltplan-PDF, img/layers.pdf und Design Guide (Tor 1 und 2 in ../ORDER.md). Besonders: Breite und Lage der Strompfade, Masseführung um den Sternpunkt, Abstand LoRa ↔ IMU, der Anlauf des TPS63070 mit 940 µF hinter D1.
  4. 1:1-Papierausdruck mit Teensy und Steckern in den Kuppler halten; Kabelwege zum Schalterbrett an Luke B (J_SW, J_CHG1, J_CHG2) und zum Schlüsselschalter (J_ARM) prüfen.
  5. Fertigungsdaten: ./make.sh fab erzeugt seit 23.10. Gerber, Bohrdaten, BOM und CPL im JLC-Format nach fab/ (Übersicht in fab/FAB.md); DNP-Teile (Pyro 3/4, zweites BMP390) sind ausgeschlossen. Vor dem Upload nach jeder Änderung an der Platine neu erzeugen. LCSC-Nummern der Passiven, des SN74LV1T34, des 74HC138/4051, der Polymer- Elkos und der Polyfuses ergänzen. INA239 bei DigiKey bestellen. Fertiger nach ../Fertiger_2026-10-21.md.
  6. 26.10.: Reviewpunkte B1–B3 eingearbeitet (../Review_Bewertung_2026-10-26.md §5): VSYS_IN 0,6 mm auf F.Cu und 1,2 mm auf In2 (0,78 mm auf den 0,9 mm am Via), Stich zu D1 0,6 mm, Zone „VSERVO Stich DRV8833 VM“; make.sh sch exportiert jetzt auch out/mainboard.net. DRC 0 Fehler, fab/ und img/ neu.
  7. Datenblatt ../datasheet/MS-MB-B.tex auf B1 umschreiben: erledigt 26.10. (Version 0.2, Bestellfassung; Abbildungen aus ../figures.py und ../outline.py ebenfalls auf B1). Offen: der Design Guide docs/DesignGuide_Mainboard_revB.md im Text.

Parts

174
QtyValueFootprintReferences
26100nCapacitor_SMD:C_0603_1608MetricC1, C2, C3, C12, C24, C25, C26, C29, C30, C31, C32, C34, C36, C39, C40, C41 +10
14100kResistor_SMD:R_0603_1608MetricR2, R4, R9, R11, R28, R31, R32, R35, R36, R39, R40, R43, R44, R48
733kResistor_SMD:R_0603_1608MetricR5, R12, R29, R33, R37, R41, R45
610kResistor_SMD:R_0603_1608MetricR1, R8, R18, R19, R22, R27
5100Resistor_SMD:R_0603_1608MetricR30, R34, R38, R42, R47
51uCapacitor_SMD:C_0603_1608MetricC18, C19, C21, C22, C50
5AO3400APackage_TO_SOT_SMD:SOT-23Q3, Q4, Q5, Q8, Q9
410u/25VCapacitor_SMD:C_0805_2012MetricC6, C10, C11, C35
4220Resistor_SMD:R_0603_1608MetricR23, R24, R25, R26
4AO3401APackage_TO_SOT_SMD:SOT-23Q1, Q2, Q6, Q7
4M3MountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
4SMAJ12CADiode_SMD:D_SMAD2, D3, D5, D6
31kResistor_SMD:R_0603_1608MetricR3, R10, R49
322u/10VCapacitor_SMD:C_0805_2012MetricC13, C14, C15
210Resistor_SMD:R_0603_1608MetricR6, R7
210nCapacitor_SMD:C_0603_1608MetricC28, C37
210uCapacitor_SMD:C_0805_2012MetricC23, C33
22.2uCapacitor_SMD:C_0603_1608MetricC27, C38
2330u/16V polymerCapacitor_Tantalum_SMD:CP_EIA-7343-31_Kemet-DC4, C5
24.7kResistor_SMD:R_0603_1608MetricR20, R21
24.7uCapacitor_SMD:C_0805_2012MetricC8, C9
2470u/6.3V polymerCapacitor_Tantalum_SMD:CP_EIA-7343-31_Kemet-DC16, C17
2AP2112K-3.3TRG1Package_TO_SOT_SMD:SOT-23-5U3, U14
2BMP390lcsc:LGA-10_L2.0-W2.0-P0.50-BLU5, U15
2WS2812B-2020LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mmLED1, LED2
11.5u Isat>=4AInductor_SMD:L_Changjiang_FNR5040SL2
1100u/6.3VCapacitor_SMD:C_1210_3225MetricC20
1115kResistor_SMD:R_0603_1608MetricR17
1130kResistor_SMD:R_0603_1608MetricR15
11N4148WDiode_SMD:D_SOD-123D4
120m 1% 1Wmainboard:R_2512_KelvinR_SH1
12A holdFuse:Fuse_1812_4532MetricF2
12kResistor_SMD:R_0603_1608MetricR13
1330Resistor_SMD:R_0603_1608MetricR46
1330kResistor_SMD:R_0603_1608MetricR16
13A hold 6A tripFuse:Fuse_1812_4532MetricF1
13V3_EXPTestPoint:TestPoint_Pad_D1.5mmTP6
13V3_RFTestPoint:TestPoint_Pad_D1.5mmTP5
15V_SYSTestPoint:TestPoint_Pad_D1.5mmTP3
1600R@100MHzInductor_SMD:L_0603_1608MetricFB1
1680kResistor_SMD:R_0603_1608MetricR14
174HC138PWPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU12
174HC4051PWPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU13
1ADXL375lcsc:LGA-14_L5.0-W3.0-P0.80-BL-1U17
1DRV8833PWPRPackage_SO:HTSSOP-16-1EP_4.4x5mm_P0.65mm_EP3.4x5mm_Mask2.46x2.31mm_ThermalViasU7
1E22-400T22Slcsc:WIRELM-SMD_E22-400T22S_1U10
1GNDTestPoint:TestPoint_Pad_D1.5mmTP7
1INA239AIDGSRPackage_SO:MSOP-10_3x3mm_P0.5mmU6
1J_ARMConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ4
1J_BAT1Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ2
1J_CAMConnector_JST:JST_GH_BM03B-GHS-TBT_1x03-1MP_P1.25mm_VerticalJ13
1J_CHG1Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalJ17
1J_CHG2Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ18
1J_GPSConnector_JST:JST_GH_BM04B-GHS-TBT_1x04-1MP_P1.25mm_VerticalJ11
1J_LEDConnector_JST:JST_GH_BM03B-GHS-TBT_1x03-1MP_P1.25mm_VerticalJ14
1J_MOTConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ8
1J_PYRO1Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ9
1J_PYRO2Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ10
1J_PYRO3Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ19
1J_PYRO4Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ20
1J_QWIICConnector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_VerticalJ12
1J_SERVO1Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_HorizontalJ5
1J_SERVO2Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_HorizontalJ6
1J_SERVO3Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ7
1J_SERVO4Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ16
1J_STACKConnector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_VerticalJ15
1J_SWConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ3
1LIS3MDLlcsc:LGA-12_L2.0-W2.0-P0.50-BLU16
1LSM6DSV16Xlcsc:LGA-14_L3.0-W2.5-P0.50-TLU4
1MCP73831T-2ACI/OTPackage_TO_SOT_SMD:SOT-23-5U11
1NetTieNetTie:NetTie-2_SMD_Pad0.5mmNT1
1SHT40-AD1Blcsc:DFN-4_L1.5-W1.5-P0.8-TL-EPU18
1SJ 1SJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1
1SJ 2SJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP2
1SN74LV1T34DBVRPackage_TO_SOT_SMD:SOT-23-5U8
1SS14Diode_SMD:D_SMAD1
1TPS63070RNMRlcsc:VQFN-15_L3.0-W2.5-P0.50-BLU2
1Teensy 4.1mainboard:Teensy41_SocketA1
1VBAT_PROTTestPoint:TestPoint_Pad_D1.5mmTP1
1VSERVOTestPoint:TestPoint_Pad_D1.5mmTP4

The 171 most common of 174 parts.

Questions

How big is the Kartonaut PCB?

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

What parts does the Kartonaut use?

174 parts, built around the E22-400T22S, BMP390, DRV8833PWPR and INA239AIDGSR. 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 Kartonaut KiCad files?

From the Jan-Philipp-Munsch/kartonaut repository on GitHub, at the commit this page was made from: the board is hardware/mainboard/kicad/mainboard.kicad_pcb and its schematic hardware/mainboard/kicad/actuators.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Kartonaut 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 layers140 × 120 mmPianoMatrice, the printed circuit board in 3D

    PianoMatrice

    manvalan/MuonScope

    Piano di rivelazione MuonScope con 16 fotodiodi VBPW34S in matrice 4×4 a passo 10 mm, per il bus MIKILAB REV5.1.

    490 parts
  • 4 layers37 × 37 mmFlight controller, the printed circuit board in 3D

    Flight controller

    AQUA-Warrior/fpv-drone

    Frame needs to be printed using nylon/nylon with carbon fiber only exclusions being ArmAbsorber1-4 and AntenaMount/GPSConnector.

    125 parts3CC-BY-SA-4.0
  • 2 layers184 × 67.5 mmStreamdekc, the printed circuit board in 3D

    Streamdekc

    meh2481/streamdekc

    Like a streamdeck, but homemade and worse!

    31 parts1Unlicense
  • 4 layers100 × 100 mmIchnaeaV2, the printed circuit board in 3D

    IchnaeaV2

    brandonbraun653/Ichnaea

    2KW Solar Charge Controller w/MPPT

    444 partsMIT
  • 4 layers87.2 × 22.6 mmSagittarius S1, the printed circuit board in 3D

    Sagittarius S1

    GeneralSyb/Sagittarius-Headtracker

    Project files for the Sagittarius S1 Prototype

    45 parts6MIT
  • 2 layers38 × 10 mmRing, the printed circuit board in 3D

    Ring

    Curtisflo/swipe-smart-ring

    BLE smart ring main board — 2-layer rigid-flex KiCad PCB (nRF52832 + LSM6DSV16X IMU/Qvar). PCB layout, schematic, footprints.

    30 parts1MIT
  • 4 layers40.8 × 40.8 mmACwing FC A, the printed circuit board in 3D

    ACwing FC A

    ACwing-UAV/ACwing_HW

    ACwing is a modular set of PCBs for small multirotors.

    111 parts
  • 2 layers30 × 30 mmLogger, the printed circuit board in 3D

    Logger

    Birb-jpg/stm32logger

    A 1in.^2 STM32 based flight data logger.

    62 parts