Мы — небольшой стартап, который занимается разработкой современной электроники. Разумеется, мы регулярно делаем тестовые партии небольшого размера, для изготовления которых заказывать полноценное производство не имеет смысла — стоимость подготовки будет самой крупной статьёй бюджета. Поэтому мы регулярно придумываем, как быстрее, дешевле и эффективнее собирать эти партии самостоятельно. Иногда в процессе рождается что-то новое или допиливается что-то старое. Результатом мы и будем с вами периодически делиться.

Один из способов снизить себестоимость изготовления печатных плат — это объединение нескольких плат на одной заготовке и отправка на фабрику этой заготовки как единого проекта. Фокус в том, что серьёзные фабрики берут деньги за подготовку производства каждой платы, а ориентированные на DIY китайцы часто предлагают (Seeedstudio, например) фиксированную цену за фиксированный размер текстолита. В первом случае единый проект, даже если он в итоге разрезается на несколько плат, будет считаться как одна плата, а во втором — можно вместить на одну стандартную заготовку несколько небольших плат.

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

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



Это — один проект. В нём 32 платы 13 разных видов. Как собрать такой проект за четверть часа — ниже.

Как ни удивительно, но попытка найти готовый и хотя бы относительно доступный софт для такой операции довольно быстро доводит человека до депрессии — после первого пяточка сайтов, предлагающих позвонить по указанному номеру телефона для получения индивидуального предложения по цене. Проблема в том, что непосредственной работой с файлами формата Gerber RS-274X обычно занимаются фабрики, а потому и стоимость всего подобного софта — традиционная для коммерческого применения, от нескольких сотен долларов за рабочее место.

Бюджетные же предложения либо умеют лишь размножать одну плату на много копий (в Eagle, например, это родная функция), но не собирать несколько файлов из разных проектов. либо — чаще — не умеют ничего. Из относительно дешёвого мне удалось найти лишь ViewMate Deluxe, стоящий хоть и не особо сильно, но всё же меньше $100 и умеющий редактировать герберы — вот только работа в нём местами уж очень сильно похожа на изощренную пытку.

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

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

GerbMerge умеет работать только с файлами формата Gerber RS-274X и Excellon, но это трудно считать недостатком — любой CAD, которым хотя бы теоретически можно пользоваться, умеет экспортировать платы в этих форматах, а любая фабрика умеет их принимать. Более того, если вы хотите максимальную гарантию результата и минимальный шанс на кривые руки фабрики — именно Gerber + Excellon, предварительно проверенные вами, и надо им отправлять.

Я не даю сейчас ссылку на сайт GerbMerge, потому как непонятно, что считать его сайтом — судя по истории правок и копирайтов, он пару раз переходил из рук в руки с паузами в год-другой, и каждый раз оказывался заброшен. В результате, когда я попробовал его запустить, то быстро обнаружил, что:

  1. Он не устанавливается
  2. Будучи установленным, он не запускается
  3. Будучи запущенным, файлы DipTrace он не переваривает
  4. Будучи заставленным, файлы в метрических единицах он не переваривает
  5. Под Cygwin он не работает вообще
  6. Есть попытки привести в порядок установщик — в правильном направлении, но незавершённые
  7. Есть попытки привести в порядок метрические единицы — в правильном направлении, но незавершённые
  8. Все ссылки на готовые установочные пакеты под Windows вообще протухли годы тому назад


Тем не менее, альтернатив и вовсе видно не было. Поэтому после недолгих раздумий команда профессиональных маркетологов, ни разу в жизни не написавшая ни строчки на Python, села и привела gerbmerge в порядок.

А вот теперь — ссылка: github.com/unwireddevices/gerbmerge

В версии 1.9.4, которая сейчас по данной ссылке и доступна, gerbmerge:

  • Успешно работает под Linux, Windows и Cygwin
  • Устанавливается под всеми системами штатными средствами без правки чего-либо руками
  • Понимает файлы, сгенерированные DipTrace
  • Работает и с дюймами, и с миллиметрами


Установка GerbMerge



GerbMerge — это скрипт на питоне, поэтому установка имеет свои особенности. Запущен он может быть на Linux и Windows (нативном и под Cygwin), теоретически также и на MacOS, но я не проверял — не на чем.

Linux.

