Ардуино шаговый двигатель: управляем с помощью микроконтроллера

Принцип работы, примеры, и схемы подключения шаговых двигателей (Stepper Motor) 28BYJ-48, Nema 7 к Ардуино с помощью ULN2003.

Обзор драйвера A4988

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

  • Высокая точность позиционирования и повторяемости — качественные ШД имеют точность не хуже 2,5 % от величины шага, при этом данная ошибка не накапливается при последующих шагах;
  • Шаговый двигатель может быстро стартовать, останавливаться и выполнять реверс;
  • Четкая взаимосвязь угла поворота ротора от количества входных импульсов (в штатных режимах работы) позволяет выполнять позиционирование без применения обратной связи;
  • Шаговые двигатели обеспечивают получение сверхнизких скоростей вращения вала без использования редуктора;
  • Шаговые двигатели работают в широком диапазоне скоростей, поскольку. скорость напрямую зависит от количества входных импульсов.

Шаговые двигатели применяются там, где требуется высокая точность перемещений. Примеры использования – принтеры, факсы и копировальные машины, станки с ЧПУ, 3D-принтеры. Для управления шаговыми двигателями используют специальные устройства – драйверы шаговых двигателей. Популярный драйвер шагового двигателя А4988 (рис. 1) работает от напряжения 8 – 35 В и может обеспечить ток до 1 А на фазу без радиатора (и до 2 A с радиатором). Модуль A4988 имеет защиту от перегрузки и перегрева. Одним из параметров шаговых двигателей является количество шагов на один оборот 360°. Например, для шаговых двигателей Nema17 это 200 шагов на оборот, т.е 1 шаг равен 1.8°. Драйвер A4988 позволяет увеличить это значение за счёт возможности управления промежуточными шагами и имеет пять режимов микрошага (1(полный), 1/2, 1/4, 1/8 и 1/16).

A4988-Drajver-shagovogo-dvigatelya.jpg

Рисунок 1. Драйвер биполярных двигателей A4988

ДОКУМЕНТАЦИЯ

Инициализация

Библиотека поддерживает два типа драйверов:

  • STEPPER2WIRE – специализированный 2-х проводной драйвер для шагового мотора с протоколом STEP-DIR, например A4988, DRV8825, TMC2208 и прочие.
  • STEPPER4WIRE и STEPPER4WIRE_HALF – 4-х проводной драйвер, т.е. полномостовой (например L298N) или транзисторная сборка (например ULN2003).
    • STEPPER4WIRE управляет мотором в полношаговом режиме (выше скорость и момент).
    • STEPPER4WIRE_HALF – в полушаговом (меньше скорость и момент, но больше шагов на оборот и выше точность).

При инициализации указывается тип драйвера, количество шагов на оборот и пины:

  • GStepper< STEPPER2WIRE> stepper(steps, step, dir); // драйвер step-dir
  • GStepper< STEPPER2WIRE> stepper(steps, step, dir, en); // драйвер step-dir + пин enable
  • GStepper< STEPPER4WIRE> stepper(steps, a1, a2, b1, b2); // драйвер 4 пин
  • GStepper< STEPPER4WIRE> stepper(steps, a1, a2, b1, b2, en); // драйвер 4 пин + enable
  • GStepper< STEPPER4WIRE_HALF> stepper(steps, a1, a2, b1, b2); // драйвер 4 пин полушаг
  • GStepper< STEPPER4WIRE_HALF> stepper(steps, a1, a2, b1, b2, en); // драйвер 4 пин полушаг + enable

Где steps – количество шагов на один оборот вала для расчётов с градусами, step, dir, a1, a2, b1, b2 – любые GPIO на МК, en – пин отключения драйвера EN, любой GPIO на МК. Пин en опциональный, можно не указывать.

