Copper Filler: экономим на производстве печатных плат в KiCad без нарушения изоляции

Привет, коллеги-разработчики!

Каждый, кто проектирует многослойные печатные платы в KiCad, сталкивался с необходимостью в процессе трассировки оставлять по схемотехническим или каким-то иным причинам большие по площади области свободными от медных (подключённых или не подключённых к цепям) полигонов. На внешних слоях это не представляет особых проблем. На внутренних всё немного не так. Cо стороны топологии это нормально, но с точки зрения производства — не очень.

Сегодня хотим поделиться плагином, который мы разработали для решения этой проблемы. Это инструмент для автоматического заполнения свободных зон печатной платы медными не токоведущими элементами, квадратной или круглой формы настраиваемого размера.

Зачем это нужно?

На первый взгляд, пустая область на плате — это просто текстолит без меди. Но для производителя и потребителя устройства это имеет два важных последствия:

1. Экономия на производстве (и польза для экологии)

При химическом травлении плат мы травим медь. Чем больше пустых мест, тем больше меди уходит в травильный раствор. В мелких партиях это копейки, но в крупном серийном производстве расход реагентов — существенная статья затрат. Заполняя пустоты медью, мы оставляем её на плате, а не в баке с реактивами. Производителю — приятно, экологии — полезно.

2. Равномерность толщины платы (стабильность механических и электрических параметров)

Это критично именно для многослойных плат. Представьте «сэндвич» из ядра и препрегов. Если на внутренних слоях есть огромные участки без меди, а есть участки, плотно занятые дорожками и залитые полигонами, то при прессовании давление распределяется неравномерно. Плата получается неравномерной толщины и плотности, что создаёт риски:

  • коробления готовой платы (особенно на больших форматах);

  • нарушения структуры слоя;

  • нестабильного волнового сопротивления, критичного для ВЧ-цепей.

Равномерное заполнение медными элементами делает плату механически стабильной, толщину — равномерной, а электрические параметры — предсказуемыми.

Возможности плагина

Copper Filler находит пустые области на выбранном слое и заполняет их медными круглыми или квадратными элементами, не подключёнными ни к одной цепи. Это просто «медь», которая помогает производству, но не мешает работе схемы.

Главная «фишка» — заполнение происходит не абы как, а с соблюдением технологических зазоров и минимальных размеров, заданных пользователем.

Плагин многопоточный, что уменьшает время обработки платы.

Каждый вызов плагина сопровождается вызовом логгера, возможно в будущих версиях он будет отключён, но при каждом выполнении будет напоминать о себе.

Ограничения:

В текущей версии 1.1.0beta отсутствует возможность установки индивидуальных значений зазоров вдоль трасс дифференциальных и ВЧ-линий.

Также пока отсутствует возможность индивидуальной установки зазоров между проводящими элементами (дорожки, полигоны) и медным заполнением, формируемым плагином, в зависимости от напряжения цепей!

Данные настройки становятся критичными при напряжениях на внешних слоях более 30 вольт и частотах больше нескольких мегагерц.

Алгоритм работы

1. Анализ контура платы, получение геометрии из слоя Edge.Cuts.

2. Сбор всех объектов на плате: дорожки, площадки, переходные отверстия, маски и существующие зоны.

3. Разбиение всей платы на некоторое количество секций (4–10). Количество зависит от возможностей вашей платформы.

4. Ввиду того, что плагин многопоточный, каждая секция обрабатывается параллельно. Проводятся проверки для каждого элемента.

5. Автоматическая заливка созданных зон.

Количество потоков в плагине ограничено до 10. Для выбора данного количества было проведено тестирование плагина при разном количестве потоков.

