Arduino. Подключение шагового двигателя 28BYJ к Arduino

Шаговый электродвигатель — синхронный бесщёточный электродвигатель с несколькими обмотками, в котором ток, подаваемый в одну из обмоток статора, вызывает фиксацию ротора. Последовательная активация обмоток двигателя вызывает дискретные угловые перемещения (шаги) ротора.

Шаговые двигатели применяют в механических системах точного позиционирования – ЧПУ станках, 3d-принтерах, принтерах, роботах-манипуляторах. Шаговые двигатели преобразуют электрические импульсы в перемещение вала на определенный угол. Минимально возможный угол перемещения шагового двигателя, называется шагом.

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

28BYJ-48

Характеристики шагового двигателя 28BYJ-48:

  • Напряжение питания – 5В или 12В;
  • Число фаз – 4;
  • Коэффициент редукции – 1/63.68395;
  • Количество шагов ротора – 64;
  • Номинальная скорость вращения – 15 оборот/мин;
  • Крутящий момент – 450 г*см;
  • Размеры (диаметр,высота) –25x18 мм;
  • Вес – 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В).

ULN2003

Подключение 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); 
}