Communitygithub.com

davlug3/PCB-Design-Skill

Entwerfen, generieren, automatisch verlegen, validieren und exportieren Sie fertigbare KiCad 9-Leiterplatten aus einer Designspezifikation, einem Netzlist, einem Schaltplan oder einer vorhandenen Platine.

Was ist PCB-Design-Skill?

Diese Fähigkeit automatisiert den gesamten PCB-Design-Workflow für KiCad 8 und 9, wobei der Schwerpunkt auf KiCad 9 liegt. Sie wandelt eine Designspezifikation (ein JSON-Dokument mit allen mechanischen und elektrischen Randbedingungen) in eine vollständige, fertigbare Leiterplatte um. Die Pipeline verwendet reale KiCad-Bibliotheken, verlegt die Leiterbahnen automatisch mit Freerouting, führt eine Design Rule Check (DRC), eine Design for Manufacturing (DFM)-Prüfung und einen Netlist-Vergleich durch und exportiert Gerber-Daten, Bohrdateien, Bestückungsdaten, STEP-Modelle und IPC-D-356-Dateien. Die Fähigkeit unterstützt verschiedene Platinenklassen wie 2-Lagen-Low-Speed, 4/6-Lagen-Impedance, HF/Mixed-Signal, Flex-Rigid und High-Voltage. Sie kann sowohl lokal (mit installiertem KiCad, Java 25 und Freerouting) als auch über GitHub Actions CI ausgeführt werden. Die Ergebnisse werden in einem professionellen Design-Report zusammengefasst, der bestätigt, ob die Platine release-ready ist. Die Fähigkeit enthält umfangreiche Referenzdokumente, Skripte und Validatoren, um manuelle Fehler zu vermeiden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/davlug3/pcb-design-skill/tree/HEAD

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

PCB-Design (KiCad 8/9)

Erstellen Sie fertigbare, syntaktisch korrekte KiCad-PCB-Dateien und geben Sie sie als .kicad_pcb-S-Expression-Dateien aus. KiCad ist das primäre Framework. Verlassen Sie sich nicht auf Ihr Gedächtnis für das Dateiformat – verwenden Sie die KiCad-Entwicklerdokumentation und die mitgelieferten, validator-geprüften Assets als Quelle der Wahrheit.

Ziel-Dialekt: KiCad 9 ((version 20241229)). KiCad 8 (20240108) wird mit den Unterschieden unterstützt, die in references/pcb-file-format.md#version-dialect-matrix aufgeführt sind – insbesondere die Layer-Ordnungszahlen, die sich in 9 erneut geändert haben. Mischen Sie niemals Dialekte: v6/v7-Ära (tstamp ...) oder v6 (width ...)-Grafiken in einem v8/v9-Header sind die häufigste Ursache für Dateien, die nicht geladen werden können.

Nicht verhandelbar

  1. Ein Dialekt pro Datei. Header-version, generator_version, Track-UUIDs, Strich-Syntax und Footprint-Felder müssen alle mit der deklarierten Version übereinstimmen.
  2. Eine Platine ist eine vollständige Datei, kein Ausschnitt. Sie muss sich in KiCad öffnen lassen und die strukturelle Prüfung unten bestehen.
  3. Konnektivität ist geometrisch. Eine Leiterbahn mit der richtigen Netznummer, die weder ein Pad noch eine andere Leiterbahn berührt, ist immer noch unverlegt.
  4. Keine stillschweigenden elektrischen Annahmen. Pin-zu-Netz-Zuordnung, Polarität, Footprint-Auswahl und Sicherheitsabstände müssen als Annahmen deklariert oder erfragt werden.
  5. Behaupten Sie keine Fertigungskonformität ohne verifizierte Fertigungsgrenzen. Fertigungszahlen sind stackup- und herstellerabhängig.
  6. Keine Release-Behauptung ohne bestandenen Report. Eine Platine ist nur dann release-bereit, wenn report/design-report.json professional_claim: true anzeigt. Andernfalls listen Sie die fehlgeschlagenen Gates und die fehlenden Abnahmen auf.

Automatische Design-Pipeline (bevorzugt für neue Platinen)

