Кроковий двигун 28BYJ-48 з драйвером ULN2003 і Arduino UNO

Теми по керування сервоприводами, управління обертами двигунів, драйвери моторів, перетворювачі струму для моторів, управління кроковими двигунами, шілди для підключення моторів квадрокоптнрів та літаків
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Кроковий двигун 28BYJ-48 з драйвером ULN2003 і Arduino UNO

Повідомлення Arduino » 01 червня 2017 10:13

Кроковий двигун може точно переміщатися на мінімально можливий кут, званий кроком. Для практичних завдань можна вважати, що кроковий мотор трохи схожий на сервопривід. Можна задати йому повернутися в деякий стан і можна розраховувати дані щоб отримати досить стабільні результати в декількох повторних експериментах. Зазвичай, сервоприводи обмежені кутом повороту в діапазоні від 0 до 180 °.Кроковий двигун може обертатися безперервно, подібно двигуну постійного струму. Перевагою крокових двигунів є те, що можна досягти набагато більшому ступенів контролю над рухом. До недоліків крокових двигунів можна віднести кілька більш складне управління, ніж у випадках з сервами або моторами постійного струму.
28BYJ-48 - це маленький, дешевий, 5 вольтовий кроковий моторчик з редуктором. Передавальне число редуктора у нього приблизно 64: 1, що дозволяє отримати цілком гідний крутний момент для моторчика такого розміру і швидкість близько 15 об / хв. З деякими програмними хитрощами для поступового прискорення можна досягти більше 25 об / хв. Ці маленькі крокові двигуни разом з невеликою платою-драйвером на базі м / сх ULN2003 для використання спільно c Arduino UNO можна придбати http://arduinka.biz.ua/uk/krokoviy-dvig ... 35c76.html . Досить вигідне придбання, якщо порівнювати сукупну ціну з редукторним двигуном постійного струму, контролером двигуна і колісним енкодером!
Двигун має чотири обмотки, які живляться послідовно, щоб повернути вал з магнітом.
BYJ-48.jpg
Коли використовується повнокроковий метод управління, дві з чотирьох обмоток живляться на кожному кроці. Що йде разом з Arduino IDE бібліотека Stepper використовує такий спосіб. У технічному керівництві до 28BYJ-48 сказано, що кращим є використання методу півкроку, при якому спочатку живиться тільки 1 обмотка, потім разом перша і друга обмотки, потім тільки друга обмотка і так далі.
Підключення драйвера 28BYJ-48 крокового двигуна ULN2003 до Arduino Uno
Плата драйвера крокового двигуна на базі мікросхеми ULN2003, що представляє собою масив транзисторів, включених по схемі Дарлінгтона, дозволяє досить просто управляти мотором 28BYJ-48, використовуючи мікроконтролер. У нашому випадку, в якості керуючого мікроконтролера ми виберемо плату Arduino Uno з мікро контролером ATmega328. Крім самої мікросхеми ULN2003AN, на платі є пятіконтактний роз'єм для підключення до кроковика і чотири світлодіоди, що показують, яка з обмоток заживлена в поточний момент часу.
BYJ-48-2.jpg
Також збоку розташований джампер (два виводи під чотирма резисторами), установка якого дозволяє подавати живлення на кроковий двигун. Живити мотор від 5 В Arduino не рекомендується!, так як мотор може споживати струм, що перевищує можливості Arduino. Краще використовувати зовнішнє 5-12 В джерело живлення, що видає струм не менше 1 А. Чотири керуючих входів позначені як IN1-IN4 і повинні бути підключені до чотирьох цифрових висводів Arduino. Підключіть виводи IN1, IN2, IN3 і IN4 до пінів 3, 4, 5 і 6 Arduino Uno. Позитивний контакт джерела живлення необхідно підключити до виводу, позначеного як «+», а землю джерела живлення до виводу «-» на платі контролера. Якщо для живлення Arduino і мотора використовуються різні джерела живлення, то необхідно об'єднати виводи «земля» джерел разом.
Бібліотеки крокового двигуна 28BYJ-48
Стандартна бібліотека Stepper, що йде з Arduino IDE, підтримує тільки повнокроковий метод управління і має сильно обмежені можливості. Використовувати її можна тільки в дуже простих додатках, в яких використовується тільки один мотор. Застосування бібліотеки Stepper для управління 28BYJ-48 є не найефективнішим рішенням. Є рішення краще - це використовувати бібліотеку Accel Stepper. Ця бібліотека дуже добре працює спільно з кроковим двигуном 28BYJ-48 (мотор майже не гріється), а також підтримує прискорення, що дозволяє змусити мотор обертатися швидше. Бібліотека використовує код, що не блокує кроки і включає чимало інших приємних особливостей:
  • Об'єктно-орієнтований інтерфейс для 2, 3 або 4-вивідних крокових двигунів
  • Підтримка прискорення і уповільнення
  • Підтримка одночасно декількох крокових двигунів з незалежної роботою для кожного мотора
  • Функції API не використовують функцію delay і не переривають роботу
  • Підтримка вибору функції для реалізації кроку дозволяє працювати спільно з бібліотекою AFMotor
  • Підтримка контролерів крокових двигунів таких як Sparkfun EasyDriver (заснованих на мікросхемі драйвера 3967)
  • Підтримка низьких швидкостей розширюваний API підтримка підкласів
