Schaltplan und Layout
Layouts
Die *.pcb.toml-Datei: Platzierungen, Leiterbahnen, Vias, Fanouts, Stitching, Zonen, Ausschnitte, Bestückungsdruck, Kunst, Testzugang und das Versionswasserzeichen.
Platziert die Footprints des Schaltplans auf der Platine und verdrahtet sie.
name = "lna"
board = "lna"
schematic = "lna"
[[footprints]]
ref = "U1"
at = [13.0, 8.05]
rotation = 90 # degrees, counter-clockwise
# side = "bottom" # mirrors the footprint and swaps F./B. layers
label = { at = [9.9, 7.4], rotation = 90 } # move the silk reference; size = 0.8, hide = true
# mlcc = false # this part is not a ceramic capacitor, over the footprint's `mlcc`
# locked = true # `agentee place` never moves it
[[tracks]]
net = "RF_OUT"
layer = "F.Cu"
points = [[18.68, 10], [25.5, 10]]
# width = 0.36 # default: the net class width
[[vias]]
net = "GND"
at = [7.2, 8.9]
# via = "std" # a [[vias]] name from the board, default the first class via
# count = 6 # a row, like pads
# pitch = [1.2, 0]
[[fanouts]] # a via in every connected pad of a BGA
ref = "U3" # * and ? globs: ref = "*" with nets = [...] fans out every plane pad
# via = "bga" # or a list, the first reaching the pad layer; default the class vias
# skip_rings = 2 # leave the two outer rings for escape on the outer layer
# always = ["GND", "LVDS_*"] # nets that get a via even in those rings, globs allowed
# skip = ["A1", "B7"] # pads to leave alone
# skip_at = [[4.5, 3.0]] # no via at these spots (the viewer adds one when you edit a via)
# nets = ["GND", "3V3"] # only pads on these nets, globs allowed
# exclude = ["C2?", "J1"] # refs to leave out when ref is a glob; a glob never
# matches test points, a probe pad keeps no via
[[stitching]] # ground vias wherever they clear every other net and silk text
net = "GND"
# via = "std" # default the net's first class via
# pitch = "2.5mm" # grid pitch, or the spacing along a fence (default 1mm)
# outline = [[x, y], ...] # default the board outline
# margin = "0.6mm" # extra distance from the board edge
# fence = ["RF_*"] # instead of a grid: a row either side of these nets' tracks
# offset = "0.5mm" # fence row distance from the track centre, default just past
# the class coplanar gap
# skip_at = [[4.5, 3.0]] # no via at these spots (the viewer adds one when you edit a via)
[[zones]]
net = "GND"
layers = ["F.Cu", "In1.Cu", "In2.Cu", "B.Cu"]
# outline = [[x, y], ...] # default: the board outline
# clearance = 0.25 # default: the net class clearance
# priority = 1 # higher fills first; other nets' zones on the layer pour around it
# min_island_area = 2.0 # mm2; a piece touching one item of the net is kept only this big
# pad_connection = "relief" # solid (default) | relief: pads of the net join the pour by four
# spokes across a gap, so they heat like a track-fed pad;
# none: the pour keeps its clearance from the pads. A pad's
# own zone_connect wins, and BGA balls (16 or more round SMD
# pads) stay solid, since spokes starve a ball of solder heat
# relief_tht_only = true # relief on through-hole pads only, SMD pads solid (KiCad's
# thru_hole_only)
# relief_gap = "0.3mm" # default: the zone clearance
# spoke_width = "0.3mm" # default: the net class track width, at least min_width
[[cutouts]] # keep zones off an area, e.g. under an SMA centre pin;
# a hole through the board is [[outline.cutouts]] in the board file
layers = ["In1.Cu"]
points = [[0, 9], [5.4, 9], [5.4, 11], [0, 11]]
[[graphics]] # board text and lines, same keys as footprint graphics
kind = "text"
layer = "F.SilkS" # F.SilkS, B.SilkS, F.Fab or B.Fab
at = [7.4, 7.6]
# locked = true # `agentee place` never moves it
text = "RF IN"
size = 1.0 # mm, the fab minimum is in the board rules
[[artwork]] # a filled logo or icon
layer = "F.SilkS"
icon = "arrow" # built in: arrow, warning, ground, antenna, lightning, pin1, ce
# file = "logo.svg" # or any SVG, relative to this file
at = [7.4, 6.3] # centre of the artwork
height = 0.8 # mm, the width follows the aspect ratio
# rotation = 90
[test] # in-circuit and flying probe test access, all optional
# nets = ["3V3", "*RST*"] # nets that need a probe, globs, any case; default below
# exclude = ["LED_*"] # nets to leave out
# side = "B" # probe side, F or B
# through_holes = true # exposed plated through-hole pads count as access
# vias = false # vias count as access; opens the probe side mask over every via
# min_test_pad = "1.0mm" # smallest test pad
# min_test_pad_pitch = "1.27mm" # centre to centre between test pads
# min_test_pad_to_body = "1.0mm" # to another part's body on the probe side
# min_test_pad_to_edge = "3.0mm" # to the board edge and tooling holes
[place] # optional, for `agentee place`
# edges = { J1 = "left", J2 = "right" } # pin a connector to an edge: left, right, top
# (smallest y) or bottom
# keepouts = [[[0, 0], [8, 0], [8, 6], [0, 6]]] # polygons no courtyard may enter
[watermark] # optional: where the agentee version watermark goes
# at = [30, 21] # centre of the text, default a clear spot found by check
# layer = "B.SilkS" # default B.SilkS, else F.SilkS
# rotation = 90 # default 0, or 90 where only a tall gap is clearJedes Layout trägt den Bestückungsdruck-Text agentee vX.Y.Z-HASH: die Version von agentee, mit der das Fertigungsdatenpaket erstellt wurde, und der kurze Git-Hash des Quellcodes, mit -dirty, wenn der Baum uncommittete Änderungen hatte, oder unknown außerhalb von Git. Er wird immer gezeichnet und kann nicht deaktiviert werden. Er ist min_silk_text_height hoch, zentriert und geht standardmäßig auf B.SilkS (F.SilkS, wenn unten kein Platz ist oder die Platine keinen unteren Bestückungsdruck hat) an die freie Stelle in der Nähe der unteren linken Ecke der Platine, gedreht um 90 Grad, wenn nur ein hoher Spalt passt. Eine freie Stelle hält Abstand zu Pads, Vias, anderem Bestückungsdruck-Text und Linien, Kunst und Bauteilkörpern und bleibt min_copper_to_edge innerhalb des Umrisses. Der Viewer, die Darstellung und die Montagezeichnungen zeigen ihn, und fab-notes.txt benennt ihn. Wenn keine Stelle frei ist, meldet die Prüfung einen watermark-Fehler mit der Größe, die frei sein muss, und der am wenigsten belegten Stelle, und der Fertiger lehnt ab; räume dort Platz oder setze [watermark] at (plus layer, rotation) selbst. Eine [watermark]-Stelle, die nicht frei ist, ist ein watermark-Fehler, der benennt, was sie trifft, und ein Lagenaufbau ohne kind = "silk"-Schicht ist ein watermark-Fehler, der eine solche Schicht verlangt.
Testzugang: Standardmäßig sind die Netze, die eine Prüfspitze benötigen, Stromversorgungsnetze (eine Klasse mit current oder ein Name wie 3V3, 1V8, +5V, VCC*, VDD*, VBUS*, VBAT*, VIN*, VSYS*), Masse (GND, *GND, GND*) und Netze mit Namen wie *RST*, *RESET*, *EN*, *PG*, *CLK*, *TX*, *RX*, *SCL*, *SDA*, *SWD*, *TCK*, *TMS*, *TDI*, *TDO*. Die Standardwerte schließen Schaltknoten und Regler-Feedback, Soft-Start- und Rauschreduktionsnetze aus (SW*, *_SW, LX*, FB*, SS*, NR*, abgeglichen auf den gesamten Namen oder dessen letzten /-Segment), selbst wenn ihre Klasse Stromversorgung ist: Die Kapazität einer Prüfspitze und der Stummel zum Pad koppeln Schaltstörungen in einen Feedback-Teiler oder verlangsamen einen Soft-Start oder Rauschfilter, und ein Stummel an einem Schaltknoten strahlt ab. nets ersetzt diese Liste (nenne dort ein Netz, um es trotzdem zu prüfen) und exclude nimmt Netze daraus heraus. Ein Testpunkt ist ein Bauteil mit der Referenz TP und einer Nummer oder ein Footprint mit dem Namen TestPoint*; wie jedes Bauteil muss er im Schaltplan vorhanden sein. Der eingebaute TestPoint_Pad_D1.0mm-Footprint (ein 1,0 mm runder SMD-Pad, Lötstoppmaske offen, kein Lotpaste) und das TestPoint-Symbol werden von agentee testpoints in footprints/ und symbols/ geschrieben.
agentee testpoints NAME --nets "3V3,*RST*" [--side B] [--pitch 2.54] (MCP testpoints) fügt jedem passenden Netz, das noch keinen Sondenzugang hat, einen Testpad hinzu (Netze sind die [test]-Standardwerte, wenn --nets weggelassen wird, Impedanz- und Paarnetze werden übersprungen): Es sucht auf der SondenSeite nach einer freien Stelle auf einem --pitch-Raster in der Nähe des Kupfers des Netzes, hält min_test_pad_to_edge Abstand von der Kante und Bohrungen, min_test_pad_to_body von Bauteilkörpern, --pitch von anderen Testpads und den Netzabstand von anderem Kupfer und von den Pads, Stümpfen und Vias, die es für andere Netze platziert hat. Es fügt ein TP-Bauteil hinzu, das mit dem Netz verbunden ist, auf das Schaltplanblatt, das das Netz benennt, einen [[footprints]]-Eintrag auf der SondenSeite im Layout mit einem kurzen Stumpf-Leiterbahn zu einem Via neben dem Pad, verdrahtet dann jedes neue Pad mit dem Kupfer des Netzes mit dem Autorouter und hängt diese Leiterbahnen und Vias an. Ein Pad, das der Router nicht verbinden kann, wird wieder aus dem Schaltplan und Layout entfernt und mit den Netzen aufgelistet, für die keine Stelle gefunden wurde. Beschriftungen der neuen Pads werden an eine freie Stelle verschoben oder ausgeblendet, und wenn das Layout Zonenfüllungen speichert, werden sie wie von agentee fill aktualisiert. --dry-run meldet die Stellen, ohne zu schreiben.
Bestückungsdruck-Text muss 0,4 mm Abstand zu anderem Bestückungsdruck-Text und 0,2 mm zu Bestückungsdruck-Umrissen halten, Pads, Vias und andere Bauteilkörper meiden und auf der Platine bleiben. Jeder dieser Punkte ist ein Fehler, außer Text unter dem Körper eines anderen Bauteils, der eine Warnung ist. Wenn ein Referenzlabel fehlschlägt, benennt die Prüfung eine Stelle, die alle Regeln erfüllt, als label = { at = [...] }-Zeile zum Einfügen. agentee silk NAME (MCP silk) fügt sie alle ein und wiederholt, bis die Labels sich einpendeln; --hide blendet die Referenzen aus, die keine freie Stelle haben, typischerweise kleine passive Bauteile unter einem BGA.
Ein Füllstück wird nur behalten, wenn es zwei Elemente seines Netzes berührt, oder eines und mindestens min_island_area groß ist; der Rest erreicht nichts Neues und wird entfernt. Die Prüfung vergleicht jede Füllung mit anderen Netzen: Eine Füllung, die die Kupferfläche, die Leiterbahn, das Via oder das Pad eines anderen Netzes überlappt, oder näher als der Mindestabstand kommt, ist ein Fehler, und Kupferspitzen, die schärfer als 30 Grad sind, werden markiert.
Kupferflächen auf derselben Ebene werden in der Reihenfolge von priority gefüllt, dann von der kleinsten Fläche. Jede Fläche hält ihren Abstand zu den bereits platzierten Füllungen ein, sodass eine kleine Versorgungskupferfläche oder eine Schalterknotenfläche innerhalb einer platinweiten Massefläche umlaufen und nicht mit ihr in Kontakt kommen.
Kupferflächen halten min_via_hole_to_copper zu den Via-Bohrungen anderer Netze und min_npth_to_copper zu nicht verzinnten Bohrungen sowie den Abstand ein. Bögen werden außerhalb des tatsächlichen Kreises gezeichnet, damit der Abstand nie zu kurz wird. Stitching-Vias werden nur dort platziert, wo das Via auf jeder durchquerten Ebene den Abstand zu jedem anderen Netz einhält, sein Bohrloch min_via_hole_to_copper von diesem Kupfer und min_hole_to_smd_pad von SMD-Pads jedes Netzes entfernt hält, min_hole_to_hole zu jeder Bohrung und die Randregel zum Umriss einhält und innerhalb einer Kupferfläche seines Netzes liegt. Die Prüfung meldet, wie viele Vias platziert wurden. Sie werden gebohrt und geplotet wie jedes andere Via.
Kupferflächenfüllungen sind exakte Polygone: der Umriss der Fläche minus das Kupfer aller anderen Netze, vergrößert um deren Abstand, mit abgerundeten Ecken. Dadurch werden Kupferflächen ohne Treppchen gerendert und geplotet. Engstellen und Streifen, die schmaler als min_width der Fläche sind (Standard 0,25 mm), werden entfernt, so wie ein Fertiger sie ätzen würde. Wenn zwei Abstandsbereiche (Antipads, Leiterbahn- und Pad-Abstände) näher als min_width zusammenrücken, wird die Kupferfläche auf die Geraden zurückgeschnitten, die sie verbinden, innerhalb von etwa 1,5 min_width des Abstands, sodass keine Stummel oder haarfeinen Engstellen in den Abstand hineinragen. Dasselbe gilt zwischen einem Abstandsbereich und dem Abstand zum Platinenrand, einem Ausschnitt oder dem Abstand um die Füllung einer anderen Kupferfläche.
Kupferflächenfüllungen werden zwischengespeichert: Jede Füllung wird anhand eines Hashes aller Abhängigkeiten identifiziert und in ~/.cache/agentee/fills abgelegt. Beim Laden werden nur die Kupferflächen gefüllt, deren Kupfer, Abstände oder Nachbarn sich geändert haben (setze AGENTEE_NO_FILL_CACHE, um den Zwischenspeicher zu überspringen). agentee fill NAME (MCP fill) speichert die Füllungen zusätzlich am Ende der Layout-Datei, eine [[fills]]-Tabelle pro Kupferfläche und Ebene. So lädt eine frische Klonung ohne Füllen. Eine gespeicherte Füllung, deren Hash nicht mehr passt, wird ignoriert; die Prüfung vermerkt dies mit --info. Beim Import einer Platine werden deren Füllungen gespeichert. Die [[fills]]-Tabellen dem Tool überlassen.
Eine Leiterbahn, die nur ein Pad streift (deren Mittellinie das Pad verfehlt), wird markiert; führe sie in das Pad. Zwei Segmente eines Netzes, die sich auf einer Ebene überlappen (parallel, Überlappung größer als eine Leiterbahnbreite), sind ein Fehler, da das Kupfer verdoppelt ist; eine Biegung, die schärfer als 90 Grad ist, wird als Säurefalle markiert. Eine Leiterbahn darf unter ihre Klassenbreite einengen, bis mindestens zum Fertiger-Minimum, für bis zu 0,5 mm (die Klassen-neckdown), wo sie auf ein kleines Pad trifft; der Router zeichnet solche Engstellen selbst (siehe Autorouting). Gebohrte Löcher, Vias und verzinnte Pads müssen alle den min_hole_to_hole-Abstand der Platine einhalten; die Prüfung zählt die Paare, die das nicht tun, und benennt das erste. Zwei Vias eines Netzes an derselben Stelle sind ebenfalls ein Fehler: Der Fertiger würde das Loch zweimal bohren. Lötstoppmaske-Öffnungen sind die Pad-Umrisslinien, ohne Erweiterung, und Vias werden getentet. Zwei Öffnungen verschiedener Netze (oder ohne Netz), die sich überlappen oder eine Lötstoppmaske-Brücke unter min_mask_web lassen, sind ein Fehler, gezählt pro Bauteilpaar mit Benennung des ersten Ortes. Pads eines Bauteils mit feinem Raster werden ebenfalls geprüft: behebe es im Footprint mit schmaleren Pads, oder setze ein kleineres min_mask_web, wenn der Fertiger es zulässt. Ein Footprint mit mask_web = false hat seine Lötstoppmaske als ein Fenster über seinen Pads geöffnet (eine Gruppenöffnung), sodass Paare seiner eigenen Pads übersprungen werden; seine Pads werden weiterhin gegen andere Bauteile geprüft.
Grafik auf einer unteren Ebene wird gespiegelt, damit sie von unten korrekt lesbar ist. SVG-Füllungen und -Striche werden zu Polygonen vereinfacht; Text in einem SVG wird ignoriert, daher zuerst in Pfade umwandeln. Seidenbedruckungs-Text und -Grafik erhalten dieselben Prüfungen wie Referenzbezeichnungen: Überlappung, Pads, Seidenbedruckungs-Umrisslinien, Platinenrand.