Erstellen Sie keine Release-Platine von Hand, wenn diese Pipeline dies tun kann. Die Pipeline wandelt eine Designspezifikation in eine Platine mit echten KiCad-Bibliotheks-Footprints um, verlegt sie mit Freerouting, führt KiCad DRC + DFM + Netlist-Parität durch, exportiert Gerber/Bohr/Position/STEP/IPC-D-356 und schreibt einen Gate-Report. Jede Ausgabe, die in profile.fab_outputs aufgeführt ist, ist ein hartes Gate. Verwenden Sie die manuelle Erstellung nur, um eine generierte Platine zu überprüfen oder zu patchen.

# 1. Absicht validieren (kein KiCad erforderlich)
python3 scripts/design_spec.py validate specs/led-blinky.json

# 2. Vollautomatisches Design. Wählt automatisch lokal, wenn KiCad 9 pcbnew, Java 25
#    und Freerouting 2.5.0 vorhanden sind, andernfalls wird GitHub Actions verwendet.
python3 scripts/design_pipeline.py all specs/led-blinky.json

# Elektrische Quelle der Wahrheit ist ein Schaltplan oder eine Netzliste; die Spezifikation liefert Mechanik/Regeln.
python3 scripts/design_pipeline.py all specs/led-blinky.json --schematic design.kicad_sch
python3 scripts/design_pipeline.py all specs/led-blinky.json --netlist design.net

# Vorhandene Platine: verlegen/prüfen/exportieren ohne Neuerstellung.
python3 scripts/design_pipeline.py all specs/led-blinky.json --board existing.kicad_pcb --skip-build

# Nur einzelne Phasen
python3 scripts/design_pipeline.py build specs/led-blinky.json -o build/led-blinky
python3 scripts/design_pipeline.py route build/led-blinky/led-blinky.kicad_pcb --spec specs/led-blinky.json
python3 scripts/design_pipeline.py check build/led-blinky/led-blinky.kicad_pcb --spec specs/led-blinky.json -o build/led-blinky/check
python3 scripts/design_pipeline.py fab   build/led-blinky/led-blinky.kicad_pcb --spec specs/led-blinky.json -o build/led-blinky/fab

Kanonische Eingaben. specs/<name>.json ist die Quelle der Wahrheit für den automatischen Pfad. Verwenden Sie schemas/design-spec.schema.json und specs/led-blinky.json als Vorlage. Bei einer natürlichsprachlichen Anfrage schreiben Sie zuerst die Spezifikation, geben Sie Annahmen in assumptions[] an und führen Sie dann die Pipeline aus. Bei einem KiCad-Schaltplan/einer Netzliste ist die Netzliste maßgeblich für Komponenten/Pad-Netze; die Spezifikationsüberlagerung liefert Platinengröße, Stackup, Regeln, Platzierung und Verlegung.

Platinenklassen-Profile. Das Profil wählt die Regelhülle und die Release-Gates aus:

ProfilAutomatisierungErforderliche menschliche Abnahme
2layer-low-speedVollständig: Erstellen, Platzieren, Verlegen, DRC, DFM, Fabkeine
4layer-impedance / 6layer-impedanceGesteuert: Stackup + Impedanz + Längenabgleich-Prüfungenstackup, impedance
rf-mixed-signalUnterstützt; HF-Netze sollten von Hand neu verlegt werdenrf, emc, thermal
flex-rigidUnterstütztmechanical, flex_bend, assembly
high-voltageGesteuert; Abstands-/Kriechstromprüfungensafety, creepage

professional_claim ist nur dann wahr, wenn jedes harte Gate bestanden wird und jede erforderliche Abnahme in signoff.completed aufgeführt ist. HF-, EMV-, thermische, Sicherheits- und Flex-Ermüdung können nicht von der Pipeline zertifiziert werden; sagen Sie dies anstelle einer Überbehauptung. Notieren Sie einen Prüfer in signoff.reviewer.

Backend-Auswahl: lokal oder CI (automatisch). Für die vollständige Automatisierung werden pcbnew (KiCad 9 Python), kicad-cli, Java 25 und freerouting-2.5.0.jar (Freerouting 2.5.0 ist für Java 25 erstellt) benötigt. --backend auto ist die Standardeinstellung: Es prüft die aktuelle Umgebung und läuft lokal, wenn alle angeforderten Phasen ihre Werkzeuge haben, andernfalls wird .github/workflows/design.yml ausgelöst. Dieser Workflow läuft im offiziellen kicad/kicad:9.0-Container, installiert eine JRE 25, lädt Freerouting herunter, führt die gesamte Pipeline aus und lädt design-output + design-report hoch.

