Микропрограмма GRBL управляет координатным перемещением фрезерных и лазерных станков с ЧПУ. В нашей производственной практике мы постоянно настраиваем контроллеры на базе микросхем ATmega328P, STM32 и ESP32. Неправильная конфигурация регистров вызывает потерю шагов шаговыми приводами. Портал начинает вибрировать. Заготовка уходит в брак. Корректный ввод параметров от $$0 до $$132 гарантирует точное позиционирование инструмента, плавное торможение кареток и надежную отработку управляющих программ по стандарту ISO 6983.

Архитектура микропрограммы GRBL и аппаратная платформа ЧПУ

Опенсорсная прошивка GRBL преобразует команды G-кода в импульсы генерации шагов Step и сигналы направления Direction. Ядро системы содержит планировщик траектории с функцией опережающего просмотра Look-Ahead. Алгоритм рассчитывает допустимую скорость прохождения углов. Механика не испытывает перегрузок. На платах Arduino Uno и Nano микроконтроллер генерирует частоту шагов до 30 кГц. При этом переход на 32-битные платформы STM32 и ESP32 повышает частоту импульсов до 100–250 кГц.

Прошивка GRBL версий 1.1f и 1.1h полностью реализует стандарты NIST RS-274/NGC, ГОСТ 20999-83 и DIN 66025. Встроенный интерпретатор непрерывно парсит входящий поток данных по интерфейсу UART. Микроконтроллер распределяет временные интервалы между аппаратными таймерами. Фазовый джиттер сведен к минимуму. Кольцевой буфер команд сглаживает скачки скорости на сегментированных криволинейных векторах 3D-рельефа. И движение инструмента остается плавным.

В таблице приведены технические параметры аппаратных платформ, на которых разворачивается прошивка GRBL в современных производственных и учебных мастерских.

Платформа / МикроконтроллерРазрядность и частота ядраПредельная частота Step/DirБуфер планировщика траекторийИнтерфейсы связи и специфика
Arduino Uno / Nano (ATmega328P)8 бит, 16 МГц30 кГц (3 оси)16 блоков G-кодаUSB-UART (CH340/FT232), плата расширения CNC Shield v3.0, базовая надежность
Arduino Mega 2560 (ATmega2560)8 бит, 16 МГц30 кГц (до 5-6 осей)32 блока G-кодаUSB-UART, плата RAMPS 1.4, независимое клонирование моторов на оси Y
STM32 BluePill / BlackPill (STM32F103/F401)32 бит ARM Cortex-M3/M4, 72-84 МГц100–150 кГц64 блока G-кодаNative USB / UART, аппаратная математика с плавающей точкой FPU
ESP32 DevKit (ESP-WROOM-32)32 бит Dual Core, 240 МГц120–250 кГц128 блоков G-кодаWi-Fi, Bluetooth, встроенный Web UI (прошивки FluidNC и GRBL-ESP32)

Контроллер обрабатывает специальные символы реального времени мгновенно, минуя очередь буфера. Команда вопросительного знака ? возвращает текущие координаты MPos и WPos. Восклицательный знак ! вызывает немедленную паузу Feed Hold. Координаты сохраняются. Тильда ~ возобновляет выполнение управляющей программы Cycle Start. Символ Ctrl-X выполняет программную перезагрузку и сброс аварийного состояния без отключения силового питания.

Справочник системных параметров конфигурации GRBL от 0 до 132

Конфигурация параметров прошивки выполняется через терминал отправкой команд с префиксом доллара. В нашей цеховой практике мы сохраняем резервные копии настроек в текстовый файл перед каждой сменой механики. Запись новых значений происходит в память EEPROM микроконтроллера. Некорректный выбор таймингов импульсов шага или полярности концевых выключателей приводит к аварийной блокировке станка. Поэтому системные переменные настраивают строго по порядку.

Для просмотра текущей конфигурации оператор отправляет команду $$ в окне терминала. Запись нового значения производится синтаксисом $номер=значение (например, $100=320.000). Изменения вступают в силу немедленно. Перезагрузка микроконтроллера не требуется. Но для смены инверсии портов ввода-вывода микроконтроллер лучше перезапустить.

