В этой статье я хочу пробежаться по настройкам библиотеки GRBL, а в частности GRBL 1.1f.
Самая первая команда, которая вам понадобится это $$, на нее прошивка отреагирует выбросив в порт значение текущих настроек контроллера. Эти настройки хранятся в энергонезависимой памяти и сохраняются даже после отключения питания.
Для замены любого параметра необходимо отправить номер параметра и его новое значение, например $30=255. В ответ контроллер должен ответить OK. Это значит, что настройка обновилась и сохранена в энергонезависимую память.
А теперь о самих параметрах библиотеки GRBL.
$0 – Длительность импульса ля управления шаговым двигателем, микросекунд
Это значение подбирается экспериментально, и оно зависит от длинны проводов до драйвера шагового двигателя и от «скорострельности» драйвера. Слишком короткие импульсы драйвер может не заметить, а слишком длинные, при большой скорости перемещения будут накладываться друг на друга. По умолчанию это значение равно 10, но чаще всего можно снизить до 4-8.
$1 — Задержка отключения двигателей, миллисекунд
При завершении перемещения контроллер обесточивает двигатель, что бы исключить лишний нагрева драйвера и двигателя, а так же для экономии электроэнергии. Этот параметр указывает, через какое время производить отключение двигателя. Если вам необходимо постоянное удержание положения каретки (возможно смещение из-за гравитации, драйвер не запоминает положение микрощага, нет стопорения за счет механики) то данный параметр необходимо установить в 255. Значение 255 укажет контроллеру, что двигатели необходимо всегда держать включенными.
$2 – Инверсия импульсов движения шагового двигателя (сигнал STEP), маска
Этот параметр задает порядок смены высокого и низкого сигналов на выходе. По умолчанию сигнал на выходе контроллера низкий и при подаче сигнала он меняется на высокий. Если включить инверсию, то будет наоборот, высокий сигнал переключится на низкий. Время переключения сигнала задает параметр $0. В большинстве случаев не требуется переключение данного параметра. Но если так случилось, что ваш драйвер шагового двигателя требует инверсии, то задать маску инверсии можно на этом примере:
значение маска х Y Z
1 00000001 Д Н Н
2 00000010 Н Д Н
3 00000011 Д Д Н
4 00000100 Н Н Д
5 00000101 Д Н Д
6 00000110 Н Д Д
7 00000111 Д Д Д
например необходимо инвертировать ось Х тогда параметр $2=1, если необходимо инвертировать оси Y и Z тогда необходимо $2=6
$3 – Инверсия движения двигателя (сигнал DIR), маска
Контроллер считает, что при низком уровне выходного сигнала двигатель будет вращаться так, что это приведет к увеличению значении координаты (каретка поедет от нулы в положительном направлении). Но не всегда и везде это так, и что бы не менять подключение проводов к шаговому двигателю, можно измениь маску, тем самым изменив направление вращения.
Переключается данный параметр аналогично параметру $2
$4 — Инверсия сигнала включения драйвера шаговых двигателей (сигнал ENABLE), логический
По умолчанию контроллер считает включающим низкий сигнал (притягивает линию к земле для включения драйвера, чаще всего так и есть). Для переключения инверсии следует отправить $4=1. (по умолчанию настроено $4=0).
$5 — Инверсия входов концевых выключателей, логический
По умолчанию входы, к которым подключаются концевые выключатели подтянуты через резистор к + шины питания платы, и на них высокий уровень. Если необходимо, что бы плата сама НЕ генерировала подтяжку, например в датчике уже все есть или необходимо, что бы плата реагировала на высокий сигнал, а не на низкий, то сигнал необходимо инвертировать. При этом контроллер отключит подтягивающий резистор, и формирование высокого уровня ложиться на ваши плечи, так же как и защита от перенапряжения на линии. Включается $5=1, отключается $5=0.
$6 — Инверсия входа контактного датчика, логический
По умолчанию контроллер настроен на нормально разомкнутый концевой выключатель, который при срабатывании замкнет вход на землю. Если вы используете нормально замкнутый концевой выключатель, который при срабатывании наоборот размыкает цепь — то этот параметр необходимо инвертировать. Включается $6=1, отключается $6=0.
$10 — Вывод статуса, маска
Задает вывод данных с контроллера, когда их запрашивает пользователь командой ?. Эти данные включают в себя: значения на входах, текущие переопределенные значения, текущие координаты, текущее состояние, текущую скорость подачи, состояния буферов, и номер выполняемой команды G-кода (если было включено в исходных кодах перед компиляцией).
По умолчанию в отчет библиотеки GRBL v1.1+ входит вывод практически всей информации в стандартном выводе статуса. Весь лишний мусор можно скрывать, оставив только информацию о тех параметрах, которые изменились. Это сильно ускоряет скорость общения с контроллером. Данная функция в основном требуется для отладки и испытании производительности контроллер, когда нужно например протестировать переполнение буфера при сложных расчетах и т.д. Простым смертным в 99% случаев это все не требуется. и рекомендуется оставить параметр по умолчанию. Если Вам потребовалось изменить данный параметр — то эта статья Вам ни к чему — вы и так все в исходниках найдете, или прочитаете официальную документацию на другом языке 🙂
$11 — Изменение скорости прохождения стыков, мм
Данный параметр управляет скоростью прохождения инструмента по траектории при смене направления. При прохождении острого угла инструмент необходимо притормаживать. Если этого не делать, то может наблюдаться пропуск шагов. Большие значения данного параметра дают большую скорость обработки. Если инструмент легкий а двигатели мощные, то можно увеличить скорость бработки сложных деталей уменьшив этот параметр. Если же у вас инструмент сбивается при работе, то параметр необходимо увеличить.
$12 – Отклонение от дуги, мм
Библиотека GRBL обрабатывает дуги и окружности как совокупность отрезкой. Окружность или дуга разбивается не н-ное количество отрезков. Данный параметр задает максимальное отклонение траектории от идеальной. Точность станка обычно не превышает этого отклонения, но если вы замечаете на дугах угловатости, то стоит уменьшить значение этого параметра. Он так же влияет на скорость обработки, так как для каждого стыка необходимо определить максимальную скорость и на основании парметра 11 высчитать торможение, если оно требуется. Максимальное отклонение высчитывается как перпендикуляр от отрезка до дуги.
$13 — Отчет в дюймах, boolean
По умолчанию Grbl выводит координаты текущей позиции, а также параметры смещения начала координат и данные измерения (probing) в мм. Командой $13=1 можно изменить значение параметра и переключить выводй на дюймы. $13=0 возвращает вывод в мм.
$20 — Мягкие границы (soft limit), логический
Этот параметр включает виртуальные границы, за которые станку нельзя выезжать. Данный параметр необходимо включать совместно с параметром $22. Работают они так — станок при получении команды $H ищет начальную точку, а далее при работе следит за рабочей координатой, и если кнтроллеру приходит команда, которая вынудит его выехать за эти границы, то станок прекратит обработку сформировав сигнал ошибки. Текущее положение при этом не сбрасывается. $20=1 для включения, и $20=0 для отключения.
$21 — Жесткие границы (hard limit), логический
При включении данного параметра, контрллер будет следить за концевыми выключателями и если в процесе работы один из них стработает, то работа прекратится в аварийном режиме. Для продолжения работы контроллер необходимо сбросить. Сделано это для безопасности.Для включения жестких границ потреьуется по 2 концевых выключателя на каждую ось, для ограничения перемещения в двух крайних положениях. Концевые выключатели вешают парно на 1 вход концевых выключателей, при срабатывании любого из двух должен вырабатываться сигнал, интерпретируемый контроллером.
$22 — Поиск начальной позиции (HOME), логический
Поиск начальной позиции.При включении станка, он не знает в какой позиции находится его инструмент, и ему необходимо задать точку отсчета. при подаче команды $H контроллер будет искать нулевое положение перемещая инструмент в положение увеличения координаты, пока не произойдет срабатывание концевого выключателя. По умолчанию в первую очередь в нулевую точку едет ось Z, а за ней оси X и Y. Если вы используете контроллер для лазерного гравера, то в исходном коде необходимо установить запрет поиска нулевой точки оси Z, так как этой оси нет, и контроллер не найдя концевого выключателя выдаст ошибку или зависнет.
Еще одно применение этой команды — при отключении электропитания всегда можно привести инструмент в нулевое положение и запустить выполнение программы не с самого начала, нулевая точка будет совпадать и не произойдет сбоя при позиционировании инструмента.
$23 — Инверсия направления начальной точки, маска
По-умолчанию, Grbl ищет нулевую точку, в положительном направлении. Если у вашего станка концевые выключатели находятся в отрицательном направлении перемещения, то следует инвертировать данный параметр. Она работает точно так же, как и маска инверсии порта шаговых импульсов (параметр $2), все что вам нужно это указать значение из таблицы, указывающее какие оси нужно инвертировать для поиска в противоположном направлении.
$24 — Скорость подачи при поиске нулевой точки, мм/мин
При поиске нулевой точки контроллер вначале перемещает оси на высокой подаче, затем делает откат на небольшое расстояние и уже на низкой скорости точно определяет координату. Данный параметр задает скорость перемещения инструмента после отката при точном определении координаты (низкая скорость)
$25 — Скорость поиска начальной точки, мм/мин
Данный параметр задает начальную скорость поиска нулевой координаты (бОльшую скорость). Данную скорость следует подобрать так, что бы концевой выключатель успевал обрабатываться контроллером.
$26 — Подавление дребезга при поиске начальной точки, миллисекунд
При срабатывании концевого выключателя (особенно механического), наблюдается шум на входе (поочередные всплески от того, что контакт не сразу прижимается а еще немного пружинит). Что бы исключить данный шум из расчета ьребуется либо установка фильтра, либо програмная задержка, которая и задается этим параметром. Для большинства случаев требуемое значения 5-25 миллисекунд.
$27 — Отъезд от начальной точки, мм
Для того, что бы использовать одну пару концевых выключателей для определения нулевой точки и для определения жестких границ служит этот параметр. После нахождения нулевой точки станок отъедет от нее на заданное расстояние. Если этого не сделать ( не разомкнуть концевой выключатель) то после процедуры поиска нулевой границы контроллер опросив концевик, посчитает , что произошла аварийная ситуация.
$30 — Максимальные обороты шпинделя, Об/мин
Задает значение ШИМ соответствующее максимальному значению напряжения на выходе (5 вольт для AVR и 3,3V для ARM плат). Это значение используется для регулировки оборотами шпинделя или мощностью лазера при выжигании. По умолчанию, Grbl строит линейную зависимость из 255 отсчетов между максимальными-минимальными оборотами шпинделя. Значение равное 0 отключает шпиндель, значение 255 включает на максимум. В файле config.h есть дополнительные параметры, влияющие на это, и если вас это не устраивает, то необходимо изменить перед компиляцией прошивки.
$31 — Минимальные обороты шпинделя, Об/мин
Задает минимальное значение на выходе ШИМ, равному (напряжение питания платы/256). Этот параметр задает значение, с которого гарантировано происходит пуск шпинделя или зажигание лазера.
$32 — Режим лазера, логический
Если включить данный параметр, то контроллер перейдет на режим управления лазером. Лазер висит на пине отвечающем за обороты шпинделя. Контроллер, прежде чем изменить направление движения командой S дает задержку, что бы шпиндель разогнался или сбросил обороты, и только после этого начинает движение. В случае с лазером, делать этого не нужно, иначе в точках изменения яркости будут наблюдаться более черные точки или полосы. Так же это увеличивает скорость выжигания.
$100, $101 , $102 – [X,Y,Z] шагов/мм
Данные параметры задают количество шагов, сделав которое ось сдвинется на 1 мм. Например шаговый двигатель имеет 200 шагов на 1 оборот, контроллер настроен на 16 микрошаг. Теперь допустим, что при вращении двигателя на 1 оборот инструмент переместился на 32 мм, тогда имеем. 200 шагов умножить на 16 микрошаг — 3200 импульсов нужно подать контроллеры, что бы шаговый двигатель сделал 1 оборот, и переместил инструмент на 32 мм. значит на 1 мм он сдвинется за 3200/32мм=100 шагов.
$110, $111, $112 – [X,Y,Z] Максимальная скорость, мм/мин
Эти параметры задают максимальную скорость перемещения для каждой из осей. Контроллер при получении G кода анализирует скорости указанные в нем, и если команда задает скорость выше данных значений, то он ограничивает скорость. Так же эти значения также определяют максимальную скорость перемещения при выполнении команды G0. Параметр определяется экспериментально, пока не будет наблюдаться пропуск шагов, после этого снижается скорость на 10-20 процентов, и используется как основное значение.
$120, $121, $122 – [X,Y,Z] Ускорение, мм/сек^2
Эти параметры задают параметры ускорения в мм/сек за секунду. Чем меньше это значение, тем более плавное движение, но и большее время обработки сложных деталей с большим количеством мелкиъ элементов. Так же определяется экспериментально.
$130, $131, $132 – [X,Y,Z] Максимальное перемещение, мм
Эти параметры задает максимальное допустимое перемещение от нулевой точки по каждой из осей при включенных мягких границах (sofl limit). См. параметры $20, $22.
На этом все, если возникнут вопросы пишите в комментарии или в группе в контакте. https://vk.com/public179183134
Здравствуйте. Когда будет обещанное продолжение по сборке и наладке фрезера с данной платой ?
Здравствуйте! Данная плата используется в лазерном гравере, о котором есть видео на канале. Сейчас монтирую видео о электронике 3Д принтера, кстати тоже на blue pill. Фрезер буду восстанавливать после того, как закончу 3Д принтер, так как хочу немного пластиковых деталей напечатать для гравера на нем. Автономный контроллер для GRBL отложен пока подальше в планах, его же и для 3Д принтера использовать можно, переписав только парсер ответов и графический интерфейс.
здравствуте. делаю инверцию осей Y и Z,ввожу команду $2=6, но оси не инвертируются, хотя GRBL пишет OK. Подскажите,как быть?
$2 — инвертирует фронты сигнала, вам же нужно инвертировать сигнал DIR, это маска параметра $3
Добавлю для того случая если ктота столкнулся с проблемой обратного сигнала отработанных координат с контроллера проще выражаясь если программа управления grbl станком не отрабатывает визуализацию ведет себя не коректно и постоянно встает в аварию и не перемищает фризу мам маячек в программе
Вобщем 3 дня мучался думал все не одня программа не работает )))))) параметр $10 если стоит 0 то нет обратной связи ставим 1 и все прекрастно работает
Какой программой пользуетесь? видимо ей расширенный режим нужен был, она парсит полный ответ.
Друг, не могу сохранить изменения прошивки. Каждый раз, когда я выключаю STM32, он возвращается к следующим настройкам:
$0 = 6 (Step pulse time, microseconds)
$1 = 0 (Step idle delay, milliseconds)
$2 = 0 (Step pulse invert, mask)
$3 = 31 (Step direction invert, mask)
$4 = 1 (Invert step enable pin, boolean)
$5 = 1 (Invert limit pins, boolean)
$6 = 0 (Invert probe pin, boolean)
$10 = 0 (Status report options, mask)
$11 = 0.010 (Junction deviation, millimeters)
$12 = 0.002 (Arc tolerance, millimeters)
$13 = 0 (Report in inches, boolean)
$20 = 0 (Soft limits enable, boolean)
$21 = 0 (Hard limits enable, boolean)
$22 = 0 (Homing cycle enable, boolean)
$23 = 31 (Homing direction invert, mask)
$24 = 10.000 (Homing locate feed rate, mm/min)
$25 = 100.000 (Homing search seek rate, mm/min)
$26 = 250 (Homing switch debounce delay, milliseconds)
$27 = 1.500 (Homing switch pull-off distance, millimeters)
$30 = 1000 (Maximum spindle speed, RPM)
$31 = 0 (Minimum spindle speed, RPM)
$32 = 0 (Laser-mode enable, boolean)
$100 = 5120.000 (X-axis travel resolution, step/mm)
$101 = 5120.000 (Y-axis travel resolution, step/mm)
$102 = 5120.000 (Z-axis travel resolution, step/mm)
$103 = 5120.000
$110 = 2000.000 (X-axis maximum rate, mm/min)
$111 = 2000.000 (Y-axis maximum rate, mm/min)
$112 = 2000.000 (Z-axis maximum rate, mm/min)
$113 = 2000.000
$120 = 8000.000 (X-axis acceleration, mm/sec^2)
$121 = 8000.000 (Y-axis acceleration, mm/sec^2)
$122 = 8000.000 (Z-axis acceleration, mm/sec^2)
$123 = 8000.000
$130 = 280.000 (X-axis maximum travel, millimeters)
$131 = 280.000 (Y-axis maximum travel, millimeters)
$132 = 280.000 (Z-axis maximum travel, millimeters)
$133 = 280.000
Я уже пробовал использовать UGS, а также LaserGRBL, в обоих случаях, когда я выключаю микроконтроллер, настройки возвращаются к значениям, описанным выше.
Я использовал файл .hex, доступный на этом сайте.
Попробуйте отключить плату от станка. Настройки произвести на плате беэ электроники. Если ошибка повторяется, то попробовать другую плату, возможно там стоит контроллер не оригинальный, а китайский клон, или проблема с flash памятью. Я использовал эту прошивку на своем фрезерном станке. Сохранение происходило успешно.
Как включить все оси (XYZABC) на STM32 я так и не понял, кто-нибудь может подсказать?
Они по умолчанию включены, если в самой прошивке при компиляции не отключались. возможная проблема — не указана очередность движения в положение HOME.