Перед початком чергового проекту на Arduino, було вирішено використовувати кроковий двигун Nema 17 через відмінний співвідношення ціна / якість. Перед підключенням Nema 17, за плечима був певний досвід роботи з кроковиках 24byj48 (даташит). Управлявся він і за допомогою Arduino, і за допомогою Raspberry pi, проблем не виникало. Основна принадність цього двигуна - ціна (близько 3 доларів в Китаї). Причому, за цю суму ви купуєте двигун з драйвером в комплекті. Погодьтеся, таке можна навіть і спалити, не особливо шкодуючи про скоєне.
Тепер постало завдання цікавіше. Управляти кроковим двигуном Nema 17 (даташит). Дана модель від оригінального виробника реалізується за ціною близько 40 доларів. Китайські копії стоять рази в півтора-два дешевше - близько 20-30 доларів. Дуже вдала модель, яка часто використовується в 3D принтерах і CNC-проектах. Перша виникла проблема - як підібрати драйвер для цього двигуна. Сили струму на пінах Arduino для харчування не вистачить.
Вибір драйвера для управління Nema 17
Google підказав, що для пожвавлення Nema 17 можна використовувати драйвер A4988 від Poulou (даташит).
Крім того, є варіант використання мікросхем L293D. Але A4988 вважається більш підходящим варіантом, так що на ньому і зупинилися, щоб уникнути потенційних проблем.
Підключення Nema 17 через A4988
Підключення було реалізовано на підставі цієї теми на Arduino форумі. Малюнок наведено нижче.
Власне, дана схема присутня практично на кожному блозі-сайті, присвяченому Arduino. Плата була запитана від 12 вольта джерела живлення. Але двигун не обертався. Перевірили всі з'єднання, ще раз перевірили і ще раз.
перша проблема
Наш 12 вольта адаптер не видавав достатньої сили струму. В результаті адаптер був замінений на 8 батарейок АА. І двигун почав обертатися! Що ж, тоді захотілося перескочити з макетної плати на пряме підключення. І тут виникла
друга проблема
Коли все було розпаяно, двигун знову перестав рухатися. Чому? Не зрозуміло до сих пір. Довелося повернутися до макетної платі. І ось тут виникла інша проблема. Варто попередньо було посидіти на форумах або уважно почитати даташит. Не можна підключати-відключати двигун коли на контролер подано харчування! В результаті контролер A4988 благополучно згорів.
Ця проблема була вирішена покупкою нового драйвера на eBay. Тепер, вже з урахуванням накопиченого сумного досвіду, Nema 17 був підключений до A4988і запущений, але.
Кроковий двигун сильно вібрує
Під час обертання ротора двигун сильно вібрував. Про плавному русі не було й мови. Гугл знову на допомогу. Перша думка - неправильне підключення обмоток. Ознайомлення з даташіта крокової двигуна і кілька форумів переконали, що проблема не в цьому. При неправильному підключенні обмоток двигун просто не буде працювати. Рішення проблеми крилося в скетчі.
Програма для Arduino
Виявилося, що є чудова бібліотека для крокових двигунів, написана хлопцями з Adafruit. Використовуємо бібліотеку AcclStepper і кроковий двигун починає працювати плавно, без надмірних вібрацій.
Основні висновки
- Ніколи не підключайте / відключайте двигун, коли на контролер подано харчування.
- При виборі джерела живлення, зверніть увагу не тільки на вольтаж, але і на потужність адаптера.
- Не турбуйтеся, якщо контролер A4988 вийшов з ладу. Просто замовте новий;)
- Використовуйте бібліотеку AcclStepper замість голого коду Arduino. Кроковий двигун з використанням цієї бібліотеки буде працювати без зайвих вібрацій.
Скетчі для управління кроковим двигуном
Простий Arduino-код для перевірки крокової двигуна
// просте підключення A4988
// Піни reset і sleep пов'язані один з одним
// підключіть VDD до піну 3.3 В або 5 В на Arduino
// підключіть GND до Arduino GND (GND поруч з VDD)
// підключіть 1A і 1B до 1 котушці крокової двигуна
// підключіть 2A і 2B до 2 котушці крокової двигуна
// підключіть VMOT до джерела живлення (9В джерело живлення + term)
// підключіть GRD до джерела живлення (9В джерело живлення - term)
int stp = 13; // підключіть 13 пін до step
int dir = 12; // підключіть 12 пін до dir
Другий код для Arduino для забезпечення плавного обертання двигуна. Використовується бібліотека AccelStepper library.
AccelStepper Stepper1 (1,13,12); // використовує пін 12 і 13 для dir і step, 1 - режим "external driver" (A4988)
int dir = 1; // використовується для зміни напрямку
Stepper1.setMaxSpeed (3000); // встановлюємо максимальну швидкість обертання ротора двигуна (кроків / секунду)
Stepper1.setAcceleration (13000); // встановлюємо прискорення (кроків / секунду ^ 2)
if (Stepper1.distanceToGo () == 0)/проверка, отработал ли двигатель предыдущее движение
Stepper1.move (1600 * dir); // встановлює наступне переміщення на 1600 кроків (якщо dir дорівнює -1 буде переміщатися -1600 -> протилежний зміст)
dir = dir * (- 1); // від'ємне значення dir, завдяки чому реалізується обертання в протилежному напрямку
delay (1000); // затримка на 1 секунду
Stepper1.run (); // запуск крокової двигуна. Цей рядок повторюється знову і знову для безперервного обертання двигуна
ARDUINO-DIY.COM - це інформаційний ресурс з кращими інструкціями і туторіали по використанню контролерів Arduino.
Завжди раді конструктивної співпраці. З усіма питаннями, побажаннями і пропозиціями звертайтеся на пошту [email protected].