ПараметрНазвание и назначениеЕдиницы / ДиапазонЗначение по умолчаниюИнженерные рекомендации по выбору
$0Step pulse time (длительность импульса шага)Микросекунды (3–30)10 мксДля цифровых драйверов DM542/TB6600 задают 10–15 мкс для надежного открытия оптопар
$1Step idle delay (задержка снятия тока удержания)Миллисекунды (0–255)25 мсЗначение 255 удерживает моторы под током постоянно, предотвращая падение оси Z
$2Step port invert mask (маска инверсии импульсов шага)Битовая маска (0–7)0Инвертирует активный уровень фронта Step при управлении драйверами с общей землей
$3Direction port invert mask (маска инверсии направления)Битовая маска (0–7)0Меняет направление вращения двигателей по осям X, Y, Z без перепиновки проводов
$4Step enable invert (инверсия сигнала включения драйверов)0 или 1 (логический)00 — активный низкий уровень (Enable = 0 В), 1 — активный высокий уровень (5 В)
$5Limit pins invert (инверсия входов концевиков)0 или 1 (логический)00 — нормально-разомкнутые (NO, подтяжка к 5 В), 1 — нормально-замкнутые (NC)
$6Probe pin invert (инверсия входа контактного щупа)0 или 1 (логический)00 — замыкание щупа на массу (GND) при касании заготовки, 1 — размыкание контакта
$10Status report mask (состав статусного отчета)Битовая маска (0–3)11 — передача машинных координат (MPos), 2 — передача рабочих координат (WPos)
$11Junction deviation (отклонение на стыках траекторий)Миллиметры (0.001–0.1)0.010 ммОпределяет скорость прохождения углов; меньшие значения снижают вибрации портала
$12Arc tolerance (допуск аппроксимации дуг G2/G3)Миллиметры (0.001–0.05)0.002 ммТочность разбиения круговой интерполяции на микроотрезки при чистовом фрезеровании
$13Report inches (отчет координат в дюймах)0 или 1 (логический)00 — метрическая система (мм), 1 — дюймовая система измерения (Inches)
$20Soft limits (программные лимиты перемещения)0 или 1 (логический)01 — запрет движения за пределы рабочего поля $130–$132 (требует активного $22=1)
$21Hard limits (аппаратные лимиты по концевикам)0 или 1 (логический)01 — мгновенная аварийная остановка Alarm при физическом срабатывании концевика
$22Homing cycle (автоматический поиск базы)0 или 1 (логический)01 — активация аппаратного цикла реферирования станка по концевым упорам
$23Homing direction invert mask (инверсия направления базы)Битовая маска (0–7)0Задает квадрант движения к концевикам: бит 0 = X, бит 1 = Y, бит 2 = Z
$24Homing feed rate (медленная скорость доводки на базу)мм/мин25.0 мм/минСкорость повторного касания концевика для точной фиксации координаты нуля
$25Homing seek rate (быстрая скорость поиска концевиков)мм/мин500.0 мм/минСкорость предварительного подъезда к датчикам на длинных координатных ходах
$26Homing switch debounce (задержка подавления дребезга)Миллисекунды (5–100)250 мсФильтрация механического дребезга контактов микропереключателей
$27Homing pull-off (дистанция отскока от концевика)Миллиметры (1.0–10.0)1.000 ммВеличина отвода каретки для гарантированного размыкания контактов датчика
$30Max spindle speed (максимальные обороты шпинделя)Об/мин (RPM)10000 об/минСоответствует 100% коэффициенту заполнения ШИМ сигнала (значение S10000)
$31Min spindle speed (минимальные обороты шпинделя)Об/мин (RPM)0 об/минСоответствует минимальному порогу ШИМ или остановке вращения шпинделя
$32Laser mode enable (режим управления лазерным модулем)0 или 1 (логический)01 — активация динамического ШИМ (M4), предотвращающего прожиг заготовки на углах
$100, $101, $102Steps/mm X, Y, Z (число шагов на 1 мм перемещения)Шаг / мм250.000Рассчитывается исходя из шага ШВП/ремня, микрошага драйвера и редукции
$110, $111, $112Max rate X, Y, Z (максимальная скорость подачи)мм/мин500.000Предельная скорость перемещения каретки без срыва шагов ротора двигателя
$120, $121, $122Acceleration X, Y, Z (ускорение при разгоне и торможении)мм/с²10.000Определяет динамику станка; согласуется с инерционной массой подвижного портала
$130, $131, $132Max travel X, Y, Z (максимальный рабочий ход осей)Миллиметры200.000Длина полезной зоны обработки для контроля программных лимитов ($20=1)
На фрезерных станках с вертикальной осью Z мы всегда задаем параметр $1=255. Значение 255 оставляет обмотки шаговых двигателей под постоянным током удержания. Если оставить тайм-аут по умолчанию (25 мс), после завершения перемещения драйвер обесточит двигатель. Тяжелый фрезерный шпиндель под собственным весом опустится вниз и сломает режущий инструмент о поверхность стола.

