Esquema e layout
Layouts
O ficheiro *.pcb.toml: posicionamentos, pistas, vias, fanouts, costuras, zonas, recortes, serigrafia, arte, acesso de teste e a marca de água de versão.
Coloca os footprints do esquema na placa e faz o roteamento.
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 clearCada layout contém o texto de serigrafia agentee vX.Y.Z-HASH: a versão do agentee que construiu o pacote e o hash git curto da sua origem, com -dirty quando a árvore tinha alterações não commitadas, ou unknown fora do git. É sempre plotado e não pode ser desativado. Tem a altura min_silk_text_height, está centrado e, por omissão, vai para B.SilkS (F.SilkS quando o fundo não tem espaço ou a placa não tem serigrafia no fundo) no ponto livre mais próximo do canto inferior esquerdo da placa, rotacionado 90 graus se apenas uma lacuna alta couber. Um ponto livre mantém distância de pads, vias, outros textos e linhas de serigrafia, arte e corpos de componentes, e fica a min_copper_to_edge da contornagem. O visualizador, a renderização e os desenhos de montagem mostram-no, e o fab-notes.txt indica-o. Quando não há ponto livre, a verificação reporta um erro watermark com o tamanho a libertar e o ponto menos ocupado, e o fabricante recusa; liberte espaço aí ou defina [watermark] at (mais layer, rotation) por si. Um ponto [watermark] que não está livre é um erro watermark que indica o que toca, e um stackup sem camada kind = "silk" é um erro watermark que pede uma.
Acesso a teste: por predefinição, as redes que precisam de uma sonda são redes de alimentação (uma classe com current, ou um nome como 3V3, 1V8, +5V, VCC*, VDD*, VBUS*, VBAT*, VIN*, VSYS*), massa (GND, *GND, GND*) e redes com nomes como *RST*, *RESET*, *EN*, *PG*, *CLK*, *TX*, *RX*, *SCL*, *SDA*, *SWD*, *TCK*, *TMS*, *TDI*, *TDO*. As predefinições excluem nós de comutação e realimentação de reguladores, redes de arranque suave e redução de ruído (SW*, *_SW, LX*, FB*, SS*, NR*, correspondência no nome inteiro ou no seu último segmento /), mesmo quando a sua classe é de alimentação: a capacitância de uma sonda e o stub até ao pad acoplam ruído de comutação num divisor de realimentação ou atrasam um filtro de arranque suave ou de ruído, e um stub num nó de comutação irradia. nets substitui essa lista (nomeie uma rede lá para a sondar mesmo assim) e exclude retira redes dela. Um ponto de teste é uma peça com uma referência TP e um número, ou um footprint chamado TestPoint*; como todas as peças, tem de estar no esquema. O footprint TestPoint_Pad_D1.0mm incorporado (um pad SMD redondo de 1.0 mm, máscara aberta, sem pasta) e o símbolo TestPoint são escritos em footprints/ e symbols/ por agentee testpoints.
agentee testpoints NAME --nets "3V3,*RST*" [--side B] [--pitch 2.54] (MCP testpoints) adiciona um pad de teste a cada rede correspondente que ainda não tem acesso de sonda (as redes são as omissões de [test] quando --nets fica por definir; redes de impedância e pares são ignoradas): procura no lado da sonda um ponto livre numa grelha de --pitch perto do cobre da rede, mantendo min_test_pad_to_edge da borda e dos furos de fixação, min_test_pad_to_body dos corpos de componentes, --pitch de outros pads de teste, e a folga da rede de outro cobre e dos pads, stubs e vias que colocou para outras redes. Adiciona um componente TP ligado à rede à folha do esquema que nomeia a rede, uma entrada [[footprints]] no lado da sonda ao layout com uma pista stub curta até uma via junto ao pad, e depois roteia cada novo pad até ao cobre da rede com o autorouter e acrescenta essas pistas e vias. Um pad que o roteador não consegue ligar é retirado do esquema e do layout e listado com as redes que não encontraram ponto. As etiquetas dos novos pads são movidas para um ponto livre ou escondidas, e quando o layout guarda preenchimentos de zona, estes são atualizados como agentee fill faria. --dry-run reporta os pontos sem escrever.
O texto de serigrafia deve manter 0,4 mm de outros textos de serigrafia e 0,2 mm de contornos de serigrafia, ficar fora de pads, vias e corpos de outros componentes, e permanecer na placa. Cada uma destas condições é um erro, exceto texto sob o corpo de outro componente, que é um aviso. Quando uma etiqueta de referência falha, a verificação indica um ponto que passa em todas as regras, como uma linha label = { at = [...] } para colar. agentee silk NAME (MCP silk) cola-as todas por si e repete até as etiquetas se assentarem; --hide esconde as referências que não têm ponto livre, tipicamente pequenos passivos sob um BGA.
Uma peça de preenchimento é mantida apenas se tocar em dois itens da sua rede, ou em um e tiver pelo menos min_island_area; o resto não chega a nada de novo e é removido. A verificação valida cada preenchimento em relação a outras redes: um preenchimento que sobrepõe a zona, pista, via ou pad de outra rede, ou fica mais próximo do que a folga, é um erro, e pontas de cobre mais afiadas do que 30 graus são assinaladas.
As áreas de cobre na mesma camada são preenchidas pela ordem de priority, depois da menor para a maior, e cada uma mantém a sua folga em relação aos preenchimentos já colocados, por isso uma área de cobre pequena de um nó de comutação ou de alimentação dentro de uma área de massa que cobre toda a placa é contornada em vez de ficar em curto com ela.
As áreas de cobre mantêm min_via_hole_to_copper dos furos de via de outras redes e min_npth_to_copper dos furos não revestidos, além da folga, com arcos desenhados fora do círculo verdadeiro para que a lacuna nunca seja curta. As vias de costura vão apenas para onde a via mantém folga de todo o cobre de cada outra rede em cada camada que atravessa, mantém o seu furo a min_via_hole_to_copper desse cobre e a min_hole_to_smd_pad de pads SMD de qualquer rede, mantém min_hole_to_hole de cada furação e a regra de borda da contornagem, e ficam dentro de uma zona da sua rede; a verificação reporta quantas colocou. São furadas e plotadas como qualquer via.
Os preenchimentos de área são polígonos exatos: o contorno da área menos o cobre de todas as outras redes ampliado pela sua folga, com cantos arredondados, para que as áreas de cobre sejam renderizadas e plotadas sem degraus. Pescoços e tiras mais estreitos que o min_width da área (padrão 0,25 mm) são removidos, da mesma forma que um fabricante os gravaria. Quando duas áreas de folga (antipads, folgas de pista e pad) ficam a menos de min_width, a área de cobre é recuada até às linhas retas que as ligam, a cerca de 1,5 min_width da distância, para não deixar nenhum resto ou pescoço fino apontando para ela. O mesmo se aplica entre uma área de folga e a folga da borda da placa, um recorte ou a folga em torno do preenchimento de outra área.
Os preenchimentos de zona são em cache: cada preenchimento é indexado por um hash de tudo em que depende e guardado em ~/.cache/agentee/fills, para que uma carga só preencha as zonas cujo cobre, folgas ou vizinhos mudaram (defina AGENTEE_NO_FILL_CACHE para saltar a cache). agentee fill NAME (MCP fill) também guarda os preenchimentos no fim do ficheiro de layout, uma tabela [[fills]] por zona e camada, para que um checkout novo carregue sem preencher; um preenchimento guardado cujo hash já não coincide é ignorado, e a verificação nota-o com --info. Importar uma placa guarda os seus preenchimentos. Deixe as tabelas [[fills]] para a ferramenta.
Uma pista que apenas roça um pad (a sua linha central não atinge o pad) é assinalada; conduza-a até ao pad. Dois segmentos da mesma rede que se sobrepõem numa camada (paralelos, sobrepostos por mais do que uma largura de pista) são um erro, pois o cobre é duplicado; uma curva mais afiada do que 90 graus é assinalada como armadilha de ácido. Uma pista pode afunilar abaixo da largura da sua classe, até ao mínimo do fabricante, por até 0,5 mm (o neckdown da classe) onde encontra um pad pequeno; o roteador desenha esses afunilamentos por si (ver Autorouting). Furações, vias e pads revestidos, todos, devem manter min_hole_to_hole da placa entre si; a verificação conta os pares que não mantêm e indica o primeiro. Duas vias da mesma rede no mesmo ponto são também um erro: o fabricante furaria o furo duas vezes. As aberturas de máscara são os contornos dos pads, sem expansão, e as vias são tentadas. Duas aberturas de redes diferentes (ou sem rede) que se sobrepõem ou deixam uma teia de máscara abaixo de min_mask_web são um erro, contadas por par de componentes com o primeiro ponto indicado. Os pads de um componente de passo fino são também verificados: corrija-o no footprint com pads mais estreitos, ou defina um min_mask_web menor quando o fabricante o permitir. Um footprint com mask_web = false tem a sua máscara aberta como uma janela única sobre os seus pads (abertura em grupo), pelo que pares dos seus próprios pads são saltados; os seus pads são ainda verificados em relação a outros componentes.
A arte numa camada inferior é espelhada para se ler corretamente por baixo. Preenchimentos e traços SVG são achatados para polígonos; o texto num SVG é ignorado, por isso convertê-lo primeiro em caminhos. O texto e a arte da serigrafia recebem as mesmas verificações que os rótulos de referência: sobreposição, pads, contornos da serigrafia, borda da placa.