Бібліотека
AccelStepper-1.48.zip
(81.67 Кіб) Завантажено 132 разів
Скетч для роботи крокового двигуна

Код: Виділити все

// Контакты   Bl Pi Ye  Or
int pins[] = {8, 9, 10, 11}; //Задаємо піни по порядку
int buttonPin = 5;
int potPin = A0;

int phases = 8; // для крокового режиму встановити 4

// Для крокового режиму
//bool motorPhases[4][4] = { // [phase][pin]
//// -------- pins ----------
//// Winding    A  B  A  B
//// Motor Pin  1  2  3  4
//// Color      Bl Pi Ye Or
//  {           1, 1, 0, 0},
//  {           0, 1, 1, 0},
//  {           0, 0, 1, 1},
//  {           1, 0, 0, 1}
//};

// Для півкрокового режиму
bool motorPhases[8][4] = { // [phase][pin]
  // -------- pins ----------
  // Winding    A  B  A  B
  // Motor Pin  1  2  3  4
  // Color      Bl Pi Ye Or
  {             1, 1, 0, 0},
  {             0, 1, 0, 0},
  {             0, 1, 1, 0},
  {             0, 0, 1, 0},
  {             0, 0, 1, 1},
  {             0, 0, 0, 1},
  {             1, 0, 0, 1},
  {             1, 0, 0, 0}
};

void setup() {
  for (int i = 0; i < 4; i++) pinMode(pins[i], OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(potPin, INPUT);
  //Serial.begin(9600);
}

int phase = 0;
int _step = 1; // кщо у кроку поміняти знак, на -1 - зміниться напрямок обертання.
//int delaytime=1000; //У мікросекундах для більш точного регулювання швидкості

void loop() {
  int delaytime = map(analogRead(potPin), 0, 1023, 1000, 16000);

  bool isButtonDown = digitalRead(buttonPin);
  //Serial.println(isButtonDown);
  if (isButtonDown) {
    _step = -_step;
    delay(500); // Робимо паузу, щоб відсікти брязкіт
  }

  phase += _step;
  if (phase > 7) phase = 0;
  if (phase < 0) phase = 7;

  for (int i = 0; i < 4; i++) {
    digitalWrite(pins[i], ((motorPhases[phase][i] == 1) ? HIGH : LOW));
  }
  // Пауза на обертання на один крок / напівкрок
  //delay(2);// Для крокової режиму встановити в 3
  delayMicroseconds(delaytime);
}

Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Re: Кроковий двигун 28BYJ-48 з драйвером ULN2003 і Arduino UNO

Повідомлення Arduino » 15 серпня 2017 19:12

datasheet мотор двигун 28BYJ-48
28ybj-param.jpg

Відповісти

Повернутись до “Керування двигунами”