Найти тему

Пишу простой конвертор Gerber файлов (печатных плат) в GCode

Оглавление

Снова проект одного вечера.
После недавней поездки сильно приболел. Просто так сидеть на больничном не интересно. Попробовал написать алгоритм для перевода
Gerber файлов (печатных плат) в GCode для 3D принтера (Klipper).

Что и зачем?

Алгоритм выполняет сбор точек (действий) из файлов files/Drill_NPTH_Through.DRL, files/Drill_PTH_Through.DRL, files/Drill_PTH_Through_Via.DRL, files/Gerber_BoardOutlineLayer.GKO, упорядочивает их для оптимизации маршрута шпинделя, генерирует код отверстий и линий.

После работы алгоритма получаем GCode для Klipper'а. До этого пользовался переводом рисунка платы сначала в pdf, после в png (при прямом экспорте качество было низким, потому приходилось через pdf), там через ArtCAM выделял контуры и выбирал тип обхода для каждого контура. Аналогично пробовал с dxf, но не сильно проще. Алгоритм же исключает использование всего того ужаса, с которым приходилось работать. Теперь все в пару простых действий.

Пока код обрабатывает только сверление (ну и ограниченно фрезеровку)! Быть может, в будущем займусь и сделаю конвертор для лазерного станка, для формирования проводников на плате.

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

Алгоритм был написан за один вечер, на больничном, в полубреду. Серьезно его воспринимать не стоит. :-)

Как использовать

1) положить в папку files файлы: Drill_NPTH_Through.DRL, Drill_PTH_Through.DRL, Drill_PTH_Through_Via.DRL, Gerber_BoardOutlineLayer.GKO, если какой-то этап не нужен, просто убрать файл, например, не вырезать плату - убрать Gerber_BoardOutlineLayer.GKO

2) отредактировать параметры в файле drill_to_gcode.py под ваш станок:

#####################################################
spindle_speed = 20000 # обороты шпинделя
d_frezy = 0.8 # диаметр фрезы
start_point = [56, 38] # начальная точка
g0_speed = 1000 # скорость свободного перемещения
g1_speed = 300 # рабочая скорость
g1_tool_speed = 60 # скорость врезания
plunge_height = 0.1 # высота слоя врезания
safe_Z = 12 # безопасная высота
Null_Z = 0.1 # конечная высота сверловки
WpTn_Z = 4.0 # высота (толщина) заготовки
dr_dopusk = 0.2 # допуск в мм для отверстий #####################################################

3) запустить drill_to_gcode.py

4) получить результат в файле out.gcode

Пример работы

Вид на плату сверху
Вид на плату сверху

Плата после загрузки, но без оптимизации маршрута:

C оптимизацией маршрута:

Фишки

Учитываем допуск
Если отверстие не сильно больше/меньше, то сверлим установленным сверлом. Слишком маленькие - не сверлим. Слишком большие - фрезеруем в нужный диаметр.
Это позволяет одним сверлом (как фрезой), обработать всю плату с оптимальным качеством/скоростью.

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

Выход из отверстия по центру
Выход из отверстия по центру

Фрезеровка линии
Отверстия, которые представляют собой линию, могут фрезероваться так же как и круглые, в необходимый размер установленной фрезой.

-6

Что дальше?

По-хорошему доработать бы до полноценной поддержки Gerber-формата. А так же добавить чтение остальных файлов для формирования хотя бы png с нужным dpi.

Ну а пока можно посмотреть видео с тестом алгоритма:

Репозиторий с алгоритмом на Github: https://github.com/AlexanderChad/gerber_to_klipper_gcode.