Привет, Хабр. В этой статье рассмотрим процесс сборки простого 3D‑печатного ЧПУ‑плоттера.
Этот станок оснащён двумя линейными рельсами и двумя шаговыми двигателями Nema 17 для осей X и Y. Для оси Z используется мини‑сервопривод, который поднимает и опускает перо. Также предусмотрено опорное колесо с миниатюрными подшипниками для поддержки линейного рельса на оси Y.
В электронную часть входит разработанная мной печатная плата на базе Atmega: она обеспечивает управление тремя осями, тремя концевыми выключателями и сервоприводом. Все механические части собираются с использованием 3D‑печатных деталей.
Проект начнём со сборки 3D‑деталей и аппаратных компонентов шаг за шагом.
Шаг 1: 3D-детали и комплектующие



Сначала рассмотрим конструкцию этого ЧПУ‑станка. Основные компоненты: линейные рельсы MGN15H с соответствующими линейными каретками.
Перемещение по осям X и Y осуществляется с помощью двух ремней GT2 и GT2-шкивов.
Что касается оси Z, здесь используется простое возвратно‑поступательное движение: подвижный элемент скользит вверх и вниз по двум 6-мм линейным направляющим с подходящими пружинами. Движение обеспечивается небольшим хобби‑сервоприводом.
На каждой оси установлен концевой выключатель для автоматического возврата в исходное положение (homing). В статье приложены 3D‑модели. Детали, которые необходимо напечатать в двух экземплярах, помечены как «2x».
Список компонентов для сборки
(Список электронных компонентов можно найти в разделе «схемы»)
Линейный рельс MGN15H
Линейный вал 6 мм (длиной примерно 150 мм)
Пружина 8 мм
Шаговый двигатель (NEMA 17 или аналог)
Ремень GT2 (примерно 2 метра длиной, 6 мм шириной)
Зубчатый шкив GT2 (20 зубьев, 5 мм)
Пружина натяжителя для ремня
Направляющий шкив GT2 (20 зубьев, 5 мм)
Набор болтов и гаек (разной длины: 2M, 3M, 4M, 5M)
Подшипник 605-ZZ (5×14×5 мм)
Приложение
(компоненты в 3D можно посмотреть в оригинале)
1x_box_v1.stl — скачать
1x_mounting_plate_v1.stl — скачать
1x_pen_lift_slider.stl — скачать
1x_servo_pen_lift.stl — скачать
1x_y_axis_pulley.stl — скачать
1x_y_axis_support.stl — скачать
1x_y_axis_whell.stl — скачать
2x_base_side_plates.stl — скачать
2x_GT2_belt_connector.stl — скачать
2x_GT2_belt_connectorr.stl — скачать
2x‑X-axis_rail_bracket.stl — скачать
Шаг 2: Сборка оси X



Начинаем первый этап сборки станка. Закрепите две боковые пластины для оси X и два кронштейна для линейных рельсов, используя несколько болтов M3. После подготовки боковых частей вставьте линейный рельс оси X в кронштейны с обеих сторон и зафиксируйте его с помощью болтов M5.
Линейные рельсы MGN15H бывают в разных вариантах. Как следует из названия, ширина всех моделей стандартная — 15 мм, но высота рельса, ширина отверстий и расстояния между отверстиями могут различаться. В этом проекте используются следующие характеристики:
ширина рельса (W): 15 мм
толщина рельса (H): 15 мм (есть вариант 10 мм)
шаг отверстий (P): 60 мм (есть вариант 40 мм)
ширина отверстий (d): 5 мм (есть вариант 3,5 мм)
Некоторые линейные рельсы могут различаться, поэтому, если отверстия не совпадают, возможно, потребуется доработать 3D‑кронштейн сверлом в соответствии с шагом отверстий (P) или обновить 3D‑модель. Другие различия в размерах, как правило, не создают проблем.
Шаг 3: Сборка оси Y



Теперь собираем линейный рельс для оси Y. Он должен располагаться выше каретки оси X, а для соединения обеих осей используется 3D‑деталь под названием «монтажная пластина».
Сначала устанавливаем два шаговых двигателя NEMA 17. Один крепится сверху пластины, другой снизу, с помощью болтов M3. Затем с помощью двух болтов M5 и гаек фиксируем на пластине шкивы GT2. Здесь же устанавливаются два направляющих шкива для зацепления GT2-ремня оси X и шкива шагового двигателя. Желательно, чтобы зубчатый шкив двигателя и направляющие шкивы находились на одном уровне. Я использовал несколько гаек для точной регулировки высоты направляющих шкивов.
Далее размещаем линейный рельс оси Y на пластине и фиксируем его двумя болтами M5. Шаг отверстий рельса оси X совпадает с шагом рельса оси Y, но если отверстия не подходят, их можно доработать сверлом. После крепления рельса оси Y соединяем обе оси, прикрутив монтажную пластину к линейной каретке оси X четырьмя болтами M4.
Теперь, когда станок почти собран, устанавливаем шкив на свободный конец линейного рельса оси Y. Этот шкив замыкает ремень оси Y в контур. Можно использовать зубчатый или направляющий шкив, я выбрал зубчатый.
Для установки шкива замкнутого контура я зафиксировал 3D‑деталь «шкив оси Y» на рельсе с помощью болта M3. Также я добавил опорную деталь из‑за длины рельса оси Y и веса механизма подъёма пера, что позволило устранить колебания. В этой опоре предусмотрено колесо с подшипником для плавного перемещения. Колесо с подшипником закрепляется на опоре болтом M5, а сама опора фиксируется на шкиве болтом M3. Теперь каретка оси Y может свободно перемещаться по рабочему пространству.
Шаг 4: Сборка механизма подъёма пера и ремней