Методология тестирования:

  • процессор: Intel Xeon Gold 5317 3.00GHz (12 ядер / 24 потока) – 2 штуки (в сумме 48 потоков);

  • память: 256Gb DDR4 3.00GHz;

  • Видеокарта: NVIDIA RTX A2000 6Gb;

  • Дисковая подсистема: SAS контроллер AVAGO MR9440-8i, 2 SAS HDD 1Tb в RAID-1;

  • плата: Тестовая плата размером 76.55 x 71.05 мм;

  • параметры заполнения: круги диаметром 600 мкм, шаг 120 мкм, плотность заполнения 90%;

  • измеряемая величина: общее время выполнения плагина.

Проведённые тесты:

Плагин запускался с количеством потоков от 1 до 24. Для каждого замера фиксировалось:

  • время подготовительных операций (чтение данных);

  • время основного цикла (генерация и проверка фигур);

  • время финального заполнения зоны;

  • среднее время обработки одной фигуры.

Результаты измерений

Таблица 1. Сводные результаты тестирования

Потоки

Основной цикл, с

Подготовка, с

Заполнение, с

Общее время, с

Ускорение

Время/фигура, мсек

1

121,02

1,20

5,93

128,15

1,00

11,42

2

68,47

1,18

5,92

75,57

1,70

5,83

3

45,56

1,18

5,92

52,66

2,43

3,88

4

38,14

1,20

5,92

45,26

2,83

2,91

5

30,55

1,19

5,92

37,66

3,40

2,34

6

28,23

1,17

5,87

35,27

3,63

1,98

7

23,81

1,32

5,71

30,84

4,15

1,69

8

21,91

1,20

6,02

29,13

4,40

1,49

9

25,52

1,19

5,92

32,63

3,93

1,34

10

22,90

1,17

5,82

29,89

4,29

1,23

11

23,12

1,16

5,92

30,20

4,24

1,11

12

25,54

1,31

5,92

32,77

3,91

1,06

13

16,16

1,18

6,02

23,36

5,48

1,03

14

23,21

1,17

5,92

30,30

4,23

0,98

15

15,27

1,17

6,02

22,46

5,70

0,98

16

25,46

1,18

6,02

32,66

3,92

0,96

17

17,99

1,17

5,92

25,08

5,11

0,96

18

29,43

1,15

5,92

36,50

3,51

0,91

19

26,18

1,17

6,03

33,38

3,84

0,91

20

19,86

1,17

6,02

27,05

4,74

0,92

21

14,78

1,16

5,92

21,86

5,86

0,93

22

31,66

1,19

5,82

38,67

3,31

0,87

23

28,65

1,19

5,94

35,78

3,58

0,84

24

25,51

1,14

5,72

32,37

3,96

0,86

 

Видно, что до 8 потоков ускорение близко к линейному. После 8 потоков кривая выходит на плато — добавление новых ядер даёт незначительный прирост.

Закон Амдала: теория и практика

Доля последовательного кода S была рассчитана по формуле:

.

Теоретическое ускорение по закону Амдала:

.

Таблица 2. Сравнение с теорией

Потоки

Теория (S=0.0556)

Практика

Эффективность

1

1.00

1.00

100%

2

1.89

1.70

90%

4

3.51

2.83

81%

8

6.06

4.40

73%

12

7.78

3.91

50%

16

8.85

3.92

44%

24

9.88

3.96

40%

 

Рисунок 1 – Теоретическое и реальное ускорение
Рисунок 1 – Теоретическое и реальное ускорение

Выводы:

  • Оптимальное количество потоков: 6-12. Дальнейшее увеличение даёт менее 10% прироста скорости при утроении потребляемых ресурсов.

  • Эффективность параллелизма: до 10 потоков эффективность составляет 73-90%, что является отличным показателем для геометрических вычислений.

  • Закон Амдала в действии: даже при бесконечном числе ядер, максимальное ускорение ограничено 18x из-за последовательной части. На практике достигнуто 5.86x.

Установка

В настоящий момент плагин временно отсутствует в репозитории самого KiCad, поэтому установка производится из файла в «Менеджере плагинов и контента»:

Скачать архив с GitHub.

1. Открыть KiCad.

