Содержание
- 1 Драйверы шаговых двигателей для любительского использования.
- 2 Опыт использования GRBL
- 3 Отладочная плата SMT32F103C8T6 (она же generic она же bluepill) плюсы и минусы.
- 4 Конфигурация проекта, прошивка контроллера
- 5 Как работать с GRBL
- 6 Настройки контроллера GRBL
- 7 Программное обеспечение для работы с контроллером
После подключения контроллера к программе 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. В результате этого новое значение будет сохранено в памяти контроллера.
В этой статье я хочу пробежаться по настройкам библиотеки 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
Эта статья будет разбита на несколько частей. В основном речь пойдет о настройке и использовании самой популярной платы на микроконтроллере stm32c8t6 в качестве 4х (от 3х до 6и) осевого контроллера ЧПУ с прошивкой GRBL 1.1f, портированной с Arduino. Также в этой статье я расскажу немного о личном опыте применения этого контроллера, немного об используемых драйверах шаговых двигателей и немного о программном обеспечении для работы с GRBL.
Драйверы шаговых двигателей для любительского использования.
Для управления контроллером подойдут любые драйверы шаговых двигателей (ШД) с входными сигналами шаг/направление (step/dir). Обратной связи (ОС или FB (feedback)) по положению на контроллер разумеется нет. Если ОС есть и замкнута через драйвер – это норм и даже хорошо, можно вывести сигнал ошибки на контроллер. Но это, конечно, дорого.
Итак, какие конкретно драйверы можно использовать? Для маленьких движков на небольшую мощность отлично подойдут drv8825 (polopu), A4988 и другие этого же класса. Основная область применения: 3d принтеры, хоббийные лазерные гравировщики, в общем – что-то, что не требует особых нагрузок. Для движков с током до 4А и напряжением БП до 40В подойдут TB6600 (я гоняю на них двигатели с 57 посадкой максимального размера и даже с 86 посадкой). Не рекомендую брать что-либо с названием TB6560, это более старая модификация драйвера, на многих форумах она фигурирует как проблемная. Проблемы я так понимаю связаны с пропуском шагов, низкой частотой сигнала «шаг» и повышенной сгораемостью при определенных условиях. Также вполне нормально работают драйверы от отечественной конторы pl, в некоторых присутствует подстройка фазы, что очень неплохо, но для хобби дороговато. Работал с этим контроллером GRBL и с серводвигателями, но об этом позже.
Особое внимание на повышенных частотах работы (от 50кГц и выше) стоит обратить на правильно проведенные как сигнальные, так и силовые провода, экранирование, подведение питания. На мой взгляд хорошим решением для сигнальных проводов является витая пара, при этом экран рекомендуется подключать только со стороны модуля контроллера. Провода делать по возможности короче, драйверы ШД располагать по возможности вблизи ШД, два провода каждой обмотки ШД скрутить как витую пару вплоть до подключения к драйверу, контроллер убрать в отдельную металлическую коробочку, в некоторых случаях не повредят ферритовые фильтры (на сигнальные провода можно надеть ширпотребные покупные и успокоиться), ну и т.д. Не забудьте про дамперы, если речь идет о быстром торможении приличных масс. Короче говоря, если хотите сделать что-то более-менее серьезное (быстрое, защищенное и безотказное), то обязательно потратьте хотя бы неделю исключительно на вдумчивое изучение вопроса, материалов в интернете очень много. Если хотите просто попробовать и приобрести начальный опыт, не рассчитывая сразу на грандиозный результат (на мой взгляд – это самый правильный способ для начала), то тоже потратьте время на изучение и постарайтесь не прибегать к дорогим комплектующим.
Опыт использования GRBL
Постараюсь коротко. Около года назад мне понадобилось (по работе) сделать 4х осевой станок с ЧПУ с «гибко настроенным» интерфейсом. Все мы понимаем, что отличным вариантом было бы использование для этих целей LinuxCNC. Однако расчетная частота сигналов step должна была быть 60-80кГц. Для этого LPT уже не подходит и потребовалось бы приобретать плату типа mesa. Адекватный вариант с LinuxCNC на Raspberry Pi у меня не получился. Однако, Raspberry Pi как интерфейсный компьютер меня очень прельщал. На тот момент я уже знал о проекте GRBL на Arduino. Но GRBL дает только 30кГц выходной частоты и 3 оси.
Первая мысль: портировать GRBL на STM32, вторая – поискать готовый порт в интернете. После некоторых усилий нашел проект одного бравого канадского парня, вот он: https://github.com/usbcnc/grbl/wiki. GRBL 1.1f аккуратно портированный на stm32f103 с сохранением исходного кода и комментариев от родного GRBL. Огромное ему спасибо, почет и уважение. Тут тоже имеем 3 оси, но уже, как утверждается, до 180кГц! (однако покопавшись в коде могу сказать, что на это рассчитывать не стоит, остановимся на 100кГц) Естественно сразу собрал и залил. Заработало с первого раза! Хороший знак. В последствии оказалось, что есть ошибочки, но мы их конечно подправили. Оказалось, что разработчики GRBL планировали расширение до большего количества осей, но ресурсы контроллера atmega328p этого уже не позволяли. Я добавил 4 ось (5 и 6, но их как следует не тестировал). Далее мы будем рассматривать проект с исправленными ошибками и добавленной осью.
Мы успешно воплотили в жизнь проект на этом контроллере. Был собран промышленный мобильный блок управления с сенсорным экраном, написан свой интерфейс работы с GRBL и беспроводным пультом ДУ, сделана промежуточная плата для контроллера (реле, согласование сигналов, гальванически развязанные входы и т.д.) и все это работает с драйверами серводвигателей. Уже на протяжении длительного времени всё это безотказно работает в боевых условиях (грязь, масло, вода, «цеховское» питание, постоянные перемещения и переподключения коммуникаций). При этом одно время были некоторые вопросы к механике, к сенсорному экрану, но контроллер работал без сбоев. После некоторой работы с интерфейсом связка заработала великолепно. Считаю, что удалось добиться уровня включил-и-работай и данное решение при грамотном монтаже можно и нужно рассматривать как промышленное.
Отладочная плата SMT32F103C8T6 (она же generic она же bluepill) плюсы и минусы.
На сегодняшний день это одна из самых распространенных отладочных плат с микроконтроллером stm32 семейства CORTEX M3. Чего только на ней не делают. Стоит эта плата около 120р (06.2018) на алиэкспресс и программатор st-link v2 около 150р (я использую именно его) или «настоящий» st-link v2 около 500р там же. Программировать ее можно и через USART (RS232), например через переходник RS232 < — > USB(VCP), такой, например, как FTDI FT232 или недорогой китайский вариант CH340.
Об этой плате сказано уже очень много, так что повторяться не вижу смысла. Поговорим о ней с точки зрения контроллера ЧПУ. Мы имеем 180кГц (это по заявлениям автора переноса grbl на bluepill, по моим данным реально, что можно выжать — около 120кГц) на 3х осях против 30кГц на GRBL Arduino. Также есть возможность подключать до 6 осей (с падением максимальной частоты конечно же) и/или некоторого количества своих дополнительных входов или выходов, но для этого конечно придется менять прошивку. В моих планах добавить поддержку кодов M62-M65 и M66 как в LinuxCNC.
По сравнению с LinuxCNC (без использования доп. плат) плюсом опять идет максимальная частота (100 против 25-40 кГц) и отсутствие привязки к интерфейсному железу. Если в случае с LinuxCNC (без использования доп. плат) интерфейс и сам контроллер (исполнитель) объединены в одном компьютере и обязательно требуется один или несколько портов LPT для взаимодействия с драйверами ШД, концевиками и оборудованием, то в случае нашего контроллера мы подключаемся физически через USB (как VCP (Virtual COM Port) устройство) к любому компьютеру с любимой ОС. Я вполне успешно использую его с Raspberry Pi.
Однако есть и минусы: во-первых это пользовательский интерфейс, и там и там их несколько, но в LinuxCNC они гибко настраиваются; во-вторых LinuxCNC сразу поддерживает различную кинематику устройств и это супер, вы можете собрать 6 осевого шарнирно-сочленённого робота манипулятора без проблем; в-третьих поддержка у LinuxCNC до 9 осей (сомнительный для нас плюс); в-четвертых возможность подключать серводвигатели с ОС замкнутой через контроллер (т.е. ПИД регулятор реализован в LinuxCNC) это дает возможность подключать двигатели постоянного тока с ОС, синхронные двигатели переменного тока с ОС, да вообще всё что угодно!; в-пятых HAL, который превращает LinuxCNC во всё что угодно, в том числе в ПЛК, ну и думаю еще можно несколько пунктов придумать. А с какой-нибудь платой mesa LinuxCNC превращается в монстра и на выходе мы имеем если не ошибаюсь до 100 входов/выходов с частотой до 1МГц.
Но в целом будущее я всё же вижу за устройством похожим на рассматриваемый нами контроллер и вот почему: данный контроллер семейства CORTEX-M3 имеет частоту 72МГц. Семейство M3 не поддерживает аппаратного деления, а вот уже M4 c частотой до 180МГц или M7 с частотой до 400МГц – поддерживают. Там значительно больше инструкций, которые позволяют сделать многое за меньшее количество тактов и core coupled memory. В целом всё это значительно повышает производительность. Также есть ЦАП, нет никаких препятствий исполнять код с флешки как в 3d принтерах, ну и при таких вычислительных мощностях уже можно встраивать интерфейс в этот же контроллер, и ту же кинематику считать при необходимости и еще много чего интересного. Ну и перенос с M3 не является особо сложной задачей (Вроде даже он уже в какой-то степени есть, но я не проверял).
Конфигурация проекта, прошивка контроллера
В целом наш GRBL сконфигурирован так, что можно его залить и всё будет работать «из коробки». Причем проект можно не собирать заново, а воспользоваться файлом прошивки «.hex», залив его через утилиту STM32 ST-LINK Utility (при установке этой программы драйвера для программатора установятся автоматически), и перейти сразу к следующему подразделу этой статьи, что и рекомендую вам сделать в первую очередь. А здесь далее мы разберем тонкую настройку проекта перед его компиляцией.
Первоначально проект собирался в CooCox IDE, но я перенес его в Atollic true studio. Всё что вам надо – установить true studio, скачать проект, открыть его в Atollic true studio и нажать build. Проект должен успешно собраться. Для заливки проекта вам понадобится программатор st link v2 или его китайский клон или, менее предпочтительно, через устройство с интерфейсом USART/UART (RS232).
Всё что вам может понадобиться для настройки лежит в нескольких файлах: config.h, cpu-map.h, defaults.h.
В файле defaults.h лежат начальные настройки контроллера GRBL, которые будут прописаны в память при прошивке микроконтроллера. В дальнейшем их можно будет переназначить командами уже прошитому контроллеру, но вы можете уже сразу сделать их теми, которые вам необходимы. Подробнее смотри раздел «Настройки контроллера GRBL».
В файле cpu—map.h (в нем лучше ничего не изменять без особой нужды и понимания) хранится карта подключения выводов контроллера (какой вывод контроллера за что отвечает (например: вход от концевика Х, выход Step Z и т.д.)). Здесь же вы можете переназначить эти входы/выходы, но делать вам это крайне не рекомендую. На переназначение накладывается много ограничений. Например: ножки управления (CTRL pins) можно переназначать только в пределах 5-9 ножек порта A или B, при этом они все должны находиться на каком-либо одном порте. То же правило для входов от концевиков 10-15 ножки, и т.д.
Наконец самый интересный файл config.h. Обязательно пробегите его глазами. Он очень хорошо прокомментирован. Тут находятся важные настройки, которые нельзя настроить после прошивки. Вы сможете настроить скорость передачи данных; коды (символы) команд (лучше не менять); запрет/разрешение работы без базирования (#define HOMING_INIT_LOCK); количество осей; очередность базирования по осям (HOMING_CYCLE); два или один концевик на оси; разрешить M7; разрешить сигнал от двери безопасности; инвертирование выводов охлаждения, шпинделя; пределы изменения скорости подачи и скорости шпинделя во время работы; отключение аппаратных подтяжек входов; настройки управления шпинделем и многое другое!
Как работать с GRBL
После того как вы залили прошивку на контроллер, проверьте, что всё работает:
Во-первых, не забудьте переподключить контроллер простым отключением и подключением USB.
Во-вторых, в Windows вам надо поставить драйвер STM32 Virtual COM Port Driver STSW-STM32102 (для Linux не требуется) чтобы наш конроллер определился операционной системой как COM порт (VCP).
В-третьих, воспользуйтесь любой программой терминалом COM порта. Я пользуюсь программой Terminal v1.9b или встроенным в Arduino IDE монитором COM порта. Скорость передачи данных надо поставить 115200. В Terminal поставьте галочку «+CR» для передачи. Символ «$» надо отправлять как «$$», соответственно для отправки двух символов их надо вбить 4 раза. В Arduino IDE подходящий режим NL или CR (оба сразу и «нет конца строки» не подходит). Если всё сделано правильно, то при отправке команды «?» (без кавычек естественно) придет ответ о текущем статусе типа: . И уже с самого начала на контроллер можно отправлять команды перемещения, настроек, запросов. Например: х10 или в классическом виде G0 X10.
При перезаливке прошивки с измененными настройками в defaults.h необходимо выполнить full chip erase, иначе перезаписаться может только сама прошивка без настроек. Я делаю это через STM32 ST-LINK Utility.
Настройки контроллера GRBL
Пришло время настроить наш контроллер. Это можно сделать как вручную через терминал, так и через некоторые интерфейсы. Через терминал отправляем команду «$$» и контроллер вернет нам текущие настройки, сохраненные в его памяти. Их немного, вот они:
Изменить необходимый параметр можно отправив команду $номер параметра=новое значение, например: $100=300.
Подробнее об остальных командах и о многом другом вы можете почитать в wiki GRBL или в файлах в папке doc/markdown проекта. Однако это не обязательно для обычного пользователя, скорее эта информация предназначена для разработчиков интерфейса.
Программное обеспечение для работы с контроллером
Здесь скажу вам всего пару слов, поскольку в нашем проекте мы пользуемся своим ПО. Есть достаточно много бесплатных интерфейсов, достаточно просто загуглить. Я попробовал несколько.
Самый, наверное, популярный проект Universal Gcode Sender, о нем мы еще поговорим в следующих статьях. Я попробовал «Universal Gcode Platform 2.0 [nightly] / Jul 15, 2018» — все работает из коробки, даже для версии с четырьмя осями. Хотя отображение и управление четвертой осью отсутствует, но код из файла выполняется корректно. Готовится поддержка четвертой оси. Также можно посылать команды вручную. Приятным дополнением является пульт на смартфоне! Достаточно просто распознать QR-код и перейти по ссылке в браузере! С классической версией Universal Gcode Sender всплывают ошибки, но тоже вроде всё работает.
Вторая программа совсем простенькая: GcodeSender. Все работает.
Третья программа совсем свежая OpenCNCPilot и мне она понравилась. Вроде тоже работает, поддержка четвертой оси скоро будет включена в релиз, пока работает, но неудобно. Релиз тут.
Ярослав Власов
P.S.
- ПРОШУ ВОПРОСЫ ПО ВОЗМОЖНОСТИ ЗАДАВАТЬ В ОБСУЖДЕНИИ ТЕМЫ НА ФОРУМЕ
- ТЕПЕРЬ ДОСТУПНЫ ВСЕ 6 ОСЕЙ! (29.12.2018)
Используемые источники:
- http://cnc-design.ru/proshivka-grbl-nastroika-parametrov.html
- http://r13-project.ru/2020/02/28/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b8-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b8-grbl-1-1f/
- http://robomechs.com/grbl-1-1-smt32f103c8t6/