Управление шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988


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

Внешний вид проекта управления шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988

Чтобы лучше понять материал данной статьи целесообразно посмотреть статью об управлении шаговым двигателем 28-BYJ48 с помощью Arduino и потенциометра. Однако шаговый двигатель 28-BYJ48 имеет значительно меньший крутящий момент, чем более мощные двигатели такие как, например, NEMA 14, NEMA17.

В данной статье мы рассмотрим управление шаговым двигателем NEMA 17 с помощью платы Arduino и драйвера двигателя A4988. Для управления направлением вращения шагового двигателя мы будем использовать потенциометр. Ранее на нашем сайте мы также рассматривали управление шаговым двигателем NEMA 17 с помощью Arduino и драйвера DRV8825.

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Шаговый двигатель NEMA 17 (купить на AliExpress).
  3. A4988 Stepper Driver Module (модуль драйвера шагового двигателя) (купить на AliExpress).
  4. Конденсатор 47 мкФ (купить на AliExpress).
  5. Потенциометр (купить на AliExpress).

Шаговый двигатель NEMA17

Принцип действия шагового двигателя Nema17 аналогичен работе других шаговых двигателей. Более подробно о принципах работы шаговых двигателей можно прочитать в статье про подключение шагового двигателя к микроконтроллеру AVR.

Внешний вид шагового двигателя Nema17

Шаговый двигатель NEMA 17 имеет плиту размером 1.7 x 1.7 дюйма и он имеет больший крутящий момент по сравнению с другими аналогичными шаговыми двигателями меньшего размера, например, NEMA 14. Данный двигатель имеет 6 подводящих проводов и работает от напряжения 12 В. Он может работать и от напряжения меньшей величины, однако при этом соответствующим образом будет уменьшаться и его крутящий момент.

При каждом шаге ось двигателя NEMA17 поворачивается на угол, равный 1.8 градуса. Схема расположения подводящих проводов двигателя NEMA17 представлена на следующем рисунке.

Схема расположения подводящих проводов двигателя NEMA17

Как вы можете видеть из представленного рисунка, шаговый двигатель NEMA17 имеет униполярное расположение 6 проводов. Эти провода подсоединены к двум раздельным обмоткам. Черный, желтый и зеленый провода подключены к первой обмотке, а красный, белый, и синий провода – к другой обмотке. В обычном режиме центральные провода обмоток (черный и белый) оставляют неподключенными.

Число шагов за оборот для двигателя NEMA17

Число шагов за полный оборот (Steps per Revolution) для каждого определенного шагового двигателя рассчитывается с помощью угла, на который поворачивается шаговый двигатель за один шаг (step angle). Для двигателя NEMA17 этот шаг равен 1.8 градуса, соответственно, получаем:

Steps per Revolution = 360/ step angle
360/1.8 = 200 Steps Per Revolution

Технические характеристики двигателя Nema 17

  • рабочее напряжение: 12V DC (12 В постоянного тока);
  • угол за один шаг (Step Angle): 1.8 градуса;
  • 200 шагов за один полный оборот;
  • число фаз: 4;
  • длина двигателя: 1.54 дюйма;
  • диапазон рабочих температур: от -10 до 40 °C;
  • удерживающий крутящий момент: 22.2 oz-in.

Также на нашем сайте вы можете посмотреть все проекты, в которых были использованы шаговые двигатели.

Модуль драйвера шагового двигателя A4988

Модуль драйвера шагового двигателя управляет работой шагового двигателя, подавая на него различные фазы питания в необходимые моменты времени.

Модуль драйвера шагового двигателя A4988 предназначен для управления работой шагового двигателя Nema 17 и другими аналогичными биполярными (двухполюсными) шаговыми двигателями. Этот модуль имеет встроенный транслятор (преобразователь), что позволяет ему управлять и скоростью, и направлением вращения шаговых двигателей, используя для этого небольшое число контактов.

Внешний вид модуля драйвера шагового двигателя A4988

Для управления шаговым двигателем Nema 17 нам понадобится всего два контакта модуля A4988 – STEP (для управления шагами) и DIRECTION (для управления направлением вращения двигателя).

Драйвер двигателя A4988 может управлять работой шагового двигателя в 5 различных режимах: полного шага, половины шага, четверти шага, 1/8 шага и 1/16 шага. Вы можете выбрать необходимый вам режим шага используя контакты выбора режима (MS1, MS2 и MS3). На следующем рисунке представлена таблица задействования этих контактов для выбора необходимого режима шага.

Таблица задействования контактов драйвера A4988 для выбора необходимого режима шага

Технические характеристики драйвера двигателя A4988:

  • максимальное рабочее напряжение: 35V;
  • минимальное рабочее напряжение: 8V;
  • максимальный ток на одну фазу: 2A;
  • режимы: полный шаг, ½ шага, ¼ шага, 1/8 шага и 1/16 шага;
  • защита от обратного напряжения: нет;
  • размеры: .5 × 20.5 mm (0.6″ × 0.8″).