Параметры инверсии осей $2, $3 и $23 задаются десятичным эквивалентом трехбитного двоичного кода. Младший нулевой бит отвечает за ось X, первый бит управляет осью Y, а второй бит переключает ось Z. Например, если необходимо инвертировать направление перемещения только по оси Y, двоичная маска принимает вид 010 (число 2). Если требуется инвертировать одновременно оси X и Z, двоичный код равен 101, а итоговая команда принимает вид $3=5.

Подобрать оборудование под вашу задачу

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

Кинематическая калибровка координатных осей согласует электрические импульсы драйверов с линейным перемещением кареток. Мы на производстве рассчитываем коэффициент шагов на миллиметр на основе геометрического шага ходового винта или зубчатой рейки. Затем наладчики проверяют соответствие фактического хода по поверочной линейке или индикатору часового типа ИЧ-10. Точный расчет ускорения исключает механический удар при смене направления. Это защищает твердосплавную фрезу от сколов.

Базовое количество импульсов на один миллиметр пути каретки для винтовой передачи рассчитывается по аналитической формуле:

$$\text{Steps\_per\_mm} = \frac{N_{spr} \cdot K_{micro}}{P_h \cdot i}$$

В этой формуле приняты технологические обозначения:

  • \(N_{spr}\): число полных шагов двигателя на оборот ротора (\(N_{spr} = 200\) для угла 1.8°, \(N_{spr} = 400\) для угла 0.9°);
  • \(K_{micro}\): коэффициент дробления микрошага драйвера (например, 1, 2, 4, 8, 16 или 32);
  • \(P_h\): ход винтовой линии передачи на один оборот в миллиметрах (\(P_h = 5\text{ мм}\) для ШВП SFU1605, \(P_h = 8\text{ мм}\) для винта TR8x8);
  • \(i\): передаточное отношение редуктора или зубчато-ременной передачи (при прямом соединении через муфту \(i = 1\)).

Рассмотрим производственный пример расчета для координатного стола с ШВП. На станке установлены двигатели NEMA 23 (шаг 1.8°, 200 шагов/оборот) и драйверы DM542 с микрошагом 1/8 (\(K_{micro} = 8\)). Привод соединен напрямую (\(i = 1\)) с парой SFU1605 с шагом 5 мм. Подставляем исходные значения в формулу:

$$\text{Steps\_per\_mm} = \frac{200 \cdot 8}{5 \cdot 1} = \frac{1600}{5} = 320.000\text{ шаг/мм}$$

Наладчик вносит параметры командами $100=320.000 и $101=320.000. Для вертикальной оси Z с винтом TR8x8 и микрошагом 1/16 расчет дает \((200 \cdot 16) / 8 = 400.000\text{ шаг/мм}\). Значение вносят в регистр $102=400.000. Шаговый привод готов к работе.

Для зубчатых ремней GT2 с шагом зубьев \(p = 2\text{ мм}\) и числом зубьев шкива \(z = 20\) перемещение за оборот равно \(L_{rev} = p \cdot z = 40\text{ мм}\). При микрошаге 1/16 коэффициент составляет \((200 \cdot 16) / 40 = 80.000\text{ шаг/мм}\). Ошибка позиционирования исключена.

Предельная скорость оси \(V_{max}\) (параметры $110–$112 в мм/мин) ограничивается максимальной частотой импульсов таймера \(f_{max}\):

