Андрей Смирнов
Время чтения: ~16 мин.
Просмотров: 153

GRBL 1.1 на китайской отладочной плате SMT32F103C8T6 (она же generic она же bluepill)

        После подключения контроллера к программе 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. Конструкция

2qj-rxkxvbgoa4oqvzwh9a0v4lk.png

Конструкция, которую я выбрала, изготавливалась из фанеры. В качестве осей использовались шпильки, которые крутились шаговыми двигателями, и за счет этого платформа на гайках двигалась по оси. Одна ось крепилась на платформу другой одним краем. Из изготовления всего этого могу сказать:

  • Если верхняя ось не имеет опоры с двух сторон, а крепится, как у меня, только одним краем, то необходимо заранее продумать баланс осей. Верхняя неизбежно будет крениться, если вообще не заваливать всю конструкцию весом своего «висящего» края.
  • Линии рисунка могут идти волнами по размеру резьбы шпильки, а также из-за дрожания самой конструкции во время работы.
  • Две вышеперечисленные проблемы приводят еще к одной: перо (в моем случае ручка) может писать неравномерно в разных частях страницы.
  • Вес и размеры устройства тоже стоит рассчитать заранее, чтобы потом не выяснилось, что ваши двигатели не тянут такую нагрузку.
  • И еще одна важная деталь: лучше всего везде где возможно использовать для крепления шурупы, гвозди и т.д. Конструкции на клее, пусть даже самом надежном, имеют свойство разваливаться в самый неожиданный момент. И в некоторых случаях после сборки основной части будет весьма сложно возвращаться к «переклеиванию» мелких, но очень важных, внутренних деталей, не разбирая готовые части.

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. Но для работы через этот механизм надо разобраться с начальной настройкой всего этого.
    1. Итак, скачиваем и распаковываем grbl-servo библиотеку. Теперь ее можно залить на плату через IDE, просто отыскав ее среди примеров.
    2. Для пересылки непосредственно команд устройству понадобится Universal Gcode Sender (или другое подобное ПО). После его установки на компьютер в нем открываем канал связи с платой по com-порту, к которому подсоединена плата.
    3. Для начальной и последующих настроек платы в командной строке приложения набираем «$$». По этой команде получаем полный набор базовых настроек платы, которые можно менять, настраивая нужные параметры. К примеру, команды «$110=380» и «$111=380» ставят скорость двигателей на осях Х и У на 380 мммин. Важными пунктами настройки являются скорость и ускорение двигателей, направление осей (прямое или инверсное). Подробнее инструкцию по такой настройке можно найти в интернете.
    4. Также есть возможность машинного контроля над двигателями (вкладка machine control) и серво (команды М5(поворот в начальное положение) и М3 s90(поворот на 90 или любое другое кол-во градусов)).
    5. Далее надо подготовить изображение для работы. Для этого тоже понадобится доп. ПО, к примеру, Inkscape. Оно похоже на любой другой графический редактор и подробно работу с ним можно изучить также в интернете. Но есть пара важных замечаний:
  • Для начала надо задать правильные размеры страницы в свойствах, чтобы размеры вашего изображения не оказалось больше возможностей плоттера. Так же необходимо заменить пиксели на миллиметры в единицах измерения.
  • После создания изображения жмем ctrl+shift+C и идем в меню — расширения — MI GRBL… — задаем скорости двигателей и угол поворота серво — сохраняем изображение в формате gcode.
    1. Наконец возвращаемся в Universal Gcode Sender и во вкладке File Mode открываем наше gcode-изображение. Кнопкой Visualize можно графически отслеживать работу программы, а в окне command Table можно проследить по командное выполнение. Осталось только запустить все это и наблюдать за результатом.

В итоге работа над подобным устройством оказалось сложной и кропотливой, а конечный результат не идеальным. Но подобный опыт интересен и не бесполезен. Поэтому, надеюсь, кому-то пригодятся и помогут избежать лишних «граблей» мои советы.

Настройки которые нас интересуют выглядит так: $0  и $1.

Эти 2 настройки устанавливают  А и ось Y.

