Июл 072018
 

Кто палит группку моей лабы в ВК уже наверное видел, что у меня там последнее время сплошняком идет тема фрезеровки плат. Я покупал фрезерный станок прежде всего для того, чтобы на нем сверлить, резать и вытачивать разные корпусные изделия. Как дополнение к 3D принтеру. Гравировать на нем именно рельеф печатных плат, вместо классического травления в хлорном железе , как то даже не подразумевалось. Но ради любопытства попробовал. Получилось занятно. Хотя и довольно шумно. Для простых плат, пожалуй, этот способ даже предпочтительней травления. Т.к. в одном цикле позволяет получить и сверловку и обрезку. Да и двусторонние платы теперь делать намного проще. Т.к. совмещать верх с низом гораздо проще при фрезеровке, чем при травлении. Ну обо всем по порядку.

▌Софт
Надо как то получить план резки в формате GCODE для ЧПУ станка, а у нас есть только стандартные GERBER и Exellon Drill. Способов это сделать много. Например, в eagle есть скрипт pcb2gcode который, будучи один раз сконфигурированный, позволяет подготовить все нужные файлы в один клик. Правда у него есть довольной неприятный недостаток — он весьма криво зеркалит плату, просто переворачивая координаты. В результате двусторонки в нем делать неудобно. Ну и не все пользуются иглом, поэтому я решил описать более универсальный способ получения гкода из гербера.

Воспользуемся такой замечательной програмкой как FlatCam. Это опенсорцное, кроссплатформенная штука, написанная на питоне. Интерфейс у него, как это принято в опенсорце, кривое, тормозное и глючное УГ с невнятной юзабельностью… Но! Это все отлично компенсируется тем, что графический интерфейс этой хреновины, после окончательной настройки и подбора всех параметров, вам нужен чуть чаще чем никогда. У FlatCam есть внутренняя консоль, похожая на консоль и eagle или AutoCAD. Куда можно скармливать команды и он сам все будет строить. А внутренняя консоль приложения это лучший интерфейс который можно придумать. Почему? А потому что в него можно загонять скрипты которые будут делать все рутинные операции автоматом. За что я, собственно, так люблю автокад и игл. Но обо всем по порядку.

Запилим двустороннюю плату. Возьмем стандартный набор gerber файлов который я отправляю на печать. О том как он формируется в EagleCAD я писал в одной из своих старых статей.

У нас там будет набор из файлов, из которых нам нужны только будут файлы

top_metal.gbr — верхний слой
bottom_metal.gbr — нижний слой
Dimensions.gbr — контур платы
drill.txt — сверловка

У меня они делаются запуском JOB проекта для CAM Eagle. Вот, можете скачать его и использовать. Корректный файл препроцессора, вывод которого без проблем принимают и наши конторы и китайские.

Запускаем FlatCam. Открывается такое белое окошко. Давайте все настроим. Идем во вкладку Options. И выбираем там Applications Default:

И выставляем там подряд все настройки. Во первых миллиметры, ибо империал нам нахер не упал.

Plot Options это просто настройки отображения. На результат не влияет. Галочка Plot решает за отображение, Sold за закраску, а Multicolored за разноцветность слоев.

Isolations Routing это то самое вырезание дорожек. Давайте тут сразу зададим дефолтные значения. Диаметр инструмента. Острие у штихеля может быть 0.1 или 0.2мм. Толще тоже бывают. Но эти самые ходовые. Лучше если параметр этот превосходит реальную ширину инструмента. Т.к. больше будет допуск и шире итоговые дорожки. Но, ни в коем случае не уже реального инструмента. Если сделать слишком широкие, то некоторые трассы просто не будут проложены, это будет видно. Между ними просто не пройдет инструмент. Так что надо ловить компромис. Обычно вкатывает 0.23 почти всегда.

