Carte
Spécification de la carte
Le fichier *.board.toml : préréglage de fabricant, contour et découpes, empilement, types de vias et classes de nets avec cibles d'impédance et de courant.
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 formulasLes découpes de carte sont avec le contour dans le fichier de carte parce qu'elles font partie de la forme de la carte : le contour est le bord extérieur et chaque découpe est un bord intérieur, tous deux usinés à partir du même profil Edge.Cuts. Les [[cutouts]] du routage n'empêchent que le cuivre de zone d'occuper une zone sur certaines couches et laissent la carte entière. Une découpe doit être à l'intérieur du contour. Tout ce qui utilise le contour traite un bord de découpe comme un bord de carte : les règles de bord (copper-to-edge, pad-to-edge, pad-off-board, part-to-edge, part-body-to-edge, hole-to-edge, edge-pad-reach, les règles mlcc-flex-zone, qui nomment la découpe), la sérigraphie et le filigrane, les zones de cuivre (maintenues à min_copper_to_edge du bord), les vias de couture, les points de test, le routeur et le réglage, le profil Edge_Cuts du fabricant, les visualiseurs et les modèles FDTD, thermiques et DC, où une découpe est de l'air. Un remplissage stocké devient obsolète quand une découpe change.