2. Перейти в Инструменты → Менеджер плагинов и контента.

3. Нажать кнопку «Установить из файла». Выбрать скачанный архив.

Плагин проверен на версиях KiCad с 9.0.5 по 9.0.7, а также на 10RC1, и работает на Windows (10/11), Linux (Debian 13, Kubuntu 24).

Важный нюанс: технология vs электрика (прочитайте внимательно!)

В настройках плагина вас попросят выбрать класс платы (точность изготовления, минимальные зазоры и т.д.). Тут кроется главный подвох, о котором важно помнить.

  • Класс платы (например, 3-й, 4-й, 5-й) определяет технологические возможности завода. Может ли производитель сделать зазор 0.1 мм или ему нужно минимум 0.2 мм.

  • Но класс платы не гарантирует электрическую безопасность этих зазоров!

Если ваши цепи находятся под высоким напряжением (более 30 вольт), зазор в 0.1 мм (допустимый технологически) может не удовлетворить по электрической прочности или токам утечки и т.д. Поэтому плагин работает по следующему принципу:

  1. Вы указываете технологический класс (чтобы он не генерировал элементы, которые заводу не вытравить).

  2. Вы, как проектировщик, должны заранее настроить сетевые классы (Net Classes) в KiCad, задав им правильные зазоры согласно классам изоляции (таблицы из ГОСТов или стандартов производителя).

  3. Плагин уважает эти правила и не полезет в зоны, где зазоры уже заданы электрическими правилами и прочими ограничениями, установленными в PCB редакторе.

Лицензия (важно для энтузиастов)

На данный момент проект находится в стадии пре-релиза. Код можно свободно копировать и модифицировать, но только для личного использования.

Публиковать форки или модифицированные версии пока запрещено.

Но есть хорошая новость: как только выйдет официальный релиз, проект перейдёт на свободную лицензию MIT. Тогда можно будет делать с ним всё что угодно.

Заключение

Copper Filler — надеемся, окажется полезной штукой для тех, кто доводит платы «до ума» перед отправкой на завод. Он автоматизирует рутину и помогает сделать плату не только правильнее электрически, но и, возможно, дешевле в производстве.

Пользуйтесь, и пусть ваши платы будут стабильны, а производители довольны!

Ссылка на сайт

Ссылка на репозиторий

Если у вас есть идеи или вы нашли баги — пишите в Issues (но пока без PR, как указано в лицензии).

Команда проекта: Александр aka @Sartorio, Михаил aka @mzakharov27, Татьяна aka @MeowRr