$$V_{max} = \frac{f_{max} \cdot 60}{\text{Steps\_per\_mm}}$$

Для платы Arduino Uno на чипе ATmega328P предельная частота \(f_{max} = 30\ 000\text{ Гц}\). При значении 320 шагов/мм максимально допустимая скорость равна \((30000 \cdot 60) / 320 = 5625\text{ мм/мин}\). Однако на практике скорость ограничивают на уровне 2500–3500 мм/мин. Крутящий момент мотора на высоких оборотах падает из-за противо-ЭДС обмоток.

Время разгона каретки \(T_{accel}\) и дистанция разгона \(S_{accel}\) зависят от заданного ускорения \(a\) (параметры $120–$122 в мм/с²):

$$T_{accel} = \frac{V_{max}}{60 \cdot a}, \qquad S_{accel} = \frac{V_{max}^2}{2 \cdot a \cdot 3600}$$

При юстировке осей после тестового прогона на 100 мм фактическое смещение измеряют микрометром или штангенциркулем. Корректирующий коэффициент шагов рассчитывают по формуле пропорции:

$$\text{Steps}_{new} = \text{Steps}_{old} \cdot \frac{L_{command}}{L_{measured}}$$

Настройка концевиков, реферирования и управления шпинделем

Автоматический поиск базовой точки станка обеспечивает привязку абсолютной системы координат G53 к физическим концевым упорам. В нашей практике наладка цикла хоуминга предотвращает выезд портала за границы рабочей зоны при сбоях оператора. Контроллер последовательно находит датчики по оси Z, а затем синхронно по осям X и Y. Настройка параметров ШИМ позволяет регулировать обороты коллекторного шпинделя или мощность лазера командами S в управляющей программе.

Для корректного развертывания системы базирования станка наладчик выполняет регламент конфигурации:

  1. Монтаж концевых выключателей на крайних точках ходов (нормально-замкнутые контакты NC предпочтительнее NO из-за мгновенного останова при обрыве провода).
  2. Активация аппаратного цикла реферирования отправкой команды $22=1 в командную строку терминала.
  3. Настройка направления движения осей к датчикам через битовую маску $23 (ось Z поднимается вверх, каретки X и Y двигаются в угол стола).
  4. Задание скорости предварительного поиска $25=500.0 и скорости прецизионной доводки $24=25.0 мм/мин.
  5. Установка дистанции отскока каретки $27=2.000 мм для надежного размыкания контактов после касания.
  6. Активация программных лимитов $20=1 после точного замера фактических ходов осей и их записи в регистры $130, $131 и $132.

Программные лимиты $20=1 работают в паре с активным циклом реферирования $22=1. Если программа содержит координаты за пределами $130–$132, планировщик GRBL выдает ошибку Error 15 до запуска движения. А аппаратные лимиты $21=1 отслеживают физическое замыкание концевиков во время работы. Система переходит в состояние Alarm 1.

Управление скоростью шпинделя базируется на формировании широтно-импульсной модуляции (ШИМ) на выводе D11 в платах Arduino Uno. Базовая частота ШИМ для 8-битного таймера рассчитывается по формуле:

$$F_{PWM} = \frac{f_{clk}}{N_{prescaler} \cdot 256} = \frac{16\ 000\ 000}{64 \cdot 256} \approx 976.56\text{ Гц}$$

Обороты шпинделя масштабируются линейно между значениями $31 (0 В на выходе) и $30 (5 В на выходе). Если в G-коде задана команда M3 S12000 при значении $30=24000, заполнение импульсов ШИМ составит ровно 50%. Напряжение меняется предсказуемо.

При работе с твердотельными лазерными излучателями наладчики активируют режим $32=1 (Laser Mode). В режиме фрезерования $32=0 при смене оборотов станок делает паузу для раскрутки ротора. В лазерном режиме при динамической мощности M4 контроллер пересчитывает интенсивность излучения пропорционально текущей скорости движения. На участках торможения мощность лазера снижается до нуля. Это исключает подпалины на углах заготовки.

