Драйвер шагового двигателя A4988

Содержание:

  • Обзор
  • Технические характеристики модуля
  • Назначение контактов драйвера
  • Подключение драйвера к Arduino
  • Пример использования
  • Часто задаваемые вопросы FAQ

Шаговые двигатели представляют собой электромеханические устройства, задачей которых является преобразование электрических импульсов в перемещение вала двигателя на определенный угол.
Достоинствами шаговых двигателей по сравнению с простыми являются:

  • Высокая точность позиционирования и повторяемости — качественные ШД имеют точность не хуже 2,5 % от величины шага, при этом данная ошибка не накапливается при последующих шагах;
  • Шаговый двигатель может быстро стартовать, останавливаться и выполнять реверс;
  • Четкая взаимосвязь угла поворота ротора от количества входных импульсов (в штатных режимах работы) позволяет выполнять позиционирование без применения обратной связи;
  • Шаговые двигатели обеспечивают получение сверхнизких скоростей вращения вала без использования редуктора;
  • Шаговые двигатели работают в широком диапазоне скоростей, поскольку. скорость напрямую зависит от количества входных импульсов.

Шаговые двигатели применяются там, где требуется высокая точность перемещений. Примеры использования – принтеры, факсы и копировальные машины, станки с ЧПУ, 3D-принтеры.
Для управления шаговыми двигателями используют специальные устройства – драйверы шаговых двигателей.
Популярный драйвер шагового двигателя А4988 (рис. 1) работает от напряжения 8 — 35 В и может обеспечить ток до 1 А на фазу без радиатора (и до 2 A с радиатором). Модуль A4988 имеет защиту от перегрузки и перегрева. Одним из параметров шаговых двигателей является количество шагов на один оборот 360°. Например, для шаговых двигателей Nema17 это 200 шагов на оборот, т.е 1 шаг равен 1.8°. Драйвер A4988 позволяет увеличить это значение за счёт возможности управления промежуточными шагами и имеет пять режимов микрошага (1(полный), 1/2, 1/4, 1/8 и 1/16).

Драйвер A4988

Рисунок 1. Драйвер биполярных двигателей A4988


Технические характеристики A4988

  • напряжения питания: 8-35 В;
  • режим микрошага: 1, 1/2, 1/4, 1/8, 1/16;
  • напряжение логики: 3-5.5 В;
  • защита от перегрева;
  • максимальный ток на фазу:
    — 1 А без радиатора;
    — 2 А с радиатором.
  • размер: 20 х 15 мм;
  • без радиатора: 2 г.

Назначение контактов драйвера A4988

  • ENABLE – включение/выключение драйвера;
  • MS1, MS2, MS3 – контакты для установки микрошага;
  • RESET — cброс микросхемы;
  • STEP — генерация импульсов для движения двигателей (каждый импульс – шаг), можно регулировать скорость двигателя;
  • DIR – установка направление вращения.
  • VMOT – питание для двигателя (8 – 35 В);
  • GND – общий;
  • 2B, 2A, 1A, 1B – для подключения обмоток двигателя;
  • VDD – питание микросхемы (3.5 –5В);
Выводы драйвера A4988

Рисунок 2. Выводы драйвера A4988

Значение микрошага устанавливается комбинацией сигналов на входах MS1, MS2, и MS3. Есть пять вариантов дробления шага (см. с таблицу 1).

MS1 MS1 MS1 Дробление шага
0 0 0 1
1 0 0 1/2
0 1 0 1/4
1 1 0 1/8
1 1 1 1/16

Таблица 1. Комбинация значений для выбора микрошага

Для работы в режиме микрошага необходим слабый ток. На модуле A4988 поддерживает тока можно ограничить находящимся на плате потенциометром. Драйвер очень чувствителен к скачкам напряжения по питанию двигателя, поэтому производитель рекомендует устанавливать электролитический конденсатор большой емкости по питанию VMOT для сглаживания скачков.
Внимание ! — Подключение или отключение шагового двигателя при включённом драйвере может привести выходу двигателя из строя!!!


Подключение драйвера к Arduino

Схема подключения A4988 к плате Arduino

Рисунок 3. Схема подключения A4988 к плате Arduino

Схема подключения драйвера A4988 для управления биполярным шаговым двигателем показана на рисунке 3. Вывод RESET подключен к выводу SLEEP, чтобы на нем был высокий уровень HIGH.

Загрузим на плату Arduino скетч из листинга 1, который управляет движением биполярного шагового двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.
Листинг 1

// пины для подключения контактов STEP, DIR
#define PIN_STEP 3
#define PIN_DIR 2

// количество шагов на 1 оборот
#define STEP_ROUND 200

