Генератор каплевидных NetTie-2 footprint-ов для KiCad 10 — плавный переход между контактными площадками разных диаметров с расчётом геометрии по IPC-2221 (ток → сечение, напряжение → длина перехода).
Чистый Python 3.10+, без зависимостей. Не использует ни SWIG-биндинги,
ни IPC API — генерирует .kicad_mod напрямую, поэтому не зависит от судьбы
Python-обёрток KiCad и работает без установленного KiCad вообще.
Только верхняя сторона (F.Cu). Футпринт генерируется на верхнем слое — это конвенция KiCad: посадочные места в библиотеках всегда рисуются лицом вверх. Для установки на нижнюю сторону разместите футпринт на плате и нажмите F (Flip) — KiCad сам отзеркалит все слои парами (F.Cu→B.Cu, F.Mask→B.Mask, F.CrtYd→B.CrtYd) и отразит геометрию. Отдельные «B-варианты» футпринтов не нужны.
Штатные NetTie из библиотеки KiCad — два пятачка одного диаметра с прямоугольной перемычкой. Когда нужно перейти, например, с площадки 0.65 мм на 3 мм в силовой цепи, прямоугольный мостик даёт концентрацию тока на углах стыка, а острые кромки меди на высоком напряжении — точки концентрации поля и старта частичных разрядов.
Каплевидный контур решает обе проблемы: сечение меняется монотонно, контур гладкий (G1) по всей длине, ширина «горла» гарантирована расчётом по току.
-
Сгенерировать свой переход
NetTie. Например:$ python kicad_nettie_cli.py -v 12 -i 1.0 -d1 0.65 -d2 3.0 -t smd --tented 🔥 Смузи-парабола готова для KiCad 10! ================================================== 📦 Имя файла: NetTie-2_SMD_D1-0.65_D2-3.00_L-3.80mm_Tented.kicad_mod 🔧 Тип монтажа: SMD 📏 Физическая L: 3.80 мм ⚡ Узкое горло: 0.600 мм (IPC-минимум 0.300 × 2) 🌡 Непрерывно: 1.7 А при ΔT=10°C 💥 Плавление: 6 А/1с, 60 А/10мс, 602 А/100мкс ↔️ Зазор пад-пад: 0.150 мм (IPC-2221B ×1.5) 🎭 Маска: закрыта (tented) ================================================== 💾 D:\Projects\Python\nettie_generator\NetTie-2_SMD_D1-0.65_D2-3.00_L-3.80mm_Tented.kicad_mod
-
Если диаметры падов равны, используется ключ
-d(вместо пары-d1/-d2) — контур строится симметричной «костью»:$ python kicad_nettie_cli.py -v 12 -i 1.0 -d 0.65 -t smd --tented 🔥 Смузи-парабола готова для KiCad 10! ================================================== 📦 Имя файла: NetTie-2_SMD_D1-0.65_D2-0.65_L-1.45mm_Tented.kicad_mod ...
-
Если библиотеки, в которую собираемся добавить
NetTie, ещё нет — создаём кастомную библиотеку посадочных мест, например.../KiCad/Libraries/Custom_NetTies.pretty: KiCad → Редактор посадочных мест → Файл → Создать библиотеку →Custom_NetTies.pretty. Это директория, но создавать её надо именно в редакторе посадочных мест, иначе она не зарегистрируется в таблице библиотек. Имя обязано иметь расширение.pretty:<Name>.pretty. -
Выбрать Файл → Импорт → Посад. место.
-
Найти сгенерированный файл, например
.../NetTie-2_SMD_D1-0.65_D2-3.00_L-3.80mm_Tented.kicad_mod. -
Если всё устраивает, нажать Сохранить (
Ctrl+S). -
Будет предложено выбрать библиотеку — выбираем созданную
Custom_NetTies.
Футпринт готов к использованию.
Обратите внимание: по умолчанию пады (1) и (2) открыты — это голые пятачки меди, как у штатных NetTie. Если связка стоит рядом с высоким потенциалом и паять её не планируется, для типа
smdлучше добавить ключ--tented.
| Параметр | По умолчанию | Назначение |
|---|---|---|
-v, --voltage |
— | рабочее напряжение, В → зазор край-край (длина перехода) по IPC-2221B |
-i, --current |
— | максимальный ток, А (RMS для импульсных схем) → ширина горла по IPC-2221 |
-d |
— | диаметр обоих падов, если они равны, мм (вместо -d1/-d2) |
-d1 |
— | диаметр малого пада, мм |
-d2 |
— | диаметр большого пада, мм |
-t, --type |
smd |
тип монтажа: smd / tht |
-k, --neck-safety |
2.0 |
коэффициент запаса по ширине горла |
--safety |
1.5 |
коэффициент запаса по зазору |
--min-gap |
0.15 |
минимальный зазор край-край, мм |
--gap |
— | зазор вручную, мм (перекрывает расчёт по -v) |
--neck |
— | ширина горла вручную, мм (перекрывает расчёт по -i) |
--temp-rise |
10.0 |
допустимый перегрев меди, °C |
--copper |
1.0 |
толщина меди, oz |
--drill1, --drill2 |
d/2 |
сверловка для THT, мм |
--tented |
выкл. | закрыть пады паяльной маской (без выреза) |
--no-courtyard |
выкл. | не формировать courtyard (вернёт allow_missing_courtyard); не используйте, если DRC-правила привязаны к intersectsCourtyard() |
--courtyard-margin |
0.25 |
отступ courtyard от меди, мм |
--points |
48 |
число точек на половину контура |
-o, --outdir |
. |
каталог для сохранения |
Формат имени результата:
NetTie-2_SMD_D1-0.65_D2-3.00_L-3.80mm[_Tented].kicad_mod
Горло по току (IPC-2221, внешний слой):
I = 0.048 · ΔT^0.44 · A^0.725 A — сечение в мил²
Из тока и допустимого перегрева вычисляется минимальная ширина меди,
затем умножается на запас -k (по умолчанию ×2 — компенсация недотрава,
RMS импульсных токов и термоциклирования). Расчёт одинаков для капли
и для «кости» равных падов; если горло не помещается в диаметр —
генератор честно откажется, а не нарисует перемычку тоньше требуемой.
Зазор по напряжению (IPC-2221B, колонка B2 — внешний слой без покрытия):
табличное значение × --safety. Электрически цепи через net-tie соединены,
поэтому зазор здесь задаёт не изоляцию, а длину плавного перехода:
выше напряжение → длиннее и плавнее капля.
Справочно — ток плавления (формула Ондердонка): сводка показывает ток
разрушения горла за 1 с / 10 мс / 100 мкс. Для импульсных применений
(HiPIMS и т.п.) выбирайте -i по RMS-току: одиночный импульс горло
не убивает, убивает средний нагрев.
Разные диаметры — парабола с вершиной у малого пада:
f(x) = h + a·(x + C)², h = max(neck/2, r1)
- Вершина лежит не ниже верхушки малой окружности, поэтому кривая касается её в вершине (наклоны обеих кривых нулевые) — стык G1-гладкий, «зазубрины» от пересечения окружности под углом исключены геометрически.
- Точка касания большой окружности находится бисекцией из аналитического
условия касания
f(xt) = √(r2²−xt²),f'(xt) = −xt/yt; дальше контур идёт по дуге самой окружности — излом в стыке невозможен. - Если ток требует горло шире малого пада (
neck > d1), контур замыкается полукруглой шапкой и выводится предупреждение: проверьте ширину подходящей дорожки.
Равные диаметры (-d) — симметричная «кость»: прямая перемычка шириной
neck между окружностями. По умолчанию (без --neck) горло равно
диаметру падов — контур вырождается в стадион, максимально широкую
перемычку для данной геометрии; IPC-требование по току при этом всё
равно проверяется, и если не помещается даже стадион — генератор
откажется. --neck задаёт талию уже.
Полная длина футпринта: L = d1 + d2 + gap.
kicad_nettie_cli.py CLI: argparse, оркестровка, сводка
utils/
├── args_util.py аргументы CLI, проверка, подготовка параметров
├── ipc_calc.py физика: IPC-2221, зазоры, Ондердонк
├── geometry.py математика: капля и «кость» равных падов
├── template.py рендер: подстановка полей в шаблон
└── nettie_template.kicad_tpl все поля footprint-а (текстовый шаблон)
ipc_calc и geometry — чистые функции без внутренних зависимостей,
их можно дёргать из своих скриптов или будущего IPC-плагина KiCad:
from utils import geometry, ipc_calc, template
neck = ipc_calc.ipc_neck_width_mm(current_a=1.0) * 2
poly = geometry.teardrop_polygon(r1=0.325, r2=1.5, center_dist=1.975, neck=neck)
text = template.render_footprint("MyNetTie", 0.65, 3.0, 0.15, neck,
"smd", 0.325, 1.5, poly)- все слои — верхние (
F.Cu,F.Mask,F.CrtYd,F.SilkS,F.Fab); для нижней стороны — Flip (F) на плате, см. примечание в начале; net_tie_pad_groups "1,2"— разрешение DRC на соединение разных цепей (вкладка Свойства → Подкл. к конт. пл. → Связки цепей);exclude_from_pos_files exclude_from_bom— футпринт не попадает в BOM и pos-файлы;- courtyard (
F.CrtYd, медь +--courtyard-margin) — нужен для локальных DRC-правил, см. ниже; отключается ключом--no-courtyard; - пады без
F.Paste— паста на net-tie не наносится; --tentedубираетF.Mask/*.Mask— маска закрывает пады (для THT закрывается только кольцо, ствол отверстия физически не тентуется).
Если «толстая» цепь имеет зазор netclass больше, чем расстояние от пада 1 до тела капли, дорожка не сможет подойти к паду. Решение — локальное DRC-правило (Файл → Параметры платы → Собственные правила).
Лучший вариант — привязка к принадлежности футпринту (KiCad 8+), работает и с шаблоном имени:
(rule "NetTie_local"
(condition "A.memberOfFootprint('NT*')")
(constraint clearance (min 0.15mm)))У memberOfFootprint два важных преимущества. Во-первых, у тела капли
(fp_poly) нет цепи — условия вида A.NetName == ... для него ложны
всегда, и правило молча не сработает. Во-вторых, нет тупика на входе:
правилу с intersectsCourtyard() для обеих сторон пары дорожка снаружи
courtyard не удовлетворяет, а войти внутрь ей не даёт тот самый зазор,
который правило должно ослабить.
Запасной вариант для сборок без memberOfFootprint — courtyard с условием
«хотя бы одна сторона внутри» (это и снимает тупик входа):
(rule "NetTie_All_Universal_Courtyard"
(condition "A.insideCourtyard('NT*') || B.insideCourtyard('NT*')")
(constraint clearance (min 0.15mm)))Оба варианта ослабляют зазор и для третьих цепей рядом со связкой — не прокладывайте посторонние дорожки вплотную к NetTie на высоковольтных участках.
Глобальное правило по паре имён цепей (A.NetName == ... && B.NetName == ...)
использовать не стоит: оно срабатывает везде, где эти цепи соседствуют,
и заливка «толстой» цепи подползёт к сигнальной дорожке по всей плате.
Проверить, какое правило реально применилось к паре объектов: Диагностика → Разрешение зазора — отчёт показывает весь конвейер ограничений и победителя.
- IPC-2221 рассчитан на длинную дорожку; короткое горло между двумя медными
пятаками охлаждается лучше, так что расчёт консервативен — но запас
-k 1ставьте осознанно. - Паяльная маска — не изоляционный барьер. Длину пути утечки (
creepage— кратчайшее расстояние между двумя проводниками по поверхности изолирующего материала) считайте так, будто маски нет. - Для измерительных связок (кельвин на шунте, звезда GND) капля не нужна —
используйте минимальный симметричный мостик:
-d 0.65 --neck 0.3 --gap 0.3.
MIT
