Подключение Nema 17 к Arduino

27-02-2020, 12:57 0 комментариев
В этой статье мы хотим продолжить тему подключения шаговых двигателей к Ардуино – на очереди рассказ о ШД Nema 17. Почему именно он? Эта модель считается наиболее удачной среди своих аналогов, а потому ее часто задействуют в современных проектах. Наведем примеры: модуль часто применяют при разработке и конструировании своими руками простых экструдеров и 3D принтеров, копировальной техники, ЧПУ станков, а также в различных CNC-проектах.

Данный прибор (особенно китайское его исполнение) бюджетен по цене, продается как онлайн, так и офлайн на многих торговых площадках, легок в управлении и сборке.

Напомним нашим читателям о терминологии и особенностях шаговых моторов. Речь идет об электромеханических устройствах, которые преобразуют электрические импульсы в дискретные механические перемещения. Они характеризуется неплохой точностью позиционирования, хорошим диапазоном скоростей и быстрым запуском ∕ остановкой.

К техническим параметрам модуля относятся:
  • напряжение: 5 – 24V;
  • угол поворота: 1.8 º (за шаг);
  • длина ∕ диаметр вала: 24 ∕ 5 мм;
  • ток на обмотку: 1.7 А;
  • индуктивность: 3.2 мГн;
  • сопротивление: 1.65 Ом;
  • масса: около 280 г.
Управление шаговым двигателем осуществляется при помощи драйверов на микрочипе L293D или A4988 (подробнее читайте статью ТУТ).
Ну а теперь рассмотрим основной момент - подключение Nema 17 к Arduino. Для выполнения схемы нам понадобятся такие аппаратные компоненты:
  1. плата расширения Arduino UNO,
  2. модуль мотора Нема 17,
  3. блок питания на 12 V,
  4. соединительные провода,
  5. USB-кабель для подключения к компьютеру.
Нам нужно протестировать работоспособность мотора. Зальем следующий скетч:
/*Программа для вращения шагового мотора 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 < steps_rotate_360; i++)
  {
    digitalWrite(pinStep, HIGH);
    delay(move_delay);
    digitalWrite(pinStep, LOW);
    delay(move_delay);
  }

  delay(move_delay*10);

//устанавливаем направление вращения обратное
  digitalWrite(pinDir, LOW);

  for(int i = 0; i < steps_rotate_360; i++)
  {
    digitalWrite(pinStep, HIGH);
    delay(move_delay);
    digitalWrite(pinStep, LOW);
    delay(move_delay);
  }

  delay(move_delay*10);
}
Если двигатель сильно вибрирует, советуем скачать и инсталлировать специализированную библиотеку – AcclStepper (она поможет решить вашу проблему). Не забываем сохранять распакованный архив с файлами в директорию libraries (непосредственно в среде IDE).
Меняем прошивку на такие программные коды:
#include <AccelStepper.h>

AccelStepper Stepper1(1,13,12); //использует пин 12 и 13 для dir и step, 1 - режим "external driver" (A4988)

int dir = 1; //используется для смены направления

void setup() {

Stepper1.setMaxSpeed(3000); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)

Stepper1.setAcceleration(13000); //устанавливаем ускорение (шагов/секунду^2)

}

void loop() {

if(Stepper1.distanceToGo()==0){ //проверка, отработал ли двигатель предыдущее движение

Stepper1.move(1600*dir); //устанавливает следующее перемещение на 1600 шагов (если dir равен -1 будет перемещаться -1600 -> противоположное направление)

dir = dir*(-1); //отрицательное значение dir, благодаря чему реализуется вращение в противоположном направлении

delay(1000); //задержка на 1 секунду

}

Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя


}
Вот в принципе и все, что мы подготовили для вас на сегодня! До скорой встречи!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Подключение A4988 к Ардуино понадобится во многих проектах, которые «гуляют» по Интернету. Данный драйвер активно используется при создании своими руками...

Тема нашей сегодняшней статьи - драйвер для шаговых двигателей TB6560 и его подключение к Ардуино. Мы уже говорили с вами о практичности и основных...

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

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

Сегодня мы хотим рассказать вам о том, как подключить драйвер L298N к Arduino и для чего он в целом может понадобиться. Речь пойдет о цифровом двухканальном...

Оставить комментарий