28BYJ-48 - це маленький, дешевий, 5 вольтовий кроковий моторчик з редуктором. Передавальне число редуктора у нього приблизно 64: 1, що дозволяє отримати цілком гідний крутний момент для моторчика такого розміру і швидкість близько 15 об / хв. З деякими програмними хитрощами для поступового прискорення можна досягти більше 25 об / хв. Ці маленькі крокові двигуни разом з невеликою платою-драйвером на базі м / сх ULN2003 для використання спільно c Arduino UNO можна придбати http://arduinka.biz.ua/uk/krokoviy-dvig ... 35c76.html . Досить вигідне придбання, якщо порівнювати сукупну ціну з редукторним двигуном постійного струму, контролером двигуна і колісним енкодером!
Двигун має чотири обмотки, які живляться послідовно, щоб повернути вал з магнітом. Коли використовується повнокроковий метод управління, дві з чотирьох обмоток живляться на кожному кроці. Що йде разом з Arduino IDE бібліотека Stepper використовує такий спосіб. У технічному керівництві до 28BYJ-48 сказано, що кращим є використання методу півкроку, при якому спочатку живиться тільки 1 обмотка, потім разом перша і друга обмотки, потім тільки друга обмотка і так далі.
Підключення драйвера 28BYJ-48 крокового двигуна ULN2003 до Arduino Uno
Плата драйвера крокового двигуна на базі мікросхеми ULN2003, що представляє собою масив транзисторів, включених по схемі Дарлінгтона, дозволяє досить просто управляти мотором 28BYJ-48, використовуючи мікроконтролер. У нашому випадку, в якості керуючого мікроконтролера ми виберемо плату Arduino Uno з мікро контролером ATmega328. Крім самої мікросхеми ULN2003AN, на платі є пятіконтактний роз'єм для підключення до кроковика і чотири світлодіоди, що показують, яка з обмоток заживлена в поточний момент часу. Також збоку розташований джампер (два виводи під чотирма резисторами), установка якого дозволяє подавати живлення на кроковий двигун. Живити мотор від 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 підтримка підкласів
Код: Виділити все
// Контакты 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);
}