Перед установкой механизма подъёма пера сначала соберём ремень оси X. Ремень пропускается между зубчатым шкивом шагового двигателя и направляющими шкивами для создания натяжения. К обоим концам ремня крепятся соединители, которые фиксируются на боковых пластинах основания с помощью болта M3. При необходимости можно добавить натяжную пружину для увеличения натяжения.
Теперь переходим к сборке механизма подъёма пера. Он состоит из двух частей: одна крепится к линейной каретке оси Y, другая перемещает перо вверх и вниз.
Сначала я установил угол поворота серво‑мотора на 180 градусов и прикрепил его к неподвижной модели, используя штатные крепёжные винты. Затем закрепил подвижную модель держателя пера, вставив в неё две пружины и две направляющие стержня диаметром 6 мм.
Когда серво‑мотор находится в положении 180 градусов, перо опущено, при 150 градусах оно остаётся наверху. Пружины создают усилие, обеспечивающее опускание механизма пера.
После установки механизма подъёма пера на линейной каретке оси Y с помощью болтов M4 можно переходить к установке ремня оси Y.
Присоедините соединители к обоим концам ремня и закрепите его на механизме подъёма пера с помощью болтов M3, пропустив ремень через зубчатый шкив шагового двигателя и другой конец линейного рельса. Для регулировки натяжения ремня можно использовать продолговатые отверстия в креплениях. Также натяжение можно увеличить, добавив натяжную пружину.
На этом механическая сборка завершена. В финальном этапе я установил концевые выключатели осей X и Y, закрепив их болтами M2.
Шаг 5: Электрическая схема и подключения



В качестве управляющей электроники можно использовать плату Arduino UNO с CNC Shield, но я разработал собственную печатную плату, которая включает все компоненты. Для производства платы я использовал сервис PCBWay, который предлагает доступные по цене и качественные PCB.
На плате используется USB‑чип CH340 в SMD‑исполнении, поэтому при пайке нужно быть осторожным, чтобы избежать короткого замыкания из‑за контакта между выводами. Остальные компоненты легко паять вручную.
Примечание: схема работает в режиме 1/16 микро‑шага. Это значит, что шаговые двигатели 17HS4401 Nema 17 совершают поворот на 1,8° за один полный шаг (360° / 1,8° = 200 шагов). В режиме 1/16 микрошагов получается 3200 микро‑шагов на оборот (200 полных шагов × 16).
Печатная плата построена на базе Atmega328P и поддерживает три оси, три концевых выключателя и серво‑мотор. В проекте используются две оси с шаговыми двигателями, поэтому достаточно установить два стандартных драйвера A4988.
Ток шаговых двигателей настраивается с помощью подстроечного винта на драйвере. Во время измерений плата должна получать питание 5 В через USB.
Когда плата готова, подключаем:
шаговые двигатели осей X и Y, а также серво‑мотор,
два концевых выключателя,
блок питания 12 В, 3 А.
Теперь переходим к программному обеспечению.
Шаг 6: Установка GRBL




