Схема и топология платы
Топология платы
Файл *.pcb.toml: размещение, проводники, переходные отверстия, fanout, стёжки, полигоны, вырезы, шелкография, графика, доступ для тестирования и водяной знак версии.
Размещает посадочные места схемы на плате и прокладывает проводники.
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 clearКаждая топология платы содержит текст шелкографии agentee vX.Y.Z-HASH: версию agentee, собравшую пакет, и короткий git-хеш её исходников, с -dirty, если в дереве были незакоммиченные изменения, или unknown вне git. Он всегда выводится и не может быть отключён. Его высота равна min_silk_text_height, он центрирован и по умолчанию размещается на B.SilkS (F.SilkS, если на нижней стороне нет места или у платы нет нижней шелкографии) в свободном месте, ближайшем к левому нижнему углу платы, и поворачивается на 90 градусов, если подходит только узкий зазор. Свободное место не должно пересекать контактные площадки, переходные отверстия, другой текст и линии шелкографии, графику и корпуса компонентов, и должно оставаться на расстоянии min_copper_to_edge от контура. Просмотрщик, рендер и сборочные чертежи показывают его, а fab-notes.txt указывает на него. Если свободного места нет, проверка сообщает об ошибке watermark с размером, который нужно освободить, и наименее загруженным местом, и завод отклоняет плату; освободите место там или задайте [watermark] at (плюс layer, rotation) сами. Место [watermark], которое не является свободным, это ошибка watermark с указанием того, что оно пересекает, а стек слоёв без слоя kind = "silk" это ошибка watermark с требованием добавить такой слой.
Доступ для тестирования: по умолчанию цепи, которым нужен зонд, это цепи питания (класс с current, или имя вроде 3V3, 1V8, +5V, VCC*, VDD*, VBUS*, VBAT*, VIN*, VSYS*), земля (GND, *GND, GND*) и цепи с именами вроде *RST*, *RESET*, *EN*, *PG*, *CLK*, *TX*, *RX*, *SCL*, *SDA*, *SWD*, *TCK*, *TMS*, *TDI*, *TDO*. По умолчанию исключены узлы ключей и обратная связь регуляторов, цепи мягкого запуска и подавления шума (SW*, *_SW, LX*, FB*, SS*, NR*, совпадение по полному имени или по последнему сегменту после /), даже если их класс питание: ёмкость зонда и отвод к контактной площадке наводят коммутационные помехи на делитель обратной связи или замедляют мягкий запуск или фильтр шума, а отвод на узле ключа излучает. nets заменяет этот список (укажите там имя цепи, чтобы зондировать её всё равно), а exclude исключает цепи из него. Тестовая точка это компонент с обозначением TP и номером, или посадочное место с именем TestPoint*; как и любой компонент, она должна быть на схеме. Встроенное посадочное место TestPoint_Pad_D1.0mm (круглая SMD площадка 1,0 мм, открытая паяльная маска, без пасты) и УГО TestPoint записываются в footprints/ и symbols/ командой agentee testpoints.
agentee testpoints NAME --nets "3V3,*RST*" [--side B] [--pitch 2.54] (MCP testpoints) добавляет тестовую площадку к каждой подходящей цепи, у которой ещё нет доступа для зонда (цепи это значения по умолчанию из [test], если --nets не указан, цепи с импедансом и пары пропускаются): он ищет на стороне зонда свободное место на сетке --pitch рядом с медью цепи, соблюдая min_test_pad_to_edge от края и технологических отверстий, min_test_pad_to_body от корпусов компонентов, --pitch от других тестовых площадок и зазор цепи от другой меди и от площадок, отводов и переходных отверстий, которые он разместил для других цепей. Он добавляет компонент TP, подключённый к цепи, на лист схемы, где названа эта цепь, запись [[footprints]] на стороне зонда в топологию платы с коротким проводником-отводом к переходному отверстию рядом с площадкой, затем прокладывает каждый новый площадку к меди цепи автопрокладчиком и добавляет эти проводники и переходные отверстия. Площадку, которую прокладчик не может подключить, снова удаляют из схемы и топологии платы и выводят в список вместе с цепями, для которых не нашлось места. Подписи новых площадок перемещают в свободное место или скрывают, а если топология хранит заполнение зон, они обновляются так, как это сделал бы agentee fill. --dry-run сообщает о местах без записи.
Текст шелкографии должен держать 0,4 мм от другого текста шелкографии и 0,2 мм от контуров шелкографии, не пересекать контактные площадки, переходные отверстия и корпуса других компонентов и оставаться на плате. Каждое из этих нарушений это ошибка, кроме текста под корпусом другого компонента, который это предупреждение. Если обозначение не проходит, проверка указывает место, которое проходит все правила, в виде строки label = { at = [...] } для вставки. agentee silk NAME (MCP silk) вставляет их все за вас и повторяет, пока обозначения не стабилизируются; --hide скрывает обозначения, у которых нет свободного места, обычно это мелкие пассивные компоненты под BGA.
Фрагмент заполнения сохраняется только если он касается двух элементов своей цепи, или одного и имеет площадь не менее min_island_area; остальное не достигает ничего нового и удаляется. Проверка сверяет каждое заполнение с другими цепями: заполнение, которое перекрывает зону, проводник, переходное отверстие или площадку другой цепи, или подходит ближе, чем зазор, это ошибка, а острые концы меди менее 30 градусов помечаются.
Полигоны на одном слое заполняются в порядке priority, затем от меньшего к большему. Каждый сохраняет зазор до уже размещённых заполнений, поэтому небольшой полигон узла переключения или питания внутри полигона земли на всю плату заливается вокруг него, а не замыкается на него.
Полигоны сохраняют min_via_hole_to_copper до переходных отверстий других цепей и min_npth_to_copper до отверстий без покрытия, а также зазор. Дуги рисуются за пределами истинного круга, чтобы зазор никогда не замыкался. Соединительные переходные отверстия размещаются только там, где отверстие не пересекает медь других цепей на каждом слое, которое оно пересекает, где оно сохраняет min_via_hole_to_copper до этой меди и min_hole_to_smd_pad до SMD-площадок любой цепи, где оно сохраняет min_hole_to_hole до каждого сверла и правило края до контура платы, и где оно попадает внутрь полигона своей цепи. Проверка сообщает, сколько таких отверстий размещено. Они сверлятся и вычерчиваются как обычные переходные отверстия.
Заполнения полигонов являются точными многоугольниками: контур полигона минус медь всех других цепей, увеличенная на её зазор, со скруглёнными углами, поэтому полигоны рендерятся и вычерчиваются без ступенек. Шейки и полоски уже min_width полигона (по умолчанию 0,25 мм) удаляются, как завод их травит. Когда две области зазора (антиплощадки, зазоры проводников и площадок) сближаются на расстояние меньше min_width, полигон отрезается по прямым линиям, соединяющим их, в пределах примерно 1,5 min_width от зазора, чтобы не оставлять выступов или тонких перешейков, направленных в зазор. То же самое выполняется между областью зазора и зазором края платы, вырезом или зазором вокруг заполнения другого полигона.
Заполнения полигонов кэшируются: каждое заполнение ключируется по хэшу всех зависимостей и хранится в ~/.cache/agentee/fills, поэтому при загрузке заполняются только полигоны, чья медь, зазоры или соседи изменились (установите AGENTEE_NO_FILL_CACHE, чтобы пропустить кэш). agentee fill NAME (MCP fill) также сохраняет заполнения в конце файла топологии, по одной таблице [[fills]] на каждый полигон и слой, поэтому свежая копия загружается без заполнения; сохранённое заполнение, чей хэш больше не совпадает, игнорируется, и проверка отмечает это с --info. Импорт платы сохраняет её заполнения. Таблицы [[fills]] оставляйте инструменту.
Проводник, который лишь касается площадки (его центральная линия не попадает на площадку), помечается; направьте его на площадку. Два сегмента одной цепи, лежащие друг на друге на слое (параллельные, перекрывающиеся более чем на ширину проводника), являются ошибкой, так как медь удваивается; изгиб острее 90 градусов помечается как кислотная ловушка. Проводник может сужаться ниже ширины класса, но не меньше минимума завода, на расстояние до 0,5 мм (класс neckdown) там, где он соединяется с небольшой площадкой; маршрутизатор рисует такие шейки сам (см. Авторазводка). Сверлёные отверстия, переходные отверстия и площадки с покрытием должны сохранять min_hole_to_hole платы между собой; проверка считает пары, которые не сохраняют, и называет первую. Два переходных отверстия одной цепи в одной точке также являются ошибкой: завод просверлит отверстие дважды. Открытия маски являются контурами площадок, без расширения, и переходные отверстия закрываются тентом. Два открытия разных цепей (или без цепи), которые перекрываются или оставляют перемычку маски меньше min_mask_web, являются ошибкой, считаются по парам элементов с указанием первого места. Площадки одного элемента с мелким шагом также проверяются: исправьте это в посадочном месте с более узкими площадками или установите меньшее min_mask_web, если завод позволяет. Посадочное место с mask_web = false имеет маску, открытую как одно окно над его площадками (групповое открытие), поэтому пары его собственных площадок пропускаются; его площадки всё равно проверяются по отношению к другим элементам.
Графика на нижнем слое зеркалится, чтобы читаться правильно снизу. Заполнения и обводки SVG сглаживаются до многоугольников; текст в SVG игнорируется, поэтому сначала преобразуйте его в контуры. Текст и графика шелкографии проходят те же проверки, что и обозначения: пересечение, площадки, контуры шелкографии, край платы.