UmgebungPrüfergebnisAusgewähltes Backend
Echter PC mit KiCad 9 + Java 25 + jaralle Phasen bereitlokal
Termux / Container ohne KiCad; gh authentifiziert; sauberes gepushstes Repositorypcbnew/kicad-cli fehltCI
Keine lokalen Werkzeuge und keine nutzbare CIfehltlokal, schlägt mit der Liste der fehlenden Werkzeuge fehl
python3 scripts/env_probe.py                        # Was kann dieser Rechner ausführen?
python3 scripts/env_probe.py --json                 # Maschinenlesbare Prüfung
python3 scripts/design_pipeline.py all specs/led-blinky.json                     # Auto
python3 scripts/design_pipeline.py all specs/led-blinky.json --backend local
python3 scripts/design_pipeline.py all specs/led-blinky.json --backend ci --ci-download build/ci

CI-Dispatch ist konservativ: Es verweigert einen unbereinigten Arbeitsbaum oder einen Branch, der seinem Upstream voraus ist, da Actions die gepushte Revision auscheckt und ansonsten die falsche Platine entwerfen würde. Committen und pushen Sie zuerst die Spezifikation, Profile, Schemas, Skripte und den Workflow. gh muss installiert und authentifiziert sein (pkg install gh, dann gh auth login). Verwenden Sie --ci-repo owner/name nur, wenn Sie ein anderes Repository als das aktuelle auslösen. CI-Läufe werden standardmäßig überwacht, sodass der Exit-Code professional_claim widerspiegelt. Fügen Sie --no-ci-watch hinzu, um sofort nach dem Dispatch zurückzukehren.

Phasenbefehle (build, route, check, fab) laufen lokal, da CI die nicht committeten Phasendateien nicht sehen kann; verwenden Sie all --backend ci für einen End-to-End-CI-Lauf. Innerhalb von GitHub Actions bleibt die Pipeline immer lokal, sodass sich ein CI-Lauf nie selbst erneut auslöst.

Iterationsregel. Wenn ein Gate fehlschlägt, ändern Sie die Spezifikation (Platzierung, Breite, Abstand, Stackup, Klassen-Zuweisung) und generieren Sie neu. Bearbeiten Sie keine generierte Platine und behaupten Sie dann, dass der Report gilt; der Report zeichnet die genau aufgelöste Spezifikation auf (<name>.spec.json).

Abrufquellen (vor dem Raten verwenden)

RessourceURLVerwendung für
S-Expression-Einführung (allgemeine Syntax)https://dev-docs.kicad.org/en/file-formats/sexpr-intro/index.htmlSyntax, Anführungszeichen, Koordinaten, Layer, Footprints, Pads, Grafiken, Zonen, Gruppen
Board-Dateiformathttps://dev-docs.kicad.org/en/file-formats/sexpr-pcb/index.html.kicad_pcb-Top-Level-Abschnitte, Header, Layer, Setup, Netze, Leiterbahnen, Zonen
Footprint-Bibliotheksformathttps://dev-docs.kicad.org/en/file-formats/sexpr-footprint/index.html.kicad_mod-Kontext und Footprint-Felder
KiCad-Dateiformat-Indexhttps://dev-docs.kicad.org/en/file-formats/index.htmlSchaltplan-/Symbolformate, wenn ein passender Schaltplan benötigt wird
KiCad-DRC-Dokumentationhttps://docs.kicad.org/9.0/en/pcbnew/pcbnew.html#design-rule-checkingWas die echte DRC prüft und welche Regeln konfigurierbar sind
KiCad-Benutzerdefinierte Designregelnhttps://docs.kicad.org/9.0/en/pcbnew/pcbnew.html#custom-design-rules.kicad_dru-Syntax und Regelausdrücke
JLCPCB-Fähigkeitenhttps://jlcpcb.com/capabilities/pcb-capabilitiesAktuelle Fertigungsgrenzen (vor der Verwendung überprüfen)
IPC-2221 / IPC-2152https://www.ipc.org/Grundlagen zu Leiterbahnbreite/Strom, Abstand und Kriechstrom

Die Entwicklerdokumentation hinkt an manchen Stellen hinterher (sie beschreibt immer noch Pre-v7 (width ...)-Grafiken und (tstamp ...)-Leiterbahnen). Wenn die Dokumentation und eine echte Datei aus der Ziel-KiCad-Version widersprüchlich sind, folgen Sie der echten Datei und notieren Sie die Abweichung.