Сначала необходимо установить и использовать библиотеку grbl‑mi, которая предназначена для работы с серво‑моторами. Скачать её можно по ссылке:
https://github.com/DIY‑Machines/CNC‑DrawingMachine
После установки библиотеки найдите grbl‑mi в разделе примеров и загрузите код grblUpload на плату. Затем откройте серийный монитор, установите скорость передачи данных 115 200, введите команду $$ и получите список параметров GRBL.
Параметры GRBL специфичны для этой машины, но многие из них являются стандартными и снабжены краткими описаниями. Важно правильно задать значения «шагов шагового двигателя на миллиметр» и «габариты устройства».
Краткое пояснение:
Шаговый двигатель 17HS4401 Nema 17 имеет угол шага 1,8°, то есть 200 шагов на полный оборот (360° / 1,8° = 200).
В режиме 1/16 микрошагов: 200 полных шагов × 16 = 3200 микро‑шагов на оборот.
Каждый зуб ремня GT2 соответствует 2 мм перемещения.
При использовании шкива GT2 с 20 зубьями ремень перемещается на 40 мм за один полный оборот шкива.
Исходя из этого, устанавливаем параметр 80 шагов/мм, то есть для перемещения на 1 мм двигатель делает 80 шагов.
Настройки GRBL:
$0=10 (длительность импульса шага, мкс)
$1=25 (задержка выключения шагов, мс)
$2=0 (инверсия порта шагов)
$3=0 (инверсия порта направления)
$4=0 (инверсия сигнала включения шагов)
$5=0 (инверсия концевых выключателей)
$6=0 (инверсия пина датчика)
$10=2 (маска отчёта состояния)
$11=0.010 (отклонение на стыках, мм)
$12=0.002 (допуск дуг, мм)
$13=0 (вывод значений в дюймах)
$20=0 (мягкие лимиты)
$21=1 (жёсткие лимиты)
$22=1 (цикл калибровки)
$23=0 (инверсия направления калибровки)
$24=25.000 (скорость поиска нуля, мм/мин)
$25=750.000 (скорость калибровки, мм/мин)
$26=250 (задержка устранения дребезга при калибровке нулевой точки, мс)
$27=5.000 (отступ после калибровки нулевой точки, мм)
$100=80.000 (шаги/мм для X)
$101=80.000 (шаги/мм для Y)
$102=250.000 (шаги/мм для Z)
$110=4000.000 (максимальная скорость X, мм/мин)
$111=4000.000 (максимальная скорость Y, мм/мин)
$112=4000.000 (максимальная скорость Z, мм/мин)
$120=30.000 (ускорение X, мм/с²)
$121=30.000 (ускорение Y, мм/с²)
$122=30.000 (ускорение Z, мм/с²)
$130=300.000 (максимальный ход X, мм)
$131=250.000 (максимальный ход Y, мм)
$132=200.000 (максимальный ход Z, мм)
Шаг 7: Universal G-Code Sender



После загрузки кода на плату скачайте и установите программное обеспечение Universal G‑Code Sender для управления станком: https://winder.github.io/ugs_website/
Эта программа служит интерфейсом управления ЧПУ‑станком.
Откройте программу и выберите USB‑порт, к которому подключена плата.
После успешного подключения на экране консоли появятся параметры станка.
Любые изменения, внесённые в программе, автоматически обновляют эти параметры.
При первом подключении программа активирует аварийный режим и блокирует движение станка для безопасности. Чтобы разблокировать его, нажмите Unlock.
Далее откройте раздел Setup Wizard:
В разделе Motor Wiring проверьте, правильно ли вращаются шаговые двигатели. Если двигатель вращается в неправильном направлении, включите опцию Reverse Motion.
В разделе Step Calibration установите нулевую точку станка, перемещая оси.
Рекомендуется каждый раз перед запуском вручную перемещать станок в нулевую точку и нажимать «reset to zero». При ручном перемещении необходимо отключать питание двигателей.
При необходимости в этом разделе можно проверить концевые выключатели и настроить их на срабатывание в обратную сторону. В тестах концевых выключателей программное обеспечение активирует режим тревоги и остановит станок.
Теперь выполняем калибровку нулевой точки (homing) — автоматический процесс поиска исходного положения станка. Важно убедиться, что двигатели движутся в правильном направлении перед началом процесса. Если что‑то пойдёт не так, будьте готовы сразу отключить питание.
После завершения калибровки отключите питание двигателей и вручную верните станок в нулевую точку. Теперь он готов к работе. Перед каждым запуском программы убедитесь, что станок находится в нулевой точке, и нажмите «reset to zero».
Шаг 8: Создание G-Code



Чтобы использовать станок, необходимо подготовить G‑Code. Для этого воспользуемся Inkscape.
Скачайте и установите эту версию Inkscape.
Затем загрузите расширение 4-xi Draw, предназначенное для создания G‑Code. (ZIP‑архив с плагином нельзя прикрепить здесь, но его можно скачать по ссылке с PCB‑файлами).
Распакуйте ZIP‑файл и скопируйте содержимое в папку extensions Inkscape.
Теперь подготовим G‑Code:
Откройте Inkscape и перейдите в Настройки страницы, установите размер рабочей области в миллиметрах, соответствующий размерам станка.
Импортируйте изображение и разместите его на странице.
Выделите изображение, затем откройте 'Trace Bitmap', нажмите OK и удалите исходное изображение.
Перейдите в раздел Extensions, затем 4-xi Draw и выберите Create Pen.
В появившемся окне обновите углы положения серво‑мотора (верхнее и нижнее), укажите имя файла и нажмите Apply.
Через несколько секунд изображение преобразуется в G‑Code и сохранится в указанной папке.
Теперь запустите Universal G‑Code Sender:
Вручную переместите станок в нулевую точку.
Выберите порт подключения платы.
Нажмите «reset to zero».
Загрузите созданный G‑Code.
Нажмите Run — начнётся процесс рисования.
На этом проект завершён. Спасибо за внимание!
Изучить лучшие практики программирования можно на онлайн-курсах Otus под руководством преподавателей с большим опытом разработки.
В рамках курсов регулярно проходят открытые уроки. Приглашаем всех желающих на один из них: «Страх и ненависть в кодовой базе: как не стоит писать на Python». Урок пройдёт 26 февраля, записаться можно бесплатно на странице курса "Python Developer. Professional".