Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека.

Разработка проектов под заказ

Сегодня в уроке подключим драйвер шагового двигателя A4988 (DRV8825) к Arduino. Рассмотрим самый простой скетч (код,) который позволит вращать шаговым двигателем по часовой и против часовой стрелке.

Что такое шаговый двигатель? Описание драйвера шагового двигателя A4988 и описание драйвера шагового двигателя DRV8825, а также много другой полезной информации по ЧПУ станкам и 3D принтерам, вы сможете найти на моем втором сайте ЧПУ технологии (CNC-tex.ru).

Сегодня в уроке подключим драйвер шагового двигателя A4988 (DRV8825) к Arduino.

Схема подключения драйвера шагового двигателя A4988 (DRV8825).

Для тех, кому лень сходить на мой второй сайт по ЧПУ станкам, выкладываю схемы подключения драйверов A4988 (DRV8825) к Arduino.

Драйвер шагового двигателя A4988 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя A4988 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя DRV8825 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Драйвер шагового двигателя DRV8825 можно подключить к микроконтроллеру Arduino напрямую вот по такой схеме.

Внимание! Для корректной работы шагового двигателя для драйвера необходимо настроить ток. Как рассчитать ток для драйвера A4988 читайте тут, для драйвера DRV8825 читайте тут. Также при необходимости установите радиатор охлаждения драйвера.

Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.

Для облегчения подключения драйверов к Arduino существуют специальные модули, которые помогут без лишних усилий и пайки подключить драйвер A4988 или DRV8825. Подробнее о модулях для подключения драйвера A4988 и DRV8825 читайте тут. Подробно останавливаться на типах модулей и особенностях подключения не буду.

Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.

Внимание! При установке драйвера на модуль будьте осторожны.Драйвер может сгореть, если не правильно установить его на модуль.

Подключение драйвера шагового двигателя A4988 и DRV8825 с помощью модуля.

С подключением определились, пора перейти к коду, который позволит управлять шаговым двигателем.

Код для Arduino и A4988 (DRV8825),который позволяет вращать шаговым двигателем без библиотеки.

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

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;
void setup()
{
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}
void loop()
{
  digitalWrite(dirPin, HIGH); // Установка вращения по часовой стрелки
  for(int x = 0; x > stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }
  delay(1000);
  digitalWrite(dirPin, LOW); // Установка вращения против часовой стрелки
  for(int x = 0; x < stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000);
}

Пояснение к коду:

Скетч начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR драйвера A4988. Здесь также определяем stepsPerRevolution – количество шагов на оборот. Установите данное значение в соответствии со спецификациями шагового двигателя 200 (поскольку NEMA 17 делает 200 шагов за оборот).

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

В разделе настройки кода setup(), все контакты управления двигателем объявлены как цифровой выход (OUTPUT).

pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);

В основном цикле loop() будем медленно вращать двигатель по часовой стрелке, а затем быстро вращать его против часовой стрелки, с интервалом в секунду.

Управление направлением вращения.

Для управления направлением вращения двигателя мы устанавливаем контакт DIR на высокий уровень HIGH, или низкий LOW. При значении HIGH - вращает двигатель по часовой стрелке, а LOW - против часовой стрелки.

digitalWrite(dirPin, HIGH);

Управление скоростью шагового двигателя.

Скорость двигателя определяется частотой импульсов, которые мы посылаем на вывод STEP. Чем чаше импульсы, тем быстрее работает двигатель. Импульсы - это не что иное, как подтягивание выхода к высокому уровню HIGH, некоторое ожидание, затем подтягивание его к низкому уровню LOW и снова ожидание. Изменяя задержку между двумя импульсами, вы изменяете частоту импульсов и следовательно, скорость вращения двигателя.

for(int x = 0; x < stepsPerRevolution; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
}

Код для Arduino управления драйвером A4988 (DRV8825)с использованием библиотеки AccelStepper.

Управление шаговым двигателем без библиотеки идеально подходит для простых проектов на Arduino с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, вам понадобится библиотека. Итак, для нашего следующего примера будем использовать библиотеку шаговых двигателей под названием AccelStepper library.

AccelStepper library поддерживает.

