diff --git a/presentation.typ b/presentation.typ new file mode 100644 index 0000000..554aab7 --- /dev/null +++ b/presentation.typ @@ -0,0 +1,442 @@ +// ============================================================================ +// 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( + 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] + } + }, +) + +// Eine Schicht im Querschnittsdiagramm: Farbband links, Beschriftung rechts. +#let _band(fill, h, label, sub: none) = grid( + columns: (1fr, 112pt), + column-gutter: 0.8em, + rect(width: 100%, height: h, fill: fill, stroke: 0.5pt + luma(150), radius: 2pt), + align(horizon + left, { + set text(size: 8.5pt) + label + if sub != none { + linebreak() + set text(size: 7.5pt, fill: luma(120)) + sub + } + }), +) + +// Querschnitt 2-Layer. +#let stack-2() = block(width: 100%, { + _band(mask.lighten(40%), 8pt, [Lötstopp + Bestückungsdruck (Top)]) + _band(cu, 11pt, [Kupfer Top], sub: [Signale, 35 µm]) + _band(fr4, 20pt, [FR4-Kern], sub: [≈ 1,5 mm]) + _band(cu, 11pt, [Kupfer Bottom], sub: [GND-Fläche, 35 µm]) + _band(mask.lighten(40%), 8pt, [Lötstopp (Bottom)]) +}) + +// Querschnitt 4-Layer. +#let stack-4() = block(width: 100%, { + _band(mask.lighten(40%), 8pt, [Lötstopp (Top)]) + _band(cu, 11pt, [Kupfer Top], sub: [Signale]) + _band(prepreg, 7pt, [Prepreg], sub: [≈ 0,2 mm]) + _band(accent, 11pt, [In1.GND], sub: [Masse-Referenz]) + _band(fr4, 18pt, [FR4-Kern], sub: [≈ 1,0 mm]) + _band(accent-soft, 11pt, [In2.PWR], sub: [Versorgung]) + _band(prepreg, 7pt, [Prepreg]) + _band(cu, 11pt, [Kupfer Bottom], sub: [Signale]) + _band(mask.lighten(40%), 8pt, [Lötstopp (Bottom)]) +}) + +// 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? +] + +// =================================================================== +#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 wegwarrowen + - 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 und \ + fixieren (sperren), dann ICs, dann Entkopplungs-Cs direkt 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")[ + - Kupferfläche zeichnen (`K`)? Nein: `Werkzeuge → Polygonzüge` bzw. \ + Zeichnen-Werkzeug „Fläche“; dann 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.15fr, 1fr), + gutter: 1.4em, + [ + - *Referenzebene direkt unter jedem Signal* → geschlossene \ + Rückstromschleifen, deutlich weniger Abstrahlung + - *Impedanzkontrolle* (USB, Ethernet, RF): definiert über Kupferdicke & \ + Dielektrikum + - *Versorgung als eigene Lage*: niedrige Impedanz, Signal-Routen bleiben frei + - Standardaufbau 1,6 mm, 4 Kupferlagen — Aufpreis meist geringer als \ + der Aufwand „dichter 2-Layer“ + ], + stack-4(), + ) +] + +#slide(title: "Typische Stackups")[ + #grid( + columns: (1fr, 1fr), + gutter: 1.2em, + panel(c: accent)[ + *A · Allrounder (Standard)* + - Top: Signale · In1: *GND* · In2: *PWR* · Bottom: Signale + - GND-Referenz nahe den Top-Signalen, Versorgung als ganze Lage + ], + panel(c: ember)[ + *B · High-Speed* + - Top: Signale · In1: *GND* · In2: *GND* · Bottom: Signale + - Beste Referenz-Situation; Versorgung als breite Zonen auf den \ + Signal-Lagen + ], + ) + #v(0.6em) + - *Symmetrisch aufbauen* (gleiche Dicken über/unter der Mitte) → geringer \ + Verzug beim Reflow-Löten + - Beide Varianten: Kupferlagen 1 oz (35 µm), Kern + 2× Prepreg, gesamt ≈ 1,6 mm +] + +#slide(title: "Stackup in KiCad einrichten")[ + - `Datei → Board-Setup → Stapelaufbau`: Innenlagen *In1.Cu / In2.Cu* \ + hinzufügen, Kupferdicken & Prepreg eintragen, Namen vergeben (In1.GND …) + - *Impedanz* im selben Dialog: Zielpunkt (z. B. 50 Ω Single, 90 Ω diff) → \ + empfohlene Leiterbahnbreite je Lage + - Netzklassen & Abstände wie beim 2-Layer; Thermal-Reliefs für Plane-Anbindung + #v(0.5em) + #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 unter den Signalen + - Lagewechsel: *Rückstrom-Via (GND) direkt neben* dem Signal-Via + - *Stitching-Vias* GND ↔ GND regelmäßig über die Fläche verteilen + - Entkopplung: Pad → Via → Plane, so kurz wie möglich; \ + Versorgungszonen auf In2 über Via-Paare 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?]) +] diff --git a/presentation01.typ b/presentation01.typ deleted file mode 100644 index b19e1cb..0000000 --- a/presentation01.typ +++ /dev/null @@ -1,34 +0,0 @@ -#import "template.typ": * -#import "diagrams.typ": * - -#let src(body) = { - v(0.35em) - 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], - ) -} - -#show: presentation.with( - title: "KiCad", - subtitle: "", - author: "Your Name", -) - -#slide(title: "Ablauf")[ - - ..? - - Danach: Worauf besteht besonderes Interesse? -] - -// =================================================================== -#section("Technologie-Grundlagen", note: "30–45 min") -// =================================================================== - -#slide(title: "Was ist KiCad?") - #sample-chart() - #v(0.4em) - #src[@vaswani2017, @brown2020, @bbycroft] -]