Шаговый двигатель 28BYJ-48 с драйвером ULN2003 и Arduino UNO

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

Шаговый двигатель может точно перемещаться на минимально возможный угол, называемый шагом. Для практических задач можно считать, что шаговый мотор немного похож на сервопривод. Можно задать ему повернуться в некоторое положение и можно рассчитывать получить достаточно стабильные результаты в нескольких повторных экспериментах. Обычно, сервоприводы ограничены углом поворота в диапазоне от 0 до 180°, шаговый же двигатель может вращаться непрерывно, подобно двигателю постоянного тока. Преимуществом шаговых двигателей является то, что можно достичь гораздо большей степени контроля над движением. К недостатком шаговых двигателей можно отнести несколько более сложное управление, чем в случаях с сервами или моторами постоянного тока.

28BYJ-48 — это маленький, дешевый, 5 вольтовый шаговый моторчик с редуктором. Передаточное число редуктора у него примерно 64:1, что позволяет получить вполне достойный крутящий момент для моторчика такого размера и скорость порядка 15 об/мин. С некоторыми программными хитростями для постепенного ускорения можно достичь более 25 об/мин. Эти маленькие шаговики вместе с небольшой платкой-драйвером на базе м/сх ULN2003 для использования совместно c Arduino UNO можно приобрести здесь за сущие копейки. Достаточно выгодное приобретение, если сравнивать с редукторным двигателем постоянного тока, контроллером двигателя и колесным энкодером!

Размеры шагового двигателя 28BYJ-48

Размеры шагового двигателя 28BYJ-48

Дешевизна и миниатюрность делает 28BYJ идеальным вариантом для небольших робототехнических приложений, а также для знакомства с управлением шаговыми двигателями, используя Arduino. Ниже представлена детальная спецификация шагового двигателя 28BYJ-48.

Тип мотораУниполярный шаговый двигатель
Число фаз4
Подключение5-выводов (к контроллеру двигателя)
Рабочее напряжение5-12 вольт
Частота100 Гц
Сопротивление по постоянному току50 Ом ± 7%(25°C)
Частота под нагрузкой> 600 Гц
Частота на холостом ходу> 1000 Гц
Крутящий момент> 34.3 мН*м (120 Гц)
Момент самопозиционирования> 34.3 мН*м
Стопорящий момент600-1200 г*см
Тяга300 г*см
Сопротивление изоляции> 10 МОм (500 В)
Класс изоляцииA
Шум< 35 дБ (120 Гц, без нагрузки, 10 см)
Режим шагаРекомендован полушаговый режим (8-шаговая управляющая сигнальная последовательность)
Угол шагаПолушаговый режим: 8-шаговая управляющая сигнальная последовательность (рекомендовано). 5.625 градусов на шаг, 64 шага на оборот внутреннего вала мотора. Режим полного шага: 4-шаговая управляющая сигнальная последовательность. 11.25º/шаг, 32 шага на оборот внутреннего вала двигателя.
Передаточное отношение редуктораПроизводителем заявлено 64:1. Однако, некоторые пытливые товарищи с форума Arduino разобрали редуктор и определили, что, в действительности передаточное число равно 63.68395:1. Это означает, что в рекомендованном полушаговом режиме мы имеем: 64 шага на оборот мотора помноженное на передаточное число 63.684 ≈ 4076 шагов на полный оборот.
Подключение к контроллеру ULN2003A (синий), B (розовый), C (желтый), D (Оранжевый), E (красный, средний вывод обмоток)
Вес30г

Двигатель имеет четыре обмотки, которые запитываются последовательно, чтобы повернуть вал с магнитом.

Подключение выводов шагового двигателя 28BYJ-48

Подключение выводов шагового двигателя 28BYJ-48

Когда используется полношаговый метод управления, две из четырех обмоток запитываются на каждом шаге. Идущая вместе с Arduino IDE библиотека Stepper использует такой способ. В техническом руководстве к 28BYJ-48 сказано, что предпочтительным является использование метода полушага, при котором сначала запитывается только 1 обмотка, затем вместе первая и вторая обмотки, затем только вторая обмотка и так далее. С 4 обмотками это дает 8 различных сигналов, как показано в таблице ниже.

Провод→ Направление вращения по часовой стрелке (1-2 фазы)
12345678
4 Оранжевый
3 Желтый
2 Розовый
1 Синий

 

Подключение драйвера шагового двигателя ULN2003 к Arduino Uno

Плата драйвера шагового двигателя на базе микросхемы ULN2003, представляющей собой массив транзисторов, включенных по схеме Дарлингтона, позволяет достаточно просто управлять мотором 28BYJ-48, используя микроконтроллер. В нашем случае, в качестве управляющего микроконтроллера мы выберем плату Arduino Uno с микроконтроллером ATmega328. Помимо самой микросхемы ULN2003AN, на плате имеется пятиконтактный разъем для подключения к шаговику и четыре светодиода, показывающих, какая из обмоток запитана в текущий момент времени.

Плата управления на базе ULN2003

Плата управления на базе ULN2003

Также сбоку расположен джампер (два вывода под четырьмя резисторами), установка которого позволяет подавать питание на шаговый двигатель. Замечу, что питать мотор от 5 В Arduino не рекомендуется, так как мотор может потреблять ток, превышающий возможности Arduino. Лучше использовать внешний 5-12 В источник питания, выдающий ток не менее 1 А. Четыре управляющих входа помечены как IN1-IN4 и должны быть подключены к четырем цифровым выводам Arduino.

Подключите выводы IN1, IN2, IN3 и IN4 к пинам 3, 4, 5 и 6 Arduino Uno. Положительный контакт источника питания необходимо подключить к выводу, помеченному как «+», а землю источника питания к выводу «-» на плате контроллера. Если для питания Arduino и мотора используются различные источники питания, то необходимо объединить выводы «земля» источников вместе.

 

Библиотека AccelStepper

Стандартная библиотека Stepper, идущая с Arduino IDE, поддерживает только полношаговый метод управления и имеет сильно ограниченные возможности. Использовать ее можно только в очень простых приложениях, в которых используется только один мотор. Применение библиотеки Stepper для управления 28BYJ-48 является не самым эффективным решением.

Есть решение получше — это использовать библиотеку Accel Stepper. Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48 (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.

  • Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
  • Поддержка ускорения и замедления
  • Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
  • Функции API не используют функцию delay и не прерывают работу
  • Поддержка выбора функции для реализации шага позволяет работать совместно с библиотекой AFMotor
  • Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
  • Поддержка низких скоростей
  • Расширяемый API
  • Поддержка подклассов
Библиотека AccelStepper
Библиотека AccelStepper
AccelStepper-1.48.zip
Version: 1.48
81.7 KiB
1621 Downloads
Details

Как установить библиотеку в Arduino IDE.

Представленный ниже код медленно ускоряет мотор 28BYJ-28 в одном направлении, затем замедляется до остановки и вновь ускоряется, но уже вращаясь в противоположном направлении.

 

Как вы оцениваете эту публикацию? 1 звезда2 звезды3 звезды4 звезды5 звезд (32 голосов, средняя оценка: 4.59 из 5)
Loading ... Loading ...

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

7 комментариев к записи “Шаговый двигатель 28BYJ-48 с драйвером ULN2003 и Arduino UNO”

  1. Андрей Алексеенко пишет:

    А вот почему они у меня так адово грелись...Надо будет снова их опробовать нос другой библиотекой...

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

  2. Серега пишет:

    AccelStepper не работает с ULN2003 для микрошагов.

  3. Александр пишет:

    Не заметил никакой разницы между этой библиотекой и другими. Правда я не специалист в программировании а просто использую готовые скетчи или делаю «микс». Увеличить обороты не получилось, что тут что в стандартной библиотеке одинаково. Разницы в микрошаге и полном шаге тоже не заметил. Как вживить регулировку скорости переменным резистором пока тоже не понял.

    • Дмитрий пишет:

      В теле скетча в комментариях написано: Для регулировки оборотов необходимо использовать линейный потенциометр на 10К, подключается движком к А0, другие два вывода к +5 и GND.

  4. Максим пишет:

    неплохо было бы объяснить, что делают использованные в программе методы AccelStepper

  5. bazis пишет:

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

    Метод step (1) из стандартной библиотеки мне подходил, но нужно чтобы несколько шаговиков крутились с разной скоростью, а в стандартной setSpeed () почему-то задает скорость всем сразу.

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

  6. Печкин пишет:

    У Вас в коде где то ошибка. Через некоторое время ардуино останавливается и начинает перезагружаться, скорее всего дело #define HALFSTEP 8 , в AccelStepper его попросту нет.

    Так же интересует, как правильно подключить ULN2003 к внешнему питанию 12 вольт?

    Может есть другие либы, где всё это уже реализовано без багов и доработок напильником?

Оставить комментарий