Ускорение и замедление. Несколько одновременных шаговых двигателей с независимыми одновременными шагами на каждом шаговом двигателе. Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.

Установка библиотеки AccelStepper.

Чтобы установить библиотеку, перейдите в «Скетч» -> «Подключить библиотеку» -> «Управление» библиотеками. Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Установка библиотеки AccelStepper.

Отфильтруйте свой поиск, набрав «Accelstepper». Щелкните первую запись и выберите «Установка».

Отфильтруйте свой поиск, набрав «Accelstepper».

Код Arduino с использованием библиотеки AccelStepper.

Вот простой пример, который ускоряет шаговый двигатель в одном направлении, а затем замедляется до полной остановки. Как только двигатель делает один оборот, меняет направление вращения. Данный цикл повторяется снова и снова.

// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>
// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;
int i = 0;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
  // Устанавливаем максимальную скорость, коэффициент ускорения,
  // начальную скорость и целевую позицию
  myStepper.setMaxSpeed(1000);
  myStepper.setAcceleration(50);
  myStepper.setSpeed(200);
  myStepper.moveTo(100);
}
void loop() {
  // Изменение направления вращения, когда двигатель достигнет заданного положения
  if (myStepper.distanceToGo() == 0) 
  {
    myStepper.moveTo(-myStepper.currentPosition());
  }
  // Передвинуть на 1 шаг
  myStepper.run();
}

Пояснение к коду:

Подключаем библиотеку AccelStepper.

#include <AccelStepper.h>

Дальше определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Мы также устанавливаем motorInterfaceType на 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).

const int dirPin = 2;
const int stepPin = 3;
int i = 0;
// Определение тип интерфейса двигателя
#define motorInterfaceType 1

Затем мы создаем экземпляр библиотеки под названием myStepper.

// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

В функции настройки мы сначала устанавливаем максимальную скорость двигателя равной тысяче. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя. Дальше устанавливаем обычную скорость 200 и количество шагов, которое мы собираемся переместить, например, 200 (поскольку NEMA 17 делает 200 шагов за оборот).

void setup() {
    myStepper.setMaxSpeed(1000);
    myStepper.setAcceleration(50);
    myStepper.setSpeed(200);
    myStepper.moveTo(100);
}

В основном цикле loop() используем оператор if, чтобы проверить, как далеко двигателю нужно проехать (путем чтения свойства distanceToGo), пока он не достигнет целевой позиции (установленной moveTo). Как только distanceToGo достигнет нуля, поменяем направление вращения двигателя в противоположном направлении, изменив значение moveTo на отрицательное по отношению к его текущему значению. Теперь вы заметите, что в конце цикла мы вызвали функцию run (). Это самая важная функция, потому что шаговый двигатель не будет работать, пока эта функция не будет выполнена.

void loop() {
    if (myStepper.distanceToGo() == 0) 
        myStepper.moveTo(-myStepper.currentPosition());
    myStepper.run();
}

Это небольшой пример использования библиотеки AccelStepper. В следующем уроке подробнее рассмотрим данную библиотеку и сделаем пару классных примеров использования шаговых двигателей в Arduino проектах.

Это небольшой пример использования библиотеки AccelStepper.

Понравился Урок 2. Как подключить A4988 (DRV8825) к Arduino? Скетч, библиотека? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Код вращения шагового двигателя NEMA 17, драйвер A4988, DRV8825 без использования библиотеки Код вращения шагового двигателя NEMA 17, драйвер A4988, DRV8825 без использования библиотеки.ino1 Kb 230 Скачать
Код вращения шагового двигателя NEMA 17, драйвер A4988, DRV8825 без использования библиотеки Код вращения шагового двигателя NEMA 17, драйвер A4988, DRV8825 без использования библиотеки.ino1 Kb 183 Скачать
библиотека AccelStepper библиотека AccelStepper.zip86 Kb 190 Скачать

Комментарии

Ваше Имя*

Сергей

Гость: Сергей (24 ноября, 2020 в 12:52)

У меня проблемы с подключением ШД драйверов.Драйвер DRV8825,моментально раскаляется как печка. Ток установлен согласно формуле.