Комментарии (25)


  1. CitizenOfDreams
    05.03.2026 11:53

    А какие преимущества дает заполнение свободных областей отдельными кружочками по сравнению со сплошной заливкой?


    1. TaskForce141
      05.03.2026 11:53

      Больше интересует, будут ли какие-либо возможные преимущества перевешивать очевидные недостатки. Пока выглядит так, что просто решили потренироваться в написании плагинов.

      Меня пока смущают два момента:

      1. Конфликт лицензий. На сайте написано, дословный перевод: "Все наши плагины доступны под лицензией MIT". В репозитории лежит она же. Ограничения зачем-то указаны там же в README. Выглядит странно и непоследовательно.

      2. Заявлено отсутствие возможности "установки индивидуальных значений зазоров" и при этом наличие учета зазоров классов трасс. Как и зачем это должно работать в связке, мне пока не понятно.


      1. KiCadLab Автор
        05.03.2026 11:53

        1. Посмотрим, исправим, если что не так!


      1. KiCadLab Автор
        05.03.2026 11:53

        2. Зазоры во всех случаях, в настоящей версии, одинаковые как между элементами, так и между элементами и дорожками. На практике должно настраиваться отдельно и в релизе будет сделано.


    1. KiCadLab Автор
      05.03.2026 11:53

      Преимущества в следующем: на ВЧ бывают случаи когда сплошной полигон на подлежащем слое мягко говоря не возможен. Сплошной полигон может стать паразитной антенной, проводником помех из одной части платы к другой. Повлиять на импеданс дифпар на слое "выше". Например в Xpedition Enterprise от Мentor Graphics есть соответствующий функционал с хорошим описанием зачем и почему.


      1. timothyz
        05.03.2026 11:53

        Да-да, тащу я дифпару по препрегу 0,21 мм, и тут попадающие под неё квадратики и кружочки меняют её Zodd в несколько раз. Нафиг такую радость.


        1. KiCadLab Автор
          05.03.2026 11:53

          Можно и по 0,115 тащить дифпару. Но в тех случаях когда ваша платка размером чуть менее 400х400 имеет 24 слоя, толщину 4,6мм, 28 тысяч переходных отверстий, и 7 тысяч пассивных компонентов, а на топе 4 чипа intel gen3 с 4189 пинов каждый и не такие чудеса требуются.


          1. timothyz
            05.03.2026 11:53

            Вы прикидываетесь или не поняли смысла написанного?! Ваш замечательный узор под дифпарой сделает её импеданс слабо контролируемым. Так что ваш пример "повлиять на импеданс дифпар слоем выше" мимо кассы. Ваш узор повлияет на импеданс слабо контролируемым образом, в лучшем случае размоет фронты, в худшем — насадит резонансов. Таким образом, для тесносвязанной дифпары на тонком препреге под ней всё равно придётся резать и ваш узор, и сплошной слой.


            1. KiCadLab Автор
              05.03.2026 11:53

              Вы прикидываетесь или не поняли смысла написанного?! Ваш замечательный узор под дифпарой сделает её импеданс слабо контролируемым

              Не вижу текста в статье где утверждалось что узор следует располагать под дифпарой. В тексте единственный раз упоминается слово "дифференциальных".

              Если вас не затруднит укажите с цитатой сомнительное место.

              Повлиять на импеданс дифпар на слое "выше".

              Если вы имеете ввиду текст из комментария, то вы правы, мысль следовало изложить по иному.


      1. TaskForce141
        05.03.2026 11:53

        Самому не приходилось обращаться за услугами по изготовлению многослойных плат. Почитал подробнее, судя по всему, действительно существует много нюансов, из-за которых подобное может иметь смысл именно с точки зрения некоторых производств, как и было заявлено.

        Xpedition Enterprise умеет динамически обновлять эти паттерны, например, при перемещении трасс, правильно понимаю или нет? Там это насколько быстро происходит? И можно ли в случае необходимости безболезненно обновлять параметры заполнения? В любом случае ради интереса постараюсь попробовать, как будет свободное время, раз курс взят на разработку множества плагинов.


        1. KiCadLab Автор
          05.03.2026 11:53

          Насколько я помню, нужно обновлять, хотя и могу ошибаться. Просто в процессе трассировки данная операция всегда была предфинишной, после неё правили только шёлк.


        1. KiCadLab Автор
          05.03.2026 11:53

          Параметры заполнения обновляются без проблем в любой момент. И в Xpedition Enterprise это действительно работает быстрее. KiCAD в основном использует питон что сказывается на скорости работы.


    1. checkpoint
      05.03.2026 11:53

      Никаких. Зато это создает массу проблем с ЭМ совместимостью, трассbровкой диф пар и других высокоскоростных цепей. Используйте сплошные полигоны, всегда подключайте их к цепям питания (GND или VDD).


      1. KiCadLab Автор
        05.03.2026 11:53

        Далеко не всегда сплошные полигоны возможно подключить к какой-либо шине, что питания, что земли. Про ЭМ совместимость, при размерах элементов много меньше длины волны проблем как правило не возникает. Абсолютно никто не предполагает размещение элементов под дифпарами или микрополосковыми линиями. Плагин как раз предполагает заливку медными элементами именно тех площадей на которых по какой-то причине нельзя разместить сплошной полигон. И хочу обратить ваше внимание, что плагин пока в стадии "бета" в релизной версии будут внесены изменения. И наконец хочу обратить ваше внимание что в CAD Xpedition Enterpris есть совершенно аналогичный функционал.


    1. sim2q
      05.03.2026 11:53

      Для ЛУТ (извините) что то там с распределением заряда не так при печати сплошняком.


      1. KiCadLab Автор
        05.03.2026 11:53

        Про ЛУТ мы ничего не писали, речь о многослойных платах. И про заряды поясните с цитатой, пожалуйста!


        1. sim2q
          05.03.2026 11:53

          И про заряды поясните с цитатой, пожалуйста!

          это был ответ вот на этот комментарий: https://habr.com/ru/articles/1006920/comments/#comment_29622468 (привел его ниже)

          А какие преимущества дает заполнение свободных областей отдельными кружочками по сравнению со сплошной заливкой?

          в принципе вам не надо, но отвечу - лазерная печать, по крайней мере на тех принтерах которые обычно используются для ЛУТ "не любит" сплошных полигонов


  1. checkpoint
    05.03.2026 11:53

    Вы понимаете какую проблему Вы можете создать этими своими "кружочками" неподключенными к GND или VDD ?


    1. KiCadLab Автор
      05.03.2026 11:53

      Например?


      1. checkpoint
        05.03.2026 11:53

        Вам тут уже и без меня накидали в панамку. Но так, на всякий случай:

        1. Проблемы с ЭМ совместимость, антенный эффект, неожиданные резонансы там где их не ожидают, препятствия для возвратных токов.

        2. Проблемы с согласованием импеданса для высокоскоростных линий.

        3. Проблемы с отводом тепла.


        1. KiCadLab Автор
          05.03.2026 11:53

          1. Плагин предназначен для заполнения как раз тех поверхностей где сплошной полигон по какой-то причине недопустим. схожий функционал есть в альтиуме https://vk.com/video-41313726_171705730 примерно 5-я минута. Размеры элементов предполагаются , значительно меньшими чем длина волн используемых сигналов. Обратных токов на этих поверхностях и не предполагалось.

          2. Никто не предлагает использовать плагин под дифпарами и ВЧ линиями.

          3. Проблем с теплом как раз будет меньше.

            Ещё раз хочу обратить внимание на следующее: плагин предполагается применять на тех участках где изначально не может быть размещён сплошной полигон подключенный или не подключенный к какой либо шине. Такое иногда случает в многослойных печатных платах с использованием попарного прессования когда на паре слоёв только сигнальные линии а земляные полигоны расположены на слоях ниже и выше пары.

          Так-же прошу заметить плагин находиться в стадии разработки и в текущей beta версии отсутствуют некоторые настройки. Собственно и публикация призвана помочь нам в процессе диалога довести его до полностью юзабельного состояния.


  1. sim2q
    05.03.2026 11:53

    Заполняя пустоты медью, мы оставляем её на плате, а не в баке с реактивами. Производителю — приятно, экологии — полезно.

    Задерживается оборот меди которая бездарно (если это не экран или теплоотвод) зависнет на плате и возможно потом отправится на свалку. А так из раствора опять сразу уйдёт в производство.


    1. KiCadLab Автор
      05.03.2026 11:53

      Про оборот меди вы вероятно правы, но есть оборот химии. Приходилось принимать участие в разработке одного изделия с 24 слоями и толщиной платы 4,6мм. В т.з. прямым текстом указывалось на необходимость заполнять массивом элементов места там где невозможно размещение полигонов соединяемых с к какой-либо шиной. Обосновывалось в частности механической прочностью.


      1. sergyk2
        05.03.2026 11:53

        еще и тепло лучше распределяется


        1. KiCadLab Автор
          05.03.2026 11:53

          Тепла там было много, в том числе от двух DC\DC 0,85 вольт 300 ампер при полной вычислительной нагрузке, не считая всего остального.