Содержание
После подключения контроллера к программе Universal G-Code Sender необходимо ввести в командной строке «$$» и нажать «Enter», контроллер выведет перечень системных настроек. (Пример для версии GRBL v1.1g, в зависимости от версии прошивки и программы управления могут быть отличия).
Попробуем разобраться, что это все значит и как это менять.
$0 = 10 (Step pulse time, microseconds) Длительность импульса шага, микросекунды
Драйверы шаговых двигателей имеют ограничение на минимальную длительность шагового импульса. Уточнить необходимое значение можно в документации на драйвер или перебором различных вариантов. Необходимо подобрать максимально короткий импульс, которые драйвер способен надежно распознавать. Если импульсы будут слишком длинные, вы можете столкнуться с проблемами при высоких скоростях подачи и большой частоте, возникающими из-за того, что идущие подряд импульсы начнут перекрывать друг друга.
$1 = 25 (Step idle delay, milliseconds) Задержка отключения двигателей, миллисекунды
В зависимости от системы, вы можете установить значение этого параметра в ноль и отключить задержку. В других случаях может потребоваться использовать значение 25-50 миллисекунд, чтобы оси успели полностью остановиться перед отключением двигателей. Отключение необходимо для тех двигателей, которые не следует держать включенными в течении длительного периода времени на холостом ходу из-за нагрева. Так же стоит помнить, что в процессе отключения некоторые драйверы шаговых двигателей не запоминают на каком микрошаге они остановились, из-за этого случается ‘пропуск шагов’ при отключении/включении двигателей. В этом случае рекомендуется держать двигатели всегда включенными.
$2 = 0 (Step pulse invert, mask) Инверсия шагового импульса, маска
Этот параметр управляет инверсией сигнала шаговых импульсов. По-умолчанию считается, что сигнал шагового импульса начинается в нормально-низком состоянии и переключается в высокое на период шага. По истечении времени, заданного параметром $0, вывод переключается обратно в низкое состояние, вплоть до следующего шага В режиме инверсии, шаговый импульс переключается из нормально-высокого в низкое на период импульса, а потом возвращается обратно в высокое состояние. Большинству пользователей не требуется менять значение этого параметра, но это может оказаться полезным, если конкретные драйверы шагового двигателя этого требуют. Например, инверсией вывода шагового импульса может быть обеспечена искусственная задержка между изменением состояния вывода направления и шаговым импульсом.
Этот параметр хранит настройки инверсии осей в виде битовой маски. Для изменения параметра необходимо ввести значение соответствующее тем осям, которые нужно инвертировать. Например, чтобы инвертировать оси Y и Z, отправьте $2=6 в Grbl.
Значение | Маска | Ось Х | Ось Y | Ось Z |
00000000 | — | — | — | |
1 | 00000001 | + | — | — |
2 | 00000010 | — | + | — |
3 | 00000011 | + | + | — |
4 | 00000100 | — | — | + |
5 | 00000101 | + | — | + |
6 | 00000110 | — | + | + |
7 | 00000111 | + | + | + |
$3 = 0 (Step direction invert, mask) Инверсия направления шага, маска
$4 = 0 (Invert step enable pin, boolean) Инверсия сигнала включения шаговых двигателей, логический
Высокий уровень сигнала включения шаговых двигателей соответствует выключению, а низкий — включению. Если ваша сборка требует обратного, просто инвертируйте сигнал, введя $4=1. Отключается с помощью $4=0.
$5 = 0 (Invert limit pins, boolean) Инверсия входов концевых выключателей, логический
$6 = 0 (Invert probe pin, boolean) Инверсия входа щупа, логический
$10 = 1 (Status report options, mask) Вывод статуса, маска
Тип отчета | Значение | Обозначение |
тип координат | Включен MPos; выключен WPos | |
тип координат | 1 | Включен MPos; выключен WPos |
буфер данных | 2 | Включен Buf: поле выводит количество свободного места в буферах планировщика и приемника последовательного порта. |
$11 = 0.010 (Junction deviation, millimeters) Отклонение на стыках, мм
Заданная величина отклонения на стыках, используется модулем управления ускорением для определения скорости перемещения через стыки отрезков запрограммированного в G-коде пути. Например, если путь в G-коде содержит острый выступ с углом в 10 градусов, и станок двигается к нему на максимальной скорости, данный параметр поможет определить насколько нужно притормозить, чтобы выполнить поворот без потери шагов. Вычисление выполняются довольно сложным образом, но в целом, более высокие значение дают более высокую скорость прохождения углов, повышая риск потерять шаги и сбить позиционирование. Меньшие значение делают модуль управления более аккуратным и приводят к более аккуратной и медленной обработке углов. Так что, если вдруг столкнетесь с проблемой слишком быстрой обработкой углов, уменьшите значение параметра, чтобы заставить станок притормаживать перед прохождением углов. Если хотите, чтобы станок быстрее проходил через стыки, необходимо увеличить значение этого параметра. Любопытные могут пройти по ссылке и прочитать про алгоритм обработки углов в Grbl, который учитывает и скорость, и величину угла на стыке, простым, эффективным и надежным методом.
$12 = 0.002 (Arc tolerance, millimeters) Отклонение от дуги, мм
Прошивка Grbl обрабатывает круги, дуги и спирали G2/G3, разбивая их на множество крошечных отрезкой таким образом, чтобы погрешность отклонения от дуги не превышала значения данного параметра. Скорее всего вам никогда не придется менять этот параметр, поскольку значение 0.002мм находится ниже разрешающей способности большинства станков с ЧПУ. Однако, если вы обнаружили, что ваши окружности слишком угловатые или прохождение по дуге выполняется слишком уж медленно, откорректируйте значение этого параметра. Меньшие значение дают лучшую точность, но могут снизить производительность из-за перегрузки Grbl огромным количеством мелких линий. И наоборот, более высокие значения приводят к меньше точности обработки, но могут повысить скорость, поскольку Grbl придется иметь дело в меньшим количеством линий. $13 = 0 (Report in inches, boolean) Отчет в дюймах, логический
Прошивка Grbl в реальном времени выводит координаты текущей позиции, чтобы пользователь всегда имел представление, где в данный момент находится станок, а также параметры смещения начала координат и данные измерения щупа. По-умолчанию вывод идет в мм, но командой $13=1 можно изменить значение параметра и переключить вывод на дюймы, $13=0 возвращает вывод в мм.
$20 = 0 (Soft limits enable, boolean) Мягкие границы, логический
$21 = 0 (Hard limits enable, boolean) Жесткие границы, логический
$22 = 0 (Homing cycle enable, boolean) Поиск начальной позиции, логический
Для тех, кто только знакомится с миром ЧПУ: процедура поиска начальной позиции используется для аккуратного и точного поиска заранее известной точки станка каждый раз после включения Grbl между сеансами работы. Другими словами, вы всегда, в любой момент времени точно знаете где находитесь. Собирались ли вы только начать работу или перешли к следующей операции, а в это время отключилось электричество, в любом случае Grbl перезапустится и не будет знать свое текущее местоположение. Вам остается только выяснять, а где же вы все-таки сейчас находитесь. При наличии начальной позиции, у вас всегда есть эталонная точка отсчета, так что все, что в этом случае требуется, это запустить процедуру поиска начальной точки и продолжить работу с того места, где остановились. Для настройки процедуры поиска начальной позиции вам потребуется наличие надежно закрепленных концевых выключателей в некоторой точке, на которые нельзя наткнуться или сдвинуть, в противном случае точка отсчета может быть сбита. Обычно они устанавливаются в самых дальних точках в направлении +x, +y, +z на каждой из осей. Соедините концевые выключатели с соответствующими выводами и землей, так же как и концевые выключатели аппаратных границ и задействуйте поиск начальной позиции. Если интересно, то вы можете использовать граничные выключатели и для аппаратных границ, и для поиска начальной позиции, они прекрасно работают вместе. По-умолчанию, процедура поиска начальной позиции Grbl сначала выполняет перемещение по оси Z в положительном направлении, чтобы освободить рабочую область, а затем выполняет одновременное перемещение по осям X и Y в положительном направлении. Для настройки точного поведения процедуры поиска начальной позиции имеются несколько параметров настройки, описанных ниже (и параметры компиляции тоже.) ПРИМЕЧАНИЕ: В файле config.h находятся множество других настроек, ориентированных на продвинутых пользователей. Вы можете отключить блокировку при старте, указать с каких осей начать процедуру поиска, в каком порядке по ним перемещаться, а также многое другое.
$23 = 0 (Homing direction invert, mask) Инверсия направления начальной точки, маска
По-умолчанию, Grbl предполагает, что концевые выключатели начальной точки находятся в положительном направлении, он выполняет сначала перемещение в положительном направлении по оси Z, затем в положительном направлении по осям X-Y, перед тем как точно определить начальную точку медленно перемещаясь назад и вперед около концевого выключателя. Если у вашего станка концевые выключатели находятся в отрицательном направлении, инверсия направлений начальной точки изменяет направление осей. Она работает точно так же, как и инверсия порта шаговых импульсов или инверсии порта направления, все что вам нужно это указать значение из таблицы, указывающее какие оси нужно инвертировать для поиска в противоположном направлении.
$24 = 25.000 (Homing locate feed rate, mm/min) Скорость подачи при поиске начальной точки, мм/мин
Процедура поиска начальной точки сначала ищет концевые выключатели с повышенной скоростью, а после того как их обнаружит, двигается в начальную точку с пониженной скоростью для точного определения ее положения. Скорость подачи при поиске начальной точки — это та самая пониженная скорость. Установите ее в некоторое значение, обеспечивающее повторяемое и точное определение местоположения начальной точки.
$25 = 500.000 (Homing search seek rate, mm/min) Скорость поиска начальной точки, мм/мин
Скорость поиска начальной точки — это начальная скорость с которой контроллер пытается найти концевые выключатели начальной точки. Откорректируйте на любое значение, позволяющее переместиться к начальной точке за достаточно малое время без столкновения с концевыми выключателями из-за слишком быстрого к ним перемещения.
$26 = 250 (Homing switch debounce delay, milliseconds) Подавление дребезга при поиске начальной точки, миллисекунд
Когда срабатывают выключатели, некоторые из них в течении нескольких миллисекунд могут издавать электрический/механический шум приводящий к быстрому переключению сигнала между высоким и низким значениями, прежде чем значение зафиксируется. Для решения данной проблемы нужно подавить дребезг сигнала либо аппаратно, за счет какой-нибудь фильтрации, либо программно, сделав небольшую задержку на время дребезга. Grbl будет делать короткую задержку, но только при поиске начальной точки на этапе ее точного определения. Установите значение задержки, достаточное, чтобы ваши выключатели обеспечивали устойчивый поиск начальной точки. Для большинства случаев подойдут значения 5-25 миллисекунд.
$27 = 1.000 (Homing switch pull-off distance, millimeters) Отъезд от начальной точки, мм
При объединение датчиков жестких границ станка и концевых выключателей для поиска начальной точки, процедура поиска после завершения определения положения начальной точки выполняет перемещение от концевых выключателей на указанное расстояние. Другими словами, это предотвращает непреднамеренное срабатывание жестких границ по окончании процедуры поиска.
$31 = 0 (Minimum spindle speed, RPM) Минимальные обороты шпинделя, Об/мин
Задает обороты шпинделя, соответствующие минимальному напряжению на выходе ШИМ, равному 0.02V (0В означает отключение). Меньшие значение оборотов будут приняты Grbl, но напряжение на выходе ШИМ не будет меньше 0.02V, за исключением случая равенства нулю.
$32 = 0 (Laser-mode enable, boolean) Режим лазера, логический
Для внесения изменений в какой либо параметр прошивки необходимо в командной строке ввести
$x=val
где$x – параметр для изменения, $0, $1 и т.д.Val – значение параметра, на которое необходимо изменить текущее значение
после этого нажать Enter. В результате этого новое значение будет сохранено в памяти контроллера.
1. Конструкция
Конструкция, которую я выбрала, изготавливалась из фанеры. В качестве осей использовались шпильки, которые крутились шаговыми двигателями, и за счет этого платформа на гайках двигалась по оси. Одна ось крепилась на платформу другой одним краем. Из изготовления всего этого могу сказать:
- Если верхняя ось не имеет опоры с двух сторон, а крепится, как у меня, только одним краем, то необходимо заранее продумать баланс осей. Верхняя неизбежно будет крениться, если вообще не заваливать всю конструкцию весом своего «висящего» края.
- Линии рисунка могут идти волнами по размеру резьбы шпильки, а также из-за дрожания самой конструкции во время работы.
- Две вышеперечисленные проблемы приводят еще к одной: перо (в моем случае ручка) может писать неравномерно в разных частях страницы.
- Вес и размеры устройства тоже стоит рассчитать заранее, чтобы потом не выяснилось, что ваши двигатели не тянут такую нагрузку.
- И еще одна важная деталь: лучше всего везде где возможно использовать для крепления шурупы, гвозди и т.д. Конструкции на клее, пусть даже самом надежном, имеют свойство разваливаться в самый неожиданный момент. И в некоторых случаях после сборки основной части будет весьма сложно возвращаться к «переклеиванию» мелких, но очень важных, внутренних деталей, не разбирая готовые части.
2. Схема электрическая
Сама схема была предельно проста и не требовала даже пайки. Я даже взяла готовый CNC Shield специально для работы с ЧПУ. Тем не менее и тут есть свои нюансы:- Мой китайский аналог Arduino под кодовым именем WAVGAT на отрез отказался прошиваться как обычная Arduino Uno R3. В интернете утверждали, что подобные платы полностью совместимы со всем ПО arduino, но для работы с ним через IDE пришлось скачивать отдельную библиотеку WAVGAT Update. Так мне удалось залить скетч на плату, но само ПО по прежнему не хотело корректно работать. Я испробовала все найденные варианты исправления такого рода проблем (перегружала бутлодер платы, изменяла файлы boards и константы самой библиотеки с ПО), но итог остался тем же. Видимо, именно для этой задачи придется обзавестись классической Arduino.
- Еще одной проблемой стал запуск шаговых двигателей. Они жужжали, грелись, несмотря на холодные драйвера, но не двигались. Методично проверяя цепочку поэлементно поняла, что проблема в их подключении. Дело в том, что и в этот раз китайцы соригинальничали. Оказалось, что выводы двигателя содержат перекрещенные пары А-В. Если у обычного магазинного двигателя пары шли по порядку 2В-2А-1А-1В, то у китайцев почему-то оказались 2В-1А-2А-1В. Выяснить это можно «пропикиванием» схемы мультиметром в соответствующем режиме: пищат парные А-В выходы.
- И еще, как оказалось, безобидный маломощный сервопривод вполне способен безвозвратно «подпалить» всю плату arduino при длительной чрезмерной нагрузке на него. При этом плата продолжит работу, но будет иногда прерываться на середине, останавливаясь на командах сервопривода.
3. ПО
Тут есть варианты:
- Проще всего взять замечательную простенькую программу BenВox. Она специализирована именно под работы с ЧПУ и проста в установке и обращении. Минус этого варианта в его ограниченности. Во-первых прошивка для платы в комплекте ПО содержится уже в hex-файле, потому возникают проблем с ее редактированием. Да и функционал в общем не особо обширен, похож на простейший графический редактор. Если не хотите вдаваться в подробности работы всего этого механизма, то можно поработать с этим вариантом.
- Немного сложнее, но и перспективней работа через GRBL-прошивку. Эту библиотечку можно без проблем взять в интернете и она дает значительно больше возможностей, чем BenBox. Но для работы через этот механизм надо разобраться с начальной настройкой всего этого.
- Итак, скачиваем и распаковываем grbl-servo библиотеку. Теперь ее можно залить на плату через IDE, просто отыскав ее среди примеров.
- Для пересылки непосредственно команд устройству понадобится Universal Gcode Sender (или другое подобное ПО). После его установки на компьютер в нем открываем канал связи с платой по com-порту, к которому подсоединена плата.
- Для начальной и последующих настроек платы в командной строке приложения набираем «$$». По этой команде получаем полный набор базовых настроек платы, которые можно менять, настраивая нужные параметры. К примеру, команды «$110=380» и «$111=380» ставят скорость двигателей на осях Х и У на 380 мммин. Важными пунктами настройки являются скорость и ускорение двигателей, направление осей (прямое или инверсное). Подробнее инструкцию по такой настройке можно найти в интернете.
- Также есть возможность машинного контроля над двигателями (вкладка machine control) и серво (команды М5(поворот в начальное положение) и М3 s90(поворот на 90 или любое другое кол-во градусов)).
- Далее надо подготовить изображение для работы. Для этого тоже понадобится доп. ПО, к примеру, Inkscape. Оно похоже на любой другой графический редактор и подробно работу с ним можно изучить также в интернете. Но есть пара важных замечаний:
- Для начала надо задать правильные размеры страницы в свойствах, чтобы размеры вашего изображения не оказалось больше возможностей плоттера. Так же необходимо заменить пиксели на миллиметры в единицах измерения.
- После создания изображения жмем ctrl+shift+C и идем в меню — расширения — MI GRBL… — задаем скорости двигателей и угол поворота серво — сохраняем изображение в формате gcode.
- Наконец возвращаемся в Universal Gcode Sender и во вкладке File Mode открываем наше gcode-изображение. Кнопкой Visualize можно графически отслеживать работу программы, а в окне command Table можно проследить по командное выполнение. Осталось только запустить все это и наблюдать за результатом.
В итоге работа над подобным устройством оказалось сложной и кропотливой, а конечный результат не идеальным. Но подобный опыт интересен и не бесполезен. Поэтому, надеюсь, кому-то пригодятся и помогут избежать лишних «граблей» мои советы.
Эта страничка посвящена электронной части самодельного лазерного гравера, на библиотеке GRBL. Библиотеку GRBL я устанавливал на контроллер STM32f103c8t6 blue pill. Прошивка скомпиллирована для лазерного гравера, с возможностью парковаться в нулевой точке. Дело в том, что GRBL при нажатии на кнопку home вначале обнуляет координату по оси Z, но оси Z в лазерном гравере нет. Это делает проблематичной парковку, так как не найдя концевого выключателя, гравер выдаст ошибку или зависнет. В прошивке принудительно отключена поверка координаты по оси Z и парковка каретки осуществляется только по осям X иY. При использовании концевых выключателей, станок при запуске будет заблокирован, и ручное управление будет недоступно до тех пор, пока в порт не будет отправлена команда $H.
Программы, которые управляют лазерным гравером или станком с ЧПУ выводят эту команду на отдельную кнопку.
После отправки этой команды, лазерный гравер поедет в нулевую точку, до срабатывания концевых выключателей. Станок будет находить нулевую точку, а потом ограничивать свое движение по осям той величиной, которая указана у него в настройках. Конечно есть риск, что взбесившийся станок поедет до упора, и софт лимит не сработает, но нет и гарантии, что сработает хард лимит, если станок уже заглючило. В общем я решил не заморачиваться. Ставить 4 датчика нет смысла. Можно вообще их не ставить, чаще всего ноль выставляется вручную.
Саму прошивку вы найдете в архиве в конце странички. Инструкцию по прошивке контроллера см. в видео в конце странички, или вот здесь GRBL на STM32 STM32F103C8T6 Blue pill. я описывал один из способов. Схема подключения blue pill stm32f103c8t6 к моему самодельному лазерному граверу вот такая.
После сборки механики остается протянуть проводку, что куда и как тянуть смотрите видео. Данный лазерный гравер мне удалось запустить на скорости 20 000 мм в минуту при ускорении 10000. Правда для работы я снизил скорость и ускорения в 2 раза, так как рама слишком легкая и гравер мотался из стороны в сторону по полу при стартах и остановках.
Вообще данная библиотека рассматривалась ранее вот здесь GRBL на Blue pill. но там речь шла о контроллере станка с ЧПУ . Здесь же частный случай — самодельный лазерный гравер. Для Лазерного гравера я разработал печатную плату.
Саму плату вы найдете в архиве в конце странички. Печатная плата и схема подключения к ней выглядит вот так.
Настройки моего лазерного гравера вот такие вот.
Подробнее о настройке библиотеки GRBL можете прочесть здесь: Настройки библиотеки GRBL 1.1f
О механической части этого лазерного гравера я рассказывал здесь Лазерный гравер skeleton_cnc. Механическая часть. Там описание сборки, СТЛ файлы для 3д печати, и так же список всех деталей для заказа на алиэкспресе. Так же доступно видео с полной инструкцией по сборке механической части гравера.
Архив с печатной платой, СТЛ файлами корпуса электроники и прошивкой для лазерного гравера здесь r13-project.ru/files/arh/lasergraver02.zip
Плата STM32F103C8T6 Blue pill
http://ali.pub/3h37sk,
http://ali.pub/3h3841,
http://ali.pub/3h386y
Плата Stlink ST-Link V2
http://ali.pub/3h38sc
http://ali.pub/3h390i
Если не хотите приобретать отдельный программатор для STM32, то можно прошить вот таким вот переходником USB to UART
Я пользуюсь такими конверторами, и пока они меня не подводили.
http://ali.pub/3h3a28
http://ali.pub/3h3aiy
Если будут вопросы, то пишите на канале под видео или в группе в вконтакте. https://vk.com/public179183134
Ну и само видео по сборке и настройке электрической части лазерного гравера.
Используемые источники:
- http://cnc-design.ru/proshivka-grbl-nastroika-parametrov.html
- https://habr.com/post/432818/
- http://r13-project.ru/2020/02/26/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-grbl-%d0%bb%d0%b0%d0%b7%d0%b5%d1%80%d0%bd%d0%be%d0%b3%d0%be-%d0%b3%d1%80%d0%b0%d0%b2%d0%b5%d1%80%d0%b0-%d0%bd%d0%b0-%d0%bf%d1%80%d0%b8%d0%bc/