// скорость двигателя
#define SPEED 10

void setup() {
// режим для STEP и DIR как OUTPUT
pinMode(PIN_STEP, OUTPUT);
pinMode(PIN_DIR, OUTPUT);
// начальные значения
digitalWrite(PIN_STEP, 1);
digitalWrite(PIN_DIR, 0);
}

void loop() {
// направление вращения
digitalWrite(PIN_DIR, HIGH);
// сделать 1 оборот
for(int j = 0; j < STEP_ROUND; j++) {
digitalWrite(PIN_STEP, HIGH);
delay(SPEED);
digitalWrite(PIN_STEP, LOW);
delay(SPEED);
}
// изменить направление вращения
digitalWrite(PIN_DIR, HIGH);
// сделать 1 оборот
for(int j = 0; j < STEP_ROUND; j++) {
digitalWrite(PIN_STEP, HIGH);
delay(SPEED);
digitalWrite(PIN_STEP, LOW);
delay(SPEED);
}
}

Если после загрузки скетча не происходит движения двигателя, проверьте правильность подключения обмоток к выводам драйвера A4988. К выводам 2B и 2A (1A и 1B) подключаются провода двигателя, которые «прозваниваются» тестером.


Пример использования

В качестве примера использования рассмотрим управление дроблением шага и направлением вращения шагового двигателя с платы Arduino. Нам потребуются следующие компоненты:

  • Плата Arduino Uno -1;
  • Драйвер A4988 — 1;
  • Шаговый двигатель NEMA17 — 1;
  • Потенциометр 10 кОм — 1;
  • Кнопка — 1;
  • Переключатель 2-х позиционный — 1;
  • Резистор 10 кОм – 3;
  • Провода MF — 20
  • Соединение деталей по схеме соединений на рис. 4.
Схема подключения для управления скоростью и направлением движения

Рисунок 4. Схема подключения для управления скоростью и направлением движения

Приступим к написанию скетча. Нажатие на кнопку включает/выключает двигатель, подавая сигнал LOW/HIGH на вход ENABLE драйвера A4988. С помощью переключателя выбираем направление вращения двигателя (сигнал с переключателя подается напрямую на вход DIR драйвера A4988). C помощью потенциометра мы выбираем один из режимов микрошага. Содержимое скетча представлено в листинге 2.
двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.
Листинг 2

// пины для подключения контактов STEP, DIR
const int STEP 3
int DIR 2
// для регулировки скорости - пин потенциометра
#define POT A0
// для кнопки
#define BUTTON 9
// для включения/выключения
#define EN 8

// количество шагов на 1 оборот
#define ROUND 200

// скорость двигателя
#define SPEED 10

// массив пинов для MS1,MS2,MS3
int pins_steps[]={7,6,5};
int steps[5][3]={
{0,0,0}, // 1
{1,0,0}, // 1/2
{0,1,0}, // 1/4
{1,1,0}, // 1/8
{1,1,1} // 1/16
};

// для кнопки
int prevB=0;
int tekB=0;

boolean movement=false;

void setup() {
// режим для выводов STEP и DIR как
pinModeSTEP, OUTPUT);
pinMode(DIR, OUTPUT);
// начальные значения
digitalWrite(STEP, 1);
digitalWrite(DIR, 0);
// режим для enable
pinMode(EN, OUTPUT);
// не разрешать
digitalWrite(EN, 1);
// для MS1,MS2,MS3
for(int i=0;i<3;i++) {
pinMode(pins_steps[i], OUTPUT);
}
}

void loop() {
// получить режим микрошага
digitalWrite(DIR, 1);
int mode=map(analogRead(POT),0,1024,0,5);
// установить
for(int i=0;i<3;i++) {
digitalWrite(pins_steps[i], steps[mode][i]);
}
// сделать 1 оборот
if(movement==true) {
digitalWrite(STEP, 1);
delay(SPEED);
digitalWrite(STEP, 0);
delay(SPEED);
}
// проверка нажатия кнопки
tekB = debounce(prevB, BUTTON);
if (prevB == 0 && tekB == 1) {
movement=!movement;
digitalWrite(EN,!movement);
}
prevB = tekB;
}
// проверка на дребезг
int debounce(int prev,int pin) {
int tek = digitalRead(pin);
if (prev != tek) {
delay(5);
tek = digitalRead(pin);
return tek;
}
}

Часто задаваемые вопросы FAQ

  1. Шаговый двигатель на движется
    — Проверьте правильность подключения драйвера к плате Arduino.
    — Проверьте правильность подключения проводов двигателя к выводам A1,A2,B1,B2.
    — Недостаточная мощность блока питания двигателя.