// ============================================================================ // presentation.typ — KiCad: vom Schaltplan zum Gerber (2- und 4-Layer) // // Bauen: make presentation.pdf bzw. typst compile presentation.typ // // Screenshots: // Die Folien enthalten Platzhalter (`shot(...)`), die genau beschreiben, // welche KiCad-Aufnahme fehlt. So wird's ersetzt: // 1. Screenshot in KiCad machen (Fenster vorher auf ~16:9-Zuschnitt bringen) // 2. Als PNG speichern unter assets/.png // (Name steht im Platzhalter, z. B. assets/07-routing.png) // 3. Die `shot(...)`-Zeile durch ein Bild ersetzen, z. B. // #img("assets/07-routing.png", width: 76%, caption: [Routing in Pcbnew]) // Die Folie „Screenshot-Checkliste“ am Ende listet alle 15 Aufnahmen. // ============================================================================ #import "template.typ": * // ---- Palette-Erweiterung (nur für die Querschnitts-Diagramme) -------------- #let cu = ember // Kupfer -> Terrakotta aus der Deck-Palette #let mask = accent // Lötstopp -> Petrol („blaue Platine“) #let fr4 = luma(226) // FR4-Kern #let prepreg = luma(238) // Prepreg // ---- Helfer ----------------------------------------------------------------- // Quellenzeile am Folienboden (wie in presentation01.typ). #let src(body) = { v(0.3em) block( width: 100%, fill: paper.darken(3%), inset: (x: 6pt, y: 3.5pt), radius: 2pt, text(size: 9.5pt, fill: luma(145))[#text(fill: accent)[Quellen:] #body], ) } // Screenshot-Platzhalter: beschreibt die fehlende Aufnahme + Zieldatei. // Ersetzen durch: #img("assets/.png", width: .., caption: [..]) #let shot(name, what, tip: none) = block( breakable: false, width: 100%, stroke: (paint: luma(190), thickness: 1pt, dash: "dashed"), fill: wash, radius: 3pt, inset: (x: 0.6em, y: 0.5em), { text(font: mono, size: 0.58em, weight: "bold", fill: ember, tracking: 0.08em)[ SCREENSHOT → assets/#(name + ".png") ] v(0.12em) text(size: 0.72em)[#what] if tip != none { v(0.08em) text(size: 0.62em, fill: luma(110))[#tip] } }, ) // Schichtband: lückenlos gestapelt (Grid mit row-gutter 0 = kein Par-Abstand). #let _layer(fill, h, round: none) = rect( width: 100%, height: h, fill: fill, stroke: 0.5pt + luma(150), radius: if round == none { 0pt } else { round }, ) #let _stack(..layers) = grid(columns: (1fr,), row-gutter: 0pt, ..layers) // Legendenzeile: Farbfeld + Text. #let _sw(c, note) = grid( columns: (14pt, 1fr), column-gutter: 0.45em, align(horizon, rect(width: 14pt, height: 9pt, fill: c, stroke: 0.5pt + luma(160), radius: 1.5pt)), align(horizon, text(size: 8.5pt)[#note]), ) // Querschnitt 2-Layer: Stack links, Legende rechts. #let stack-2() = grid( columns: (1.15fr, 1fr), gutter: 1.8em, _stack( _layer(mask.lighten(40%), 8pt, round: (top-left: 2pt, top-right: 2pt)), _layer(cu, 12pt), _layer(fr4, 22pt), _layer(cu, 12pt), _layer(mask.lighten(40%), 8pt, round: (bottom-left: 2pt, bottom-right: 2pt)), ), grid( row-gutter: 3pt, _sw(mask.lighten(40%), [Lötstopp + Bestückungsdruck]), _sw(cu, [Kupfer 35 µm — Top: Signale, Bottom: GND-Fläche]), _sw(fr4, [FR4-Kern ≈ 1,5 mm]), ), ) // Querschnitt 4-Layer: Stack links, Legende rechts. #let stack-4() = grid( columns: (1.15fr, 1fr), gutter: 1.8em, _stack( _layer(mask.lighten(40%), 8pt, round: (top-left: 2pt, top-right: 2pt)), _layer(cu, 11pt), _layer(prepreg, 7pt), _layer(accent, 11pt), _layer(fr4, 18pt), _layer(accent-soft, 11pt), _layer(prepreg, 7pt), _layer(cu, 11pt), _layer(mask.lighten(40%), 8pt, round: (bottom-left: 2pt, bottom-right: 2pt)), ), grid( row-gutter: 3pt, _sw(mask.lighten(40%), [Lötstopp]), _sw(cu, [Kupfer Top/Bottom: Signale]), _sw(prepreg, [Prepreg ≈ 0,2 mm]), _sw(accent, [In1.GND — Masse-Referenz]), _sw(fr4, [FR4-Kern ≈ 1,0 mm]), _sw(accent-soft, [In2.PWR — Versorgung]), ), ) // Prozesskasten für die Werkzeugkette (Stil wie diagrams.typ::_pipebox). #let _kbox(title, ..lines, highlight: false) = block( width: 100%, stroke: ( paint: if highlight { accent } else { luma(205) }, thickness: if highlight { 1.1pt } else { 0.6pt }, ), fill: if highlight { accent.lighten(94%) } else { paper }, radius: 3pt, inset: (x: 5pt, y: 6pt), align(center)[ #text(size: 10pt, weight: "bold")[#title] #v(2pt) #for l in lines.pos() [ #text(size: 8.5pt, fill: luma(110))[#l] #v(1pt) ] ], ) #let _arrow = text(fill: accent)[→] // Werkzeugkette in zwei Reihen. #let workflow-pipeline() = block(width: 100%, { grid( columns: (1fr, 10pt, 1fr, 10pt, 1fr, 10pt, 1fr), _kbox("Schaltplan", "Eeschema:", "Symbole & Werte"), _arrow, _kbox("ERC", "Verbindungen &", "Flags prüfen"), _arrow, _kbox("Footprints", "Symbol ↔ Gehäuse", "zuweisen"), _arrow, _kbox("PCB-Import", "Netzliste &", "Ratsnest in Pcbnew"), ) align(center, text(fill: accent, size: 0.85em)[↓]) grid( columns: (1fr, 10pt, 1fr, 10pt, 1fr, 10pt, 1fr, 10pt, 1fr), _kbox("Platzieren", "Umriss &", "Signalfluss"), _arrow, _kbox("Routen", "Leitungen & Vias"), _arrow, _kbox("Zonen", "GND-Flächen"), _arrow, _kbox("DRC & 3D", "Regeln prüfen"), _arrow, _kbox("Gerber", "Plotten & Bohren", "→ Fertigung", highlight: true), ) }) // ---- Folientext ------------------------------------------------------------- #show: presentation.with( title: "KiCad", subtitle: "Platinen-Design in der Praxis: 2-Layer und 4-Layer — vom Schaltplan zum Gerber-Export", author: "Your Name", ) #slide(title: "Ablauf")[ - *KiCad-Überblick*: Suite, Projektmodell, Werkzeugkette - *2-Layer in der Praxis*: Schaltplan → Layout → Fertigungsdaten - *4-Layer*: Stackup, Masse, Versorgung, Rückstrompfade - *Prüfung & Fertigung*: DRC, 3D, Gerber, Bohrdaten - *Screenshot-Checkliste* für die Aufnahmen in dieser Folienvorlage #v(0.6em) Danach: Worauf besteht besonderes Interesse? ] // Big-Picture-Folie: der komplette Weg von der Idee zum fertigen Gerät, // bewusst einfach gehalten (Einstieg fürs Publikum ohne Vorwissen). #slide(title: "Von der Idee zur Platine")[ #grid( columns: (1fr, 10pt, 1fr, 10pt, 1fr, 10pt, 1fr), _kbox("1 · Schaltplan", "Schaltung zeichnen"), _arrow, _kbox("2 · Layout", "Platine entwerfen"), _arrow, _kbox("3 · Export", "Gerber-Dateien"), _arrow, _kbox("4 · Bestellen", "hochladen + Stückliste", highlight: true), ) #align(center, text(fill: accent, size: 0.85em)[↓]) #grid( columns: (1fr, 10pt, 1fr, 10pt, 1fr, 10pt, 1fr), [], [], _kbox("5 · Versand", "Platine kommt per Post"), _arrow, _kbox("6 · Löten", "Bauteile auflöten"), _arrow, _kbox("7 · Test", "läuft alles?"), ) #v(0.8em) Die Schritte 1–3 machen wir heute in KiCad — ab Schritt 4 übernimmt die Platinen-Fertigung. ] // =================================================================== #section("KiCad-Überblick", note: "Werkzeuge & Workflow") // =================================================================== #slide(title: "Was ist KiCad?")[ - *Freie Open-Source-EDA-Suite* (GPLv3) für Schaltplan & Leiterplatte - Ein Projekt, ein Dateisatz: `.kicad_pro`, `.kicad_sch`, `.kicad_pcb` — \ Textformate, git-tauglich - Integriert: Symbol- & Footprint-Editor, SPICE-Simulation, 3D-Viewer, \ DRC/ERC, Gerber-Betrachter (GerbView), CLI (`kicad-cli`) - Plattformübergreifend (Windows/Linux/macOS), aktuelle Version 9.x #v(0.5em) #src[Offizielles Handbuch: docs.kicad.org] ] #slide(title: "Werkzeugkette")[ #workflow-pipeline() #v(0.5em) - Iterativ: jede Schaltplan-Änderung → `Werkzeuge → PCB aus Schaltplan aktualisieren` - Erst wenn Schaltplan & ERC sauber sind, beginnt das Layout ] #slide(title: "Projekt & Schaltplan")[ - Projekt-Manager: `Datei → Neu → Projekt` — legt `.kicad_pro` + leere Schematik an - In Eeschema: Symbole platzieren (`A`), verdrahten (`W`), Werte & \ Referenzen (R1, C3 …) eindeutig annotieren - Beispiel für den Vortrag: Spannungsversorgung + MCU-Modul mit Entkopplung #v(0.5em) #grid( columns: (1fr, 1fr), gutter: 1.2em, shot("01-projektmanager", [KiCad-Startfenster mit geöffnetem, noch leerem Beispielprojekt; Icon-Leiste sichtbar]), shot("02-schaltplan", [Eeschema mit fertigem Beispielschaltplan inkl. Titelblock]), ) ] #slide(title: "ERC — Schaltung prüfen")[ - `Prüfen → Elektrische Regeln prüfen` (ERC): offene Pins, unverbundene \ Drähte, fehlende Spannungs-Flags (`PWR_FLAG` an Versorgung & GND) - Warnungen verstehen und beheben — nicht wegklicken - Erst wenn ERC grün ist: Footprints zuweisen und ins Layout #v(0.5em) #shot("03-erc", [ERC-Dialog mit Ergebnisliste und „0 Verstöße“], tip: [Menü: Prüfen → Elektrische Regeln prüfen]) ] // =================================================================== #section("2-Layer-Layout", note: "Der Standard-Workflow") // =================================================================== #slide(title: "Aufbau: 2 Lagen im Querschnitt")[ #stack-2() #v(0.6em) - Zwei Kupferlagen (Top/Bottom) auf einem FR4-Kern; außen Lötstopp + Bestückungsdruck - Bewährte Rollenverteilung: *Top = Signale, Bottom = durchgehende GND-Fläche* \ (Rückstrompfade, Entstörung) - Günstigste Fertigungsvariante — Grenzen bei hoher Packungsdichte und EMV-Anforderungen ] #slide(title: "Footprints zuweisen & importieren")[ - `Werkzeuge → Footprints zuweisen`: Symbol → Gehäuse; nach Abmessungen, \ Pins, Bohrbild filtern; mechanische Maße vorher im Datenblatt prüfen - In Pcbnew: `Werkzeuge → PCB aus Schaltplan aktualisieren` — Footprints + \ Ratsnest erscheinen #v(0.5em) #grid( columns: (1fr, 1fr), gutter: 1.2em, shot("04-footprint-zuweisung", [Dialog „Footprints zuweisen“: Spalten Symbol / Footprint / Vorschau]), shot("05-update-pcb", [Dialog „PCB aus Schaltplan aktualisieren“ mit Änderungsliste]), ) ] #slide(title: "Setup, Umriss & Platzieren")[ #grid( columns: (1.05fr, 1fr), gutter: 1.4em, [ - *Board-Setup* (Datei → Board-Setup): Netz-Klassen (Signal 0,25 mm, PWR 0,5–0,8 mm), Via-Klasse 0,6/0,3 mm, Abstandsregeln - Platinenumriss auf *Edge.Cuts* zeichnen (z. B. 80 × 50 mm, Ecken runden) - Platzieren nach *Signalfluss*: Connectoren & Befestigungen zuerst fixieren (sperren), dann ICs, dann Entkopplungs-Cs an die Versorgungspins ], shot("06-floorplan", [Pcbnew: Platinenumriss + platzierte Footprints mit sichtbarem Ratsnest (dünne weiße Verbindungen)]), ) ] #slide(title: "Routen (2 Layer)")[ #grid( columns: (1.05fr, 1fr), gutter: 1.4em, [ - `X` routen — *kritische Signale zuerst*: Takt, PWM, Analog; kurze Wege, \ wenige Vias - `V` während des Routens: Via platzieren + Lagewechsel Top ↔ Bottom - PWR-Leitungen breiter routen (Netz-Klasse); GND läuft fast nur über die Fläche - Raster: 1,27 / 0,635 mm (THT) bzw. 0,25 mm (SMD-Pitch) ], shot("07-routing", [Aktive Leiterbahn beim Routen; Lagen-Auswahl-Widget unten links auf „F.Cu“], tip: [Am besten live demo-fähig halten: gleiche Ansicht später auf dem Beamer]), ) ] #slide(title: "Zonen — GND-Fläche")[ - Zeichnen-Werkzeug *Kupferfläche* wählen; in den Zone-Eigenschaften: *Netz GND, Lage B.Cu, thermische Reliefs* für Pads - *Stitch-Vias*: GND-Verbindungen Top ↔ Bottom nahe kritischen Bauteilen \ (Entkopplung, Quarze, Spannungsregler) - Nach jeder Änderung Zonen auffüllen (`B`) — erst danach DRC #v(0.5em) #shot("08-zone", [Zonen-Eigenschaften-Dialog: Netz GND, Lage B.Cu, Vorrang, Füllparameter], tip: [Rechtsklick auf die Fläche → „Flächen…“]) ] #slide(title: "Prüfen & Exportieren (2L fertig)")[ - *DRC* (`Prüfen → Designdefinitionen prüfen`): Abstände, offene Verbindungen \ (Ratsnest leer), Masken- & Bohrabstände - *3D-Viewer* (`Ansicht → 3D-Betrachter`): Gehäuse- & Montage-Kollisionen sichtbar - Export: Gerber X2 + Excellon-Bohrdaten → ZIP an die Fertigung #v(0.5em) #grid( columns: (1fr, 1fr), gutter: 1.2em, shot("09-drc", [DRC-Dialog mit Constraints links und Ergebnisliste „0 Verstöße“]), shot("10-3d-viewer", [3D-Betrachter: fertige 2-Layer-Platine, leicht gedreht, mit Bauteilen]), ) ] // =================================================================== #section("4-Layer-Layout", note: "Stackup, Masse & Versorgung") // =================================================================== #slide(title: "Warum 4 Layer?")[ #grid( columns: (1.3fr, 1fr), gutter: 1.4em, [ - *Referenzebene unter jedem Signal* → geschlossene Rückstromschleifen, \ weniger Abstrahlung - *Impedanzkontrolle* (USB, Ethernet, RF) über Kupferdicke & Dielektrikum - *Versorgung als eigene Lage*: niedrige Impedanz, Signal-Routen bleiben frei - Standard 1,6 mm, 4 Kupferlagen — Aufpreis meist geringer als ein dicht gepackter 2-Layer ], stack-4(), ) ] #slide(title: "Typische Stackups")[ #grid( columns: (1fr, 1fr), gutter: 1.2em, panel(c: accent)[ *A · Allrounder (Standard)* - Top/Bottom: Signale · In1: *GND* · In2: *PWR* - GND-Referenz nahe den Top-Signalen, Versorgung als ganze Lage ], panel(c: ember)[ *B · High-Speed* - Top/Bottom: Signale · In1/In2: *GND* - Beste Referenz; Versorgung als breite Zonen auf den Signal-Lagen ], ) #v(0.6em) - *Symmetrisch aufbauen* (Dicken über/unter der Mitte gleich) → geringer Verzug beim Reflow-Löten - Beide Varianten: 1 oz (35 µm) Kupfer, Kern + 2× Prepreg, gesamt ≈ 1,6 mm ] #slide(title: "Stackup in KiCad einrichten")[ - Board-Setup → *Stapelaufbau*: Innenlagen *In1.Cu / In2.Cu* anlegen, Kupferdicken & Prepreg eintragen, Lagen benennen (In1.GND …) - *Impedanz* im selben Dialog: Ziel (z. B. 50 Ω Single, 90 Ω diff) → empfohlene Bahnbreite je Lage - Netzklassen & Abstände wie beim 2-Layer; Thermal-Reliefs für Plane-Anbindung #v(0.4em) #grid( columns: (1fr, 1fr), gutter: 1.2em, shot("11-stackup-4l", [Board-Setup → Stapelaufbau: 4 Kupferlagen mit Dicken, Dielektrika und Lagen-Namen]), shot("12-impedanz", [Impedanz-Anzeige/-spalte im Stapelaufbau-Dialog mit berechneten Werten je Signallage]), ) ] #slide(title: "Layout-Aufgaben bei 4 Layern")[ #grid( columns: (1.1fr, 1fr), gutter: 1.4em, [ - *GND-Ebene durchgehend halten* — Schlitze und Splitting sind \ Rückstromfallen - Lagewechsel: *Rückstrom-Via (GND) direkt neben* dem Signal-Via - *Stitching-Vias* GND ↔ GND regelmäßig verteilen - Entkopplung: Pad → Via → Plane, so kurz wie möglich; \ Versorgung über Via-Paare an In2 anbinden ], shot("13-4l-fertig", [Fertiges 4-Layer-Board, in der Lagen-Ansicht nur In1.GND sichtbar: durchgehende Massefläche mit Stitching-Vias], tip: [Lagen-Liste links: nur In1.Cu + Vias einblenden]), ) ] // =================================================================== #section("Prüfung & Fertigung", note: "DRC, Gerber, Bohrdaten") // =================================================================== #slide(title: "Endkontrolle")[ - *Innenlagen sichtbar machen*: Lagen-Liste einzeln durchschalten — \ GND-Fläche wirklich geschlossen? Versorgungszonen komplett? - *DRC* mit Herstellerrules: Clearance, Annular Ring, Abstand zu Bohrungen - *3D-Check* + STEP-Export (`Datei → Exportieren → STEP`) für das Gehäusedesign - Faustregel: erst Zonen auffüllen (`B`), dann DRC laufen lassen ] #slide(title: "Gerber & Bohrdaten")[ - `Datei → Fertigungsoutputs → Plotten…`: Format *Gerber X2*; alle Kupfer- \ Lagen, Lötstopp, Bestückungsdruck, Edge.Cuts - Bohrdateien separat erzeugen (Excellon) — beides zusammen in ein ZIP - Kontrolle in *GerbView*: jede Lage laden und durchschauen, bevor es zur \ Fertigung geht #v(0.5em) #grid( columns: (1fr, 1fr), gutter: 1.2em, shot("14-plot", [Plot-Dialog: Format Gerber X2, Layer-Liste mit Haken, Pfade & Optionen]), shot("15-gerbview", [GerbView mit geladenen Gerber-Lagen (z. B. F.Cu, B.Cu, Masken), Farbe je Lage]), ) ] #slide(title: "Screenshot-Checkliste")[ #set text(size: 11.5pt) Alle Platzhalter in dieser Folienvorlage — Aufnahme machen, als \ `assets/.png` speichern, `shot(...)` durch `img(...)` ersetzen: #v(0.4em) #table( columns: (auto, auto, 1fr), stroke: (bottom: 0.5pt + luma(210)), inset: (x: 4pt, y: 2.5pt), [*Nr*], [*Datei*], [*Motiv*], [01], [projektmanager], [Projekt-Manager mit leerem Beispielprojekt], [02], [schaltplan], [Eeschema: fertiger Beispielschaltplan], [03], [erc], [ERC-Dialog, Ergebnisliste], [04], [footprint-zuweisung], [Dialog „Footprints zuweisen“], [05], [update-pcb], [Dialog „PCB aus Schaltplan aktualisieren“], [06], [floorplan], [Pcbnew: Umriss + platzierte Footprints + Ratsnest], [07], [routing], [Routing aktiv, Lagen-Widget unten links], [08], [zone], [Zonen-Eigenschaften (GND, B.Cu)], [09], [drc], [DRC-Dialog mit Ergebnis], [10], [3d-viewer], [3D-Ansicht der 2-Layer-Platine], [11], [stackup-4l], [Board-Setup → Stapelaufbau mit 4 Kupferlagen], [12], [impedanz], [Impedanzwerte im Stapelaufbau-Dialog], [13], [4l-fertig], [4-Layer-Board, nur In1.GND sichtbar], [14], [plot], [Plot-Dialog mit Gerber X2 und Layer-Liste], [15], [gerbview], [GerbView mit geladenen Lagen], ) ] #slide(title: "Tastenkürzel (Layout)")[ #table( columns: (auto, 1fr, auto, 1fr), stroke: (bottom: 0.5pt + luma(210)), inset: (x: 4pt, y: 2.5pt), [*Taste*], [*Funktion*], [*Taste*], [*Funktion*], [`X`], [Leiterbahn routen], [`M`], [Bauteil verschieben], [`V`], [Via + Lagewechsel], [`R`], [Bauteil drehen], [`U`], [verbundene Leiterbahn wählen], [`E`], [Eigenschaften bearbeiten], [`B`], [Zonen auffüllen], [`Entf`], [Element löschen], ) #v(0.5em) - `V` gilt bei 4-Layern für *jede* Lage — so springt man z. B. von Top nach \ In1.GND und zurück ] #slide(title: "Quellen & Links")[ - `docs.kicad.org` — offizielles Handbuch & Getting Started (de/en) - `kicad.org` — Downloads, Versionshinweise, Blog - `forum.kicad.info` — Community-Forum - `gerber-format.com` — Gerber-Spezifikation (Ucamco) - Design-Rules der eigenen Fertigung (z. B. JLCPCB, PCBWay, AISLER) — vor \ dem Layout in das Board-Setup übernehmen ] #slide(title: "Diskussion")[ - Was zeigen wir *live*? (2-Layer-Demo in ~15 min realistisch) - Worauf besteht besonderes Interesse? EMV, Impedanz, Gehäuse, Fertigung? #v(1em) #align(center, text(size: 1.3em, weight: "bold")[Danke — Fragen?]) ]