NEMA 17
NEMA 17
NEMA 17 — это не модель конкретного мотора, а стандарт типоразмера корпуса (National Electrical Manufacturers Association). Число “17” означает размер передней панели 1.7 x 1.7 дюйма (примерно 42 x 42 мм).
Это “рабочая лошадка” современной любительской робототехники, 3D-принтеров и лазерных граверов.
![]()
1. Характеристики (Типичные)
- Шаг: 1.8° (200 шагов на оборот).
- Ток фазы: Обычно от 1.0А до 1.7А.
- Тип: Биполярный (4 провода).
- Напряжение: В даташитах часто пишут низкое напряжение (например, 2.8V или 3.4V).
- ⚠️ Важно: Это напряжение падения на обмотке при номинальном токе. Питать драйвер нужно напряжением 12V или 24V! Драйвер сам ограничит ток, но высокое напряжение нужно для быстрых шагов (преодоления индуктивности).
2. Подключение (Цвета проводов)
У NEMA 17 выходят 4 провода. Это две обмотки (A и B). Цветовая маркировка не стандартизирована и зависит от производителя!
Как найти пары?
- Мультиметр: В режиме прозвонки. Если пищит — это концы одной обмотки (пара).
- Светодиод: Вставьте светодиод в два контакта разъема и крутаните вал. Если мигает — это пара.
- Замыкание: Замкните два провода. Если вал стал крутиться туго — это одна обмотка.
Обычно пары подключаются к драйверу как 1A 1B и 2A 2B.
3. Управление (через драйвер A4988 / DRV8825)
Для управления нужны всего 2 пина микроконтроллера:
- STEP: Один импульс = один шаг.
- DIR: Уровень (High/Low) задает направление вращения.
Схема подключения A4988
- VMOT & GND: Питание мотора (12V-24V) + конденсатор 100uF!
- VDD & GND: Питание логики (5V от Arduino).
- 1A, 1B, 2A, 2B: К мотору.
- STEP, DIR: К Arduino.
- RESET & SLEEP: Нужно соединить перемычкой друг с другом (чтобы включить драйвер).
Пример кода (Простой)
// Пины драйвера
const int dirPin = 2;
const int stepPin = 3;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
// Вращение в одну сторону
digitalWrite(dirPin, HIGH);
// Сделаем 200 шагов (1 оборот)
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000); // Скорость вращения (чем меньше, тем быстрее)
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // Пауза 1 сек
// Вращение в другую сторону
digitalWrite(dirPin, LOW);
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // Быстрее!
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000);
}
Библиотека AccelStepper
Для серьезных проектов (плавный разгон, торможение, одновременное управление несколькими моторами) используйте библиотеку AccelStepper.
#include <AccelStepper.h>
// Тип интерфейса: 1 = драйвер (STEP/DIR)
AccelStepper stepper(1, 3, 2); // stepPin = 3, dirPin = 2
void setup() {
stepper.setMaxSpeed(1000); // Макс. скорость (шагов/сек)
stepper.setAcceleration(500); // Ускорение
}
void loop() {
stepper.moveTo(500); // Задать целевую позицию
stepper.run(); // Эта функция должна вызываться в цикле как можно чаще!
}
