1. Конструкция
Конструкция, которую я выбрала, изготавливалась из фанеры. В качестве осей использовались шпильки, которые крутились шаговыми двигателями, и за счет этого платформа на гайках двигалась по оси. Одна ось крепилась на платформу другой одним краем. Из изготовления всего этого могу сказать:
- Если верхняя ось не имеет опоры с двух сторон, а крепится, как у меня, только одним краем, то необходимо заранее продумать баланс осей. Верхняя неизбежно будет крениться, если вообще не заваливать всю конструкцию весом своего «висящего» края.
- Линии рисунка могут идти волнами по размеру резьбы шпильки, а также из-за дрожания самой конструкции во время работы.
- Две вышеперечисленные проблемы приводят еще к одной: перо (в моем случае ручка) может писать неравномерно в разных частях страницы.
- Вес и размеры устройства тоже стоит рассчитать заранее, чтобы потом не выяснилось, что ваши двигатели не тянут такую нагрузку.
- И еще одна важная деталь: лучше всего везде где возможно использовать для крепления шурупы, гвозди и т.д. Конструкции на клее, пусть даже самом надежном, имеют свойство разваливаться в самый неожиданный момент. И в некоторых случаях после сборки основной части будет весьма сложно возвращаться к «переклеиванию» мелких, но очень важных, внутренних деталей, не разбирая готовые части.
2. Схема электрическая
Сама схема была предельно проста и не требовала даже пайки. Я даже взяла готовый CNC Shield специально для работы с ЧПУ. Тем не менее и тут есть свои нюансы:- Мой китайский аналог Arduino под кодовым именем WAVGAT на отрез отказался прошиваться как обычная Arduino Uno R3. В интернете утверждали, что подобные платы полностью совместимы со всем ПО arduino, но для работы с ним через IDE пришлось скачивать отдельную библиотеку WAVGAT Update. Так мне удалось залить скетч на плату, но само ПО по прежнему не хотело корректно работать. Я испробовала все найденные варианты исправления такого рода проблем (перегружала бутлодер платы, изменяла файлы boards и константы самой библиотеки с ПО), но итог остался тем же. Видимо, именно для этой задачи придется обзавестись классической Arduino.
- Еще одной проблемой стал запуск шаговых двигателей. Они жужжали, грелись, несмотря на холодные драйвера, но не двигались. Методично проверяя цепочку поэлементно поняла, что проблема в их подключении. Дело в том, что и в этот раз китайцы соригинальничали. Оказалось, что выводы двигателя содержат перекрещенные пары А-В. Если у обычного магазинного двигателя пары шли по порядку 2В-2А-1А-1В, то у китайцев почему-то оказались 2В-1А-2А-1В. Выяснить это можно «пропикиванием» схемы мультиметром в соответствующем режиме: пищат парные А-В выходы.
- И еще, как оказалось, безобидный маломощный сервопривод вполне способен безвозвратно «подпалить» всю плату arduino при длительной чрезмерной нагрузке на него. При этом плата продолжит работу, но будет иногда прерываться на середине, останавливаясь на командах сервопривода.
3. ПО
Тут есть варианты:
- Проще всего взять замечательную простенькую программу BenВox. Она специализирована именно под работы с ЧПУ и проста в установке и обращении. Минус этого варианта в его ограниченности. Во-первых прошивка для платы в комплекте ПО содержится уже в hex-файле, потому возникают проблем с ее редактированием. Да и функционал в общем не особо обширен, похож на простейший графический редактор. Если не хотите вдаваться в подробности работы всего этого механизма, то можно поработать с этим вариантом.
- Немного сложнее, но и перспективней работа через GRBL-прошивку. Эту библиотечку можно без проблем взять в интернете и она дает значительно больше возможностей, чем BenBox. Но для работы через этот механизм надо разобраться с начальной настройкой всего этого.
- Итак, скачиваем и распаковываем grbl-servo библиотеку. Теперь ее можно залить на плату через IDE, просто отыскав ее среди примеров.
- Для пересылки непосредственно команд устройству понадобится Universal Gcode Sender (или другое подобное ПО). После его установки на компьютер в нем открываем канал связи с платой по com-порту, к которому подсоединена плата.
- Для начальной и последующих настроек платы в командной строке приложения набираем «$$». По этой команде получаем полный набор базовых настроек платы, которые можно менять, настраивая нужные параметры. К примеру, команды «$110=380» и «$111=380» ставят скорость двигателей на осях Х и У на 380 мммин. Важными пунктами настройки являются скорость и ускорение двигателей, направление осей (прямое или инверсное). Подробнее инструкцию по такой настройке можно найти в интернете.
- Также есть возможность машинного контроля над двигателями (вкладка machine control) и серво (команды М5(поворот в начальное положение) и М3 s90(поворот на 90 или любое другое кол-во градусов)).
- Далее надо подготовить изображение для работы. Для этого тоже понадобится доп. ПО, к примеру, Inkscape. Оно похоже на любой другой графический редактор и подробно работу с ним можно изучить также в интернете. Но есть пара важных замечаний:
- Для начала надо задать правильные размеры страницы в свойствах, чтобы размеры вашего изображения не оказалось больше возможностей плоттера. Так же необходимо заменить пиксели на миллиметры в единицах измерения.
- После создания изображения жмем ctrl+shift+C и идем в меню — расширения — MI GRBL… — задаем скорости двигателей и угол поворота серво — сохраняем изображение в формате gcode.
- Наконец возвращаемся в Universal Gcode Sender и во вкладке File Mode открываем наше gcode-изображение. Кнопкой Visualize можно графически отслеживать работу программы, а в окне command Table можно проследить по командное выполнение. Осталось только запустить все это и наблюдать за результатом.
В итоге работа над подобным устройством оказалось сложной и кропотливой, а конечный результат не идеальным. Но подобный опыт интересен и не бесполезен. Поэтому, надеюсь, кому-то пригодятся и помогут избежать лишних «граблей» мои советы.
Программа управления станком CNC USB Controller работает в операционных системах Windows XP и Windows7.
1.Установка программы.
Для установки программы требуется скачать или запустить с диска установочный файл CNCUSB_Setup.exe
После установки программы можно подключить плату контроллера к USB разъему контроллера.
При первом запуске программа запросит ключ лицензии , который необходимо ввести.
2. Настройка программы.
Переход к настройке через меню файл->настройки, рисунок 1
Рисунок 1
2.1 Настройка осей, рисунок 3, здесь устанавливаем количество осей 3, для станков с поворотной осью 4.
Рисунок 2
Здесь же, при необходимости, можно изменить направление перемещения по любой оси, установкой галочки в поле «реверс».
Если известен шаг винта и установленный на контроллере микрошаг(коэффициент дробления шага), то можно перейти пропустить пункт 2.2 и продолжить настройку программы с пункта 2.3
2.2 Кнопка «Калибровка» позволяет вычислить величину «Шагов/Еденицу».
Управляя вручную перемещением каретки с инструментом станка, с помощью кнопок «правый Ctrl» + стрелки клавиатуры, выводим каретку примерно на середину.
Выбираем калибруемую ось, рисунок 3
Рисунок 3
Нажимаем «Next» и указываем расстояние перемещения, рисунок 4.
Рисунок 4
Заносим расстояние на которое переместилась каретка с инструментом, рисунок 5
Рисунок 5
Нажимаем «Calculate» и программа выдаст значение «Шагов/Еденицу». Нажав «Set», программа сохранит эти значения , рисунок 6, и переходим к пункту 2.4
Рисунок 6
2.3 Установка скоростей холостых перемещений и передаточных чисел.
Меню Файл->Настройки->Оси->Настройки , рисунок 7
Настройка передаточных чисел для определенного ходового винта заносится в поле «Шагов/Еденицу».
Рисунок 7 Настройка передаточного числа, скорости холостых перемещений и ускорений.
Передаточные числа, скорости и ускорения устанавливаются раздельно для каждой оси,
Передаточное число (для установленного ходового винта ЧПУ станка)
В окошке «Шагов/Еденицу» данные вводятся в соответствии с таблицей для винтовых передач, соединенных напрямую с двигателем, имеющим угол одного шага 1,8 градуса.
Шаг винта мм |
Полный шаг |
1/2 шага |
1/8 шага |
1/16 шага |
1,5 (M10) | 133,33333 | 266,66666 | 1066,66666 |
2133,33333 |
1,75 (M12) | 114,28571 | 228,57142 | 914,28571 |
1828,57142 |
2,0 (TR10) | 100 | 200 | 800 |
1600 |
3,0 (TR12) | 66,66666 | 133,33333 | 533,33333 |
1066,66666 |
5,0 (ШВП1605) | 40 | 80 | 320 |
640 |
Для Моделист2030 c винтом М12 значение «Шагов/Еденицу» устанавливаем равным «228.57142»
Для алюминиевого станка CNC-2020AL 200мм х 200мм c винтом TR10 значение «Шагов/Еденицу» устанавливаем равным «200»
Для Моделист3030 c винтом TR12 значение «Шагов/Еденицу» устанавливаем равным «133.333333»
Для Моделист3040, Моделист4060, Моделист4080 и алюминиевых станков (кроме модели 200мм х 200мм) c ШВП1605 значение «Шагов/Еденицу» устанавливаем равным «80».
Cкорость перемещений ставим не более 3000 для алюминиевых, не более 2500 для станков 3040 и 4060 с ШВП1605, не более 1000 для моделист2020 и 2030, ускорение устанавливаем равным «50», то есть как на картинке, рисунок 7.
Для оси Z значение «Шагов/Еденицу может отличаться от значений других осей.
Устанавливаем для оси Z:
Для Моделист2030 c винтом оси Z М12 значение «Шагов/Еденицу» устанавливаем равным «228,57142»
Для Моделист3030 и станка из алюминия 200мм х 200мм c винтом оси Z TR10 значение «Шагов/Еденицу» устанавливаем равным «200»
Для алюминиевых станков (кроме станка 200мм х 200мм) c винтом оси Z ШВП1605 значение «Шагов/Еденицу» устанавливаем равным «80»
Для Моделист3040-4060-4080 c винтом оси Z TR12 значение «Шагов/Еденицу» устанавливаем равным «133.333333».
2.4 Программные ограничения Меню Файл->Настройки->Оси->Ограничения
3 Описание интерфейса программы CNC USB Controller.
3.1 Главное окно программы, на рисунке 8.
Рисунок 8 Главное окно программы CNC USB Controller.
3.2 Вид рабочей области и окна G-кода, рисунок 9
Рисунок 9
3.4 Панель управления ручным перемещением инструмента.
Рисунок 11
3.5 Описание кнопок управления.
Обнулить все координаты
Переместить в точку 0,0,0
Переместить в точку 0,0,Z не изменяя координаты по Z
Переместить в точку с заданными координатами X, Y, Z
4. Создание управляющей программы(G-кода) по растровому изображению из файлов *.jpg
Файл -> открыть -> выбираем наше изображение.
Рисунок 12.Где:Размер — общий размер.Высота — общая высота работы, такой же будет и высота безопасного перемещения.Диаметр — диаметр инструмента, так же это расстояние между проходами.Детализация — на сколько срезать вертикальные плоскости.Инверсия — инверсия изображение.5 Масштабирование.G-код Маштаб … Функция «Масштаб» позволяет изменить размер вашей уже загруженной в G-коде модели.
Рисунок 13
6 Настройка Датчика инструмента (датчик нуля)
6.1 Подключить датчик, один провод на LZ- второй провод на клемму 12В
6.2 Разрешить программе использование датчика инструмента.
Для этого в меню Файл/Настройки/ Датчикинструмента установить галочку «Разрешить», рисунок 14.
Рисунок 14
Нажать кнопку «Измерить смещение по Z», рисунок 15, кнопка примет оранжевый цвет, нажать кнопку «смещение — Текущее только Z»(она расположена выше, над кнопкой «Измерить смещение по Z»), снова нажать «Измерить смещение по Z». Станок опустит с заданной скоростью фрезу до касания датчика и автоматически поднимет инструмент вверх до заданной безопасной высоты.
Рисунок 15
Настройка KCam
Статьи по подготовке файлов резки для фрезерного станка в программе ArtCam:
Создание УП в программе ArtCAM
Подготовка файла 3d резки из карты высот в ArtCam v10
Подготовка файла 3d резки в ArtCam
3d и 2d Модели для обработки
После подключения контроллера к программе 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. В результате этого новое значение будет сохранено в памяти контроллера.
Используемые источники:
- https://habr.com/post/432818/
- https://cncmodelist.ru/stati/165-nastroika-cncusb-controller.html
- http://cnc-design.ru/proshivka-grbl-nastroika-parametrov.html