Skip to content

GrandFatherPikhto/net_tie

Repository files navigation

kicad-nettie-generator

Генератор каплевидных NetTie-2 footprint-ов для KiCad 10 — плавный переход между контактными площадками разных диаметров с расчётом геометрии по IPC-2221 (ток → сечение, напряжение → длина перехода).

Pad_1 => Pad_2

Чистый 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) по всей длине, ширина «горла» гарантирована расчётом по току.

Быстрый старт

  1. Сгенерировать свой переход 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
  2. Если диаметры падов равны, используется ключ -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
    ...
  3. Если библиотеки, в которую собираемся добавить NetTie, ещё нет — создаём кастомную библиотеку посадочных мест, например .../KiCad/Libraries/Custom_NetTies.pretty: KiCad → Редактор посадочных мест → Файл → Создать библиотеку → Custom_NetTies.pretty. Это директория, но создавать её надо именно в редакторе посадочных мест, иначе она не зарегистрируется в таблице библиотек. Имя обязано иметь расширение .pretty: <Name>.pretty.

  4. Выбрать Файл → Импорт → Посад. место.

  5. Найти сгенерированный файл, например .../NetTie-2_SMD_D1-0.65_D2-3.00_L-3.80mm_Tented.kicad_mod.

  6. Если всё устраивает, нажать Сохранить (Ctrl+S).

  7. Будет предложено выбрать библиотеку — выбираем созданную Custom_NetTies.

Футпринт готов к использованию.

Обратите внимание: по умолчанию пады (1) и (2) открыты — это голые пятачки меди, как у штатных NetTie. Если связка стоит рядом с высоким потенциалом и паять её не планируется, для типа smd лучше добавить ключ --tented.

Параметры CLI

Параметр По умолчанию Назначение
-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)

Важные атрибуты сгенерированного footprint-а

  • все слои — верхние (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

Если «толстая» цепь имеет зазор 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

About

Генератор каплевидных NetTie-2 footprint-ов для KiCad 10: плавный переход между падами разных диаметров с расчётом горла по току (IPC-2221) и длины перехода по напряжению. Чистый Python, без зависимостей и без KiCad API.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages