Schemat i projekt PCB
Projekty PCB
Plik *.pcb.toml: rozmieszczenie, ścieżki, przelotki, fanouty, zszywanie, wylewki, wycięcia, opisy, grafika, dostęp testowy i znak wodny wersji.
Umieszcza footprints ze schematu na płytce i prowadzi je.
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 clearKażdy projekt PCB zawiera tekst sitodruku agentee vX.Y.Z-HASH: wersję agentee, która zbudowała pakiet, i krótki hash git jego źródła, z -dirty, gdy drzewo miało niezapisane zmiany, lub unknown poza git. Jest zawsze rysowany i nie można go wyłączyć. Ma wysokość min_silk_text_height, jest wyśrodkowany i domyślnie trafia na B.SilkS (F.SilkS, gdy na dolnej stronie nie ma miejsca lub płytka nie ma sitodruku dolnego) w wolnym miejscu najbliższym lewego dolnego rogu płytki, obrócony o 90 stopni, gdy mieści się tylko wysoki prześwit. Wolne miejsce unika padów, przelotek, innego tekstu sitodruku i linii, grafiki i ciał elementów, i pozostaje w odległości min_copper_to_edge od obrysu. Podgląd, render i rysunki montażu je pokazują, a fab-notes.txt je wymienia. Gdy żadne miejsce nie jest wolne, sprawdzenie raportuje błąd watermark z rozmiarem do zwolnienia i najmniej zatłoczonym miejscem, a producent odmawia; zwolnij tam miejsce lub ustaw [watermark] at (oraz layer, rotation) samodzielnie. Miejsce [watermark], które nie jest wolne, to błąd watermark nazywający, co blokuje, a stackup bez warstwy kind = "silk" to błąd watermark proszący o taką warstwę.
Dostęp do testów: domyślnie sieci wymagające sondy to sieci zasilania (klasa z current, lub nazwa typu 3V3, 1V8, +5V, VCC*, VDD*, VBUS*, VBAT*, VIN*, VSYS*), masa (GND, *GND, GND*) oraz sieci o nazwach typu *RST*, *RESET*, *EN*, *PG*, *CLK*, *TX*, *RX*, *SCL*, *SDA*, *SWD*, *TCK*, *TMS*, *TDI*, *TDO*. Domyślne ustawienia pomijają węzły przełączników i sprzężenia zwrotnego regulatorów, sieci soft-start i tłumienia szumów (SW*, *_SW, LX*, FB*, SS*, NR*, dopasowywane do całej nazwy lub jej ostatniego segmentu po /), nawet jeśli ich klasa to zasilanie: pojemność sondy i stub do padu sprzęgają szumy przełączania do dzielnika sprzężenia zwrotnego, spowalniają soft-start lub filtr szumów, a stub na węźle przełącznika promieniuje. nets zastępuje tę listę (nazwij tam sieć, aby ją mimo wszystko sonduować), a exclude wyłącza sieci z listy. Punkt testowy to element z oznaczeniem TP i numerem, lub footprint o nazwie TestPoint*; jak każdy element musi być na schemacie. Wbudowany footprint TestPoint_Pad_D1.0mm (okrągły pad SMD 1,0 mm, otwarta soldermaska, bez pasty) i symbol TestPoint są zapisywane do footprints/ i symbols/ przez agentee testpoints.
agentee testpoints NAME --nets "3V3,*RST*" [--side B] [--pitch 2.54] (MCP testpoints) dodaje pad testowy do każdej pasującej sieci, która nie ma jeszcze dostępu do sondy (sieci to domyślne [test], gdy pominięto --nets, sieci impedancji i pary są pomijane): szuka na stronie sondy wolnego miejsca na siatce --pitch blisko miedzi sieci, zachowując min_test_pad_to_edge od krawędzi i otworów montażowych, min_test_pad_to_body od ciał elementów, --pitch od innych padów testowych oraz odstęp sieci od innej miedzi i od padów, stubów i przelotek, które umieścił dla innych sieci. Dodaje element TP połączony z siecią do arkusza schematu, który nazywa sieć, wpis [[footprints]] na stronie sondy do projektu PCB z krótkim stubem ścieżki do przelotki obok padu, następnie prowadzi każdy nowy pad do miedzi sieci autorytuterem i dołącza te ścieżki i przelotki. Pad, którego ryter nie może połączyć, jest usuwany ponownie ze schematu i projektu PCB i wymieniany z sieciami, które nie znalazły miejsca. Etykiety nowych padów są przenoszone do wolnego miejsca lub ukrywane, a gdy projekt PCB przechowuje wypełnienia stref, są odświeżane tak, jakby zrobił to agentee fill. --dry-run zgłasza miejsca bez zapisywania.
Tekst sitodruku musi zachować 0,4 mm od innego tekstu sitodruku i 0,2 mm od obrysów sitodruku, unikać padów, przelotek i ciał innych elementów oraz pozostać na płytce. Każdy z tych przypadków to błąd, z wyjątkiem tekstu pod ciałem innego elementu, co jest ostrzeżeniem. Gdy etykieta odniesienia nie spełnia reguł, sprawdzenie podaje miejsce, które je spełnia, jako linię label = { at = [...] } do wklejenia. agentee silk NAME (MCP silk) wkleja je wszystkie za Ciebie i powtarza, aż etykiety się ustabilizują; --hide ukrywa odniesienia, które nie mają wolnego miejsca, zwykle małe elementy pasywne pod BGA.
Fragment wypełnienia jest zachowywany tylko wtedy, gdy dotyka dwóch elementów jego sieci, lub jednego i ma co najmniej min_island_area; reszta nie sięga niczego nowego i jest usuwana. Sprawdzenie weryfikuje każde wypełnienie względem innych sieci: wypełnienie, które nakłada się na strefę, ścieżkę, przelotkę lub pad innej sieci, lub zbliża się bliżej niż odstęp, to błąd, a końcówki miedzi ostrzejsze niż 30 stopni są oznaczane.
Wylewki na tej samej warstwie są wypełniane w kolejności priority, a następnie od najmniejszej do największej. Każda zachowuje swój odstęp od już umieszczonych wypełnień, więc mała wylewka zasilania lub sieci przełącznika wewnątrz wylewki masy na całą płytkę jest wylewana wokół, a nie zwarta z nią.
Wylewki zachowują min_via_hole_to_copper od otworów przelotek innych sieci oraz min_npth_to_copper od otworów niepokrytych, a także odstęp, z łukami rysowanymi na zewnątrz prawdziwego okręgu, aby przerwa nigdy nie była za mała. Przelotki spinające trafiają tylko tam, gdzie przelotka unika miedzi każdej innej sieci na każdej warstwie, którą obejmuje, zachowuje swój otwór w odległości min_via_hole_to_copper od tej miedzi i min_hole_to_smd_pad od padów SMD dowolnej sieci, zachowuje min_hole_to_hole od każdego otworu i regułę krawędzi od obrysu, oraz ląduje w strefie swojej sieci; sprawdzenie raportuje, ile ich umieszczono. Są wiercone i rysowane jak każda przelotka.
Wypełnienia stref to dokładne wielokąty: obrys strefy pomniejszony o miedź każdej innej sieci powiększoną o jej odstęp, z zaokrąglonymi rogami, dzięki czemu wylewki są renderowane i rysowane bez schodków. Szyjki i paski węższe niż min_width strefy (domyślnie 0,25 mm) są usuwane, tak jak producent PCB je trawi. Gdy dwa obszary odstępu (antipady, odstępy ścieżek i padów) zbliżą się do siebie na mniej niż min_width, wylewka jest wycięta do prostych linii łączących je, w odległości około 1,5 min_width od przerwy, aby nie pozostał żaden wystający fragment ani wąska szyjka skierowana w jej stronę. To samo dotyczy obszaru odstępu i odstępu krawędzi płytki, wycięcia lub odstępu wokół wypełnienia innej strefy.
Wypełnienia stref są buforowane: każde wypełnienie jest kluczowane haszem wszystkiego, od czego zależy, i przechowywane w ~/.cache/agentee/fills, więc ładowanie wypełnia tylko strefy, których miedź, odstępy lub sąsiedzi się zmienili (ustaw AGENTEE_NO_FILL_CACHE, aby pominąć bufor). agentee fill NAME (MCP fill) zapisuje też wypełnienia na końcu pliku projektu PCB, po jednej tabeli [[fills]] na strefę i warstwę, więc świeży checkout ładuje się bez wypełniania; zapisane wypełnienie, którego hash już nie pasuje, jest ignorowane, a sprawdzenie notuje je z --info. Importowanie płytki zapisuje jej wypełnienia. Zostaw tabele [[fills]] narzędziu.
Ścieżka, która tylko dotyka padu (jej linia środkowa nie przechodzi przez pad), jest oznaczana; poprowadź ją do padu. Dwa segmenty tej samej sieci, które na jednej warstwie leżą na sobie (są równoległe i nachodzą na siebie o więcej niż szerokość ścieżki), to błąd, ponieważ miedź jest podwójna; zakręt ostrzejszy niż 90 stopni jest oznaczany jako pułapka kwasowa. Ścieżka może zwężać się poniżej szerokości swojej klasy, do nie mniej niż minimum producenta, na odcinku do 0,5 mm (klasa neckdown), gdzie łączy się z małym padem; router sam rysuje takie zwężenia (patrz Autorouting). Wiercone otwory, przelotki i pady z powłoką przewodzącą muszą zachować odstęp min_hole_to_hole płytki; sprawdzanie zlicza pary, które go nie zachowują, i podaje pierwszą. Dwie przelotki tej samej sieci w tym samym miejscu to też błąd: producent wywierciłby otwór dwukrotnie. Otwory w soldermasce to obrysy padów, bez rozszerzenia, a przelotki są zakryte. Dwa otwory różnych sieci (lub bez sieci), które nachodzą na siebie lub zostawiają mostek soldermaski poniżej min_mask_web, to błąd, zliczany dla każdej pary elementów z podaniem pierwszego miejsca. Pady jednego elementu o małym rozstawie są też sprawdzane: popraw to w footprint, stosując węższe pady, lub ustaw mniejsze min_mask_web, jeśli producent na to pozwala. Footprint z mask_web = false ma soldermaskę otwartą jako jedno okno nad jego padami (otwór grupowy), więc pary jego własnych padów są pomijane; jego pady są nadal sprawdzane względem innych elementów.
Opisy na dolnej warstwie są lustrzanie odbite, aby były czytelne od spodu. Wypełnienia i obrysy SVG są spłaszczane do wielokątów; tekst w SVG jest ignorowany, więc najpierw przekonwertuj go na ścieżki. Tekst i opisy sitodruku przechodzą te same kontrole co etykiety referencyjne: nakładanie, pady, obrysy sitodruku, krawędź płytki.