Содержание
- Обзор
- Технические характеристики модуля
- Назначение контактов драйвера
- Подключение драйвера к Arduino
- Пример использования
- Часто задаваемые вопросы FAQ
Обзор драйвера A4988
Шаговые двигатели представляют собой электромеханические устройства, задачей которых является преобразование электрических импульсов в перемещение вала двигателя на определенный угол. Достоинствами шаговых двигателей по сравнению с простыми являются:- Высокая точность позиционирования и повторяемости — качественные ШД имеют точность не хуже 2,5 % от величины шага, при этом данная ошибка не накапливается при последующих шагах;
- Шаговый двигатель может быстро стартовать, останавливаться и выполнять реверс;
- Четкая взаимосвязь угла поворота ротора от количества входных импульсов (в штатных режимах работы) позволяет выполнять позиционирование без применения обратной связи;
- Шаговые двигатели обеспечивают получение сверхнизких скоростей вращения вала без использования редуктора;
- Шаговые двигатели работают в широком диапазоне скоростей, поскольку. скорость напрямую зависит от количества входных импульсов.
Рисунок 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В)
Рисунок 2. Выводы драйвера A4988
Значение микрошага устанавливается комбинацией сигналов на входах MS1, MS2, и MS3. Есть пять вариантов дробления шага (см. с таблицу 1).
Таблица 1. Комбинация значений для выбора микрошага
Для работы в режиме микрошага необходим слабый ток. На модуле A4988 поддерживает тока можно ограничить находящимся на плате потенциометром. Драйвер очень чувствителен к скачкам напряжения по питанию двигателя, поэтому производитель рекомендует устанавливать электролитический конденсатор большой емкости по питанию VMOT для сглаживания скачков. Внимание ! - Подключение или отключение шагового двигателя при включённом драйвере может привести выходу двигателя из строя!!!Подключение драйвера к 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
- Проверьте правильность подключения драйвера к плате Arduino.
- Проверьте правильность подключения проводов двигателя к выводам A1,A2,B1,B2.
- Может быть недостаточной мощность блока питания двигателя.