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

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

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

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

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

Принципиальная схема шагового двигателя 28BYJ-48 приведена на рисунке ниже.

Принципиальная схема шагового двигателя 28BYJ-48

Принципиальная схема шагового двигателя 28BYJ-48.

Режимы работы двигателя

Для управления шаговым двигателем 28BYJ 48 используют один из двух режимов подключения.

Полношаговый режим – 4 ступени импульсов на 1 шаг 
Полношаговый режим – 4 ступени импульсов на 1 шаг

Контакт Такты
1 2 3 4
A - orange 1 0 0 1
B - yellow 0 1 1 0
C - pink 1 1 0 0
D - blue 0 0 1 1

 

Полушаговый режим – 8 ступеней импульсов на 1 шаг
Полушаговый режим – 8 ступеней импульсов на 1 шаг

Контакт Такты
1 2 3 4 5 6 7 8
A - orange 1 1 0 0 0 0 0 1
B - yellow 0 0 0 1 1 1 0 0
C - pink 0 1 1 1 0 0 0 0
D - blue 0 0 0 0 0 1 1 1

Подключение 28BYJ-48к плате Arduino

Драйвер двигателя состоит из 7 пар транзисторов Дарлингтона и является усилителем.   Выводы IN1 – IN7 предназначены для подключения к микроконтроллеру, GND и VCC – для питания шагового двигателя.
Схема подключения драйвера к плате Arduino показана ниже.

Подключение драйвера ULN2003 к плате Arduino.

Подключение драйвера ULN2003 к плате Arduino.

Для управления шаговыми двигателями в Arduino IDE есть встроенная библиотека – Stepper. Данная библиотека осуществляет только полношаговый режим коммутации.

Библиотека Stepper

Библиотека Stepper

Загрузим на плату Arduino пример – скетч stepper_oneRevolution из Examples

// подключение библиотеки
#include <Stepper.h>
// создание экземпляра объекта:
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
Stepper s28BYJ-48(4076, IN1, IN2, IN3, IN4);
void setup() {
// установка скорости
s28BYJ-48.setSpeed(60);
// запуск последовательного порта
Serial.begin(9600);
}
void loop() {
// движение в направлении по часовой 1 оборот
s28BYJ-48.step(4076);
delay(1000);
// движение в направлении против часовой 1 оборот
s28BYJ-48.step(-4076);
delay(1000);
}

К сожалению, данный скетч отрабатывает неверно, двигатель движется только в одном направлении. Для правильной работы необходимо использовать альтернативные библиотеки, например Accel Stepper. Библиотека Accel Stepper поддерживает не только равномерное движение, но и замедление/ускорение двигателя и работу с несколькими двигателями. Загружаем на плату Arduino скетч ниже

// подключение библиотеки
#include <AccelStepper.h>
// создаем экземпляр AccelStepper
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
AccelStepper s28BYJ-48(8, IN1, IN3, IN2, IN4);
void setup(){
s28BYJ-48.setMaxSpeed(900.0);
s28BYJ-48.setAcceleration(100.0);
s28BYJ-48.setSpeed(200);
s28BYJ-48.moveTo(2000);
}
void loop(){
// Изменяем направление, если пройдено заданное число шагов
if(s28BYJ-48.distanceToGo()==0)
s28BYJ-48.moveTo(-stepper1.currentPosition());
s28BYJ-48.run();
}

Теперь скетч работает нормально, шаговый двигатель плавно.

Схема в сборе

Схема в сборе


Пример использования

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

Будем использовать следующие компоненты:

  • Плата Arduino Uno – 1
  • Шаговый двигатель 28BYJ-48 с драйвером – 1
  • Резистор 10 кОм – 3
  • Кнопка – 3
  • Провода

Схема соединения представлена ниже.

Схема соединений

Схема соединений

Реакция на нажатие кнопок:

  • кнопка 3 – движение двигателя по часовой стрелке;
  • кнопка 1 – против часовой стрелки;
  • кнопка 2 – останов.

Скетч показан в листинге ниже

// подключение библиотеки
#include <AccelStepper.h>
// создаем экземпляр AccelStepper
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
AccelStepper s28BYJ-48(8, IN1, IN3, IN2, IN4);
// клавиши выбора режима
int pinBut []={5,6,7};
int lBut []={0,0,0};
int cBut[]={0,0,0};
//
boolean go=false;
void setup(){
Serial.begin(9600);
s28BYJ-48.setMaxSpeed(1000);
s28BYJ-48.setAcceleration(100);
s28BYJ-48.setSpeed(-500);
Serial.begin(9600);
}
void loop() {
// проверка нажатия кнопок выбора программ
for(int i=0;i<3;i++) {
cBut[i] = deb(lBut[i],pinButtons[i]);
// если нажатие...
if (lastButtons[i] == 0 && currentBut[i] == 1) {
switch(i) {
case 0:   // против часовой
s28BYJ-48.setSpeed(500);
go=true;
Serial.println("CW");
break;
case 1:   // стоп
s28BYJ-48.stop();
go=false;
Serial.println("stop");
break;
case 2:   // по часовой
s28BYJ-48.setSpeed(-500);
go=true;
Serial.println("CCW");
break;
default:
break;
}
}
lBut[i] = cBut[i];
}
if(go==true)
s28BYJ-48.runSpeed();
}
// устранение дребезга
int deb (int l,int pin){
int c = digitalRead(pin);
if (l != c) { // если изменение
delay(5);
c = digitalRead(pin);
return c;
}
}

Загружаем скетч на плату Arduino и проверяем работу.

Схема в сборе.

Вывод данных в последовательный порт.

Вывод данных в последовательный порт.


Что делать если

Нет перемещения шагового двигателя

Проверьте правильность подключения драйвера к плате Arduino
Проверьте наличие достаточного внешнего питания для шагового двигателя

Рекомендуемые товары

Комментарии 0