Для 4-х пиновых драйверов: a1 и a2 – первая обмотка (первая фаза), b1 и b2 – вторая обмотка (вторая фаза). При использовании мотора 28byj-48 с родным драйвером нужно поменять крайние пины местами (например, подключаем D2-IN1, D3-IN2, D4-IN3, D5-IN4, но в программе меняем 5 и 2: stepper(2048, 5, 3, 4, 2);, потому что на драйвере фазы выведены через одну, вот картинка). При подключении через мостовой драйвер – подключать и указывать пины по порядку выхода фаз из мотора (см. последнюю схему выше).

Количество шагов на оборот нужно для работы функций, которые устанавливают или читают параметр в градусах. Если они не нужны – количество шагов можно поставить любое (единичку). Если нужно – количество шагов нужно указывать с учётом редукторов и микрошагов:

  • Пример 1: есть мотор NEMA 17, он имеет 200 полных шагов на оборот (по документации). Подключен через драйвер с настроенным микрошагом 1/16. При создании объекта библиотеки нужно указать 200*16 шагов.
  • Пример 2: есть мотор 28byj-48-5v, имеет 32 полных шага на оборот и редуктор с соотношением 63.68395:1. Подключен через микросхему ULN2003. Итоговое количество шагов на оборот составляет 63.68395*32 == 2038 для режима полного шага (STEPPER4WIRE).
  • Пример 3: подключим тот же самый мотор 28byj-48-5v, но в режиме полушага (STEPPER4WIRE_HALF). Количество шагов на оборот удвоится (32*2 == 64) и, с учётом редуктора, станет равным 4076.

Время шага [NEW!]

Для драйверов STEP-DIR сделана задержка между переключением состояния пина STEP, эта задержка является минимальной, т.е. она может быть больше, чем нужно, но если будет меньше – возможна нестабильная работа драйвера. По умолчанию она составляет 4 микросекунды, но разным драйверам она нужна разная (для других драйверов см. даташит):

  • A4988 – 1 мкс
  • DRV8825 – 4 мкс
  • TB6500 – 1 мкс

Также увеличение задержки может повысить стабильность работы при использовании длинных неэкранированных проводов от микроконтроллера к драйверу (к пину STEP).

Для изменения величины задержки сделай дефайн DRIVER_STEP_TIME перед подключением библиотеки:

#define DRIVER_STEP_TIME 10 // меняем задержку на 10 мкс#include “GyverStepper.h”

Медленные скорости (new!)

В версии 1.6 скорость во всех режимах может быть задана в виде десятичной дроби (тип float), то есть меньше одного шага в секунду. Минимальная скорость ограничена разрешением используемой в библиотеке micros() и составляет 1 шаг в час. Для удобного задания медленных скоростей появились макросы degPerMinute() и degPerHour(), которые нужно использовать совместно с setSpeedDeg() и setMaxSpeedDeg():

stepper.setMaxSpeedDeg(degPerMinute(360)); // скорость 360 градусов в минуту для режима FOLLOW_POS

Тик и тайминги

Самый главный метод библиотеки – tick(), при активной работе мотора его нужно вызывать как можно чаще. Тик имеет встроенный таймер на micros() и работает по нему. Если в коде программы присутствуют задержки на большее время, чем нужно мотору на текущей скорости, скорость мотора будет ограничена этой задержкой.

Узнать минимальный период вызова tick() (при установленной скорости) можно при помощи getMinPeriod(), который вернёт его в микросекундах. Также можно напрямую опрашивать переменную stepTime, в которой хранится текущий период. Эти инструменты можно использовать для организации работы шаговика в прерывании таймера (см. пример timerISR).

Также .tick() возвращает true, если мотор движется к цели или крутится по KEEP_SPEED и false, если мотор остановлен или приехал.

Метод getState() возвращает текущее состояние мотора аналогично tick().

Смена направления

Можно глобально (для всех режимов) сменить направление вращения мотора при помощи reverse(true).

Режимы работы

Библиотека имеет два режима работы с мотором, устанавливается при помощи setRunMode(mode), где mode:

  • FOLLOW_POS – режим плавного движения к заданной позиции с ускорением и ограничением скорости.
  • KEEP_SPEED – режим вращения с заданной скоростью (знак скорости задаёт направление вращения).