Так как python, pip и gcc у вас почти наверняка уже установлены, остаётся поставить simpleparse — pip install simpleparse, а затем перейти к gerbmerge. Скачайте с гитхаба архив исходников, распакуйте, зайдите внутрь:

python setup.py sdist
sudo pip install dist/gerbmerge-1.9.4.tar_gz


Первая команда подготовит установочный пакет под вашу систему, вторая его установит. Можно, конечно, сразу сделать sudo python setup.py install, но тогда при желании расстаться с gerbmerge или обновить его вы будете удалять его файлы ручками.

Windows / Cygwin.

Установите Cygwin с пакетами python, python-setuptools и gcc (последний нужен для сборки simpleparse). Скачайте архив исходников gerbmerge, распакуйте, запустите Cygwin и зайдите в каталог с исходниками.

easy_install-x.y pip
pip install simpleparse
python setup.py sdist
pip install dist/gerbmerge-1.9.4.tar_gz


Первая команда (вместо x.y будет версия вашего питона, то есть, скорее всего 2.7) установит pip, остальное — так же, как в линуксе.

Windows нативный.

Скачайте инсталяшку питона под вашу систему и установите его — по умолчанию он ставится в C:\Python27\ и тащит нужный нам pip с собой. Скачайте gerbmerge, распакуйте. Запустите cmd.exe и проследуйте в папку с исходниками gerbmerge:

c:\python27\scripts\pip.exe install simpleparse
c:\python27\python.exe setyp.py sdist
c:\python27\scripts\pip.exe istall dist\gerbmerge-1.9.4.zip


Всё. Если в предыдущих случаях gerbmerge запускался, собственно, командой gerbmerge, то здесь для запуска надо позвать файл c:\Python27\gerbmerge.bat (если вы поставили Python в другую папку, то путь надо изменить соответственно).

Использование GerbMerge



Для работы gerbmerge требуется конфигурационный файл и наборы файлов с герберами исходных плат. На гитхабе в папке examples есть примеры и того, и другого — причём как для дюймовых герберов, так и для метрических.

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

[DEFAULT]
projdir = .

[Options]
ExcellonLeadingZeros = 1
PanelWidth = 400
PanelHeight = 300
XSpacing = 2
YSpacing = 2
MeasurementUnits = mm
AllowMissingLayers = 0

[MergeOutputFiles]
Prefix = %(projdir)s/merged
*TopLayer=%(prefix)s/Top.gbr
*BottomLayer=%(prefix)s/Bottom.gbr
*TopSilkscreen=%(prefix)s/TopSilk.gbr
*BottomSilkscreen=%(prefix)s/BottomSilk.gbr
*TopSoldermask=%(prefix)s/TopMask.gbr
*BottomSoldermask=%(prefix)s/BottomMask.gbr
Drills=%(prefix)s/Drills.txt
BoardOutline=%(prefix)s/BoardOutline.gbr
ToolList = %(prefix)s/Tools.drl
Placement = %(prefix)s/Placement.txt

[aa]
Prefix=%(projdir)s/aa
*TopLayer=%(prefix)s/Top.gbr
*BottomLayer=%(prefix)s/Bottom.gbr
*TopSilkscreen=%(prefix)s/TopSilk.gbr
*TopSoldermask=%(prefix)s/TopMask.gbr
*BottomSilkscreen=%(prefix)s/BottomSilk.gbr
*BottomSoldermask=%(prefix)s/BottomMask.gbr
Drills=%(prefix)s/Through.drl
BoardOutline=%(prefix)s/BoardOutline.gbr

Repeat = 10

[bb]
Prefix=%(projdir)s/bb
*TopLayer=%(prefix)s/Top.gbr
*BottomLayer=%(prefix)s/Bottom.gbr
*TopSilkscreen=%(prefix)s/TopSilk.gbr
*TopSoldermask=%(prefix)s/TopMask.gbr
*BottomSilkscreen=%(prefix)s/BottomSilk.gbr
*BottomSoldermask=%(prefix)s/BottomMask.gbr
Drills=%(prefix)s/Through.drl
BoardOutline=%(prefix)s/BoardOutline.gbr

Repeat = 6