Нам потребуется вычислить количество шагов, которое нужно для того, чтобы переместить головку на 1 миллиметр в любом направлении.

Мы считаем это так:

Количество шагов = количество шагов на оборот х микрошагов / шаг резьбы

То есть, в нашем случае это будет выглядеть так:

20 шагов на оборот х  (18 градусов на шаг) х  8 микрошагов (пины MS1 и MS2 подсоединены к +5v на платах EasyDriver-ов) /на 3-миллиметровый шаг резьбы (путь в 3 мм на один оборот).

(20 x 8) / 3 = 53.333333333

Итак введите в терминал: $0=53.333 и $1=53.333, — чтобы установить оси.

Далее вам необходимо сделать мягкий reset, для того, чтобы изменения вступили в действие ($X).Или вы можете использовать программу  Zapmaker’s Grbl Controller для настройки  Grbl.

 Вам необходимо также ввести:

$ 4 = 200 — Устанавливает скорость по умолчанию, с которой головка движется по время работы.

$ 5 = 200  — Устанавливает скорость по умолчанию, с которой головка движется по время движения между заданиями.

$ 16 = 1Это задает возможность конечных остановок.

$ 17 = 1Это задает возврат на базу ($ H), в моем случае- все зависало. Для включения этой функции вам необходимо изменить исходный код для Grbl и перекомпилировать файл .hex. Инструкции, показывающие, как это сделать находятся в нижней части этого шага.

$ 18 = 69Это установит нулевую точку в левом нижнем углу монтажного стола, когда команда H возврата на базу $ выполняется. Для углубленного понимания этой функции читайте Grbl Wiki.

$ 19 = 200

$ 20 = 200

$ 22 = 2,000  -Это задает расстояние задает дистанцию, на которую оси смещаются от конечных точек после выполнения команды на возврат на базу.

Углубленные объяснения для каждого из параметров Grbl находятся на Grbl Wiki.

 Убедитесь в том, что все ваши настройки конфигурации верны, введя $$ в терминал. Вы должны увидеть нечто следующее:

Последним шагом является фокусировка лазера.

Я загрузил небольшой тестовый образец и дал последовательности X запуститься.

Вы можете включать и выключать лазерный диод используя соответствующий флажок Spindle On в программе Zapmaker’s Grbl Controller.

С первого раза у меня ничего не получилось, но после нескольких оборотов линзы, мне удалось получить отметку на бумаге, после этого все что мне было нужно, это всего лишь тонкая настройка и лазер был правильно ориентирован на монтажном столе.

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

Изменение исходного кодаВо время тестов я обнаружил что программа зависала во время получения команды возврата на базу: $H (homing).Я подозревал, что проблема заключалась с осью Z, так как мой резак не имел ее.

1. Скачайте файл исходного кода. 

2. Распакуйте архив

3. откройте файл config.h в вашем текстовом редакторе (можно использовать блокнот)

4. Найдите следующий кусок кода:

 #define HOMING_SEARCH_CYCLE_0

(1< #define HOMING_SEARCH_CYCLE_1 ((1<

5. Замените этот кусок на следующий: 

// #define HOMING_SEARCH_CYCLE_0 (1<#define HOMING_SEARCH_CYCLE_0 ((1<

6. Найдите следующий кусок кода:

#define HOMING_LOCATE_CYCLE ((1<

7. Замените этот кусок на следующий: 

#define HOMING_LOCATE_CYCLE ((1<

8. Сохраните файл

9. Скомпилируйте заново файл grbl.hex . Я использовал Raspberry Pi для компиляции этого hex файла. 

Если у вас что то не получится, — я приложил hex файл для вас ниже. Теперь вам надо прошить вашу ардуино, используя файл из этого архива.

Если всё работает корректно и все настройки введены,  у вас должно получиться запустить цикл возврата на базу в процессе чего вы увидите как ваш резак установится на ноль. После чего вы можете начать креативить! Удачи  !;-)

P.S. Ну и напоследок- видео:

Используемые источники:

  • http://cnc-design.ru/proshivka-grbl-nastroika-parametrov.html
  • https://habr.com/post/432818/
  • http://uc.org.ru/node/94

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации