Андрей Смирнов
Время чтения: ~10 мин.
Просмотров: 60

Драйверы шаговых двигателей A4988 и DVR8825

Содержание

</span>

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

Обзор драйвера A4988

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

  • Высокая точность позиционирования и повторяемости — качественные ШД имеют точность не хуже 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-Drajver-shagovogo-dvigatelya.jpg

Рисунок 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В)

driver-a4988-chema.png

Рисунок 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

Skhema-podklyucheniya-A4988-Arduino.jpg

Рисунок 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.

Skhema-podklyucheniya-upravleniya-skorostyu.jpg

Рисунок 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;ii++) {  pinMode(pins_steps[i], OUTPUT);  }  }    void loop() {  // получить режим микрошага  digitalWrite(DIR, 1);  int mode=map(analogRead(POT),0,1024,0,5);  // установить  for(int i=0;ii++) {  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. 
  2. Проверьте правильность подключения проводов двигателя к выводам A1,A2,B1,B2.
  3. Может быть недостаточной мощность блока питания двигателя.

     Драйвер шагового двигателя является достаточно важным компонентом любого ЧПУ устройства, управляя движением каждой из осей. Перед использованием необходимо убедиться, что они правильно установлены и настроены, чтобы не допустить перегорание шаговых моторов или платы контроллера Arduino Sheild.

     Для настройки тока нам понадобится: — контроллеры с установленными драйверами; — драйвера А4988 или DRV8825; — мультиметр; — отвертка.

     Для начала необходимо собрать и подключить всю систему в полношаговом режиме. После сборки «бутерброда» из контроллера Ардуино, ЧПУ шилда и драйверов шаговых двигателей необходимо подключить шаговые двигатели. В описании к выбранным моторам надо узнать значение максимального тока Imax (для примера у шагового двигателя 17HS8401 это значение 1,8А)      Затем надо рассчитать значение опорного напряжения Vref на переменном резисторе для каждого типа драйверов, у нас их два: А4988 или DRV8825.     Формула опорного напряжения Vref для драйверов отличается.

     Расчет для драйвера типа А4988. Для A4988 формула расчета зависит от номинала резисторов, которые распаяны на плате драйвера. Если присмотреться, то можно увидеть надписи R050 или R100.Driver-A4988.jpg

Vref = Imax * 8 * (RS)

Для двигателя из нашего примера 17HS8401

Vref = 1,8 * 8 * 0,100 = 1,44 В.

Из-за того, что рабочий ток двигателя обычно рекомендуется ограничивать в 70% от максимального тока, для уменьшения перегрева двигателя, полученное значение необходимо умножить на 0,7.

Vref= 1,44*0,7 = 1,01 В.

     Расчет для драйвера типа DRV8825.

Формула опорного напряжение для данного типа драйвера:

Vref = Imax/2

При рекомендованной работе на 70% от максимального тока двигателя, подставив значения для нашего примера, получим следующие значения:

Vref = 0.7*1,8 / 2 = 0.63V

     Настройка тока драйвера на контроллере.

Для настройки необходимо подключить сборку плат к компьютеру, 

Driver-A4988-current-assy.jpg

Включить на мультиметре измерение постоянного напряжения напротив положения «20».

 Multimetr-current.jpg

Для измерения напряжения необходимо минусовой щуп приложить к минусу на CNC Sheild, а положительный щуп замкнуть с подстроечным резистором, который по совместительству является «+» в данной схеме.

CNC-sheild-current-tuning.jpg

Необходимо вращать подстроечный резитор, пока мультиметр не покажет требуемое значение напряжения, при вращении по часовой стрелке, значения растут, против часовой стрелки  — напряжение падает.

Настройку расчетных значений необходимо повторить это для всех активных драйверов в сборке. 

Я сам очень долго не уделял этому вопросу должного внимания. Во первых не хотел разбираться. Во вторых считал, что настройка в рабочих условиях (во время тестовой печати на завышенных режимах) самая правильная. Это конечно верно, но настал момент, когда в моей коллекции появился третий вид драйверов TMC2100 и чтобы их адекватно сравнить с драйверами A4988 нужно их одинаково и правильно настроить по току используемого шагового двигателя.

Что нам даёт правильная настройка тока для шаговых двигателей?

  1. Снижение шума от работы принтера при завышенном токе
  2. Избавление от сдвига слоёв (пропуска шагов) при низком токе
  3. Снижение нагрева шагового двигателя или его драйвера

Какие обычно используют шаговые двигатели?

17HS4401.jpg

17HS4401 ток 1,7A – обычные

17HS8401 ток 1,8А – более мощные

17HS4402 ток 1,3A – по некоторым сведениям менее шумные, чем 17HS4401

Драйверы шаговых двигателей

A4988 на ток до 2А – очень широко распространён и недорогой

A4988_2.jpg

DRV8825 на ток до 2,2А – интересен большей мощностью и микрошагом 1/32

DRV8825_2.jpg

TMC2100 на ток RMS 1,2А  (с пиками до 2,5А) – интересен самостоятельным дроблением микрошага 1/16 до 1/255, что в итоге снижает шум работы шагового двигателя не загружая при этом дополнительными расчётами Ардуину.

Видимо для этого драйвера больше подходят двигатели с низким током, например 17HS4402. С этим двигателем драйвер будет меньше нагреваться, а значит его достаточно обдувать низкооборотистым бесшумным вентилятором.

TMC2100.jpg

Настройка тока на драйверах ШД

2016-01-11_220519.jpg

Минусовой щуп мультиметра подсоединяем к контакту GND (минус, он общий), плюсовым прикасаемся к корпусу подстроечного резистора на драйвере. Крутим подстроечный резистор отвёрткой и замеряем расчётное напряжение Vref. Таким образом мы выставляем правильный ток для драйвера шагового двигателя. Для каждого вида драйвера своя формула расчета Vref.

Vref – пин замера напряжения для установки тока по формуле.

Current Limit – ток шагового двигателя.

A4988

Формула Vref для A4988 изменяется от номинала токочувствительных резисторов. Это два чёрных прямоугольника на плате драйвера. Обычно подписаны R050 или R100.

Vref = Current Limit * 8 * (RS)

Например для 17HS4401: Vref = 1,7 / 2,5 = 0,68В

DRV8825

Current Limit = Vref * 2

Vref = Current Limit / 2

Например для 17HS4401: Vref = 1,7 / 2 = 0,85В

TMC2100

Irms = (Vref * 1,77A) / 2,5V

Vref = (Irms * 2,5V) / 1,77A

Current Limit = 1.41 * Irms

Например для 17HS4401: Vref = (Current Limit * 0,707 * 2,5В) / 1,77А = (1,7 * 0,707 * 2,5) / 1,77 = 1,697В

При таком Vref шаговый двигатель возможно будет нагреваться, поэтому Vref придётся подстроить во время работы.

2016-01-11_211849.jpg

В некоторых случаях для снижения нагрева драйвера приходится снижать Vref, а значит для защиты от пропуска шагов нужно уменьшать ускорения в прошивке. Соответственно при снижении ускорений общая скорость печать 3D принтера снижается. Разумный минимум для ускорений 500 мм/с^2. Отсюда вывод: уровень шума можно снизить почти на любом 3D принтере, снижая ускорения и Vref, но при этом Vref придётся подбирать опытным путём.

Сравнение громкости работы двигателя на разных Vref

  • Шаговый двигатель Wantai 42BYGHW609 ток 1,7А
  • Драйвер A4988
  • 3D принтер Mendel90

Тестовый G-код примерно такой (правил в процессе и после)

Используем аудиоредактор Audacity. Примитивный микрофон подключен к встроенной аудиокарте ПК. Микрофон прижат к корпусу ШД и сверху обмотан поролоном. Надеюсь этого хватит для регистрации уровня шума.

Vref устанавливаю на 0,58В, запускаю программу из Pronterfaceи записываю звук с микрофона. Затем повторяю запись на Vref  = 0,78В. Картинки уровней громкости складываю в Фотошопе для наглядности сравнения. Вот что получилось:

Красным Vref = 0,58В

Синим Vref = 0,78В

A4988_058078.png

На некоторых скоростях разность в громкости вполне существенная. Такие напряжения взяты для наглядности, хотя и не сильно отличаются. На не настроенном драйвере может стоять любое напряжение Vref!

Пожалуйста не путайте ток с напряжением Vref, когда пишете об этом

Подробнее про эти драйверы можно почитать на сайтах производителей:

https://www.pololu.com/category/120/stepper-motor-drivers

https://github.com/watterott/SilentStepStick/blob/master/docu/FAQ.md

Для более глубокого понимания формул смотрите отдельную тему на форуме по этому вопросу.

Ссылка на обсуждение на форуме методов борьбы с шумом 3D принтера.

Метки: A4988, DRV8825, TMC2100, драйверы&nbsp&nbsp 2016-01-12&nbsp&nbsp &nbsp&nbsp Раздел: Настройка, Электроника&nbsp&nbsp Автор: AKDZG Просмотров: 237 999&nbsp&nbsp 45 комментариев

Kubocore. BOM и калькуляция &nbsp&nbsp&nbsp&nbsp&nbspТест на шумность шаговых двигателей и драйверов для 3D принтераИспользуемые источники:

  • https://3d-diy.ru/wiki/arduino-moduli/drajver-shagovogo-dvigatelya-a4988/
  • http://cnc-design.ru/nastroika-toka-draiver-shagovogo-dvigatelya.html
  • https://3deshnik.ru/blogs/akdzg/pravilnaya-nastrojka-toka-dlya-shagovyx-dvigatelej

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации