Шаговый электродвигатель — синхронный бесщёточный электродвигатель с несколькими обмотками, в котором ток, подаваемый в одну из обмоток статора, вызывает фиксацию ротора. Последовательная активация обмоток двигателя вызывает дискретные угловые перемещения (шаги) ротора.
Шаговые двигатели применяют в механических системах точного позиционирования – ЧПУ станках, 3d-принтерах, принтерах, роботах-манипуляторах. Шаговые двигатели преобразуют электрические импульсы в перемещение вала на определенный угол. Минимально возможный угол перемещения шагового двигателя, называется шагом.
В любительской робототехнике очень часто используют бюджетный шаговый двигатель 28BYJ-48, в комплекте с которым продается драйвер двигателя на микросхеме ULN2003, необходимый для подключения шагового двигателя к плате Arduino.
Характеристики шагового двигателя 28BYJ-48:
- Напряжение питания – 5В или 12В;
- Число фаз – 4;
- Коэффициент редукции – 1/63.68395;
- Количество шагов ротора – 64;
- Номинальная скорость вращения – 15 оборот/мин;
- Крутящий момент – 450 г*см;
- Размеры (диаметр,высота) –25×18 мм;
- Вес – 40 грамм.
Двигатель за один оборот осуществляет 4075.7728395 шага. Данный двигатель поддерживает полушаговый режим и за один полный оборот может совершать 4076 шага, а точнее за 1° делает примерно 11,32 шага. (4076 / 360 = 11,32).
Чаще всего, при использовании шагового двигателя 28BYJ 48, используют два режима подключения.
- Полношаговый режим — за 1 такт, ротор делает 1 шаг.
- Полушаговый режим — за 1 такт, ротор делает ½ шага.
Драйвер для управления шаговым двигателем ULN2003
Драйвер – это устройство, которое связывает контроллер и шаговый двигатель. Он нужен так как цифровой вывод микроконтроллера Arduino UNO может выдать ток максимум ~40 мА, а одна обмотка шагового двигателя 28BYJ-48 в пике потребляет ~320 мА, следовательно если подключить двигатель напрямую, микроконтроллер сгорит.
Для защиты микроконтроллера был разработан «Модуль шагового двигателя ULN2003», в котором используется микросхема ULN2003A (по сути, состоящая из 7 ключей), позволяющая управлять нагрузкой до 500 мА (один ключ). Данный модуль может работать с 5В и 12В двигателем 28BYJ-48, для переключения необходимо установить или убрать перемычку (по умолчанию перемычка установлена, питание 5В).
Подключение 28BYJ-48 плате Arduino
Схема не сложная, необходимо всего шесть проводов для подключения, сначала подключаем интерфейсные провода, IN1 (ULN2003) в 11 (Arduino UNO), IN2 (ULN2003) в 10 (Arduino UNO), IN3 (ULN2003) в 9 (Arduino UNO) и IN4 (ULN2003) в 8 (Arduino UNO), осталось подключить питание GND к GND и VCC к VIN и подключаем разъем двигателя в модуль ULN2003.
Скетч управления шаговом двигателем 28BYJ-48
В пакете Arduino IDE есть стандартная библиотека Stepper.h для управления униполярными и биполярными шаговыми двигателями. Ее не надо искать и загружать из интернета. Она устанавливается вместе с пакетом Arduino IDE. Библиотека очень простая. Кроме конструктора имеет всего две функции: setSpeed и step.
Описание библиотеки Stepper.h
Stepper( steps, pin1, pin2, pin3, pin4 ) — конструктор класса Stepper. Создает объект типа Stepper.
Параметры:
- steps – количество шагов двигателя на один оборот (360°). Параметр используется функцией setSpeed() для вычисления скорости вращения.
- pin1, pin2, pin3, pin4 – выводы для подключения драйвера двигателя. Для двух проводной схеме подключения pin3 и pin4 не используются. Для четырех проводной схемы pin1, pin2, pin3, pin4 соответствуют фазам A, C, B, D при униполярном режиме управления.
void setSpeed(long rpms) — устанавливает скорость вращения двигателя в оборотах в минуту.
Параметры:
- rpms — скорость вращения в оборотах в минуту.
void step(int steps) — вызывает поворот двигателя на заданное число шагов. Функция останавливает выполнение программы до тех пор, пока не завершится.
Параметры:
- steps – число шагов, на которое требуется повернуть ротор двигателя. Отрицательное значение вращает двигатель в противоположную сторону.
Пример простого скетча управления двигателем 28BYJ-48:
#include <Stepper.h>Stepper motor(48, 10, 12, 11, 13); // объект motor, 48 шагов на оборот void setup() { motor.setSpeed(60); // скорость 60 об. в мин.}void loop() { motor.step(240); // 5 оборотов (240 шагов) по часовой стрелке delay(1000); motor.step(-240); // 5 оборотов (240 шагов) против часовой стрелке delay(1000); }