Для отправки G-кода на станок применяют специализированные программы:

  • Candle (GRBL Control): легковесная программа с функцией карты высот стола (Heightmap), незаменимой при гравировке печатных плат;
  • Universal Gcode Sender (UGS): кроссплатформенный комплекс на Java с поддержкой визуализации траекторий, макросов и беспроводных пультов;
  • LaserGRBL: профильный софт для лазерной гравировки с встроенным алгоритмом быстрой векторизации картинок;
  • FluidNC / WebUI: среда управления для 32-битных контроллеров ESP32 с передачей файлов по беспроводной сети Wi-Fi.

Устранение электромагнитных помех и сбоев позиционирования

Ложные срабатывания концевых датчиков и срывы связи по USB возникают из-за электромагнитных наводок от силовых кабелей. Мы в цехе регулярно устраняем сбои контроллера при пуске коллекторного шпинделя или инвертора VFD. Наведенные импульсные токи в сигнальных проводах вызывают аварийный переход GRBL в режим Alarm. Для стабильной работы фрезерного станка требуется монтаж RC-фильтров, экранирование линий связи и разделение контуров заземления силовой и логической цепей.

Высокочастотные коммутационные помехи от щеток шпинделя наводят в проводах концевиков импульсы амплитудой до 10–15 В. Внутренний подтягивающий резистор чипа 20–50 кОм не способен подавить наводку. Для аппаратного демпфирования на сигнальный вход устанавливают фильтр низких частот (ФНЧ) первого порядка. Частота среза рассчитывается по формуле:

$$f_c = \frac{1}{2\pi \cdot R \cdot C} = \frac{1}{2 \cdot 3.1416 \cdot 1000 \cdot 100 \cdot 10^{-9}} \approx 1591.5\text{ Гц}$$

При резисторе \(R = 1\text{ кОм}\) и конденсаторе \(C = 100\text{ нФ}\) фильтр полностью срезает высокочастотный шум. Сигнал концевика остается четким. И на промышленных станках мы рекомендуем использовать платы оптической развязки на оптопарах PC817 с внешним питанием 12–24 В. Помехи полностью исключаются.

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

Код аварии / ошибкиРасшифровка состоянияПервопричина возникновения сбояМетодика устранения в условиях производства
Alarm:1Hard limit triggered (сработал аппаратный концевик)Механический наезд каретки на датчик или ложная электромагнитная наводкаПроверить целостность проводов, установить RC-фильтры 100 нФ, сбросить аварию командой $X
Alarm:2Soft limit exceeded (превышен программный лимит)Целевая координата в G-коде выходит за пределы рабочего поля $130–$132Проверить нулевую точку заготовки G54, пересчитать траекторию в CAM-системе
Alarm:3Reset while in motion (аварийный сброс в движении)Нажатие аварийной кнопки E-Stop, просадка питания 5 В или сбой по USBПроверить стабильность питающего напряжения платы ЧПУ, заменить USB-кабель на экранированный
Alarm:8Homing fail (сбой цикла реферирования)Каретка не достигла концевика за расчетную дистанцию или датчик не разомкнулсяУвеличить дистанцию отскока $27, проверить надежность срабатывания микропереключателя
Error:20Unsupported command (неподдерживаемая команда)В теле управляющей программы встретился неподдерживаемый G-кодНастроить постпроцессор CAM-программы на профиль GRBL (исключить циклы сверления G81/G83)
Error:33Motion target invalid (недопустимая цель дуги)Радиус дуги I/J в команде G2/G3 не совпадает с конечной координатой X/YУвеличить точность постпроцессора до 4 знаков после запятой или настроить допуск $12

Для защиты от помех и стабильной передачи управляющих программ мы на производстве применяем регламент монтажа электроники ЧПУ:

  • Прокладка силовых кабелей двигателей и шпинделя в отдельных экранированных кабель-каналах на расстоянии от 100 мм от линий датчиков;
  • Использование витой пары в медном экране для всех концевых выключателей и щупа Z-Probe с односторонним заземлением экрана;
  • Установка ферритовых фильтров на обоих концах USB-кабеля связи между управляющим компьютером и контроллером;
  • Организация защитного заземления станины станка, корпуса шпинделя и блока питания по схеме «звезда» без образования петель.