Товары
Для управления шаговыми двигателями используют специальные устройства – драйверы шаговых двигателей. Популярный драйвер шагового двигателя А4988 работает от напряжения 8-35 В и может обеспечить ток до 1 А на фазу без радиатора.
Обзор драйвера 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В)
Рисунок 2. Выводы драйвера A4988
Значение микрошага устанавливается комбинацией сигналов на входах MS1, MS2, и MS3. Есть пять вариантов дробления шага (см. с таблицу 1).
MS1 | MS1 | MS1 | Дробление шага |
1 | |||
1 | 1/2 | ||
1 | 1/4 | ||
1 | 1 | 1/8 | |
1 | 1 | 1 | 1/16 |
Таблица 1. Комбинация значений для выбора микрошага
Для работы в режиме микрошага необходим слабый ток. На модуле A4988 поддерживает тока можно ограничить находящимся на плате потенциометром. Драйвер очень чувствителен к скачкам напряжения по питанию двигателя, поэтому производитель рекомендует устанавливать электролитический конденсатор большой емкости по питанию VMOT для сглаживания скачков. Внимание ! — Подключение или отключение шагового двигателя при включённом драйвере может привести выходу двигателя из строя.
Подключение драйвера к Arduino
Рисунок 3. Схема подключения A4988 к плате Arduino
Схема подключения драйвера A4988 для управления биполярным шаговым двигателем показана на рисунке 3. Вывод RESET подключен к выводу SLEEP, чтобы на нем был высокий уровень HIGH. Загрузим на плату Arduino скетч из листинга 1, который управляет движением биполярного шагового двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.
Листинг 1 Если после загрузки скетча не происходит движения двигателя, проверьте правильность подключения обмоток к выводам драйвера A4988. К выводам 2B и 2A (1A и 1B) подключаются провода двигателя, которые "прозваниваются" тестером.
Пример использования
Рисунок 4. Схема подключения для управления скоростью и направлением движения
Приступим к написанию скетча. Нажатие на кнопку включает/выключает двигатель, подавая сигнал LOW/HIGH на вход ENABLE драйвера A4988. С помощью переключателя выбираем направление вращения двигателя (сигнал с переключателя подается напрямую на вход DIR драйвера A4988). C помощью потенциометра мы выбираем один из режимов микрошага. Содержимое скетча представлено в листинге 2. двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.
Часто задаваемые вопросы FAQ
- Проверьте правильность подключения драйвера к плате Arduino.
- Проверьте правильность подключения проводов двигателя к выводам A1,A2,B1,B2.
- Может быть недостаточной мощность блока питания двигателя.
Автор: Сергей · Опубликовано 11.04.2019 · Обновлено 26.09.2019
Сегодня расскажу о драйвере A4988, данный драйвер подойдет тем, кто планирует создать свой собственный 3D-принтер или станок ЧПУ с управлением шаговым двигателям.
Технические параметры
► Напряжения питания: от 8 до 35 В
► Установка шага: 1, 1/2, 1/4, 1/8, 1/16
► Напряжение логики: 3 В или 5.5 В
► Защита от перегрева: Есть
► Максимальный ток на фазу: 1 А без радиатора, 2 А с радиатором.
► Габариты модуля: 20 мм х 15 мм х 10 мм
► Габариты радиатора: 9 мм х 5 мм х 9 мм
Общие сведения о драйвере A4988
Основная микросхема модуля это драйвер от Allegro — A4988, которая имеет небольшие размеры (всего 8 мм х 6 мм), хоть микросхема и маленькая, но она может работать с выходным напряжение до 35 В с током до 1 А на катушку без радиатора и до 2 А с радиатором (дополнительным охлаждением). Для управления шаговым двигателем, необходимо всего два управляющих контакта (по сравнению с L298N необходимо четыре), один используется для управления шагами, второй для управления вращения двигателем.
Драйвер позволяет использовать пять вариантов шага, полный шаг, полшага, четверть шага, восьмой шаг и шестнадцатый шаг.
Распиновка драйвера A4988:
На драйвере A4988 расположено 16 контактов, назначение каждого можно посмотреть ниже:
► EN — включение и выключение модуля (0 — включен, 5 В — выключен).
► MS1, MS2 и MS3 — выбор режима микро шаг (смотрите таблицу ниже).
► RST — сброс драйвера.
► SLP — вывод включения спящего режима, если подтянуть его к низкому состоянию драйвер перейдет в спящий режим.
► STEP — управляющий вывод, при каждом положительном импульсе, двигатель делает шаг (в зависимости от настройки микро шага), чем быстрее импульсы, тем быстрее вращаться двигатель.
► DIR — управляющий вывод, если подать +5 В двигатель будет вращается по часовой стрелке, а если подать 0 В против часовой стрелки.
► VMOT & GND — питание шагового двигателя двигателя от 8 до 35 В (обязательное наличие конденсатора на 100 мкФ ).
► 2B, 2A, 1B, и 1A — подключение обмоток двигателя.
► VDD & GND — питание внутренней логики от 3 В до 5,5 В.
Если не планируете использовать вывод RST необходимо подключить его к выводу SLP, чтобы подтянуть его к питанию, тем самым включить драйвер.
Настройка микрошага
Драйвер A4988 может работать микрошаговом режиме, то есть может подавать питание на катушки с промежуточным уровням. Например, если взять двигатель NEMA17 с шагом 1.8 или 200 оборотов, в режиме 1/4, двигатель будет выдавать 800 шагов за оборот
Дня настройки микрошагов, драйвер A4988 имеет три выхода, а именно MS1, MS2 и MS3. Установив соответствующие логические уровни для этих выводов, можно выбрать режим микрошага.
Вывода MS1, MS2 и MS3 в микросхеме A4988 подтянуты резистором к земле, поэтому, если не подключать их, двигатель будет работать в режиме полного шага.
Система охлаждения A4988
При интенсивной работе микросхемы A4988 начинает сильно греется и если температура превысит придельные значение, может сгореть. По документации A4988 может работать с током до 2 А на катушку, но на практике микросхема не греется если ток не превышает 1 А на катушку. Поэтому если ток выше 1 А необходимо устанавливать радиатор охлаждения, который идет в комплекте.
Настройка тока A4988
Перед использованием мотора нужно сделать небольшую настройку, необходимо ограничить максимальную величину тока, протекающего через катушки шагового двигателя и ограничить его превышение номинального тока двигателя, регулировка осуществляется с помощью небольшого потенциометра.
Существует два способа настройки:
1. Замерить ток, для этого возьмем амперметр и подключим его в разрыв любой из обмоток (двигатель должен работать в полношаговом режиме), так же, при настройки ток должен составлять 70% от номинального тока двигателя.
2. Расчет значение напряжения Vref, согласно документации на A4988, есть формула I_TripMax = Vref / (8 × Rs), из которой мы можем получить формулу.
Vref = I_TripMax x 8 x Rs
где,
I_TripMax — номинальный ток двигателя
Rs — сопротивление на резисторе.
В моем случаи на драйвере A4988 установлены резисторы Rs = 0,100 Ом (R100), а номинальный ток двигателя 17HS4401 равняется 1,7 А.
Vref = 1,7 х 8 х 0,100 = 1,36 В
Мы рассчитали максимальное значение для двигателя 17HS4401, но при таком напряжение двигатель будет греться в режиме ожидания, необходимо уменьшить это значение на 70%, то есть:
Vref х 0,7 = 0,952 В
Осталось только настроить, берем отвертку и вольтметр, плюсовой шуп вольтметра устанавливаем на потенциометр, а шуп заземления на вывод GND и выставляем нужное значение.
Подключение драйвера шагового двигателя A4988 к Arduino UNO
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Драйвер шагового двигателя A4988 x 1 шт.
► Шаговый двигатель 17HS4401 x 1 шт.
► Комплект проводов DuPont 2.54 мм, 20 см x 1 шт.
Подключение:
Теперь, можно приступить к сборке схемы. Первым делом, подключаем VDD и GND к 5 В и GND на Arduino. Контакты DIR и STEP подключим к цифровым контактам 2 и 3 на Arduino. Подключение шагового двигатель к контактам 2B, 2A, 1A и 1B.
Предупреждение: Подключение или отключение шагового двигателя при включенном приводе может привести к его повреждению.
Затем необходимо подключить контакт RST к соседнему контакту SLEEP, чтобы включить драйвер. Так-же контакты выбора микрошага необходимо оставить не подключенными, чтобы работал режим полный микрошаг. Теперь осталось подключить питание двигателя к контактам VMOT и GND, главное не забудьте подключить электролитический конденсатор на 100 мкФ, в противном случаи при скачке напряжение, модуль может выйти из строя.
Программа:
Теперь можно приступки к программной части и начать управлять шаговым двигателем с помощью драйвера A4988, загружайте данный скетч в Arduino.
Управление шаговым двигателем с помощью платы Arduino.
В данной статье мы продолжаем разбираться с темой шаговых двигателей. В прошлый раз мы подключили к плате Arduino NANO небольшой моторчик 28BYJ-48 (5V). Сегодня мы будем делать то же самое, но с другим мотором — NEMA 17, серии 17HS4402 и другим драйвером — A4988.
Шаговый мотор NEMA 17 — это биполярный двигатель с высоким крутящим моментом. Может поворачиваться на заданное число шагов. За один шаг совершает оборот на 1,8°, соответственно полный оборот на 360° осуществляет за 200 шагов.
Биполярный двигатель имеет две обмотки, по одной в каждой фазе, которая для изменения направления магнитного поля переполюсовывается драйвером. Соответственно, от мотора отходят четыре провода.
Такой мотор широко применяется в станках ЧПУ, 3D принтерах, сканерах и т. д.
Управляться он будет с помощью платы Arduino NANO.
Эта плата способна выдавать напряжение 5V, тогда как мотор работает от большего напряжения. Мы выбрали блок питания 12V. Так что нам понадобится дополнительный модуль — драйвер, способный управлять более высоким напряжением через маломощные импульсы Arduino. Для этого отлично подходит драйвер А4988.
Драйвер шагового двигателя А4988.
Плата создана на базе микросхемы A4988 компании Allegro — драйвера биполярного шагового двигателя. Особенностями A4988 являются регулируемый ток, защита от перегрузки и перегрева, драйвер также имеет пять вариантов микрошага (вплоть до 1/16-шага). Он работает от напряжения 8 — 35 В и может обеспечить ток до 1 А на фазу без радиатора и дополнительного охлаждения (дополнительное охлаждение необходимо при подаче тока в 2 A на каждую обмотку).
Модель: A4988;
напряжения питания: от 8 до 35 В;
возможность установки шага: от 1 до 1/16 от максимального шага;
напряжение логики: 3-5.5 В;
защита от перегрева;
максимальный ток на фазу: 1 А без радиатора, 2 А с радиатором;
расстояние между рядами ножек: 12 мм;
размер платы: 20 х 15 мм;
габариты драйвера: 20 х 15 х 10 мм;
габариты радиатора: 9 х 5 х 9 мм;
вес с радиатором: 3 г;
без радиатора: 2 г.
Для работы с драйвером необходимо питание логического уровня (3 — 5,5 В), подаваемое на выводы VDD и GND, а также питание двигателя (8 — 35 В) на выводы VMOT и GND. Плата очень уязвима для скачков напряжения, особенно если питающие провода длиннее нескольких сантиметров. Если эти скачки превысят максимально допустимое значение (35 В для A4988) ,то плата может сгореть. Одним из способов защиты платы от подобных скачков является установка большого (не меньше 47 мкФ) электролитического конденсатора между выводом питания (VMOT) и землёй близко к плате.
Соединение или разъединение шагового двигателя при включённом драйвере может привести к поломке двигателя!
Выбранный мотор совершает 200 шагов за полный оборот на 360°, что соответствует 1,8° на шаг. Микрошаговый драйвер, такой как A4988 позволяет увеличить разрешение за счёт возможности управления промежуточными шагами. Например, управление мотором в режиме четверти шага даст двигателю с величиной 200-шагов-за-оборот уже 800 микрошагов при использовании разных уровней тока.
Разрешение (размер шага) задаётся комбинациями переключателей на входах (MS1, MS2, и MS3).
MS1 | MS2 | MS3 | Разрешение микрошага |
Низкий | Низкий | Низкий | Полный шаг |
Высокий | Низкий | Низкий | 1/2 шага |
Низкий | Высокий | Низкий | 1/4 шага |
Высокий | Высокий | Низкий | 1/8 шага |
Высокий | Высокий | Высокий | 1/16 шага |
Каждый импульс на входе STEP соответствует одному микрошагу двигателя, направление вращения которого зависит от сигнала на выводе DIRECTION. Выводы STEP и DIRECTION не подтянуты к какому-либо конкретному внутреннему напряжению, поэтому их не стоит оставлять плавающими при создании приложений. Если вы просто хотите вращать двигатель в одном направлении, можно соединить DIR непосредственно с VCC или GND. Чип имеет три различных входа для управления состоянием питания: RESET, SLEEP и ENABLE. Вывод RESET плавает, если его не нужно использовать, то следует подключить его к соседнему контакту SLEEP на печатной плате, чтобы подать на него высокий уровень и включить плату.
Мы использовали вот такой блок питания (12V).
Для удобства подключения к плате Arduino UNO, мы использовали собственноручно сделанную деталь. Пластиковый корпус напечатан на 3D принтере, к нему приклеены контакты.
Также, использовали такой набор проводов, у части из них с одного конца контакт, с другого штырёк, у других контакты с обоих сторон.
Соединяем всё согласно схеме.
Потом открываем среду разработки программ для Arduino и пишем программу, вращающую мотор сначала в одну сторону на 360°, потом в другую.
/*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. Сначала мотор совершает полный оборот в одну сторону, потом в другую*/ /*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/ const int pinStep = 5; |
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Direction на драйвер. Наличие импульса — мотор вращается в одну сторону, отсутствие — в другую*/
const int pinDir = 4;
//временная задержка между шагами мотора в мс
const int move_delay = 3;
//шагов на полный оборот
const int steps_rotate_360 = 200;
/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контактам Step и Direction режим вывода, то есть они выдают напряжение*/
pinMode(pinStep, OUTPUT);
pinMode(pinDir, OUTPUT);
//устанавливаем начальный режим
digitalWrite(pinStep, HIGH);
digitalWrite(pinDir, LOW);
>
/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
//устанавливаем направление вращения
digitalWrite(pinDir, HIGH);
for(int i = 0; i //устанавливаем направление вращения обратное
digitalWrite(pinDir, LOW);
for(int i = 0; i /*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. Программа приводит мотор в движение.
По-умолчанию вращение происходит по часовой стрелке, так как на контакт DIRECTION драйвера подключён к земле. Если его подключить к питанию 5V, то
мотор вращается против часовой стрелки*/
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/
const int pinStep = 5;
//временная задержка между шагами мотора в мс
const int move_delay = 3;
/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контакту Step режим вывода, то есть он выдают напряжение*/
pinMode(pinStep, OUTPUT);
//устанавливаем начальный режим
digitalWrite(pinStep, LOW);
>
/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
/*через заданную задержку происходит перемещение мотора на один шаг*/
digitalWrite(pinStep, HIGH);
delay(move_delay);
digitalWrite(pinStep, LOW);
delay(move_delay);
>
Всё это мы рассматривали шаговый режим мотора, то есть 200 шагов за полный оборот. Но, как уже было описано, мотор может работать, в 1/2, 1/4, 1/8, 1/16 шаговых режимах, в зависимости от того, какая комбинация сигналов подаётся на контакты драйвера MS1, MS2, MS3.
Давайте с этим потренируемся, подключим эти три контакта к плате Arduino, согласно схеме, и зальём код программы.
Код программы, которая демонстрирует все пять режимов работы мотора, вращая мотор в одну и другую сторону на 200 шагов в каждом из этих режимов.
/*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. В программе попеременно сменяются режимы шага: полношаговый, 1/2, 1/4, 1/8, 1/16 шага, при каждом из них мотор совершает оборот на 200 шагов в одну сторону, потом в другую*/ /*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/ const int pinStep = 5; |
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Direction на драйвер. Наличие импульса — мотор вращается в одну сторону, отсутствие — в другую*/
const int pinDir = 4;
//временная задержка между шагами мотора в мс
const int move_delay = 3;
//шагов на полный оборот
const int steps_rotate_360 = 200;
/*контакты на драйвере, задающие режим шага мотора — MS1, MS2, MS3*/
int StepModePins[3] = <8, 7, 6>;
//размер массива StepModePins
const int StepModePinsCount = 3;
/*Массив, хранящий состояния контактов MS1, MS2, MS3 драйвера, при которых задаются разные режимы вращения: полношаговый, 1/2, 1/4, 1/8, 1/16я шага*/
bool StepMode[5][3] = <
< 0, 0, 0>,
< 1, 0, 0>,
< 0, 1, 0>,
< 1, 1, 0>,
< 1, 1, 1>>;
//размер массива StepMode
const int StepModeSize = 5;
/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контактам Step и Direction режим вывода, то есть они выдают напряжение*/
pinMode(pinStep, OUTPUT);
pinMode(pinDir, OUTPUT);
for(int i = 0; i //устанавливаем начальный режим
digitalWrite(pinStep, HIGH);
digitalWrite(pinDir, LOW);
>
/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
for(int i = 0; i //вращаем мотор в одну сторону, затем в другую
MakeRoundRotation();
>
>
/*функция, в которой мотор совершает 200 шагов в одном направлении, затем 200 в обратном*/
void MakeRoundRotation()
<
//устанавливаем направление вращения
digitalWrite(pinDir, HIGH);
for(int i = 0; i //устанавливаем направление вращения обратное
digitalWrite(pinDir, LOW);
for(int i = 0; i /*Программа для вращения шагового мотора NEMA 17, серии 17HS4402 + драйвер A4988. В схему включены кнопка с 3мя положениями (I, II, среднее — выключено) и потенциометр. Кнопка регулирует направление вращения мотора, а данные с потенциометра показывают какой из пяти режимов шага мотора включить (полношаговый, 1/2, 1/4, 1/8, 1/16 шага)*/
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Step на драйвер. Каждый импульс от этого контакта — это перемещение мотора на один шаг*/
const int pinStep = 5;
/*целочисленная константа, хранящая номер цифрового контакта Arduino, который подаёт сигнал Direction на драйвер. Наличие импульса — мотор вращается в одну сторону, отсутствие — в другую*/
const int pinDir = 4;
/*Контакты от двух положений кнопки — цифровые*/
const int ButtonOn1 = 9;
const int ButtonOn2 = 10;
/*Контакт регистрирующий значение потенциометра — аналоговый*/
const int PotenciomData = 1;
//временная задержка между шагами мотора в мс
const int move_delay = 3;
/*целочисленная константа, показывающая временную задержку между считыванием состояния кнопки и потенциометра*/
const int CheckButtonDelay = 15;
/*Целочисленная переменная показывающая, сколько прошло времени и не пора ли считывать состояние кнопки*/
int CurrentButtonDelay = 0;
/*контакты на драйвере, задающие режим шага мотора — MS1, MS2, MS3*/
int StepModePins[3] = <8, 7, 6>;
//размер массива StepModePins
const int StepModePinsCount = 3;
//состояние кнопки включено-выключено
int ButtonState = 0;
//направление вращения согласно кнопке I — 1, II — 0
int ButtonDirection = 0;
/*Массив, хранящий состояния контактов MS1, MS2, MS3 драйвера, при которых задаются разные режимы вращения: полношаговый, 1/2, 1/4, 1/8, 1/16я шага*/
bool StepMode[5][3] = <
< 0, 0, 0>,
< 1, 0, 0>,
< 0, 1, 0>,
< 1, 1, 0>,
< 1, 1, 1>>;
//размер массива StepMode
const int StepModeSize = 5;
//текущий индекс массива StepMode
int StepModeIndex = 0;
/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*задаём контактам Step и Direction режим вывода, то есть они выдают напряжение*/
pinMode(pinStep, OUTPUT);
pinMode(pinDir, OUTPUT);
for(int i = 0; i /*контакты от кнопки и потенциометра устанавливаем в режим входных*/
pinMode(ButtonOn1, INPUT);
pinMode(ButtonOn2, INPUT);
pinMode(PotenciomData, INPUT);
//устанавливаем начальный режим
digitalWrite(pinStep, LOW);
digitalWrite(pinDir, LOW);
>
/*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
if(CurrentButtonDelay >= CheckButtonDelay)
<
CheckButtonState();
CurrentButtonDelay = 0;
>
if(ButtonState == 1)
<
MakeMotorStep();
>
delay(move_delay);
CurrentButtonDelay += move_delay;
>
//функция, в которой совершается один шаг мотора
void MakeMotorStep()
<
digitalWrite(pinStep, HIGH);
digitalWrite(pinStep, LOW);
>
/*функция, в которой проверяется текущее состояние кнопки и потенциометра*/
void CheckButtonState()
<
int CurrentButtonState = 0, CurrentButtonDirection = 0, CurrentStepModeIndex = 0;
bool readbuttonparam = digitalRead(ButtonOn1);
if(readbuttonparam)
<
CurrentButtonState = 1;
CurrentButtonDirection = 1;
>
if(readbuttonparam)
<
CurrentButtonState = 1;
CurrentButtonDirection = 0;
>
if(ButtonState != CurrentButtonState)
<
ButtonState = CurrentButtonState;
>
if(ButtonDirection != CurrentButtonDirection)
<
ButtonDirection = CurrentButtonDirection;
digitalWrite(pinDir, ButtonDirection);
>
CurrentStepModeIndex = map(analogRead(PotenciomData), 0, 1023, 0, StepModeSize-1);
if(StepModeIndex != CurrentStepModeIndex)
<
StepModeIndex = CurrentStepModeIndex;
for(int i = 0; i < StepModePinsCount; i++)
<
digitalWrite(StepModePins[i], StepMode[StepModeIndex][i]);
>
>
>