Режим FOLLOW_POS

В этом режиме мотор следует на указанную позицию в шагах или градусах. Для её установки есть следующие методы:

  • setTarget(pos) – установка абсолютной целевой позиции в шагах, принимает положительные и отрицательные значения (тип данных long).
  • setTarget(pos, type) – то же самое, но можно указать тип позиции type – абсолютная ABSOLUTE или относительная RELATIVE.
  • setTargetDeg(pos) – установка абсолютной целевой позиции в градусах, принимает положительные и отрицательные дробные значения (тип данных float).
  • setTargetDeg(pos, type) – то же самое, но можно указать тип позиции type – абсолютная ABSOLUTE или относительная RELATIVE.

Примечание: абсолютная позиция – говоришь мотору повернуться на 300 шагов, он повернётся на позицию 300. При повторном вызове  ничего не произойдёт. Относительная – говоришь повернуться на 300 – он повернётся на 300 относительно текущей позиции. Если вызвать ещё раз через некоторое время – цель сместится относительно текущей позиции вала.

Установленную целевую позицию можно прочитать:

  • getTarget() – возвращает тип данных long
  • getTargetDeg() – возвращает тип данных float

Дополнительно можно настроить максимальную скорость и ускорение при движении к целевой позиции:

  • setMaxSpeed(speed) – установка максимальной скорости по модулю в шагах/секунду, тип данных float. По умолчанию 300.
  • setMaxSpeedDeg(speed) – установка максимальной скорости по модулю в градусах/секунду, тип данных float.
  • setAcceleration(accel) – установка ускорения по модулю в шагах/сек/сек, тип данных float. По умолчанию 300.
  • setAccelerationDeg(accel) – установка ускорения по модулю в градусах/сек/сек, тип данных float.

Примечание: при установке ускорения в ноль 0 мотор будет двигаться к позиции с максимальной скоростью, заданной в setMaxSpeed().

Также можно вручную установить текущую позицию мотора в шагах и градусах при помощи:

  • setCurrent(long pos);
  • setCurrentDeg(float pos);

И прочитать её:

  • getCurrent();
  • getCurrentDeg();

Режим KEEP_SPEED

В этом режиме мотор просто крутится с заданной скоростью. Скорость задаётся при помощи

  • setSpeed(speed) – в шагах/секунду, положительные и отрицательные целые значения, тип данных float.
  • setSpeedDeg(speed) – в градусах/секунду, положительные и отрицательные дробные значения, тип данных float.

(New!) Вторым аргументом можно передать включение плавного изменения скорости, по умолчанию стоит false (NO_SMOOTH). Смотри пример accelDeccelButton

  • setSpeed(speed, smooth) – в шагах/секунду, положительные и отрицательные целые значения, тип данных float. smooth – SMOOTH или NO_SMOOTH
  • setSpeedDeg(speed, smooth) – в градусах/секунду, положительные и отрицательные дробные значения, тип данных float. smooth – SMOOTH или NO_SMOOTH

Установленную скорость можно прочитать:

  • getSpeed() – возвращает тип данных float
  • getSpeedDeg() – возвращает тип данных float

Алгоритм планировщика скорости

В библиотеке реализовано два алгоритма планирования скорости для режима плавного движения к позиции с ненулевым ускорением:

  • Мой алгоритм: скорость планируется с фиксированным периодом, что сильно разгружает процессор и позволяет работать на скоростях до 30’000 шагов в секунду (полностью загрузив процессор) без наличия посторонних задержек в коде. Сильная экономия процессорного времени оставляет возможность спокойно выполнять параллельно другой код и управлять несколькими моторами в разных режимах на хороших скоростях, и “ещё останется”. Немного “резковат” при торможении. Активен по умолчанию.
  • Модифицированный алгоритм из библиотеки AccelStepper: скорость планируется каждый шаг, что очень сильно нагружает процессор и ограничивает скорость до 7’000 шагов в секунду (полностью загрузив процессор) без наличия посторонних задержек в коде (в оригинальной библиотеке – 5’000 шагов/сек). Разгоняется и тормозит максимально плавно. Для активации нужно прописать дефайн #define SMOOTH_ALGORITHM перед подключением библиотеки в коде (см. пример smoothAlgorithm) или раскомментировать данный дефайн в файле библиотеки GyverStepper.h, находится сразу после описания.

Остановка и сброс

  • stop() – плавная остановка с заданным в setAcceleration() ускорением от текущего положения мотора. Можно вызвать в режиме KEEP_SPEED для плавной остановки вращения! Смотри пример accelDeccelButton
  • brake() – резкая остановка мотора. Если активен autoPower(true) – мотор будет отключен.
  • reset() – brake() + сброс текущей позиции в 0. Удобно для остановки и калибровки начала координат по концевику (смотри пример endSwitch).

Управление питанием

Питанием мотора/драйвера можно управлять вручную при помощи enable() и disable(). Данные методы включают и выключают пин Enable (если он указан при инициализации), а также снимают и возвращают питание на управляющие выводы (для 4х пинового драйвера).

Поведением пина EN (если он указан при инициализации) можно управлять при помощи invertEn(true) и invertEn(false). По умолчанию установлено enable(false) переводит пин en в низкое состояние.

В библиотеке реализовано автоматическое управление питанием, включается при помощи autoPower(true), по умолчанию оно отключено. В режиме FOLLOW_POS при достижении целевой позиции мотор будет автоматически отключен (будет вызван disable()). При дальнейшей установке новой позиции мотор будет автоматически включен (будет вызван enable()).

// Примечание: далее по тексту под “по умолчанию” имеется в виду “даже если не вызывать функцию”// Создание объекта// steps – шагов на один оборот вала (для расчётов с градусами)// step, dir, pin1, pin2, pin3, pin4 – любые GPIO// en – пин отключения драйвера, любой GPIOGStepper stepper(steps, step, dir); // драйвер step-dirGStepper stepper(steps, step, dir, en); // драйвер step-dir + пин enableGStepper stepper(steps, pin1, pin2, pin3, pin4); // драйвер 4 пинGStepper stepper(steps, pin1, pin2, pin3, pin4, en); // драйвер 4 пин + enableGStepper stepper(steps, pin1, pin2, pin3, pin4); // драйвер 4 пин полушагGStepper stepper(steps, pin1, pin2, pin3, pin4, en); // драйвер 4 пин полушаг + enable// Здесь происходит движение мотора, вызывать как можно чаще!// Имеет встроенный таймер// Возвращает true, если мотор движется к цели или крутится по KEEP_SPEEDbool tick();// Инвертировать направление мотора – true (по умолч. false)void reverse(bool dir);// инвертировать поведение EN пина – true (по умолч. false)void invertEn(bool rev);// Установка режима работы, mode:// FOLLOW_POS – следование к позиции setTarget(…)// KEEP_SPEED – удержание скорости setSpeed(…)void setRunMode(GS_runMode mode);// Установка текущей позиции мотора в шагах и градусахvoid setCurrent(long pos);void setCurrentDeg(float pos);// Чтение текущей позиции мотора в шагах и градусахlong getCurrent();float getCurrentDeg();// установка целевой позиции в шагах и градусах (для режима FOLLOW_POS)// type – ABSOLUTE или RELATIVE, по умолчанию стоит ABSOLUTEvoid setTarget(long pos);void setTarget(long pos, GS_posType type);void setTargetDeg(float pos);void setTargetDeg(float pos, GS_posType type);// Получение целевой позиции в шагах и градусахlong getTarget();float getTargetDeg();// Установка максимальной скорости (по модулю) в шагах/секунду и градусах/секунду (для режима FOLLOW_POS)// по умолч. 300void setMaxSpeed(float speed);void setMaxSpeedDeg(float speed);// Установка ускорения в шагах и градусах в секунду (для режима FOLLOW_POS).// При значении 0 ускорение отключается и мотор работает // по профилю постоянной максимальной скорости setMaxSpeed().// По умолч. 300void setAcceleration(int accel);void setAccelerationDeg(float accel);// Автоотключение EN при достижении позиции – true (по умолч. false).void autoPower(bool mode);// Плавная остановка с заданным ускорением от текущего положения.// Режим будет переключен на FOLLOW_POS// Установленная максимальная скорость будет изменена!!!void stop();// Жёсткая остановкаvoid brake();// Жёсткая остановка + сброс позиции в 0 (для концевиков)void reset();// Установка целевой скорости в шагах/секунду и градусах/секунду (для режима KEEP_SPEED)void setSpeed(float speed);void setSpeedDeg(float speed);// Получение целевой скорости в шагах/секунду и градусах/секунду (для режима KEEP_SPEED)float getSpeed();float getSpeedDeg();// Включить мотор (пин EN)void enable();// Выключить мотор (пин EN)void disable();// Возвращает то же самое, что tick, т.е. крутится мотор или нетbool getState();// Возвращает минимальный период тика мотора в микросекундах при настроенной setMaxSpeed() скорости.// Можно использовать для настройки прерываний таймера, в обработчике которого будет лежать tick() (см. пример timerISR)uint16_t getMinPeriod();// Текущий период “тика” для отладки и всего такогоuint16_t stepTime;

Шаговый двигатель – принцип работы

Схема шагового двигателяСхема шагового двигателя

Шаговый двигатель – это мотор, перемещающий свой вал в зависимости от заданных в программе микроконтроллера шагов и направления. Подобные устройства чаще всего используются в робототехнике, принтерах, манипуляторах, различных станках и прочих электронных приборах. Большим преимуществом шаговых двигателей над двигателями постоянного вращения является обеспечение точного углового позиционирования ротора. Также в шаговых двигателях имеется возможность быстрого старта, остановки, реверса.

Шаговый двигатель обеспечивает вращения ротора на заданный угол при соответствующем управляющем сигнале. Благодаря этому можно контролировать положение узлов механизмов и выходить в заданную позицию. Работа двигателя осуществляется следующим образом – в центральном вале имеется ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться. Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.

Шаговые двигатели и моторы Ардуино 28BYJ-48 с драйвером ULN2003Шаговые двигатели и моторы Ардуино 28BYJ-48 с драйвером ULN2003

Шаговый двигатель принципУпрощенные анимированные схемы работы шагового двигателя

Основные виды шаговых моторов:

  • Двигатели с переменными магнитами (применяются довольно редко);
  • Двигатели с постоянными магнитами;
  • Гибридные двигатели (более сложные в изготовлении, стоят дороже, но являются самым распространенным видом шаговых двигателей).

Товары, используемые в материале

Самые популярные материалы в блоге

Вольтик – это слаженная команда амбициозных и заядлых инженеров. Мы создали этот проект с целью вовлечения вас, талантливых и начинающих профессионалов, в увлекательный мир мейкерской микроэлектроники!

Общие принципы работы шаговых двигателей

Внешний вид шагового двигателя 28BYJ-48 представлен на следующем рисунке:

Внешний вид шагового двигателя 28-BYJ48

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.

Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Внутрення схема шагового двигателяКак можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

Так почему же этот двигатель называется 28BYJ-48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

Технические характеристики шагового двигателя 28-BYJ48

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя – 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

Расчет шагов на оборот для шагового двигателя

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

В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

Справедлива следующая формула:

Количество шагов за оборот = 360 / угол шага.

В нашем случае 360/11.25 = 32 шага за оборот.

Зачем нужен драйвер мотора для управления шаговым двигателем

Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем – модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.

Где купить шаговый двигатель

Самые простые двигатели Варианты на сайте AliExpress:

Необходимые компоненты

Вам понадобятся:

  1. Микроконтроллер Arduino.
  2. Шаговый двигатель BYJ48 5В.
  3. Драйвер шагового двигателя ULN2003.
  4. Коннекторы.
  5. Источник питания 5v – необязательно.

Шаг 2: Список деталей

Необходимые детали для проекта Ардуино шагового двигателя:

  • Шаговый двигатель (этот двигатель был взят от старого принтера)
  • Arduino
  • Изолированный медный провод
  • Проволочные резаки / стрипперы
  • Регулятор тока
  • транзистор
  • драйвер двигателя H-Bridge 1A
  • моторный шилд

Дополнительные детали:

  • паяльник
  • припой
  • инструменты
  • безопасные очки

Подключение драйвера к Arduino

Skhema-podklyucheniya-A4988-Arduino.jpg

Рисунок 3. Схема подключения A4988 к плате Arduino

Схема подключения драйвера A4988 для управления биполярным шаговым двигателем показана на рисунке 3. Вывод RESET подключен к выводу SLEEP, чтобы на нем был высокий уровень HIGH. Загрузим на плату Arduino скетч из листинга 1, который управляет движением биполярного шагового двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.

Листинг 1

// пины для подключения контактов STEP, DIR #define PIN_STEP 3 #define PIN_DIR 2 // количество шагов на 1 оборот #define STEP_ROUND 200 // скорость двигателя #define SPEED 10 void setup() { // режим для STEP и DIR как OUTPUT pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); // начальные значения digitalWrite(PIN_STEP, 1); digitalWrite(PIN_DIR, 0); } void loop() { // направление вращения digitalWrite(PIN_DIR, HIGH); // сделать 1 оборот for(int j = 0; j < STEP_ROUND; j++) { digitalWrite(PIN_STEP, HIGH); delay(SPEED); digitalWrite(PIN_STEP, LOW); delay(SPEED); } // изменить направление вращения digitalWrite(PIN_DIR, HIGH); // сделать 1 оборот for(int j = 0; j < STEP_ROUND; j++) { digitalWrite(PIN_STEP, HIGH); delay(SPEED); digitalWrite(PIN_STEP, LOW); delay(SPEED); } } Если после загрузки скетча не происходит движения двигателя, проверьте правильность подключения обмоток к выводам драйвера A4988. К выводам 2B и 2A (1A и 1B) подключаются провода двигателя, которые “прозваниваются” тестером.

БАГИ И ОШИБКИ

Если вы нашли баг или ошибку в исходнике или примерах, или у вас есть идеи по доработке библиотеки – пишите пожалуйста на почту alex@alexgyver.ru. В комментарии на страницах я заглядываю очень редко, на форум – ещё реже.

Обзор основных моделей шаговых двигателей для ардуино

Nema 17 – биполярный шаговый двигатель, который чаще всего используется в 3D принтерах и ЧПУ станках. Серия 170хHSхххА мотора является универсальной.

Nema-17

Основные  характеристики двигателя:

  • Угловой шаг 1,8°, то есть на 1 оборот приходится 200 шагов;
  • Двигатель – двухфазный;
  • Рабочие температуры от -20С до 85С;
  • Номинальный ток 1,7А;
  • Момент удержания 2,8 кг х см;
  • Оснащен фланцем 42 мм для легкого и качественного монтажа;
  • Высокий крутящий момент – 5,5 кг х см.

28BYJ-48 – униполярный шаговый двигатель. Используется в небольших проектах роботов, сервоприводных устройствах, радиоуправляемых приборах.

28BYJ-48

Характеристики двигателя:

  • Номинальное питание – 5В;
  • 4-х фазный двигатель, 5 проводов;
  • Число шагов: 64;
  • Угол шага 5,625°;
  • Скорость вращения: 15 оборотов в секунду
  • Крутящий момент 450 г/сантиметр;
  • Сопротивление постоянного тока 50Ω ± 7% (25 ℃).

Часто задаваемые вопросы FAQ

Что делать, если шаговый двигатель не движется?

  1. Проверьте правильность подключения драйвера к плате Arduino. 
  2. Проверьте правильность подключения проводов двигателя к выводам A1,A2,B1,B2.
  3. Может быть недостаточной мощность блока питания двигателя.

Видео, демонстрирующее работу схемы

loading.gif

Загрузка…

867 просмотров

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...