Width (#passes) сколько делать проходов. Обычно один или два. Для очень узких дорожек не больше одного, а если топология жирная, да еще с силовыми дорожками и высокими напряжениями, то можно и побольше, для надежности.

Pass Overlap: перекрытие проходов. Указывается в частях от ширины. Т.е. 0.15 это 15% от ширины инструмента. Достаточно, чтобы сточить широкую канавку из двух, а не получить два штриха.

Combine Passes — эта галочка сливает разные проходы в одну обработку. Если ее не поставить, то у вас два прохода дадут два файла. Иногда полезно.

Board Cutout — обрезка платы. Тут также указываешь диаметр инструмента (Tool Dia:). На этот раз уже фрезы которая будет отрезать текстолит. Margin — это отступ от края контура по которому будет резаться. Gap size это ширина крепежных язычков, которыми будет соединена плата с пластиной из которой ее будут вырезать. Ну чтобы он не улетела в никуда. Потом их выламывают просто и все. В параметре Gaps можно выбрать где будут эти язычки и сколько их будет. Варинтов тут 2(T/B) — два вверху и внизу, 2(L/R) — два слева и справа, четыре штуки. Но эта хрень вещь бесполезная. Т.к. она умеет обрабатывать только квадратные платы. А если плата другой формы, то она обрезку сделает под квадрат. Как обкорнать не квадратную плату я расскажу ниже. Там все не просто.

Non-copper regions — настройки определяющие полигоны которые надо снести. Тут только задавать смещение от изначальной геометрии (Boundary Margin), там же галочка на скругление углов (Rounded Corners). Я не заморачивался тут с ними никогда.

Exellon Options — отображение сверловок. Plot — отображение, Solid — заливка. На конечный результат не влияет. Чисто опции интерфейса.

Create CNC JOB определяют параметры сверловки. Там есть глубина сверловки Cut Z, обычно ставится как толщина платы+0.2мм. Высота на которой сверло будет перемещаться к следующей точке — Travel Z, скорость подачи в мм/мин Feed rate. Я обычно ставлю 30. Торопиться тут некуда, особенно с очень тонкими сверлами. Toolchange Z — высота смены инструмента. Обычно при сверловке приходится менять сверла, т.к. много типов разных отверстий. Вот, для удобства, можно сразу задать высоту смены инструмента. Чтобы туда станок уходил перед остановкой на замену. Spindle speed это скорость вращения шпинделя, если конечно ваш ЧПУ станок может ей рулить. Мой вот не умеет (но я работаю над этим). Mill Holes — это интересная опция, указываем ей предельный диаметр. Скажем 1мм и все отверстия больше 1мм он будет пытаться не сверлить, а фрезеровать. Тогда можно воткнуть вместо сверла фрезу диаметром 1мм и забить на остальные размеры. Он их фрезанет и все.

Geometry Options — это, как я понял, настройки фрезеровки разных полигонов. Там все как и обычно Cut Zглубина фрезеровки, я поставил -0.1мм. Travel Z — безопасная высота перемещения от места до места, обычно пару миллиметров над платой. Feed Rate — скорость подачи. Тут индивидуально все. Tool dia — диаметр инструмента или его режущей кромки.

Paint Area — этим инструментом делается выкашивание меди с больших полигонов, как бы закрашивание их гравировкой. Тут все аналогично. Ставится диаметр инструмента (Tool dia), можно взять фрезу побольше т.к. 0.2 штихелем попробуй заштрихуй все, задается перекрытие проходов (Overlap) и отступ от от исходной линии контура который будет закрашен.

Ну и последний пункт это CNC Job Options. Он хорош тем, что тут можно еще раз указать диаметр инструмента (как понял, он пойдет в справку в гкод) и задать начальный кусок гкода (prepend) , который тупо вставится в начало и конечyый кусок гкода, который будет в конце (append). Тут можно пихать что угодно. Смену инструмента, остановку-пуск шпинделя, какие то подготовительные мероприятия и что на душу положит.

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

Создаем новый проект через File — New и вгружаем в него наши гербер файлы. Через File-OpenGerber и File-Open Exellon. Грузим все файлы.

Интерфейс тут, как я уже говорил, через жопу. На вкладке Project выбираем файл, на вкладке Selected делаем из него следующий шаг, у нас в проекте появляется еще один файл и с ним работаем дальше и так далее. И все это в правой части экрана в одну кашу сливается. Хотя выбрав файл, можно отключить отображение, сняв галочку с Plot. Причем если убрать отображение вообще всех слоев, то галочка Plot не снимется. Придется ее «передернуть», чтобы вернуть отображение обратно.

Скрываем все слои, кроме того с которым будем работать. Начнем со слоя Top. Выбираем его на вкладе Project и переходим на вкладку Selected (я предупреждал, что интерфейс наркоманский!)

Если вы изначально правильно настроили все дефолтные значения, то тут уже ничего крутить не надо. Все что нужно уже подставлено. Если нет, то заполните нужные значения. Теперь видите там ниже кнопки Generate Geometry в конце каждой секции? Каждая эта кнопка генерирует свой объект. Нас интересует Isolation — она сделает раскрой дорожек, с учетом ширины фрезы и количества проходов.

Поскольку все данные внесены, то жмем Generate Geometry и получаем результат:

Тут же можно и сделать обрезку платы. Это тоже сформирует отдельный обьект под обрезку. Это в следующей секции Board Cutout. Выбираем там нужные опции (о них было сказано выше, в описании общей настройки) и жмем под секцией кнопку Generate Geometry. Правда функция эта убогая и работает только для прямоугольных плат. Хрень, короче.

А на вкладке Project появился еще один объект:

Это контур нашей фрезеровки изолирующей проводники. Выбираем его и переходим в Selected, а там уже нас ждет подготовка под фрезеровку Create CNC Job:

Данные уже все вставлены, взяты из дефолтных. Можно подправить если вдруг что захотелось. Жмем Generate и получаем еще один обьект в Project.

Это трассировка. Теперь ее надо выгрузить в GCODE. Выбираем его, переходим на вкладку Selected и жмем кнопку Export GCODE, сохраняем файл. Готово!

Теперь разберемся со сверловкой. Сверлить будем с морды.

Да, если при вставке drill.txt из Eagle у вас в FlatCam отверстия убредают черт знает куда, то дело все в том, что в Eagle кривоватый экспорт Drill который иногда обрезает незначащие нули впереди. А формат Exellon этого не любит. Для этого у флаткама есть специальная опция. Надо написать в консоли FlatCam’a

set_sys excellon_zeros T

И все, проблема кривых игловских сверловок решена. Написать достаточно один раз, и опция будет запомнена в недрах программы навсегда.

Выбираем наш Drill.txt и переходим на вкладку Selected. Тут нас поджидают диаметры отверстий. Можно выбрать все сразу и тогда они будут просверлены за один заход.

Если же поставить галочку Tool Change, то после отсверловки каждого диаметра станок будет останавливаться и показывать смену инструмента. Ну или менять его, если есть соответствующая оснастка. Там же можно указать высоту смены инструмента — Tool Change Z. Удобно когда бошка сама уходит на удобную высоту. А можно выбирать диаметры отдельно и получить несколько программ под каждый инструмент в отдельности. Когда все параметры указали, то жмем Generate и получаем еще один объект:

Выбираем его и делаем EXPORT GCODE

Получили сверловку в виде GCODE файла.

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

Итак, убираем все лишние слои с экрана и открываем только bottom. Теперь в главном меню в пункте Toolвыбираем инструмент Double Sided PCB Tool и он появляется на вкладке Tool

Выбираем там слой который мы будем зеркалить. Это наш Bottom_metal.gbr. А дальше надо выбрать:

Ось симметрии, по которой плата будет зеркалиться. А также реперные точки. В графу point box указываем координаты точки через которые должна пройти ось симметрии. Направление оси (по х или по у мы уже указали выше). Пусть будет по X. Как узнать координаты? А тут просто, кликаем мышкой примерно в середине платы. При клике у нас в буфер обмена сохраняются координаты куда мы кликнули. Их мы вставляем в поле Point Box. Через эту точку примерно пройдет ось симметрии:

Теперь надо поставить реперные отверстия. Их надо ставить слева и справа от платы по одну сторону оси симметрии:

Точно также, кликаем и копипастим их координаты в поле Aligment Hole через запятую. Только расставля их учитывайте, то, что они должны быть За зоной фрезеровки контура, отмеченной желтым цветом. Если это проебать, то у вас фреза при обрезке контура врежется в реперные штыри. Осталось только вписать диаметр реперных отверстий и нажать кнопку Create Aligment Drill и у вас появляются отличные симметричные реперные точки.

Теперь жмем кнопку Mirror Object и относительно той же оси симметрий наш слой bottom_metal.gbr зеркально развернется.

Все, теперь повторяем с ним те же операции, что и со слоем Top. Т.е. сформировать геометрию через Isolation Routing, потом по ней сделать Create CNC Job и экспортировать GCODE.

Aligment Drills экспортируем в GCODE точно также как мы это делали в с обычной сверловкой. Будут отдельным файлом.

Осталось самую малость. Сделать контур обрезки. Я уже говорил, что это можно сделать через CutOut, но он убогий и режет только прямоугольники. Даже если у вас плата в форме круга, он зафигачит вам его квадратуру. А это как бы не айс. К сожалению НОРМАЛЬНО через графический интерфейс тут ничего не сделать. Но графический интерфейс у флаткама всасывает по мощности консольному. Выполняем несколько комманд:

isolate Dimensions.gbr -dia 2 -passes 1 -outname cut

Эта команда сделает изолирующий контур вокруг фигуры Dimension.gbr, что есть контур нашей платы инструментом диаметром 2мм, нашей отрезной фрезой то есть. Сделает за один проход и сохранит в выходном объекте с именем cut.

exteriors cut -outname cutout

Эта команда возьмет наш обьект cut и на его основе сделает еще один обьект, по большей его кромке (т.к. isolate делает два контура, изолируя контур платы как изолировала бы дорожку). Результатом станет объект cutout

delete cut

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

geocutout cutout -dia 2 -gapsize 0.8 -gaps tb

Эта команда обходит по контуру и создает траекторию резки. Причем она понимает и крепежные язычки. dia это диаметр режущей фрезы в 2мм, gapsize это размер крепженых язычков, а gaps их расположение. В данном случае tb означает top & bottom. Но можно указать число, например, 4. И будет четыре язычка.

cncjob cutout -z_cut -1.6 -z_move 2 -feedrate 60 -tooldia 2 -spindlespeed 20000 -outname cutout.tap

Эта команда делает обьект фрезеровки из траектории cutout углубляюсь на глубину z_cut в 1.6мм (толщина текстолита), безопасная дистанция z_move 2 мм над платой. С подачей feedrate 60мм/сек и диаметром обрезной фрезы в 2мм. Также указана скорость шпинделя spindlespeed 20000. Выходной файл зовется cutout.tap

delete cutout

Удаляем промежуточный обьект cutout, чтобы не засорял проект.

Все, у нас есть cutout.tap из которого можно сделать экспорт GCODE как мы уже делали раньше. Только обратите внимание на то, что у нас обрезка не зеркальная. Т.е. мы сверлим репера, сверлим основные отверстия, фрезеруем Top, потом переворачиваем плату, сажаем на репера, фрезераем Bottom, снова переворачиваем и фрезеруем контур. Чтобы сделать зеркальный Dimensions.gbr можно там же, где мы делали зеркалирование Bottom, после выставления точек реперов и оси симметрии и переворота Bottom слоя выбрать слой Dimensions и не меняя других значений нажать кнопку Mirror и для него. А потом уже сделать операцию формирования обрезки командами.

Команды не обязательно вставлять по одному, можно скопипастить прям пачкой, вот так:
isolate Dimensions.gbr -dia 2 -passes 1 -outname cut
exteriors cut -outname cutout
delete cut
geocutout cutout -dia 2 -gapsize 0.8 -gaps tb
cncjob cutout -z_cut -1.6 -z_move 2 -feedrate 60 -tooldia 2 -spindlespeed 20000 -outname cutout.tap
delete cutout

Теперь вы понимаете, почему я так матюгаюсь на интерфейс этой программы. СКОЛЬКО надо делать телодвижений для создания платы. А хотелось бы быстрей. И это возможно! Видели какой там командный интерфейс! А ведь можно сделать текстовый файл, куда записать все эти команды и запустить его как параметр к FlatCam и он начнет работать по нему сам. Скажем, вот такой файл cmd.tcl

new

set_sys excellon_zeros T

open_gerber d:/Mill/eagle/FTD/FT2232_db/Dimensions_mr.gbr
open_gerber d:/Mill/eagle/FTD/FT2232_db/Bottom_metal_mr.gbr
open_excellon d:/Mill/eagle/FTD/FT2232_db/drill_mr.txt

isolate Dimensions_mr.gbr -dia 1.5 -passes 1 -outname cut
exteriors cut -outname cutout
delete cut
geocutout cutout -dia 1.5 -gapsize 0.8 -gaps tb
cncjob cutout -z_cut -1.2 -z_move 2 -feedrate 60 -tooldia 1.5 -spindlespeed 20000 -outname cutout.tap
delete cutout
write_gcode cutout.tap d:/Mill/eagle/FTD/FT2232_db/Dimensions_mr.tap

isolate Bottom_metal_mr.gbr -dia 0.23 -passes 1 -overlap 0.5 -combine 1 -outname bottom
cncjob bottom -z_cut -0.15 -z_move 2 -feedrate 100 -tooldia 0.2 -spindlespeed 20000 -outname bottom.tap
delete bottom
write_gcode bottom.tap d:/Mill/eagle/FTD/FT2232_db/Bottom_mr.tap

drillcncjob drill_mr.txt -drillz -1.6 -travelz 3 -feedrate 100 -spindlespeed 300 -toolchange True -outname drill.tap
write_gcode drill.tap d:/Mill/eagle/FTD/FT2232_db/Drill_mr.tap

Скармливаем через параметр командной строки FlatCam’у:

«c:\Program Files (x86)\FlatCAM\FlatCAM.exe» —shellfile=cmd.tcl

И у нас автоматом подгружаются нужные файлы из проекта (уже отзеркаленные заранее герберы и сверловки), тут же закидываются нужные обработки и автоматом все экспортируется в GCODE. И на выходе получаем готовые комплект планов резки-сверловки для односторонней платы. Автоматически!

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

Продвинутые юзеры могут написать скрипт на cmd или bash, сделать на плате сразу какие-нибудь хитрые отверстия, скажем с диаметром 1.2345678мм , сгрепать их по характерным диаметрам из drill файла вместе с координатами и на их основе забацать координатные заморочки с зеркалированием строк.

Благо все команды хорошо документированы и расписаны в одном месте на сайте программы

Я пока так не упарывался. Но на батничках немного поразвлекался. Поскольку двусторонки я делаю редко, а обычно справляюсь односторонками, то в первую очередь сделал себе батник для быстрой генерации фрезеровки под односторонку. Гербер файлы надо выдать в отзеркаленном виде. То же касается и сверловки. В Eagle это делается просто. В CAM процессоре задаем следующие параметры:

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

  • bottom_metal_mr.gbr — рисунок дорожек
  • Dimensions_mr.gbr — контур платы
  • Drill_mr.txt — сверловка.

_mr сигнализирует о том, что файлы отзеркалены. Настоятельно рекомендую сделать такие пометки в выводе. Чтобы ничего не перепуталось потом.

Дальше запускаем следующий батник:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
:: Умолчания @SET DIA=2 @SET GAP=0.8 @SET GAPS=tb @SET DPT=1.6 @SET FR=60 @SET GRV=0.1 @SET PAS=2 @SET GRVW=0.3 ::Имена файлов и пути @SET DIMEN=Dimensions_mr.gbr @SET ISOL=Bottom_metal_mr.gbr @SET DRI=drill_mr.txt @SET FP="c:\Program Files (x86)\FlatCAM\FlatCAM.exe" @ECHO Обрезка платы по контуру dimension_mr.gbr. Cверловка drill_mr.txt Гравировка bottom_metal_mr.gbr @ECHO. @ECHO По умолчанию: @ECHO Диаметр фрезы	= %DIA% мм @ECHO Подача фрезы	= %FR% мм/мин @ECHO Ширина язычка	= %GAP% мм @ECHO Расп. язычка	= %GAPS% @ECHO Глубина сверл.	= %DPT% мм @ECHO Глубина грав.	= %GRV% мм @ECHO Ширина штихеля = %GRVW% мм @ECHO Проходов грав.	= %PAS% @ECHO. @SET /P DIA=Введите диаметр отрезной фрезы: @SET /P FR=Введите скорость подачи обрезки контура: @SET /P GAP=Введите ширину крепежного язычка: @SET /P GAPS=Введите параметры расположения язычка (8,4,tb,lr,2tb,2lr): @SET /P DPT=Введите глубину сверления отверстий (обычно это толщина текстолита+0.2): @SET /P GRV=Введите глубину гравировки (0.05...0.2): @SET /P GRVW=Введите ширину лезвия штихеля гравера: @SET /P PAS=Введите количество проходов гравера: :: Берем текущий каталог set dp=%CD% :: Меняем в нем слеши на обратные (это надо флаткаму) set dp=%dp:\=/% :: Вбиваем программу. echo new > cmd.tcl echo set_sys excellon_zeros T >> cmd.tcl :: Грузим файлы из корня echo open_gerber %dp%/%DIMEN% >> cmd.tcl echo open_gerber %dp%/%ISOL% >> cmd.tcl echo open_excellon %dp%/%DRI% >> cmd.tcl ::Первым под обрезку идет контур. echo isolate %DIMEN% -dia %DIA% -passes 1 -outname cut >> cmd.tcl echo exteriors cut -outname cutout >> cmd.tcl echo delete cut >> cmd.tcl echo geocutout cutout -dia %DIA% -gapsize %GAP% -gaps %GAPS% >> cmd.tcl echo cncjob cutout -z_cut -%DPT% -z_move 2 -feedrate %FR% -tooldia %DIA% -spindlespeed 20000 -outname cutout.tap >> cmd.tcl echo delete cutout >> cmd.tcl echo write_gcode cutout.tap %dp%/Dimensions_mr.tap >> cmd.tcl :: Гравировка поверхности echo isolate %ISOL% -dia %GRVW% -passes %PAS% -overlap 0.5 -combine 1 -outname bottom >> cmd.tcl echo cncjob bottom -z_cut -%GRV% -z_move 2 -feedrate 100 -tooldia 0.2 -spindlespeed 20000 -outname bottom.tap >> cmd.tcl echo delete bottom >> cmd.tcl echo write_gcode bottom.tap %dp%/Bottom_mr.tap >> cmd.tcl :: Затем идет сверловка echo drillcncjob %DRI% -drillz -%DPT% -travelz 3 -feedrate 100 -spindlespeed 300 -toolchange True -outname drill.tap >> cmd.tcl echo write_gcode drill.tap %dp%/Drill_mr.tap >> cmd.tcl :: Последним шагом запускаем флаткам и скармливаем ему этот скрипт. %FP% --shellfile=%dp%/cmd.tcl

Отвечаем на вопросы в диалоговом режиме, если жать Enter, то будут подставлены умолчания. А под конец запустится флаткам и сделает все сам 🙂

Видео версию этого действа я планирую скоро таки снять. Также ждите вторую часть, там я расскажу как программно корректировать кривизну текстолита.

Понравилось? Поделитесь:

:

Sorry, the comment form is closed at this time.