Соберите графоплоттер с двумя точными осями на шаговых двигателях
Графоплоттер, который сам определяет нулевую координату, рисует квадрат 100 mm с зазором при замыкании не более нескольких десятых долей миллиметра и повторяет его.
Что вы собираете
Декартов графоплоттер: две ремённые оси под прямым углом, поднимающееся перо и контроллер, который знает положение пера, потому что при запуске определил нулевую координату по выключателю и с тех пор подсчитывает каждый импульс.
Стоит чётко объяснить, почему это хорошая первая машина высокой точности, хотя проект не самый эффектный на сайте. Все остальные разработки здесь — роботы, следующие по линии, роботы, обходящие препятствия, балансирующие роботы — имеют обратную связь. Датчик видит мир, код реагирует, ошибки непрерывно корректируются. В этой машине ничего из этого нет. Ничто на ней не измеряет положение пера. Линия оказывается в нужном месте на бумаге только потому, что все заложенные предположения оказались верными.
Поэтому это необычно честный учебный пример. Робот, следующий по линии, даже если дрейфует, продолжает следовать за ней. Графоплоттер, который дрейфует, рисует незамыкающийся квадрат, и разрыв прямо виден на бумаге, в миллиметрах, точно показывая величину ошибки.
Число, определяющее проект
Нарисуйте квадрат 100 mm и измерьте зазор там, где последний угол должен совпасть с первым.
Это единственное измерение — главный критерий оценки проекта. Его ценность в том, что форма ошибки указывает на причину:
| Поведение квадрата | Причина | Где устраняется |
|---|---|---|
| Всегда на несколько процентов больше или меньше | Неверное число шагов/mm | Калибровка |
| Разомкнут на одну и ту же величину при любом размере | Люфт | Натяжение ремня и стопорные винты |
| Разомкнут на разную величину каждый раз | Потеря шагов | Ток, скорость, ускорение |
| Замыкается, но имеет форму параллелограмма | Оси не перпендикулярны | Рама |
| На холодную замыкается, при быстром движении размыкается | Превышена частота захвата или скорость на повороте | Ускорение или 24 V |
Четыре из пяти случаев — настройки. Один — проблема рамы. Большая часть навыка состоит в том, чтобы определить, какой это случай, до начала изменений.
Перечень компонентов
| Компонент | Кол-во | Стоимость | Примечания |
|---|---|---|---|
| Шаговый двигатель NEMA 17, 1.5–1.8 A | 2 | £18–28 | Корпус 40 mm. Избегайте двигателей-«блинов» 20 mm. |
| Драйвер A4988 | 2 (+1 запасной) | £6–12 | Или DRV8825 — проверьте другую формулу для Vref |
| Arduino Uno | 1 | £4–20 | Подойдёт Nano, он меньше |
| CNC shield v3 | 1 | £5 | Необязательно, но рекомендуется — содержит конденсатор большой ёмкости |
| Сервопривод SG90 | 1 | £2 | Подъём пера |
| Рычажный микровыключатель | 2 | £1 | По одному на ось, на минимальном конце |
| Ремень GT2, 6 mm | 2 m | £5 | Со стекловолоконным сердечником. Чисто резиновый растягивается. |
| Шкив GT2 на 20 зубьев, посадочное отверстие 5 mm | 2 | £4 | Именно здесь получаются 80 steps/mm |
| Натяжной шкив GT2 | 4 | £5 | Гладкое отверстие, без зубьев, для обратных ветвей |
| Гладкий стержень 8 mm, 400 mm | 4 | £10 | Или экструзия 2020 с колёсами |
| Линейные подшипники LM8UU | 8 | £6 | По два на конец стержня |
| Источник питания 12–24 V, 2 A+ | 1 | £8–15 | 24 V, если нужна скорость |
| Электролитический конденсатор 100 µF, 35 V+ | 1 | £0.20 | Обязательный; если щиток не используется, установите его отдельно |
| Мультиметр | 1 | £10–25 | Нужен для Vref. Замены нет. |
| Крепёж M3, напечатанные кронштейны | — | £5 | Или фанера, вырезанная лазером |
Примерно £90–130. Мультиметр и источник питания можно использовать повторно; на механические части движения приходится около £60.
Стоит назвать две ложные экономии. Слабый чисто резиновый ремень GT2 растягивается достаточно, чтобы проявиться как люфт, а вариант со стекловолоконным сердечником стоит на фунт больше. Покупка ровно двух драйверов вместо трёх означает, что первый, уничтоженный из-за забытого конденсатора, остановит проект на неделю.
Как всё соединено
12–24 V ──┬── 100 µF ──┬── VMOT (X driver)
│ └── VMOT (Y driver)
└── GND ─────┬── Arduino GND
│
Arduino Uno │
D2 ── X STEP D5 ── Y STEP │ X driver ── coil A ── motor X
D3 ── X DIR D6 ── Y DIR │ └ coil B
D8 ── ENABLE (both, active low) │ Y driver ── coil A ── motor Y
D9 ── X endstop (INPUT_PULLUP) │ └ coil B
D10 ── Y endstop (INPUT_PULLUP) │
D11 ── pen servo signal ────────────┴── servo 5 V from the Arduino
Единственное неочевидное правило: прокладывайте провода концевых выключателей вдали от кабелей двигателей. Кабель шагового двигателя является источником импульсного тока, и провод концевого выключателя, идущий рядом с ним на протяжении 300 mm, превращается в антенну. Если машина правильно находит нулевую координацию при отключённых двигателях и не может при их работе, проблема только в этом.
Сборка по этапам
Каждый этап заканчивается проверкой. Не пропускайте их: каждый обнаруживает неисправность, которую гораздо сложнее найти позже, когда неправильно работают ещё три вещи.
1. Один двигатель на рабочем столе. Подключённый драйвер, заданный Vref, ENABLE на нижнем уровне и 3200 импульсов.
→ Критерий: вал делает ровно один оборот, и отметка на нём десять раз подряд возвращается в то же место.
2. Vref на обоих драйверах. Рассчитайте по номиналу двигателя и сопротивлениям резисторов вашей платы: проверьте маркировку R100 или R050.
→ Критерий: оба мультиметра показывают отклонение от цели не более 0.02 V, а после десяти минут удержания двигатели тёплые, но палец можно оставить.
3. Рама, обе оси движутся. Ремни установлены и натянуты — плотно, но не как струна гитары. → Критерий: при толкании рукой при отключённых двигателях каждая ось плавно проходит весь ход без заеданий. Устраните заклинивание сейчас, иначе оно навсегда будет казаться потерей шагов.
4. Шаги на миллиметр. Задайте 100 mm по каждой оси, измерьте линейкой, скорректируйте по измеренному отношению и измерьте снова. → Критерий: заданные 100 mm дают 99.5–100.5 mm по обеим осям при двух измерениях.
5. Люфт. Подойдите к отметке слева и запишите положение, затем справа и запишите положение. → Критерий: менее 0.2 mm. Если больше, натяните ремни и проверьте, что стопорные винты шкивов находятся на лыске вала.
6. Найдите предел, затем отойдите. Увеличивайте скорость и ускорение до пропуска шагов осью, затем установите оба значения на 50–60% от найденного. → Критерий: двадцать циклов туда-обратно при выбранных настройках возвращаются к той же отметке в пределах 0.1 mm.
7. Определение нулевой координаты. Установите концевые выключатели и реализуйте трёхфазный поиск, затем выполните десять циклов определения нуля, каждый раз нанося отметку. → Критерий: все десять отметок находятся в пределах 0.05 mm. И ещё: отключите концевой выключатель, выполните определение нуля и убедитесь, что машина прекращает попытку с ошибкой, а не продолжает упираться.
8. Подъём пера. Установите сервопривод и подберите углы подъёма и опускания экспериментально. → Критерий: перо равномерно и с небольшим усилием прижимается к бумаге по всему рабочему полю. Жёстко установленное перо будет сильнее давить с одной стороны неровного поля; пружинное или подвешенное под действием тяжести гораздо менее требовательное.
9. Квадрат. Найдите нулевую координату, затем нарисуйте на бумаге 100 mm. → Критерий: последний угол совпадает с первым в пределах 0.3 mm, а три рисунка располагаются в одном месте.
Как выглядит хороший результат
| Измерение | Первая рабочая сборка | После калибровки | Предел |
|---|---|---|---|
| Замыкание квадрата 100 mm | 1–3 mm | 0.2–0.3 mm | Отсутствие перекоса рамы |
| Повторяемость определения нуля | 0.3 mm | 0.02–0.05 mm | Повторяемость выключателя |
| Люфт | 0.5 mm | 0.05–0.15 mm | Посадка ремня и шкива |
| Скорость рисования | 20 mm/s | 100–200 mm/s | Частота захвата, затем скорость на повороте |
| Размер микрошага | — | 0.0125 mm | Намного меньше любого другого параметра |
Последние две строки вместе содержат главный урок проекта. Разрешение двигателя — 0.0125 mm — примерно в двадцать раз мельче погрешности, которую вы действительно получите. Ничто в итоговой точности не ограничено шаговым двигателем. Всё определяют ремень, рама и отсутствие перекоса.
Это стоит понять до покупки более мощного двигателя ради исправления проблемы рисования, и именно поэтому симулятор шаговых двигателей включён в путь обучения: он показывает, что при реалистичной нагрузке ротор уже отстаёт на три или четыре микрошага от положения, которое предполагает драйвер, независимо от выбранного микрошага.
Важные замечания по оборудованию
24 V вместо 12 V, если есть выбор. Оба варианта работают. Разница возникает там, где начинает падать момент: примерно 280 rpm при 12 V против 600 rpm при 24 V для одного двигателя и того же ограничения тока. На шкиве GT2 на 20 зубьев это примерно 190 mm/s против 400 mm/s до момента, когда машина начнёт испытывать затруднения. Если графоплоттер всегда будет двигаться медленно, достаточно 12 V.
Установите перемычки MS1–MS3 на верхний уровень. Шестнадцатишаговый режим не повышает точность машины, но устраняет звон двигателей на каждом шаге, что на лёгкой раме отличает звук нормальной машины от звука разъярённой осы. Цена — 8 000 импульсов в секунду при 100 mm/s, что Uno выдерживает.
Натяните ремни плотно, но не туго. Чрезмерное натяжение нагружает подшипники двигателя и добавляет трение, расходующее запас момента. Слишком слабое натяжение добавляет люфт. Нужно ощущение тугой, но не звонкой струны.
Затяните оба стопорных винта на лыске шкива. Шкив на 20 зубьев, который проворачивается на валу, создаёт ошибку, неотличимую от потери шагов и не реагирующую ни на одно средство исправления потери шагов. Loctite здесь вполне уместен.
Когда что-то идёт не так
| Симптом | Причина | Исправление |
|---|---|---|
| Двигатель гудит, но не вращается | Пары обмоток перепутаны или нет рампа ускорения | Проверьте пары мультиметром; добавьте рамп |
| За каждый проход одна ось уходит дальше | Потеря шагов на рампах ускорения | Уменьшите ускорение, повысьте Vref или замедлите движение |
| Медленно идёт точно, при высокой скорости пропускает шаги | Превышена скорость на повороте | Перейдите на 24 V — больший ток не поможет |
| Квадрат постоянно на 2% больше | Неверное число шагов/mm | Откалибруйтесь по линейке и исправьте отношение |
| Квадрат разомкнут на постоянную величину | Люфт | Натяните ремни; проверьте стопорные винты |
| При каждом запуске нулевая координата находится в разном месте | Нет медленного второго прохода | Добавьте повторный поиск при 1–3 mm/s |
| Отдельно находит нуль, но не при рисовании | Провод концевого выключателя наводит шум от драйвера | Перепроложите его; добавьте 100 nF на «землю» у вывода |
| Драйвер выходит из строя при включении | Нет конденсатора большой ёмкости на VMOT | 100 µF как можно ближе к плате |
| Драйверы отключаются посреди рисования | Защита по температуре | Уменьшите Vref; добавьте радиаторы и обдув |
| Перо тянет с одной стороны листа | Рабочее поле неровное или перо установлено жёстко | Выровняйте поле; подвесьте перо на пружине, а не жёстко |
| Линии колеблются при одной определённой скорости | Резонанс в середине диапазона | Немного измените скорость или добавьте массу порталу |
| Всё настроено правильно, но формы перекошены | Оси не под прямым углом | Выровняйте раму — настройка это не исправит |
Куда двигаться дальше
Установите GRBL. После подтверждения работоспособности машины прошивка GRBL даёт полноценный интерпретатор G-code, в котором уже написаны определение нулевой координаты, мягкие пределы, системы координат и ускорение. Настройте $100 и $101 по откалиброванному числу шагов/mm, и машиной можно будет управлять из любого CAM-инструмента.
CoreXY. Те же два двигателя, оба неподвижно закреплены на раме, а ремни соединены так, что X и Y являются комбинациями двух двигателей, а не каждый соответствует одному. Меньше движущейся массы — значит, выше скорость и точность, — но появляется слой кинематического смешивания между координатами и двигателями.
Лазер вместо пера. Механически это та же машина с другим инструментом, но диодный лазер требует реальных мер безопасности для глаз, защитного ограждения и блокировок. Считайте это отдельным проектом, а не простой заменой.
Ось Z с ходовым винтом. Если нужно рисовать на поверхности с перепадом высот или перейти к лёгкому гравированию, винт T8 обеспечивает 400 steps/mm и удерживает положение при отключённом питании.
Шаговые двигатели с замкнутым контуром. Единственная модернизация, полностью устраняющая самый опасный отказ этого проекта. Энкодер на задней стороне каждого двигателя превращает незаметную потерю шага в коррекцию или сигнал тревоги. Стоимость в три-четыре раза выше и действительно не нужна, если все перечисленные этапы пройдены.
Дорожная карта проекта
Путь сборки
Следуйте по дереву технологий от деталей к работающему роботу. Каждый узел открывается, когда выполнены его предварительные условия, а ваш прогресс сохраняется на этом устройстве.
0 / 20 выполнено
Компоненты
- Исполнительный механизмШаговый двигатель NEMA 17Позиционирование без энкодера: двигатель удерживает положение, пока хватает момента.
- ДрайверДрайвер шагового двигателя A4988Регулятор тока с подстроечным резистором: правильно задайте одно число — всё остальное заработает.
- КонтроллерArduino UnoПрощающая 8-битная плата, с которой большинство знакомится с робототехникой.
- ДатчикРычажный микропереключательЕдинственный бит данных, который сообщает роботу, что он уже столкнулся с препятствием.
- Исполнительный механизмСервопривод SG90Сервопривод массой девять граммов для большинства роботизированных рук, захватов и механизмов поворота.
- ПитаниеБатарейный блок питания роботаРазница между работающим роботом и роботом, который постоянно перезагружается.
Руководства на этом пути
- Средний · 35 minКак работают шаговые двигатели: угол отставания и потеря шаговУгол отставания объясняет всё поведение шагового двигателя. Разберитесь в нём, и потеря шагов перестанет быть загадкой.
- Начальный · 30 minПодключение A4988 и Vref: задание предела тока шагового двигателяЕдинственная настройка, от которой зависит, будет ли шаговый двигатель работать или сгорит: установка Vref мультиметром.
- Начальный · 25 минШагов на миллиметр: ремни, ходовые винты, разрешениеОдно число связывает импульсы с миллиметрами. Рассчитайте его, а затем подтвердите измерением.
- Средний · 30 minВозврат в начало по концевикам и системы координатПочему каждый станок с ЧПУ (CNC) при запуске доезжает до выключателя и что означает установленное им число.
- Средний · 40 минПрофили движения: трапецеидальное ускорение и S-криваяПлавно разгоните перемещение вместо его мгновенного задания: трапецеидальные профили, ограничения рывка и цена S-кривой.
- Средний · 30 minЛюфт редуктора в роботах: как измерить и устранитьУ каждого редуктора есть люфт. Узнайте его величину и цену, которую он незаметно налагает на робота.
- Начальный · 30 минПочему delay() ломает роботов: синхронизация с помощью millis()Робот в delay() слеп. Замените его на millis() и сравнивайте значения с учётом переполнения.
- Начальный · 30 минПочему ваш робот перезагружается при запуске двигателейПерезагрузка, похожая на ошибку кода, почти всегда связана с аккумулятором. Спланируйте ток, а затем измерьте просадку напряжения.
Попрактикуйтесь до сборки схемы
Настройте его в интерактивном симуляторе
Путь сборки проходит через лабораторию в браузере. Добейтесь правильного поведения здесь, а затем перенесите настройки на реального робота.
Часто задаваемые вопросы
Насколько точным может быть любительский графоплоттер?
Аккуратно собранный графоплоттер с ремённым приводом повторяет положение с точностью примерно 0.1–0.2 mm и замыкает квадрат 100 mm с погрешностью в несколько десятых долей миллиметра. Ограничение не в двигателе: при шаге 1/16 и шкиве GT2 на 20 зубьев микрошаг равен 0.0125 mm, что намного меньше любой другой погрешности машины. Ошибку задают натяжение ремня, жёсткость рамы, люфт в шкивах и непараллельность осей. Если погрешность больше половины миллиметра, измерьте эти четыре параметра до изменения настроек прошивки.
Нужен ли щиток CNC или можно собрать схему на макетной плате?
Подойдёт любой вариант. Щиток CNC стоит около пяти фунтов, предоставляет разъёмы для драйверов, выводит концевые выключатели и шпиндель и содержит конденсатор большой ёмкости, устраняющий самую частую причину выхода драйвера из строя. Для двух осей макетная плата подходит, если добавить собственный конденсатор 100 µF между VMOT и разнести провода двигателей и сигналы шага, но плата стоит дешевле второго драйвера, который вы иначе уничтожите.
Почему для пера нужен сервопривод, а не третий шаговый двигатель?
Перу нужны только два положения, вверх и вниз, и не нужна точность ни в одном из них. Бюджетный сервопривод выполняет это одним сигнальным выводом без драйвера, то есть идеально подходит для своей роли. Ось Z на шаговом двигателе потребовала бы третьего драйвера, третьего набора выводов, ходового винта и концевого выключателя — только для воспроизведения того, что сервопривод за два фунта делает одной строкой кода.
Ремень или ходовой винт для осей X и Y?
Однозначно ремень. Ремень GT2 обеспечивает 80 steps/mm и спокойно работает при 200 mm/s и выше; ходовой винт T8 обеспечивает 400 steps/mm, но требует в пять раз больше импульсов на то же расстояние, что на Arduino Uno ограничивает скорость примерно 30 mm/s. Графоплоттер переносит почти ничего и должен быстро перемещаться над страницей, а это именно то применение, в котором хороши ремни. Винты оправданы на оси Z, удерживающей вес.
Почему мой квадрат не замыкается?
Есть четыре различимые причины. Если ошибка составляет постоянный процент от расстояния, неверно задано число шагов на миллиметр: откалибруйтесь по линейке. Если независимо от размера она постоянна, это люфт, поэтому натяните ремни и проверьте стопорные винты шкивов. Если она меняется каждый раз, теряются шаги, поэтому уменьшите ускорение или повысьте ток. А если квадрат является параллелограммом, а не разомкнутой фигурой, оси не перпендикулярны друг другу, и это проблема рамы, которую не исправить настройкой.
Можно ли запустить GRBL вместо написания прошивки?
Да, и после работоспособности машины это разумный путь. GRBL превращает Uno в интерпретатор G-code с уже реализованными определением нулевой координаты, мягкими пределами, ускорением и системами координат, а число шагов на миллиметр задаётся командами $100 и $101. Простую версию стоит написать первой, потому что одновременная отладка машины и конфигурации прошивки намного сложнее их последовательной отладки.