You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
kicad_vortrag/presentation.typ

442 lines
18 KiB

// ============================================================================
// 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/<name>.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/<name>.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/<name>.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?])
]