Lokale Referenzen und Assets

PfadInhalt
references/pcb-file-format.mdVersionsmatrix, Abschnitte, Layer-Ordnungszahlen, Setup/Stackup, Footprints, Pads, Leiterbahnen, Zonen, Checkliste
references/sexpr-primitives.mdToken-Syntax, Anführungszeichen, Striche, Effekte, UUIDs, Pad/Grafik/Zone-Primitive, versionssensitive Token
references/practical-rules.mdStackup, Platzierung, Verlegung, Strom/Breite, SI/PI/EMV, Impedanz, thermisch, mechanisch, DFM/DFA, Voreinstellungen
assets/minimal-2layer.kicad_pcbValidator-geprüfte leere 2-Lagen-Platine (als Ausgangspunkt kopieren)
assets/example-led.kicad_pcbValidator-geprüftes verlegtes Beispiel: THT-Header, SMD-Widerstand/LED, Vias, Courtyard, Montageloch
assets/example.kicad_druBenutzerdefinierte Regelbeispiele (Netzklassenbreite, Hochspannungsabstand)
schemas/design-spec.schema.jsonKanonische automatische Design-Spezifikation (Platine, Regeln, Netze, Platzierung, Stackup, Gates)
profiles/*.jsonPlatinenklassen-Regelhüllen und Release-Gates
specs/led-blinky.jsonReferenzspezifikation für die automatische Pipeline
scripts/design_spec.pyAbhängigkeitsfreier Spezifikationsvalidator, Netlist-Importer, Impedanz-/Stromberechnungen, Gate-Report
scripts/pcb_build.pySpezifikation → KiCad-Platine mit echten Bibliotheks-Footprints (pcbnew)
scripts/pcb_route.pyDSN-Export → Freerouting → SES-Import → Zonenfüllung
scripts/pcb_check.pyStrukturelle, DRC-, DFM-, Netlist-Paritäts- und Längenabgleich-Gates
scripts/pcb_fab.pyGerber, Bohrung, Position, STEP, IPC-D-356 und Fertigungs-README
scripts/design_pipeline.pyOrchestriert das gesamte automatische Design und schreibt den Release-Report; --backend auto wählt lokal oder CI
scripts/env_probe.pyErkennt pcbnew, kicad-cli, Java 25, Freerouting, gh/git und empfiehlt lokal vs. CI
scripts/ci_dispatch.pyDispatched .github/workflows/design.yml, überwacht optional und lädt Artefakte herunter
scripts/check_pcb.pyAbhängigkeitsfreier struktureller/geometrischer Pre-Flight-Checker
.github/workflows/design.ymlCI: Build, Route, DRC/DFM, Fab-Export und Report im KiCad 9 Container

Verwenden Sie die Suchbegriffe in diesen Referenzen, bevor Sie eine ganze Dokumentenseite abrufen: version, generator_version, layers, stackup, setup, net, footprint, property, attr, pad, stroke, segment, via, zone, keepout, filled_polygon, Edge.Cuts, embedded_fonts, remove_unused_layers, courtyard, impedance, differential, 3W, return path, DFM, trace width.

Manueller / Überprüfungs-Workflow

Verwenden Sie zuerst die automatische Pipeline. Dieser Workflow ist für die Überprüfung einer generierten Platine, das Patchen eines Designs, dessen Spezifikation eine Einschränkung nicht ausdrücken kann, oder für die Arbeit in einer Umgebung, in der die Pipeline-Werkzeuge nicht verfügbar sind.

  1. Klären Sie die Designabsicht (nicht stillschweigend bei kritischen Randbedingungen raten).

    • Platinenfunktion, Komponenten, Steckverbinder, Strom-/Masse-Netze, Zielgröße und mechanische Randbedingungen.
    • Fertigungsannahmen: Lagenanzahl (Standard 2), Einheiten (mm), Kupfergewicht, Stackup, Oberflächenfinish, Bestückungsprozess.
    • Zielfreigabe von KiCad. Standardmäßig KiCad 9, sofern der Benutzer nichts anderes angibt.
    • Wenn die Anforderungen unterbestimmt sind, geben Sie die Annahmen explizit in der Antwort an und codieren Sie angemessene Standardwerte in die Datei.
  2. Modellieren Sie zuerst die elektrische Netzliste.

    • Definieren Sie (net 0 "") plus jedes benannte Netz, bevor Elemente darauf verweisen. Halten Sie die Ordnungszahlen stabil und eindeutig.
    • Stellen Sie sicher, dass jedes Pad, jede Leiterbahn, jedes Via und jede Zonen-net-Ordnungszahl existiert; stellen Sie sicher, dass die Pad-(net N "NAME")-Namen exakt mit der Netztabelle übereinstimmen.
    • Wenn ein passender Schaltplan existiert, benötigen Footprints path/Referenz-Links; eine Board-Only-Design sollte gegebenenfalls als board_only markiert werden.
  3. Definieren Sie Mechanik, Layer und Stackup.

    • Beginnen Sie mit assets/minimal-2layer.kicad_pcb und halten Sie dessen Header/Layer/Setup gültig.
    • Setzen Sie den layers-Abschnitt mit kanonischen Namen und den korrekten Ordnungszahlen (siehe Tabelle in references/pcb-file-format.md; B.CrtYd/F.CrtYd sind nicht sequentiell).
    • Setzen Sie (general (thickness 1.6) (legacy_teardrops no)), (paper "A4") und ein realistisches stackup, wenn der Stackup wichtig ist.
    • Stellen Sie eine geschlossene Edge.Cuts-Grenze bereit (Linien/Bögen oder ein Rechteck/Kreis/Polygon). Halten Sie Kupfer vom Rand fern.
  4. Footprints platzieren.

    • Verwenden Sie vollständige eingebettete Footprint-Definitionen: layer, uuid, at, property-Felder (Reference/Value), attr smd|through_hole, Pads, Siebdruck, F.CrtYd/B.CrtYd Courtyard und optional F.Fab und ein 3D-Modell.
    • Platzieren Sie nach Funktion: zuerst Steckverbinder, Stromeinspeisung und MCU; gruppieren Sie verwandte Schaltungen; trennen Sie analoge/digitale/verrauschte Domänen.
    • Setzen Sie Entkopplungskondensatoren an jeden IC-Strom-/Masse-Pin mit minimaler Schleifenfläche; Werte/Gehäuse gemäß Datenblatt oder genannten Annahmen.
    • Respektieren Sie Courtyard- und Bestückungsabstände; halten Sie Referenzen lesbar und polarisierte Teile markiert.
  5. Konnektivität verlegen.

    • segment für Leiterbahnen, via für Lagenwechsel, arc für gebogene Leiterbahnen. KiCad 8/9-Leiterbahnen verwenden (uuid ...), nicht (tstamp ...) (v6/7 verwendeten noch tstamp).
    • Setzen Sie width pro Element basierend auf Strom-/Stackup-Absicht; Strom breiter als Signale. Netzklassen leben in der Projekt-/Designregel-Datei, nicht in .kicad_pcb.
    • Halten Sie Leiterbahnen kurz/direkt, bevorzugen Sie 45°-Winkel, minimieren Sie Vias auf Hochgeschwindigkeitspfaden.
    • Bewahren Sie Rückwege: Verlegen Sie keine Hochgeschwindigkeits-/empfindlichen Leiterbahnen über Ebenenunterbrechungen. Wenden Sie ~3W-Abstand für übersprechgefährdete parallele Läufe an.
    • Impedanz/Differentialpaare: Verwenden Sie die Profile 4layer-impedance/6layer-impedance; diese übernehmen die korrekte Stackup- und Impedanzberechnung.
  6. Entwurfsregelprüfung (DRC) und DFM.

    • Führen Sie DRC und DFM aus der Pipeline oder manuell in KiCad aus. Beheben Sie alle Fehler.
    • Überprüfen Sie die Netlist-Parität: Jedes Netz in der Spezifikation muss auf der Platine verbunden sein. Keine offenen Pads, es sei denn, sie werden über (property "Board_Only.NoConnect" "true") als board_only markiert.
    • Erstellen Sie einen Fertigungssatz: Gerber, Bohrungen, Position, STEP, IPC-D-356.
    • Validieren Sie die strukturelle Integrität mit check_pcb.py.
  7. Letzte Prüfung und Freigabe.

    • Überprüfen Sie, ob alle Netze verbunden und dokumentiert sind.
    • Stellen Sie sicher, dass die release_report.json alle Gates mit passed: true und professional_claim: true anzeigt.
    • Wenn alle Bedingungen erfüllt sind, geben Sie sie als fertigungsbereit frei. Wenn nicht, listen Sie die verbleibenden Probleme auf.

Verwandte Skills