Шаговый двигатель 28BYJ-48
Шаговые двигатели применяют в механических системах точного позиционирования – ЧПУ станках, 3d-принтерах.
Содержание
Обзор шагового двигателя 28BYJ-48
Шаговые двигатели применяют в механических системах точного позиционирования – ЧПУ станках, 3d-принтерах, принтерах, роботах-манипуляторах. Шаговые двигатели преобразуют электрические импульсы в перемещение вала на определенный угол. Минимально возможный угол перемещения шагового двигателя, называется шагом.
В любительской робототехнике очень часто используют бюджетный шаговый двигатель 28BYJ-48, в комплекте с которым продается драйвер двигателя на микросхеме ULN2003, необходимый для подключения шагового двигателя к плате Arduino.
Рисунок 1. Шаговый двигатель 28BYJ-48 с драйвером на микросхеме ULN2003.
Характеристики шагового двигателя 28BYJ-48:
- Напряжение питания – 5В или 12В;
- Число фаз – 4;
- Коэффициент редукции – 1/63.68395;
- Количество шагов ротора – 64;
- Номинальная скорость вращения – 15 оборот/мин;
- Крутящий момент – 450 г*см;
- Размеры (диаметр,высота) –25x18 мм;
- Вес – 40 грамм.
Принципиальная схема шагового двигателя 28BYJ-48 приведена на рис. 2.
Рисунок 2. Принципиальная схема шагового двигателя 28BYJ-48.
Режимы работы двигателя
Для управления шаговым двигателем 28BYJ 48 используют один из двух режимов подключения.
- полношаговый режим – 4 ступени импульсов на 1 шаг;
- полушаговый режим – 8 ступеней импульсов на 1 шаг.
Сервоприводы, шаговые двигатели... Различные механические запчасти Arduino можно купить в нашем магазине 3DIY!
Подключение 28BYJ-48к плате Arduino
Драйвер двигателя состоит из 7 пар транзисторов Дарлингтона и является усилителем. Выводы IN1 – IN7 предназначены для подключения к микроконтроллеру, GND и VCC – для питания шагового двигателя. Схема подключения драйвера к плате Arduino показана на рисунке 3.
Рисунок 3. Подключение драйвера к плате Arduino.
Для управления шаговыми двигателями в Arduino IDE есть встроенная библиотека – Stepper. Данная библиотека осуществляет только полношаговый режим коммутации.
Рисунок 4. Библиотека Stepper
Загрузим на плату Arduino пример – скетч stepper_oneRevolution из Examples (см. листинг 1).
Листинг 1
// подключение библиотеки
#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 скетч из листинга 2.
Листинг 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);
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();
}
Теперь скетч работает нормально, шаговый двигатель плавно.
Рисунок 5. Схема в сборе
Пример использования
В качестве примера создадим проект управления шаговым двигателем кнопками, подключенными к плате Arduino.
Будем использовать следующие компоненты:
- Плата Arduino Uno – 1;
- Шаговый двигатель 28BYJ-48 с драйвером – 1;
- Резистор 10 кОм – 3;
- Кнопка – 3;
- Провода.
Схема соединения представлена на рисунке 6.
Рисунок 6. Схема соединений
Реакция на нажатие кнопок:
- кнопка 3 – движение двигателя по часовой стрелке;
- кнопка 1 – против часовой стрелки;
- кнопка 2 – останов.
Скетч показан в листинге 3.
Листинг 3
// подключение библиотеки
#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;
}
}
"В последнем скетче (листинг 3) я обнаружил неточность в функции устранения дребезга контактов, которая мешает корректной работе программы. Более корректно вынести оператор «return с» за рамки цикла «if». Иначе могут обрабатываться ложные срабатывания в случае использования кнопок без фиксации."
Имеется сейчас:
// устранение дребезга
int deb (int l,int pin){
int c = digitalRead(pin);
if (l != c) { // если изменение
delay(5);
c = digitalRead(pin);
return c;
}
}
Более корректно:// устранение дребезга
int deb (int l,int pin){
int c = digitalRead(pin);
if (l != c) { // если изменение
delay(5);
c = digitalRead(pin);
}
return c;
}
Загружаем скетч на плату Arduino и проверяем работу.
Рисунок 7. Схема в сборе.
Рисунок 8. Вывод данных в последовательный порт.
Часто задаваемые вопросы
- Проверьте правильность подключения драйвера к плате Arduino.
- Проверьте наличие достаточного внешнего питания для шагового двигателя.