Медная заплатка: экономия на производстве печатных плат в KiCad

WILD

Administrator
Staff member
ADMIN
SELLER
SUPREME
MEMBER
Joined
Jan 21, 2025
Messages
219
Reaction score
641
Deposit
0$
Hello, fellow developers!

Anyone who designs multilayer printed circuit boards in KiCad has faced the need, during routing, to leave large areas free of copper polygons (whether connected to nets or not) for schematic or other reasons. On outer layers, this isn't a big problem. On inner layers, it's a bit different. While it might be fine from a topology perspective, it's not ideal from a manufacturing point of view.

Today, we want to share a plugin we developed to solve this problem. It's a tool for automatically filling free areas on a PCB with non-current-carrying copper elements, either square or round, of a configurable size.

Why is this needed?​

At first glance, an empty area on a board is just bare laminate without copper. But for the manufacturer and the end-user of the device, this has two important consequences:

1. Cost Savings in Manufacturing (and Benefits for the Environment)​

During chemical etching, we remove copper. The more empty spaces there are, the more copper ends up in the etching solution. For small batches, this is negligible, but in large-scale series production, the consumption of chemicals is a significant cost factor. By filling voids with copper, we leave it on the board instead of it ending up in the tank with reagents. The manufacturer benefits, and it's good for the environment.

2. Uniformity of Board Thickness (Stability of Mechanical and Electrical Parameters)​

This is critical specifically for multilayer boards. Imagine a "sandwich" of cores and prepreg. If there are huge areas without copper on inner layers, alongside areas densely packed with traces and copper pours, pressure during lamination is distributed unevenly. This results in a board with non-uniform thickness and density, creating risks:

  • Warpage of the finished board (especially on large formats).
  • Distortion of the layer structure.
  • Unstable characteristic impedance, critical for RF circuits.
Uniform filling with copper elements makes the board mechanically stable, thickness uniform, and electrical parameters predictable.

Plugin Features​

Copper Filler finds empty areas on a selected layer and fills them with copper circles or squares that are not connected to any net. It's simply "copper" that aids manufacturing but doesn't interfere with circuit operation.

The main "trick" is that the filling isn't done randomly; it respects the technological clearances and minimum sizes specified by the user.

The plugin is multi-threaded, which reduces board processing time.

Each plugin call is accompanied by a logger call. It might be disabled in future versions, but it will remind you of itself with each execution.

Limitations:

The current version 1.1.0beta lacks the ability to set individual clearance values along differential pair and RF traces.

Also, there is currently no way to individually set clearances between conductive elements (traces, pours) and the copper fill generated by the plugin based on net voltages!

Эти параметры становятся критически важными, когда напряжение на внешних слоях превышает 30 вольт, а частота — несколько мегагерц.

Алгоритм​

  1. Проанализируйте контур доски, получите геометрию из слоя Edge.Cuts.
  2. Соберите все объекты на плате: дорожки, контактные площадки, переходные отверстия, маски и существующие зоны.
  3. Разделите всю доску на определенное количество секций (4-10). Количество зависит от возможностей вашей платформы.
  4. Поскольку плагин многопоточный, каждый раздел обрабатывается параллельно. Проверки выполняются для каждого элемента.
  5. Автоматическое заполнение созданных зон.
Количество потоков в плагине ограничено 10. Это число было выбрано после тестирования плагина с различным количеством потоков.

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

  • Процессор: Intel Xeon Gold 5317 3,00 ГГц (12 ядер / 24 потока) – 2 шт. (всего 48 потоков)
  • Память: 256 ГБ DDR4 3,00 ГГц
  • Видеокарта: NVIDIA RTX A2000 6 ГБ
  • Хранение данных: контроллер SAS AVAGO MR9440-8i, 2 жестких диска SAS по 1 ТБ в режиме 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 рассчитывалась по формуле:

cc7d01a3e3ce967e5ebf73a5e9e61e39.png

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

6ec122041a10c841cf26e3129a5aea51.png

Таблица 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%, что является отличным результатом для геометрических вычислений.
  • Закон Амдала в действии: даже при бесконечном количестве ядер максимальное ускорение ограничено 18-кратным увеличением из-за последовательного выполнения. На практике было достигнуто 5,86-кратное ускорение.

Установка​

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

Загрузите архив из репозитория GitHub.

  1. Откройте KiCad.
  2. Перейдите в меню Инструменты → Менеджер плагинов и контента.
  3. Нажмите кнопку «Установить из файла». Выберите загруженный архив.
Плагин был протестирован на версиях KiCad от 8.0.5 до 8.0.7, а также на версии 9.0.0, и работает на Windows (10/11) и Linux (Debian 13, Kubuntu 24).

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

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

  • Класс платы (например, 3-й, 4-й, 5-й) определяет технологические возможности производства. Он определяет, может ли производитель обеспечить зазор в 0,1 мм или ему требуется минимум 0,2 мм.
  • Однако класс платы не гарантирует электробезопасность этих зазоров!
Если ваши цепи находятся под высоким напряжением (более 30 вольт), зазор в 0,1 мм (технологически приемлемый) может не удовлетворять требованиям к электрической прочности или току утечки. Поэтому плагин работает по следующему принципу:

  1. Вы указываете технологический класс (чтобы не создавались элементы, которые фабрика не может вытравить).
  2. Вы, как проектировщик, должны предварительно настроить классы сетей в KiCad, назначив им соответствующие зазоры в соответствии с классами изоляции (таблицы из ГОСТов или технические условия производителя).
  3. Плагин соблюдает эти правила и не будет вторгаться в области, где зазоры уже определены электрическими правилами и другими ограничениями, установленными в редакторе печатных плат.

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

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

В настоящее время публикация форков или модифицированных версий запрещена.

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

Заключение​

Мы надеемся, что медный наполнитель окажется полезным для тех, кто занимается доводкой печатных плат перед отправкой их в производство. Он автоматизирует рутинные задачи и помогает сделать плату не только более правильной с электрической точки зрения, но и потенциально более дешевой в производстве.
 
Top Bottom