В этом примере — две платы, лежащие в папках aa и bb, файлы в них — со стандартными именами экспорта DipTrace. Папки лежат рядом, gerbmerge запускается тут же, поэтому каталог проекта — просто «.», а пути к папкам, соответственно, «./aa» и «./bb». Первой платы надо сделать 10 штук на одной заготовке, второй — шесть. Герберы — в миллиметрах, максимальный размер панели — 400?300 мм, между платами надо сделать зазоры 2 мм, чтобы фабрика прорезала их фрезой (размеры панелей и зазоров спрашивайте у конкретной фабрики). Формат Excellon для сверлильного станка записывать с нулями в начале, при отсутствии какого-либо файла из перечисленных — ругаться. Результат надо сохранить в папку merged с указанными именами файлов.

Обратите внимание, что все файлы, кроме BoardOutline и Drills, начинаются со звёздочки — так надо. Если поставить AllowMissingLayers в единицу, файлы со звёздочками могут отсутствовать. Но звёздочка должна быть в любом случае (не сильно логично, но такие мелочи исправлять уже лень, они никому не мешают).

После создания конфига остаётся только запустить gerbmerge с ним в качестве единственного параметра:

gerbmerge layout.cfg


Или, если вы до сих пор не примкнули к миру Свободы, Равенства и Братства (как я), а также не любите Cygwin (не как я), то:

C:\Python27\gerbmerge.bat layout.cfg


При запуске gerbmerge вывешивает простыню дисклеймера и ждёт нажатия «y», если вам это надоело — добавьте параметр «-s».



Если иное не сказано в конфиге, gerbmerge работает вечно, периодически сообщая, что он не умер. Остановить его можно в любой момент, нажав Ctrl-C — он сохранит конфигурацию плат, которую на этот момент будет считать наиболее удачной, в файлы, и завершится. К сожалению, как-то отследить, насколько результат удачен, невозможно, поэтому просто давайте ему достаточно времени — от пяти минут на среднем Core i* до пятнадцати на AMD Sempron хватает для получения аккуратного размещения даже для проекта вроде описанного перед катом.

Приятная особенность gerbmerge — он автоматически отрезает то, что вылезает за края конкретной платы. Поэтому, например, если у вас стоят компоненты с торчащей наружу шелкографией (высовывающийся за края разъём, например), эта шелкография в итоговом проекте на соседнюю плату не попадёт. Обрезание отверстий и шелкографии можно отключить в опциях командной строки.

Полученные файлы стоит привычно проверить любым Gerber-просмотрщиком (я обычно пользуюсь Viewplot) — и если ничего не разъехалось, то отправлять на фабрику.

Ограничения



  • В общем случае в одну реку нельзя войти дважды: так как скрипт перебирает десятки тысяч комбинаций, то на сложных композициях у вас при каждом запуске будет получаться что-то новенькое.
    Тем не менее, если вам понравилась получившаяся раскладка, обратите внимание, что в папке с результатом есть файл Placement.txt — в нём она и записана. Этот файл не нужен фабрике, но если вы на следующем запуске gerbmerge с тем же набором плат подсунете его программе через командную строку (--place-file=), вместо поиска новой конфигурации она просто сложит платы в описанную в этом файле. Удобно для двух случаев: если вы хотите попробовать заставить gerbmerge сгенерировать пяток разных раскладок и выбрать лучшую и если вы хотите в уже готовой раскладке поменять одну из плат на другую такого же размера.
  • Скрипт не понимает микса из дюймовых и метрических файлов. Все входящие герберы должны быть в одной системе, совпадающей с указанной в конфиге. В принципе, это повод для дальнейшей доработки, но т.к. внутри gerbmerge с работой с единицами измерения сейчас та ещё каша, вряд ли я когда-либо за неё возьмусь.


Пруфпик



Тот самый проект из 32 плат 13 видов, исполненный в текстолите компанией «Микролит»:



Вопросов у фабрики не возникло, на качество нареканий нет.

F.A.Q.



