Перед тем как приступить к экспериментам с шаговым двигателем, было бы не плохо ознакомиться с его устройством и принципом действия. Вкратце, шаговый двигатель — это двигатель, который способен осуществлять вращение на 1 шаг. Шаг — это угол, который обусловлен устройством каждого конкретного шагового двигателя. Основные характеристики:
Рабочее напряжение | 5В |
Число фаз | 4 |
Тип шагового двигателя | Униполярный |
Угол шага | Полушаговый режим: 5,625° ( 64 шага на оборот) Шаговый режим: 11,25° ( 32 шага на оборот) |
Предпочтительный режим работы | Полушаговый |
Схема устройства шагового мотора
Для того, чтобы заставить двигатель вращаться по часовой стрелке, нужно попеременно подавать напряжение на его выходы в соответствии со следующей картой ( для полушагового и шагового режимов):
Контакт мотора | Фазы для полушагового режима | |||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
Оранжевый | + | + | + | |||||
Желтый | + | + | + | |||||
Розовый | + | + | + | |||||
Синий | + | + | + |
Контакт мотора | Фазы для шагового режима | |||
1 | 2 | 3 | 4 | |
Оранжевый | + | + | ||
Желтый | + | + | ||
Розовый | + | + | ||
Синий | + | + |
Подключение напрямую к Arduino Uno
Первое подключение — самое простое напрямую к Arduino Uno. Обратите внимание — красный провод мотора не подключен.
Файл мотора для Fritzing — 28BYJ-48 Stepper Motor.fzpz (9,27 KB) .
Добавим кнопку для изменения направления вращения и потенциометр для изменения скорости вращения:
Принципиальная схема
Скетч для Fritzing — step_motor_02_button_potentiometr.fzz (17,9 KB)
Подключаем через драйвер ULN2003A
В первую очередь необходимо пояснить, для чего же нужен драйвер, ведь при ближайшем рассмотрении схемы может возникнуть закономерный вопрос: А что же поменялось, помимо того, что в схеме появилась лишняя деталь и что же она делает, если даже код из скетча выше не изменился?
Вливаем первый скетч и. вуаля! Все работает!
В нашем случае маркировка платы с драйвером ULN2003APG — ZC-A0591 ( SBT0811). Это не играет принципиальной роли, потому что все подобные платы абсолютно одинаковые.
Шаговый двигатель 28BYJ-48 с драйвером ULN2003 — Подключение к Arduino
Наш драйвер ( микросхема ULN2003A) представляет из себя сборку Дарлингтона из семи независимых транзисторных пар Дарлингтона в одном корпусе. Каждая пара Дарлингтона представляет из себя каскад из двух биполярных транзисторов. Такая схема позволяет управлять мощными нагрузками с током до 500 мА и напряжением до 50 В на канал с помощью слабого тока микроконтроллера, такого как Arduino.
Скетч с использованием драйвера ULN2003A и внешнего источника питания на 9 В — step_motor_03_driver_9V.fzz (31,7 KB)
Таким образом драйвер ULN2003A позволяет управлять более мощными моторами, используя внешний источник питания ( на примере 9 В мотора):
Подключение драйвера шагового двигателя ULN2003 к Arduino Uno
Плата драйвера шагового двигателя на базе микросхемы ULN2003, представляющей собой массив транзисторов, включенных по схеме Дарлингтона, позволяет достаточно просто управлять мотором 28BYJ-48, используя микроконтроллер. В нашем случае, в качестве управляющего микроконтроллера мы выберем плату Arduino Uno с микроконтроллером ATmega328. Помимо самой микросхемы ULN2003AN, на плате имеется пятиконтактный разъем для подключения к шаговику и четыре светодиода, показывающих, какая из обмоток запитана в текущий момент времени.
Также сбоку расположен джампер (два вывода под четырьмя резисторами), установка которого позволяет подавать питание на шаговый двигатель. Замечу, что питать мотор от 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-1.48.zip
Version: 1.48
81.7 KiB
5551 Downloads
Детали
Категория: | Programs |
Дата: | 06.09.2015 |
Представленный ниже код медленно ускоряет мотор 28BYJ-28 в одном направлении, затем замедляется до остановки и вновь ускоряется, но уже вращаясь в противоположном направлении.
#include #define HALFSTEP 8 // Определение пинов для управления двигателем #define motorPin1 3 // IN1 на 1-м драйвере ULN2003 #define motorPin2 4 // IN2 на 1-м драйвере ULN2003 #define motorPin3 5 // IN3 на 1-м драйвере ULN2003 #define motorPin4 6 // IN4 на 1-м драйвере ULN2003 // Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4 // для использования AccelStepper с 28BYJ-48 AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); void setup() < stepper1.setMaxSpeed(1000.0); stepper1.setAcceleration(100.0); stepper1.setSpeed(200); stepper1.moveTo(20000); >void loop()< // Изменяем направление, если шаговик достигает заданного положения if(stepper1.distanceToGo()==0) stepper1.moveTo(-stepper1.currentPosition()); stepper1.run(); >
Подключение шагового двигателя 28BYJ-48-5V к Arduino. Часть 1.
В этой статье мы подключаем шаговый двигатель 28BYJ-48-5V к плате Arduino через драйвер шагового двигателя на безе микросхемы ULN2003.
Для подключения понадобится:
- Плата Arduino купить плату Arduino =>>
- Шаговый двигатель 28BYJ-48 купить шаговый двигатель RKP-28BYJ-48-5V =>>
- Драйвер для шагового двигателя купить драйвер на микросхеме ULN2003A =>>
- Коммутационные провода купить провода и шлейфы папа-мама =>>
- Источник питания для Arduino купить блок питания LJY-186 9V 1A для Arduino =>>
- Корпус для Arduino купить корпус для платы Arduino =>>
Для реализации проекта подключения необходимо установить библиотеку Stepper_28BYJ в среду разработки Ардуино IDE.
Библиотека Stepper_28BYJ это оптимальная библиотека, написанная на основе стандартной общей библиотеки Stepper являющейся частью среды Arduino IDE. Она была созданна конкретно для этого шагового двигателя 28BYJ-48-5V и учитывающая все его индивидуальные параметры.
Установить библиотеку Stepper_28BYJ в среду Arduino IDE Вам поможет статья «Установка библиотек в Arduino IDE» =>>
Сборка и подключение:
Внимание!
Для драйвера на основе микросхемы ULN2003 DARLINGTON и соответственно мотора 28BYJ-48-5V, который получает питание от драйвера рекомендуется подавать питание от внешнего источника, в нашем случае (только для осуществления программирования) коммутируем подачу питания непосредственно от контроллера Ардуино (мотор работает без нагрузки и непродолжительное время) через контакты (Vin) для (+) и (GND) для (-).
Драйвер управляется через четыре управляющих входа обозначенные как (IN1, IN2, IN3, IN4), именно к ним необходимо подключить соответственно выходы (Pin) с номерами 8 Pin, 9 Pin, 10 Pin и 11 Pin на плате контроллера Ардуино (как это показано на изображении ниже).
Схема подключения на примере платы контроллера Arduino UNO R3, модуля драйвера ULN2003 и шагового двигателя 28BYJ-48-5V.
Загружаем скетч:
Для загрузки скетча необходимо в среде разработки Ардуино IDE нажать вкладку новый проект и в открывшиеся окошко поместить скетч приведенный ниже:
Скетч, который необходимо загрузить в контроллер через среду разработки Ардуино IDE:
#include // установить количество шагов 4078 для мотора #define STEPS 4078 // задать управляющие пины (Pin) на плате контроллера Ардуино Stepper_28BYJ stepper(STEPS, 8, 9, 10, 11); void setup() < // установить скорость вращения двигателя 13 об/мин // как максимальное значение stepper.setSpeed(13); >void loop() < stepper.step(4000); // Задать вращение 4000 шагов по часовой стрелке stepper.step(-4000);// Задать вращение 4000 шагов против часовой стрелки // если одну из строк задания вращения исключить // мотор станет вращаться без остановки >
После загрузки скетча необходимо пересохранить новый проект под именем Stepper_28BYJ.
После сохранения он будет доступен для внесения необходимых изменений и корректировок (например, для изменения направления вращения двигателя, отмена цикличности вращения или изменения скорости вращения).
Если по каким либо причинам Вы не смогли самостоятельно разобраться в подключении или программировании шагового двигателя 28BYJ-48, обратитесь к сотрудникам магазина робототехники и мехатроники — Robot-Kit.ru.
У нас Вы найдете необходимую поддержку и помощь.
Step motor 28byj 48 подключение к ардуино
Шаговые двигатели — основа точной робототехники. В отличие от двигателей постоянного вращения, один оборот «шаговика» состоит из множества микроперемещений, которые и называют шагами. Другими словами, мы можем повернуть вал двигателя ровно на 90 градусов, и зафиксировать его в этом положении. Грубым аналогом шагового двигателя является серводвигатель.
Шаговики применяют там, где требуется очень точно дозировать перемещение актуатора. Самый очевидный пример — робот манипулятор. Чтоб механическая рука коснулась рабочим инструментом нужной точки, необходимо чтобы каждый из узлов повернулся на строго заданный угол. Погрешность в доли градуса в основании руки, приведет к огромной погрешности на эффекторе.
Другим известным примером может служить ЧПУ станок. Взять тот же 3D-принтер. Для точного перемещения печатающей головки применяют именно шаговые двигатели. В старых дисководах шаговики использовались для перемещения магнитной головки. А в современных фотоаппаратах микро-миниатюрные шаговые двигатели перемещают линзы в объективе.
В этом уроке мы с помощью контроллера Ардуино Уно запустим популярный в среде начинающих робототехников шаговый двигатель 28BYj-48. Этот миниатюрный шаговик имеет встроенный редуктор, который позволяет совершать очень точные перемещения выходного вала.
Вообще, шаговый мотор 28BYj-48 применяют в качестве привода шторок кондиционеров. Однако, модель оказалась настолько удачной для DIY проектов, что такие моторы стали очень доступными.
Работа проекта
Когда вы сделаете все необходимые соединения в аппаратной части нашего проекта у вас должна получиться примерно следующая конструкция:
Теперь загрузите код программы в плату Arduino UNO и откройте окно монитора последовательной связи (serial monitor). Как мы уже указывали, мы должны сделать 2048 шагов для совершения одного полного оборота, то есть если мы в окне монитора последовательной связи введем 2048, то вал шагового двигателя совершит один полный оборот по часовой стрелке, а сам двигатель в это время сделает 2048 шагов. Для вращения против часовой стрелки просто вводите нужное число шагов со знаком “–“. То есть если вы введете -1024, то вал мотора совершит пол-оборота против часовой стрелки. Чтобы протестировать работу проекта вы можете вводить любые числа.
Исходный код программы
Код программы достаточно простой. Я надеюсь после успешной реализации данного проекта вы сможете управлять любыми шаговыми двигателями с помощью платы Arduino.
#include // заголовочный файл библиотеки для работы с шаговыми двигателями
// измените необходимое число шагов в зависимости от модели вашего шагового двигателя
#define STEPS 32
// создайте класс для шагового двигателя и запишите для него правильную последовательность контактов
Stepper stepper(STEPS, 8, 10, 9, 11);
int val = 0;
void setup() <
Serial.begin(9600);
stepper.setSpeed(200);
>
void loop() <
if (Serial.available()>0)
<
val = Serial.parseInt();
stepper.step(val);
Serial.println(val); //for debugging
>
>
«Шаговый двигатель 28BYJ-48-5V с драйвером на ULN2003» — Урок № 8
Скоро на моём канале в YOUTUBE появится новый урок «Шаговый двигатель 28BYJ-48-5V с драйвером на ULN2003».
Характеристики
- Номинальное напряжение: 5 В
- Угол шага 5,625 ° / 64
- Передаточное отношение редуктора:1/64
- Частота 100 Гц /> Сопротивление постоянному току 50Ω ± 7% (25 ℃)
- Крутящий момент> 34.3mN.m (120 Гц)
- Момент трения 600-1200 gf.cm
- Класс изоляции 600VAC/1mA/1s
- Шум
- Размеры платы драйвера: 38mm X 30mm
- Максимальный допустимый ток драйвера на 1 канал: 500mA
Шаговые двигатели применяют в механических системах точного позиционирования
Четырех фазный шаговый двигатель 28BYJ-48 — это бесколлекторный двигатель, вращение вала осуществляется шагами (дискретное перемещение).
На роторе (валу), расположен магнит, а вокруг него расположены катушки, если поочередно подавать ток на эти катушки, создается магнитное поле, которое отталкивает или притягивает магнитный вал, тем самым заставляя двигатель вращаться.
Такая конструкция позволяет с большой точностью управлять валом, относительно катушек.
- ЧПУ станках,
- 3-D принтерах,
- принтерах,
- роботах-манипуляторах.
Шаговые двигатели преобразуют электрические импульсы в перемещение вала на определенный угол.
Минимально возможный угол перемещения шагового двигателя, называется шагом.
Редуктор, с передаточным числом 1:64.(если быть точнее 1:63,68395) Это означает, что двигатель за один оборот осуществляет 4076 шагов.
Большим преимуществом шаговых двигателей над двигателями постоянного вращения является обеспечение точного углового позиционирования ротора.
Также в шаговых двигателях имеется возможность быстрого старта, остановки, реверса.
Двигатель содержит две обмотки, каждая имеет отвод от середины. Получается четыре фазы, поэтому его называют — шаговый четырёх фазный двигатель.
Отводы обмоток соединены вместе, к ним подключен красный провод и служат для питания двигателя, так-как каждая обмотка подключена к питанию, такие двигатели называют униполярными.
При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться.
Полношаговый режим.
- 4 ступени импульсов на один шаг;
- 32 шага за один оборот ротора.
- Встроенный редуктор с передаточным числом 64(точнее 63,68395)
- Получается около 2048 шагов
- Угол шага 11,25 градуса.
Подключая одновременно сразу две соседние катушки, магнитное поле, действующее на ротор, будет сильнее, тем самым повысится и крутящий момент двигателя.
Такой режим работы униполярного двигателя называется полношаговым.
Полушаговый режим.
- 8 ступеней импульсов на 1 шаг.
- 64 шага за один оборот ротора.
- Встроенный редуктор с передаточным числом 64(точнее 63,68395)
- Получается около 4096 шагов(точнее 4075.7728395)
- Угол шага 5,62 градуса.
В таком режиме за один оборот ротора, двигатель делает в два раза больше шагов, тем самым увеличивая точность позиционирования.
Однако, в таком режиме двигатель каждый второй шаг имеет сниженный крутящий момент, о чём не стоит забывать!
Драйвер ULN2003 A
Цифровой вывод микроконтроллера выдает ток до ~40 мА, а одна обмотка 28BYJ-48 в пике потребляет ~320 мА, то есть, если подключить двигатель напрямую, микроконтроллер сгорит.
Для защиты был разработан модуль шагового двигателя ULN2003, в котором используется микросхема ULN2003A (состоящая из 7 ключей), которая позволяет управлять нагрузкой до 500 мА (один ключ).
Данный модуль может работать с 5 Вольтовым и 12 Вольтовым двигателем 28BYJ-48.
Схема ULN2003A
Подключение шагового двигателя к Ардуино
Для управления шаговыми двигателями часто используют 4 библиотеки.
- Stepper — стандартная библиотека, уже входит в Arduino IDE. Осуществляет только полношаговый режим коммутации.
- CustomStepper
- Stepper_28BYJ
- AccelStepper
Файлы для скачивания внизу на этой странице.
Мы остановимся на AccelStepper, так как она более удобна для работы и обладает большими возможностями.
Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48 (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.
- Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
- Поддержка ускорения и замедления
- Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
- Функции API не используют функцию delay и не прерывают работу
- Поддержка выбора функции для реализации шага позволяет работать совместно с библиотекой AFMotor
- Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
- Поддержка низких скоростей
- Расширяемый API
- Поддержка подклассов
Функции библиотеки.
Для регулировки оборотов необходимо использовать линейный потенциометр на 10 кОм, подключается движком к А0, другие два вывода к +5 и GND.
Шаговый двигатель, управляемый платой
AccelStepper mystepper(DRIVER, step, direction);
Шаговый двигатель, управляемый Н-мостом
AccelStepper mystepper(FULL2WIRE, pinA, pinB);
Униполярный двигатель, управляемый транзисторами.
AccelStepper mystepper(FULL4WIRE, pinA1, pinA2, pinB1, pinB2);
Установка максимальной скорости (оборотов в минуту). Скорость по умолчанию очень низкая, так что её требуется переопределить. При движении шаговый двигатель будет ускоряться до этой максимальной скорости и замедляться при подходе к концу движения.
mystepper.setMaxSpeed(stepsPerSecond);
Установка ускорения, в шагах в секунду за секунду.
mystepper.setAcceleration(stepsPerSecondSquared);
Установить скорость (в шагах за секунду). Само движение запускается функцией runSpeed().
mystepper.setSpeed(stepsPerSecond);
Возвращает текущее абсолютное положение (в шагах)
mystepper.currentPosition(); .
Установить счетчик как текущую позицию. Полезно как задание нулевой координаты. Обнуляет текущую скорость до нуля.
mystepper.setCurrentPosition (long position);
Конечное положение в шагах
mystepper.targetPosition();
Вернуть расстояние до указанного положения. Может использоваться для проверки: достиг ли двигатель указанной конечной точки.
mystepper.distanceToGo();
Переместиться в абсолютно указанное положение. Само движение запускается функцией run().
mystepper.moveTo(long absolute);
Переместиться в относительно указанное положение. Само движение запускается функцией run(). Значение distance может быть больше или меньше нуля.
mystepper.move(long relative);
Начать движение с ускорением. Один шаг. Для продолжения движения следует вызывать функцию повторно как можно чаще — в loop() или иной функции.
mystepper.run();
Начать движение и подождать когда двигатель достигнет указанной точки. БЛОКИРУЮЩАЯ ФУНКЦИЯ — функция не прерывается, пока двигатель не остановится!
mystepper.runToPosition();
Начать движение с ускорением, до заданной позиции. БЛОКИРУЮЩАЯ ФУНКЦИЯ
mystepper.runToNewPosition();
Максимально быстрая остановка (без замедления), используя текущие параметры скорости и ускорения. Также задает новое конечное положение.
mystepper.stop();
Начать движение с текущей заданной скоростью (без плавного ускорения). Для продолжения движения двигателя следует вызывать функцию повторно как можно чаще.
mystepper.runSpeed();
Начать движение с текущей заданной скоростью (без плавного ускорения), до заданной позиции. БЛОКИРУЮЩАЯ ФУНКЦИЯ
mystepper.runSpeedToPosition();
Возвращает true, если ШД в режиме вращения.
mystepper.isRunning();
Деактивировать занятые пины и установить их в LOW. Снимает напряжение с обмоток двигателя, экономя энергию (вал при это может проворачиваться под внешними нагрузками)
mystepper.disableOutputs();
Активировать зарезервированные пины и устанавливает их в режим OUTPUT. Вызывается автоматически при запуске движения.
mystepper.enableOutputs();
Step motor 28byj 48 подключение к ардуино
Рассмотрим как подключить данный компактный и тихий шаговый двигатель 28BYJ-48 к ардуино. Через драйвер шаговика ULN2003 можно подключить любой шаговый двигатель, например, от факса, принтера, DVD привода.
Подключение:
- соединяем ардуино и драйвер: в ардуино цифровые контакты 2,3,4,5 подключаем к драйверу к контактам IN1, IN2, IN3, IN4.
- соединяем двигатель с драйвером. Гнездо и штеккер расчитаны друг на друга и перепутать невозможно.
- Заливаем скетч в ардуину и наслаждаемся
#include Stepper.h> const int stepsPerRevolution = 256; Stepper myStepper(stepsPerRevolution, 2, 4, 3, 5); void setup() < pinMode(2, OUTPUT); pinMode(3, OUTPUT); myStepper.setSpeed(70); Serial.begin(9600); > void loop() < Serial.println(«clockwise»); myStepper.step(stepsPerRevolution * 4); digitalWrite(2, LOW); //Для экономии энергии снимаем напряжение с контактов 2 и 3 digitalWrite(3, LOW); //Контакты по умолчанию были активны для удержания тяги на валу delay(2000); Serial.println(«counterclockwise»); myStepper.step(-stepsPerRevolution * 4); digitalWrite(2, LOW); digitalWrite(3, LOW); delay(2000); >