Плата
Спецификация платы
Файл *.board.toml: пресет производителя, контур и вырезы, стек слоёв, типы переходных отверстий и классы цепей с целевыми значениями импеданса и тока.
name = "sensor-node"
description = "2 layer sensor board"
fab = "jlcpcb" # rule preset: generic | jlcpcb | hdi
[outline] # a rectangle...
size = [50, 30]
origin = [0, 0] # top-left corner, default [0, 0]
corner_radius = 1
# points = [[0,0], [50,0], [50,30], [0,30]] # ...or a polygon
[[outline.cutouts]] # a window, slot or large hole routed through the whole board
origin = [20, 12] # a rectangle, same keys as the outline
size = [6, 2]
corner_radius = 1 # half the width makes a slot
# points = [[x, y], ...] # ...or a polygon
[stackup]
preset = "JLC04161H-7628" # a fab build, see Stackup presets
finish = "ENIG"
mask_color = "green"
silk_color = "white"
[rules] # overrides the fab preset, any subset
min_track_width = "0.15mm"
[[vias]]
name = "std"
drill = "0.3mm"
diameter = "0.6mm"
# type = "through" # through | blind | buried | microvia, default from the span
# from = "F.Cu" # default: outermost copper on each side
# to = "B.Cu"
# fill = "filled_capped" # IPC-4761 type, see Via types
# drill_kind = "mechanical" # mechanical | laser | controlled_depth, default from the type
# cost = 1.0 # router cost of this via, times --via-cost
[[netclasses]]
name = "Default" # always define Default
track_width = "0.2mm"
clearance = "0.2mm"
via = "std" # or a list the router picks from: ["std", "uvia-top"]
[[netclasses]]
name = "Power"
track_width = "1mm"
current = "3A" # checked against IPC-2221 on every layer
max_temp_rise = "10C" # default 10C
[[netclasses]]
name = "USB"
impedance = "90ohm" # target, checked on every layer in `layers`
impedance_tolerance = "10%" # default 10%
diff_gap = "0.15mm" # makes it a differential pair
layers = ["F.Cu"] # default: every copper layer
# track_width omitted: solved for the target on the first layer
# widths = { "B.Cu" = "0.16mm" } # per layer width where one width does not fit every layer
# max_uncoupled = "1.5mm" # total run allowed off the pair gap, default 20% of the length
# neckdown = "1.5mm" # how far a track may run below class width into a pad, default 0.5mm
[[netclasses]]
name = "RF"
impedance = "50ohm"
coplanar_gap = "0.2mm" # grounded coplanar: pour this far either side, plane below
layers = ["F.Cu"] # outer layers only
solver = "field" # check with the GPU field solver (mask, thickness) instead of formulasВырезы платы находятся в файле платы вместе с контуром, потому что они являются частью формы платы: контур это внешний край, а каждый вырез это внутренний край, оба фрезеруются из одного профиля Edge.Cuts. Записи [[cutouts]] в топологии только удерживают медь полигонов от области на некоторых слоях и оставляют плату целой. Вырез должен находиться внутри контура. Всё, что использует контур, рассматривает край выреза как край платы: правила краёв (copper-to-edge, pad-to-edge, pad-off-board, part-to-edge, part-body-to-edge, hole-to-edge, edge-pad-reach, правила mlcc-flex-zone, которые указывают вырез), шелкография и водяной знак, полигоны (удерживаются на расстоянии min_copper_to_edge), переходные отверстия для сшивания, тестовые точки, авторутер и тюнер, профиль Edge_Cuts производителя, просмотрщики и модели FDTD, тепловые и постоянные токи, где вырез это воздух. Сохранённое заполнение устаревает, когда вырез меняется.