Q: На черта вам вообще столько плат???
A: Вот для этого проекта.

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


  1. ansector13
    01.02.2016 09:43

    А не дешевле, сгруппировать по одинаковым размерам и существенно сэкономить на фрезеровании? Ну или хотя бы несколько типов плат с одинаковым размером сгруппировать?


    1. olartamonov
      01.02.2016 09:45
      +1

      Зависит от фабрики: делает ли она фрезеровку и берёт ли за неё дополнительные деньги.

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


      1. ansector13
        01.02.2016 10:54

        На пробной партии почти не важно, там львиную долю цены составляет подготовка производства, а вот на рабочих партиях 50+ уже есть разница между скрабированием, рубкой и фрезерованием. Да и для тиражирования удобнее получать все платы одного типа в одной упаковке/ на одном листе, чем каждый раз разламывать такую простыню на кусочки.


  1. Syzd
    01.02.2016 10:00

    Где вы заказывали? Какая стоимость 10х10 см 10 штук может выйти?


    1. olartamonov
      01.02.2016 10:08

      Да я-то практически всё заказываю в rezonit.ru, прайс-лист у них на сайте есть :) Пару тысяч рублей стоит подготовка производства, далее 230 руб/дм? на срочном производстве.

      Если речь о китайцах — популярный Seeedstudio делает 10 штук 10x10 за $22, плюс два-три доллара доставка почтой, но добавляют $10 за каждую дополнительный тип платы на панели (несколько одинаковых плат считаются за один тип). Остальные китайцы — надо индивидуально смотреть, у всех разные условия.


      1. vladimir_open-dev
        01.02.2016 12:42

        Китайцы же не фрезеруют — у них панелизация + 10$ за плату (на панели может быть до 5 плат). Выходит дороговато (дороже резонита).


        1. olartamonov
          01.02.2016 12:43

          Это от китайцев же зависит, а их как грязи за баней. Самые известные сервисы — да, за любой шаг в сторону плюс десятка.


        1. kmaximv
          02.02.2016 09:19

          Здесь посмотрите dirtypcbs.com. Заказывал у них 10х10 10шт. за $25, размещал на ней 4 платки с фрезерованием


      1. Syzd
        02.02.2016 07:08

        тогда непонятен смысл, в Китае заказывал за $28 по курсу $ 50 руб. = 10 плат 10х10 в районе 1400 рублей, это еще за цвет доплатил.


        1. BigBeaver
          02.02.2016 11:39

          Смысл в надежности сроков и качества. Заказываю иногда сомнительный (с технологической точки зрения) дизайны плат, и если у них возникают вопросы, технолог звонит и уточняет, чего именно я хочу этим добиться. В итоге платы на руках всегда 100% соответствуют ожиданиям, даже если разведены «не по правилам» и тд.

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


  1. mcarr0w
    01.02.2016 10:38

    немного не в тему печатных плат: а почему в проекте управление силовой нагрузкой есть, а блока питания от 230В нет?


    1. olartamonov
      01.02.2016 10:39

      По соображениям безопасности, чтобы палец никто не сунул — блоки питания 230 В только внешние, в корпусах, стандартных типов.


      1. mcarr0w
        01.02.2016 11:32

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


        1. olartamonov
          01.02.2016 11:33

          Обрести можно будет, просто БП будет обычный Meanwell в розетку, а не открытый модуль того же формата, что и остальные.


          1. mcarr0w
            01.02.2016 14:47

            я подумывал об упаковке комплекта модулей в углубленный (удлиненный) подрозетник за выключатели и розетки


            1. olartamonov
              01.02.2016 15:04

              Для этого будет версия модулей специально для «умного дома», там будет интеграция с БП, конечно. Ну и вообще они будут компактнее, монолитнее и специализированнее.


              1. mcarr0w
                01.02.2016 17:01

                ой, нам бы поскорее, подешевле и понадежнее


                1. olartamonov
                  01.02.2016 19:12

                  Выбирайте любые два пункта!


                  1. holomen
                    01.02.2016 19:26

                    Можно выполнить все три если запустить на кухне полный цикл производства ПП.


  1. fizikdaos
    01.02.2016 11:08

    Вообще-то Eagle позволяет легко объединить платы в панели, без всех вот этих мучений с герберами.
    Делается это конечно вручную, зато расположить можно так как удобней. И еще можно обеспечить большую жесткость панели, вручную нарисовав перемычки между платами, что необходимо для автоматического монтажа.


    1. olartamonov
      01.02.2016 11:12
      +2

      а) не все пользуются Eagle
      б) не все хотят делать эту работу вручную
      в) пробные партии далеко не всегда монтируются автоматически, серийные партии далеко не всегда удобно объединять на общую панель


      1. BigBeaver
        01.02.2016 12:47

        с) freeware лицензия дает всего 2 листа


        1. olartamonov
          01.02.2016 12:49

          Ну это уже скорее пояснение к «a» :) Потому как далее смотрим на цены и берём DipTrace.

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


  1. Halt
    01.02.2016 12:25

    У вас в описании UMDK-GATE подозрительно похож на Black Swift. Это правда оно? А можно будет у вас заказать саму плату? Потому что первоначальные разработчики работают с оперативностью госструктур.


    1. olartamonov
      01.02.2016 12:29

      Правда. Можно. Первоначальные разработчики работают у нас, а если вы имеете в виду black-swift.ru, то там, кажется, уже никто не работает.


      1. Halt
        01.02.2016 12:37

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

        А как можно сделать заказ? На сайте есть только описание продуктов но ни слова о покупке.


        1. olartamonov
          01.02.2016 12:47

          Из команды там остался ровно один человек — основатель проекта. Все остальные ушли. В форуме он под ником admin, последний раз там был в октябре. Текущее шевеление — это какие-то инициативные группы, которым перепало плат под обещание таки наконец их разослать.

          Мы интернет-магазин не открываем, потому как и плат не так уж много, и, главное, времени на это сейчас совершенно нет. А вообще: Basic — 1500 руб., PRO — 2200 руб., адаптер 2,54 мм — 300 руб. Для себя можно купить у нас в офисе или с доставкой курьером (служба СДЭК, 300-500 рублей в среднем), на организацию — присылайте реквизиты мне на oleg@unwds.com, выставлю счёт.


          1. mkvmaks
            01.02.2016 19:10

            Это не ваш магазин unwds.com/ru/about-us


            1. olartamonov
              01.02.2016 19:10

              Это адрес офиса. Магазина в офисе нет.


  1. R4ABI
    01.02.2016 16:08

    При такой подготовке вам удалось исключить те самые напряжные 2000-2200 руб, которые резонит берет за подготовку производства? Или эта сумма просто уменьшилась?


    1. BigBeaver
      01.02.2016 19:00

      Это разовая сумма при первом заказе.
      Если плату каждого вида оформлть в отдельный заказ, то за 13 видов плат это будет 13*2000 + плата за площадь. Сборка всех плат в одну панель расценивается заводом как одна большая сложная плата, в итоге получается 1*2000 + плата за площадь. Для прототипов и штучных деевайсов это крайней удобно, в серии выгоднее потом разбить это на части, тк разных плат можеет потребоваться разное не кратное количество.

      Кроме того, есть нюанс, что платы с нестандартными параметрами (допустим, 70мкм фольга) могут иметь нижнюю планку заказа, равную 1 технологической единице. По-моему, это около 7-8 дециметров


      1. R4ABI
        01.02.2016 19:11

        Тогда не вижу смысла если честно. Не знаю как китайцы, но товарищи из Резонита сами бесплатно объединяют платы в один комплект. Просто выводу герберы и сверловку для каждой платы, а они уже сами максимально компактно формируют на одну заготовку. Оплачиваю стандартную сумму в 2000 (плюс-минус, точную цифру не помню).

        Я уже обрадовался, что есть какая-то хитрость как избавиться вообще от платы за подготовку к производству при первом заказе))


        1. olartamonov
          01.02.2016 19:16

          300 рублей за одно объединение.

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


    1. holomen
      01.02.2016 19:10

      Эта сумма уменьшилась в расчете на одну плату. Т.е. или 2200*13(видов) или просто 2200. Или 2200/13 в расчете на одну плату стоит стоимость подготовки.


  1. softmart
    01.02.2016 19:12

    Не думали уменьшить габариты модулей? Уж очень места много свободного. Или сделать несколько форм-факторов плат модулей.


    1. olartamonov
      01.02.2016 19:14

      А зачем? Это конструктор для проектирования и отладки системы, минимальные габариты платы de facto определяются разъёмами для их сопряжения (2x12-pin 2,45 мм). Несколько несовместимых форм-факторов ему только мешать будут.


      1. softmart
        01.02.2016 19:21

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


        1. olartamonov
          01.02.2016 19:22

          Для готового модули не имеют большого смысла, ибо тащат с собой много ненужного и неоптимального.

          Так что готовые — на базе радиомодуля и кастомной платы.


          1. softmart
            01.02.2016 19:24

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


            1. olartamonov
              01.02.2016 19:29

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


  1. softmart
    01.02.2016 19:33

    У симисторного диммера не видно снаберных цепей. Не будет включаться от любой помехи?


    1. olartamonov
      01.02.2016 19:35

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