Arduino и шаговый мотор
Описание
Шаговый мотор, в отличие от обычного мотора постоянного вращения, вращается пошагово и позволяет точно установить свой вал на заданный угол. В отличие от сервопривода не имеет обратной связи по углу поворота (не знает, где сейчас находится вал), но зато может вращаться без ограничений. Шаговые моторы используются в ЧПУ станках и прочих устройствах с точным позиционированием частей механизма (2D/3D принтеры, манипуляторы, плоттеры…). В наборе GyverKIT идёт шаговый мотор 28BYJ-48 с драйвером ULN2003:
- Питание: 5V
- Шагов на оборот (сам мотор): 32
- Передаточное отношение редуктора: 1:63.68395
- Шагов на оборот (на выходном валу): 2038
- Максимальная скорость (шагов в секунду): 400
- Максимальная скорость (оборотов в минуту): 12
Фазы мотора выведены следующим образом:
Подключение
Мотор управляется через драйвер, который по сути усиливает сигнал с пинов микроконтроллера (подключать моторы напрямую к пинам нельзя!). Драйвер подключается к питанию 5V, а 4 управляющих входа – к любым цифровым пинам МК. Фаза мотора потребляет около 100 мА, поэтому возможно питание драйвера напрямую от платы Arduino.
Библиотеки
Для шаговых моторов существует несколько библиотек, самые известные из них:
- Stepper – стандартная (идёт в комплекте с Arduino IDE) библиотека с минимальными возможностями
- AccelStepper – позволяет вращать мотор с плавным ускорением и торможением
- GyverStepper – моя библиотека с большим количеством возможностей и эффективными алгоритмами движения, читайте на странице библиотеки. Также есть расширенная документация
В примерах на этом сайте мы будем использовать GyverStepper как самую удобную и функциональную. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverStepper. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Воспользуемся версией библиотеки GyverStepper2 (входит в набор GyverStepper). Создаём объект GStepper2
, в угловых скобках указываем тип драйвера STEPPER4WIRE
, так как используем 4х проводной драйвер. Далее в круглых скобках – количество шагов на один оборот и пины в порядке (фаза А1, фаза А2, фаза В1, фаза В2). Из второй картинки (с описанием проводов мотора) видно, что первая фаза это провода 2 и 4, а вторая – 3 и 1. Драйвер не меняет порядок проводов, поэтому в программе нам нужно будет указать пины в порядке (1, 3, 2, 4), т.е. центральные нужно поменять местами. На схеме я подключил драйвер к пинам D2, D3, D4, D5, и в программе укажу их как (2, 4, 3, 5). Если прописать по порядку пинов – мотор будет работать некорректно!
Данный пример просто крутит мотор на один пол оборота, затем возвращает обратно. Каждый раз ждём, когда мотор приедет на позицию.
Библиотека позволяет двигать мотор не блокируя выполнение кода, поэтому можно переписать следующим образом:
В библиотеке также есть поддержка движения с ускорением, добавим настройку setAcceleration()
Также в библиотеке можно отправить мотор вращаться с заданной скоростью
Домашнее задание
- Изучить остальные возможности библиотеки