Более подробно про принципы работы драйвера шагового двигателя A4988 можно прочитать в этой статье.

Различия между драйверами двигателя DRV8825 и A4988

Оба этих драйвера двигателя предназначены для управления шаговым двигателем Nema 17, имеют похожую распиновку и области применения, но они отличаются в количестве микрошагов, рабочем напряжении и т.д. Ниже приведены следующие ключевые отличия этих модулей драйвера двигателя:

  • модуль DRV8825 поддерживает 6 режимов шага, а модуль A4988 – только 5. Большее число этих режимов означает более равномерное и тихое функционирование шагового двигателя;
  • минимальная длительность шага для DRV8825 составляет 1.9 мкс, а для A4988 – 1 мкс;
  • без дополнительного охлаждения DRV8825 обеспечивает немного больший ток чем A4988;
  • местоположение потенциометра, регулирующего лимит тока, в обоих модулях различно;
  • DRV8825 может быть использован при более высоком напряжении питания;
  • на контакте спящего режима (SLEEP pin) в DRV8825 по умолчанию не установлен режим с подтягивающим резистором как это сделано в A4988;
  • вместо контакта напряжения питания DRV8825 имеет выходной контакт.

Схема проекта

Схема управления шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988 представлена на следующем рисунке.

Схема управления шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988

Поскольку модуль драйвера A4988 имеет встроенный транслятор (преобразователь), поэтому к плате Arduino достаточно подсоединить только его контакты Step и Direction. Контакт Step используется для управления шагами двигателями, а контакт Direction – для управления направлением его вращения. Шаговый двигатель запитывается от источника питания 12V, а модуль A4988 – от платы Arduino. Потенциометр используется для управления направлением вращения двигателя.

Если вы будете поворачивать потенциометр по часовой стрелке, то и шаговый двигатель будет вращаться по часовой стрелке. Если вы будете поворачивать потенциометр против часовой стрелки, то и шаговый двигатель будет вращаться против часовой стрелки. Конденсатор 47 мкФ используется для защиты платы Arduino от выбросов напряжения. Контакты MS1, MS2 и MS3 остаются неподключенными, что означает что драйвер будет функционировать в режиме полного шага.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Таблица соединений платы Arduino, шагового двигателя Nema 17 и модуля драйвера двигателя A4988 выглядит следующим образом.

Контакт A4988 Соединение
VMOT +ve Of Battery
GND -ve of Battery
VDD 5V of Arduino
GND GND of Arduino
STP Pin 3 of Arduino
DIR Pin 2 of Arduino
1A, 1B, 2A, 2B шаговый двигатель

Соблюдайте полярность источника питания.

Объяснение программы для Arduino

Полный код программы и видео с демонстрацией работы схемы приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода.

Первым делом скачайте библиотеку для управления шаговым двигателем по следующей ссылке и добавьте ее в Arduino IDE. После этого подключите заголовочный файл этой библиотеки в программе и укажите число шагов для шагового двигателя NEMA 17 – оно равно 200.

После этого укажем в программе контакты Arduino, к которым подключен модуль драйвера двигателя и определим тип интерфейса для двигателя как Type1 поскольку шаговый двигатель подключен к плате Arduino с помощью модуля драйвера двигателя.

Далее установим скорость для шагового двигателя с помощью функции stepper.setSpeed. Максимальная скорость двигателя NEMA 17 составляет 4688 RPM (число оборотов в минуту), но если его крутить со скоростью более 1000 RPM, то у него значительно падает крутящий момент.

После этого, в основной функции loop мы будем считывать значения с потенциометра, подключенного к контакту A0. В этой функции мы будем использовать две переменные – potVal и Pval. Если текущее значение (potVal) больше его предыдущего значения (Pval), то мы будем вращать шаговый двигатель на 10 шагов по часовой стрелке, а если меньше - то мы будем вращать шаговый двигатель на 10 шагов против часовой стрелки.

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

Исходный код программы (скетча)

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

(Проголосуй первым!)
Загрузка...
25 065 просмотров

Комментарии

Управление шаговым двигателем NEMA 17 с помощью Arduino и драйвера A4988 — 19 комментариев

  1. Доброго дня) подскажи пожалуйста, выход 5в на драйвере нужно для его работы, или позволяет запитать ардуино?

  2. вот часть скетча
    *
    тест стрелок
    */
    const int dirPin = 12;//подключите 12 пин к dir
    const int stepPin = 13;//подключите 13 пин к step
    const int stepsPerRevolution = 500;//кол-во шагов
    const int pribPin = 3;//питание приборной панели
    const int enPin = 9;// Включение сна драйвера
    void setup()
    {
    pinMode(stepPin, OUTPUT);
    pinMode(dirPin, OUTPUT);
    pinMode(pribPin, OUTPUT);
    pinMode(enPin, OUTPUT);
    {
    }
    digitalWrite(dirPin, HIGH); // Установка вращения по часовой стрелки
    for (int x = 0; x < stepsPerRevolution; x++)
    {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1450);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(25);
    delay(1);
    }
    digitalWrite(dirPin, LOW); // Установка вращения против часовой стрелки
    for (int x = 0; x < stepsPerRevolution; x++)
    {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1450);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(25);
    }
    delay(10);
    }
    void loop()
    {
    digitalWrite(enPin, HIGH); // Включение сна драйвера
    delay(10);

    delay(10);
    digitalWrite(pribPin, LOW); // Выключение питания приборки
    }

    • Я бы мог попробовать вам помочь, но подобная помощь "на удаленке" дело долгое. Вам нужно будет постоянно присылать мне результаты работы того или иного варианта программы. Посмотрите комментарии к вот этой статье, где я помогал одному из пользователей нашего сайта. Там более 100 комментариев нашей переписки. Как видите, процесс такой удаленной помощи достаточно долгий

  3. Доброе время суток
    Хотелось спросить по A4988 и библиоьеке AccelStepper вам доводилось писать код под спидометр и тахометр
    У меня есть скетч в качестве тест стрелок (спидометр,тахометр но проблема в написании продолжения кода
    К сожалению в программирование я только учусь.
    Вы можете как то помочь?

    • Добрый вечер. С библиотекой AccelStepper мне не приходилось работать. А вам вот этот проект спидометра не подойдет? Там только шаговый двигатель и его драйвер заменить, а в целом идея то рабочая.

  4. подскажите пожалуйста, а как управлять шаговым двигателем нема 17 с заданием ему количества шагов с помощью потенциометра

    • Добрый вечер. В этом случае необходимо изменить логику обработки значений на выходе АЦП А0 - в зависимости от этого значения не просто задавать направление вращения шагового двигателя, но и число шагов, которые он должен сделать. Это можно сделать либо с помощью соответствующего количества условных операторов, либо умножать значение с выхода АЦП А0 на какой-нибудь коэффициент пропорциональности чтобы таким образом рассчитать необходимое количество шагов двигателя

  5. Вот подскажите, пожалуйста, у меня есть драйверы A4988 и 8825 и несколько разных nema17. Провода до нема17 могут быть КРАСНЫЙ ЗЕЛЕНЫЙ СИНИЙ ЧЕРНЫЙ или же ЗЕЛЕНЫЙ СИНИЙ ЧЕРНЫЙ КРАСНЫЙ или СИНИЙ ЧЕРНЫЙ КРАСНЫЙ ЗЕЛЕНЫЙ. Также распиновка A1 A2 B1 B2 на драйверах отличается. Как соотнести Цвет провода и пин драйвера?

    • Добрый день, Николай. К сожалению временно не могу помочь вам в вашей проблеме потому что нахожусь сейчас в отпуске, вдали от всего оборудования. А так на память вспомнить не могу, статью уже достаточно давно писал

  6. Извините, не могли бы рассказать, как подключить сразу 5 моторов? К одной ардуино.
    И ещё, не могли бы посоветовать компактную батарею для моторов? (если что я использую 4 мотора Nema 17 42HD2037-01 и 1 Nema 17 42HD4027-01, вот на них ссылки:
    3drob.ru/elektronika_dlya_3d_printerov/shagovye_dvigateli/shagovyy_dvigatel_nema_17_42hd4027_01_s_provodom 3drob.ru/elektronika_dlya_3d_printerov/shagovye_dvigateli/shagovyy_dvigatel_nema_17_42hd2037_01_s_provodom
    Заранее спасибо!

    • Честно говоря, никогда не задумывался над этой проблемой. А почему бы их просто не подключить по принципу, который описан в данной статье? Или у вас какая то специфическая задача управления этими двигателями? Для управления драйвером двигателя используется всего два цифровых контакта Ардуино, поэтому контактов хватит чтобы подключить пять драйверов двигателя. Аналоговых контактов тоже хватает чтобы подключить пять потенциометров.
      Батарею подсказать не могу, к сожалению.

  7. Доброго дня. "минимальная длительность шага для DRV8825 составляет 1.9 мкс, а для A4988 – 1 мкс;" - здесь точно в микросекундах, или все же в милисекундах? У меня на 1,9 микросекунд движок только гудит. На 500 мкс уже пропускает шаги, только на 1 мс норм.

  8. Перед подключением Nema 17, за плечами был определенный опыт работы с шаговиком yj48 ( даташит ). Управлялся он и с помощью Arduino, и с помощью Raspberry pi, проблем не возникало. Основная прелесть этого двигателя - цена (около 3 долларов в Китае). Причем, за эту сумму вы приобретаете двигатель с драйвером в комплекте. Согласитесь, такое можно даже и спалить, не особо сожалея о содеянном.

    • Да, вариант достаточно заманчивый. У вас вроде бы комментарий вполне осмысленный, но ваш Email как у спамера. С чем это связано, не подскажете? Еле ваш комментарий из спама вытащил.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *