Шаговый двигатель ардуино: подключение и управление

Оглавление

Настройка тока DRV8825.

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

Для настройки необходимо рассчитать значение напряжения Vref.

Vref = Current Limit / 2

где,

Current Limit — номинальный ток двигателя.

Для примера рассмотрим двигатель NEMA 17 17HS4401 с током 1,7 А.

Vref = 1,7 / 2 = 0,85 В.

Осталось только настроить, берем отвертку и вольтметр, плюсовый щуп вольтметра устанавливаем на потенциометр, а щуп заземления на вывод GND и выставляем нужное значение.

Подключение драйвера шагового двигателя DRV8825 к Arduino UNO.

Подключим двигатель DRV8825 к Arduino UNO по схеме.

Для этого подключаем GND LOGIC к GND на Arduino. Контакты DIR и STEP подключим к цифровым контактам 2 и 3 на Arduino. Подключение шагового двигателя к контактам B2, B1, A2 и A1.

Предупреждение: Подключение или отключение шагового двигателя при включенном приводе может привести к его повреждению.

Затем необходимо подключить контакт RST к соседнему контакту SLP к 5В на Arduino, чтобы включить драйвер. А контакты выбора микрошага необходимо оставить не подключенными, чтобы работал режим полный микрошаг. Теперь осталось подключить питание двигателя к контактам VMOT и GND MOT, главное не забудьте подключить электролитический конденсатор на 100 мкФ к контактам питания двигателя. В противном случае, при скачке напряжения модуль может выйти из строя.

Скетч вращения шагового двигателя NEMA 17, драйвер DRV8825.

Как уже было упомянуто выше, драйвер DRV8825 заменим драйвером A4988, поэтому и код вращения двигателем можно взять из предыдущей статьи: Драйвер шагового двигателя A4988. Но для увеличения кругозора сегодня будем использовать код вращения двигателя nema 17 без использования библиотеки.

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}
void loop()
{
  digitalWrite(dirPin, HIGH); // Установка вращения по часовой стрелки
  
  for(int x = 0; x > stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }
  delay(1000);
  
  digitalWrite(dirPin, LOW); // Установка вращения против часовой стрелки

  for(int x = 0; x < stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000);
}

Описание скетча:

Для работы данного скетча, не требуется никаких библиотек. Программа начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR. Так же указываем stepsPerRevolution количество шагов на оборот.

В функции void setup() указываем управляющие контакты как выход.

В основной функции void loop(), вращаем двигатель по часовой стрелке, затем против, с разной скоростью.

Подробнее о подключении шаговых двигателей к Ardiono смотрите на сайте Ардуино технологии.

Для более простого подключения шагового двигателя к Arduino или другому микроконтроллеру существуют модули. Модули бывают разные, на фото ниже приведен пример двух различных модулей.

Распиновку и как подключать модуль драйвера DRV8825 будем рассматривать в следующей статье.

Использование драйвера DRV8825 с CNC shield v3.

Драйвер DRV8825 можно установить на CNC shield v3. CNC shield используются для управления ЧПУ станками и облегчают сборку электроники.

Данный набор позволяет без пайки собрать электронику для двух осевых, трех осевых, четырех осевых ЧПУ станков, а также для самостоятельной сборки 3D принтеров. При реализации ЧПУ станков данные шилды используются достаточно часто благодаря своей низкой цене и простоте сборки. Более подробно CNC shield v3 будем рассматривать в следующих статьях.

Вывод можно сделать следующий. Драйвер DRV8825 обладает рядом преимуществ перед драйвером A4988. А также, при использовании драйвера шагового двигателя DRV8825, меньше шума от шаговых двигателей. Это актуально при сборке лазерного гравера, 3D принтера. Когда при работе главный источник шума — это механика и гул шаговых двигателей.

Понравился статья Драйвер шагового двигателя DRV8825? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

drv8825-datasheet.pdf 743 Kb 371 Скачать

Код для Arduino управления драйвером A4988 (DRV8825)с использованием библиотеки AccelStepper.

Управление шаговым двигателем без библиотеки идеально подходит для простых проектов на Arduino с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, вам понадобится библиотека. Итак, для нашего следующего примера будем использовать библиотеку шаговых двигателей под названием AccelStepper library.

AccelStepper library поддерживает.

Ускорение и замедление. Несколько одновременных шаговых двигателей с независимыми одновременными шагами на каждом шаговом двигателе. Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.

Установка библиотеки AccelStepper.

Чтобы установить библиотеку, перейдите в «Скетч» -> «Подключить библиотеку» -> «Управление» библиотеками. Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте свой поиск, набрав «Accelstepper». Щелкните первую запись и выберите «Установка».

Код Arduino с использованием библиотеки AccelStepper.

Вот простой пример, который ускоряет шаговый двигатель в одном направлении, а затем замедляется до полной остановки. Как только двигатель делает один оборот, меняет направление вращения. Данный цикл повторяется снова и снова.

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>
// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;
int i = 0;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
  // Устанавливаем максимальную скорость, коэффициент ускорения,
  // начальную скорость и целевую позицию
  myStepper.setMaxSpeed(1000);
  myStepper.setAcceleration(50);
  myStepper.setSpeed(200);
  myStepper.moveTo(100);
}
void loop() {
  // Изменение направления вращения, когда двигатель достигнет заданного положения
  if (myStepper.distanceToGo() == 0) 
  {
    myStepper.moveTo(-myStepper.currentPosition());
  }
  // Передвинуть на 1 шаг
  myStepper.run();
}

Пояснение к коду:

Подключаем библиотеку AccelStepper.

#include <AccelStepper.h>

Дальше определяем выводы Arduino, к которым подключаются
выводы
STEP и DIR A4988. Мы также
устанавливаем
motorInterfaceType на 1. (1 означает внешний шаговый драйвер с
выводами
Step и Direction).

const int dirPin = 2;
const int stepPin = 3;
int i = 0;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1

Затем мы создаем экземпляр библиотеки под названием myStepper.

// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

В функции настройки мы сначала устанавливаем максимальную скорость
двигателя равной тысяче. Затем мы устанавливаем коэффициент ускорения для
двигателя, чтобы добавить ускорение и замедление к движениям шагового
двигателя. Дальше устанавливаем обычную скорость 200 и количество шагов,
которое мы собираемся переместить, например, 200 (поскольку NEMA 17 делает 200
шагов за оборот).

void setup() {
    myStepper.setMaxSpeed(1000);
    myStepper.setAcceleration(50);
    myStepper.setSpeed(200);
    myStepper.moveTo(100);
}

В основном цикле loop() используем оператор if, чтобы
проверить, как далеко двигателю нужно проехать (путем чтения свойства
distanceToGo), пока он не достигнет целевой позиции (установленной moveTo). Как
только
distanceToGo достигнет нуля, поменяем направление вращения двигателя в
противоположном направлении, изменив значение
moveTo на отрицательное по
отношению к его текущему значению. Теперь вы заметите, что в конце цикла мы
вызвали функцию
run (). Это самая важная функция, потому что шаговый двигатель
не будет работать, пока эта функция не будет выполнена.

void loop() {
    if (myStepper.distanceToGo() == 0) 
        myStepper.moveTo(-myStepper.currentPosition());
    myStepper.run();
}

Это небольшой пример использования библиотеки AccelStepper. В следующем уроке подробнее рассмотрим данную библиотеку и сделаем пару классных примеров использования шаговых двигателей в Arduino проектах.

Понравился Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Код вращения шагового двигателя NEMA 17, драйвер A4988, DRV8825 без использования библиотеки.ino 1 Kb 230 Скачать
Код вращения шагового двигателя NEMA 17, драйвер A4988, DRV8825 без использования библиотеки.ino 1 Kb 183 Скачать
библиотека AccelStepper.zip 86 Kb 190 Скачать

Подключение шагового двигателя к ардуино через l293d

Управление DC-моторчиками с помощью L293D

Изучение трактата профессора «школы компьютерного энтузиаста и микророботов» стало последней каплей, переполнившей чашу. Пришло время вплотную заняться управлением DC-моторчиками. Они будут двигать нашего робота вперёд-назад, а также разворачивать. В абсолютном большинстве случаев повороты осуществляются методом торможения одного из ведущих колёс. Простейшие роботы имеют два ведущих колеса, а третье – исключительно для опоры и уменьшения трения. Кстати, один деятель на каком-то форуме заявил: «всем известно, что трение скольжения, конечно же, значительно меньше, чем трение качения». Показал тем самым незнание элементарной физики и свою псевдокомпетентность. И это факт! Грустно становится иногда, но и позитивной информации в сети хватает, если не зависа́ть на форумах.

Я не буду в дальнейшем описывать мелкие детали. О них можно узнать в предыдущих публикациях. Попытаюсь работать более-менее системно, проиллюстрировав каждый шаг (если получится) практическим примером.

Что выбрать: шаговый или серводвигатель?

Статья, которая поможет разобраться в чем отличие серводвигателя от шагового двигателя.

  1. Бюджет
    Если Вы жестко ограничены в бюджете, возможно, выбора как такового и нет. Шаговые двигатели значительно дешевле серводвигателей. Однако, такая закономерность действует только до определенного момента. Начиная с двигателей с размером фланца 110мм, стоимость приводов на шаговых моторах и сервоприводов Darxton серии DXS уже сопоставима.
  2. Размер станка.
    Чем больше станок, тем более крупные шаговые двигатели ему требуются. Резонанс больших шаговых двигателей может привести к пропуску шагов и снижению чистоты обработки. Рекомендация : Если рабочее поле станка превышает 1.2 м2, или масса портала превышает 50 кг, мы настоятельно рекомендуем использовать серводвигатели.
  3. Сложность настройки
    Сервосистемы имеют десятки настраиваемых параметров, требуют больше внимания и более высокую квалификацию оператора. Если Вы ищете простое решение «включил и работай» — возможно, вам лучше использовать шаговые двигатели.
  4. Наличие нагрузки на передачу в момент остановки

    Так, на ось Z для удержания шпинделя обычно лучше подходят шаговые двигатели — для них удержание самый эффективный режим, вал фиксируется в положении удержания совершенно неподвижно, а высоких скоростей и ускорений по Z как правило не требуется. Сервопривод в таких условиях будет совершать микроколебания, что нежелательно.Аналогично, если двигатель планируется к установке на поворотную ось, где требуется медленное вращение, и после каждого углового шага следует серия движений шпинделя вдоль заготовки — шаговый двигатель лучше справится с удержанием.

  5. Необходимость достигать высоких ускорений

    Если есть такая необходимость — альтернативы серводвигателям нет. Шаговые двигатели весьма инертны, и попытка быстро разогнать его приведет к т.н. «срыву» — пропуску шагов или остановке вала. Тогда как сервоприводы способны кратковременно увеличить ток обмоток в 3-4 раза от номинального значения, чтобы развить больший момент и, соответственно, большее ускорение

  6. Вероятность заклинивания механики
    Если вероятность заклинивания механической системы велика (например, в случае приводных актуаторов систем открывания ворот), серводвигатели использовать нежелательно — шаговые двигатели просто будут пропускать шаги, в то время как сервопривод в случае неправильной настройки может повредить передачу или обмотки собственного двигателя.
  7. Звук
    Шаговые двигатели при работе издают весьма сильный гул. Если для Вас низкий уровень шума критичен — следует использовать сервоприводы.

В общем же случае построения фрезерного или иного станка с ЧПУ, сервоприводы предпочтительней шаговых, за счет своих многочисленных преимуществ. Если Вы не смогли определиться что выбрать: шаговый или серводвигатель, изучите таблицу отличий.

Параметр

Шаговые приводы

Бесщеточные сервоприводы

Момент

Резко падает с увеличением скорости. Максимален при неподвижном вале

Высокий на всем диапазоне скоростей. Максимален на высоких оборотах

Удельная мощность

Малая. Шаговый двигатель имеет крайне малый КПД — постоянно потребляет большой ток, основная часть энергии при этом выделяется в виде тепла

Высокая. Потребляемый ток пропорционален нагрузке

Обратная связь по положению

Отсутствует. Пропущенный шаг останется незамеченным для системы ЧПУ. Однако, при правильном проектировании станка обратная связь не требуется

Есть. Положение вала будет скорректировано, если это будет невозможно(например, вал заклинило) — система выдаст ошибку

Точность позиционирования

Не более 5% от величины шага

Определяется установленным энкодером

Безопасность

Высокая. Если вал двигателя заклинило — он просто будет пропускать шаги

Низкая. При заклинивании вала сервопривод может провернуть передачу, повредив её. Двигатель также может сгореть при неправильной настройке поведения драйвера при перегрузке

Срок службы

Очень большой

Очень большой

Резонанс ротора

Есть. Шаговые двигатели подвержены резонансу, что приводит к пропуску шагов, снижению качества обработки и пр.

Отсутствует

Звук

Сильный гул

Слабый

Нагрев

Сильный. Зачастую требуется доп. охлаждение с помощью радиатора и вентилятора

Слабый

Перегрузки

При перегрузках пропускает шаги, не способен резко ускориться

Хорошо переносит перегрузки за счет кратковременного увеличения потребляемой мощности. Способен резко ускориться

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

Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

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

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


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

Так почему же этот двигатель называется 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)

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

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

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

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

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

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

Скетч Arduino — использование библиотеки AccelStepper

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

Итак, для нашего следующего эксперимента мы будем использовать расширенную библиотеку шаговых двигателей под названием AccelStepper library. Она поддерживает:

  • Ускорение и замедление.
  • Одновременное управление несколькими шаговыми двигателями с независимым шагом для каждого двигателя.

Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.

Установка библиотеки

Чтобы установить библиотеку, перейдите в Эскиз> Include Library> Manage Libraries… Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте результаты поиска, набрав «Accelstepper». Щелкните первую запись и выберите «Установить».

Скетч Arduino

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

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>

// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;

// Определение тип интерфейса двигателя
#define motorInterfaceType 1

// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
  // Устанавливаем максимальную скорость, коэффициент ускорения,
  // начальную скорость и целевую позицию
  myStepper.setMaxSpeed(1000);
  myStepper.setAcceleration(50);
  myStepper.setSpeed(200);
  myStepper.moveTo(200);
}

void loop() {
  // Изменение направления вращения, когда двигатель достигнет целевого положения
  if (myStepper.distanceToGo() == 0) 
    myStepper.moveTo(-myStepper.currentPosition());

  // Передвинуть на 1 шаг
  myStepper.run();
}

Пояснение к скетчу:

Мы начинаем с подключения недавно установленной библиотеки AccelStepper.

#include <AccelStepper.h>

Определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Устанавливаем motorInterfaceType значение 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).

const int dirPin = 2;
const int stepPin = 3;

#define motorInterfaceType 1

Затем мы создаем экземпляр библиотеки с именем myStepper.

AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

В функции setup() мы сначала устанавливаем максимальную скорость двигателя 1000. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя.

Затем мы устанавливаем обычную скорость 200 и количество шагов, например, 200 (поскольку NEMA 17 совершает 200 шагов за оборот).

void setup() {
  myStepper.setMaxSpeed(1000);
  myStepper.setAcceleration(50);
  myStepper.setSpeed(200);
  myStepper.moveTo(200);
}

В функции loop() мы используем оператор If, чтобы проверить, как далеко двигателю нужно проехать (путем чтения distanceToGo), пока он не достигнет целевой позиции (moveTo). Как только distanceToGo станет равен нулю мы переключаем двигатель в противоположное направление, изменив moveTo на противоположное значение относительно его текущего положения.

Теперь в конце цикла мы вызываем  функцию run(). Это самая важная функция, поскольку шаговый двигатель не будет работать, пока эта функция не будет выполнена.

void loop() {
  if (myStepper.distanceToGo() == 0) 
    myStepper.moveTo(-myStepper.currentPosition());

  myStepper.run();
}

Настройка тока двигателя на A4988

На плате драйвера предусмотрен потенциометр для регулировки тока. Для настройки понадобиться мультиметр, для замера напряжения на потенциометре.


Расположение токоограничительных резисторов и потенциометра Vref

Формула Vref для A4988 изменяется от номинала токочувствительных резисторов (Обведены на фото выше). . Обычно подписаны R050 или R100.

Vref = Imax * 8 * (RS)

Imax — максимальный ток двигателя;

RS — сопротивление резистора. В моем случае RS = 0,100. Для 17HS4401 Vref = 1,7 * 8 * 0,100 = 1,36 В.

Рабочий ток двигателя равен 70% от тока удержания. Умножим полученные значения чтобы двигатель не грелся при простое.

Для 17HS4401 Vref ист. = 1,36*0,7 = 0,952 В.

Подключаем драйвер к микроконтроллеру, включаем и меряем напряжение Vref на драйвере. Если оно не соответствует нужному нам номиналу, а оно скорее всего будет не будет соответствовать, крутим потенциометр в какую то сторону и смотрим что поменялось. Доводим до нужного нам значения и радуемся, ведь ток на драйвере теперь настроен!

Установка библиотеки

Первая установка библиотеки Arduino

Перед тем как вы сможете использовать Motor shield, вам надо установить библиотеку AF_Motor Arduino library. Благодаря этой библиотеке ваш Arduino сможет «общаться» с мотор шилдом.

1. Скачайте файл библиотеки для мотор шилда с

Ginthub.

2. Распакуйте ZIP файл, который вы скачали

3. Переименуйте распакованную папку AFMotor

4. Проверьте, чтобы внутри AFMotor были файлы AFMotor.cpp и AFMotor.h. Если их там нет, значит вы что-то некорректно сделали в предыдущих пунктах.

5. Переместите папку AFMotor в папку arduinosketchfolder/libraries. В Windows это будет что-то вроде MY Documents/Arduino/libraries, для Mac — Documents/arduino/libraries. Если вы устанавливаете библиотеки впервые, вероятно, придется создать папку под названием libraries. Название папки должно быть именно libraries. Без капса, без каких-либо других изменений!

6. Убедитесь, что в папке libraries есть папка AFMotor, а внутри нее — файлы AFMotor.cpp, AFMotor.h

7. Перезагрузите Arduino IDE. После перезагрузки в меню должен появится файл File->Examples->AFMotor->MotorParty

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

Перед тем как начать писать программу для платы Arduino давайте разберемся что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-шаговой последовательности, то есть нам нужно будет сделать 4 шага чтобы выполнить один полный оборот двигателя.

Номер шага Контакты, на которое подается питание Катушки, на которое подается питание
Шаг 1 8 и 9 A и B
Шаг 2 9 и 10 B и C
Шаг 3 10 и 11 C и D
Шаг 4 11 и 8 D и A

На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.

Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.

Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:

#define STEPS 32

Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).

Stepper stepper (STEPS, 8, 10, 9, 11);

Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.

Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:

stepper.setSpeed(200);

Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.

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

stepper.step(val);

Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.

Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:

stepper.step(1);

А один шаг против часовой стрелки:

stepper.step(-1);

В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.

potVal = map(analogRead(A0),0,1024,0,500); if (potVal>Pval) stepper.step(5); if (potVal stepper.step(-5); Pval = potVal;

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

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

Шаговый двигатель Nema17 42BYGH 1.7A (17HS4401-S) для 3D принтера Набор из 5 шаговых двигателей ULN2003 28BYJ-48 с платам драйверов для Ардуино Шаговый двигатель с модулем драйвера 5V Stepper Motor 28BYJ-48 + ULN2003
Еще один вариант шагового двигателя для Arduino 28BYJ-48 5V 4 Phase DC Motor + ULN2003 Drive Test Board Набор из трех шаговых двигателей Nema17 Stepper Motor 42BYGH 1.7A (17HS4401) для 3D приентера AliExpress.com Product – 3D Printer Parts StepStick A4988 DRV8825 Stepper Motor Driver With Heat sink Carrier Reprap RAMPS 1.4 1.5 1.6 MKS GEN V1.4 board

Обзор драйвера 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).

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