Как подключить шаговый двигатель к Arduino

Шаговые электромоторы и связанные с ними области техники находятся в поле зрения конструкторов-любителей уже долгое время. Интерес к ним не ослабевает благодаря программам и шаговым двигателям «Ардуино» для систем автоматики и робототехники.

Как подключить шаговый двигатель к Arduino

Принцип работы шагового двигателя

На статор накручены электрические провода, формирующие обмотки. Если попеременно подавать на них напряжение, то ротор двигателя переместится на заранее указанный угол, например 3º или 0,9º. Его величина определяется конструкцией устройства. Таким образом, ротор движется не плавно, а скачками, иначе называемыми шагами. Если ротор сделал 6 скачков, то считают, что он переместился на 6 шагов.

Драйверы для мотора

Драйвер является связующим звеном контроллера и мотора. Работа с биполярным Arduino-двигателем требует механизма со сложной схемой, в то время как униполярные машины управляются сравнительно простым драйвером. Часто применяют вариант L298N, в его конструкцию входят:

  • микросхема L298N;
  • клеммные колодки;
  • сигнальные штекеры;
  • стабилизатор напряжения;
  • диоды защиты;
  • радиатор охлаждения.

Драйвер ULN2003 проще, он недорогой, но менее точен и надежен. Вариант на микросхеме L293D содержит 2 H-моста, поэтому способен управлять 2 моторами. Рабочий ток — 600 мА, максимальный ток в 2 раза больше, напряжение — до 36 В.

Процесс подключения

Сборка схемы сложностей не представляет, поэтому доступна любителю. Необходимы базовые знания в области электротехники, умение работать с ПК на пользовательском уровне и внимательность при написании скетчей. Макетная плата позволит обойтись без паяльника, припоя и канифоли.

Процесс подключения

Что понадобится

Для сборки схемы требуются следующие компоненты:

  1. Шаговый коллекторный двигатель.
  2. Плата Arduino. Начинающим подойдет модель UNO.
  3. Макетная плата.
  4. Диоды, транзисторы, резисторы, потенциометр.
  5. Перемычки и провода.
  6. «Мотор шилд» (Motor Shield) — дополнительная плата расширения для управления двигателем постоянного тока, она же регулятор оборотов.
  7. Вместо Motor Shield можно применить драйверы L298N, ULN2003 или L293D.
  8. Блок питания постоянного тока.
  9. Кабель USB для соединения с компьютером и загрузки скетчей.

На рынке предлагают готовые наборы (включают пп. 2-5).

Пошаговая инструкция

Драйвер и плата «Ардуино» могут выйти из строя при неправильной подаче электропитания, поэтому сначала требуется подключить минусовой провод. Выполнять действия нужно в приведенной последовательности:

  1. Подготовить скетч для управления мотором.
  2. Шилд управления двигателем или драйвер разместить сверху платы Arduino UNO.
  3. Проверить и при необходимости установить перемычки на плате расширения следующим образом: H1 соединяется с 4-м пином, E1 — с 5-м, E2 — с 6-м и H2 — с 7-м пином. Пины 5 и 6 должны поддерживать ШИМ (широтно-импульсную модуляцию).
  4. Подготовить блок для питания шилда постоянным током.
  5. Подать постоянный ток на контакты «+» и «-» платы расширения.
  6. Питание мотора подключить к контактам PWR на плате расширения.
  7. Соединить «Ардуино» кабелем USB с ПК и загрузить скетч.

Пошаговая инструкция

Скетчи можно писать с применением библиотеки Stepper.h или AccelStepper.h. Плата Arduino UNO подходит для работы в режиме широтно-импульсной модуляции. В этом случае в блоке loop используют команды analogWrite и analogRead.

Скетч для управления и варианты изменений

Описание библиотеки для работы

Пакет Arduino IDE содержит стандартную библиотеку Stepper.h. Она позволяет создать объект и затем управлять им с помощью 2 функций:

  1. Инструкция Stepper(steps, pin1, pin2, pin3, pin4) прописывает объект, где steps — число шагов за 1 полный оборот в 360º, pin1 — pin4 — контакты для подключения драйвера. Чтобы создать объект motorN, необходимо задать Stepper motorN(steps, pin1-4) с нужными числовыми значениями вместо символов в скобках.
  2. Скорость вращения вала двигателя задается как void setSpeed(long rpms), где rpms — об./мин, например, motorN.setSpeed(64).
  3. Поворот вала на заданное число шагов: void step(int steps), например, motorN.step(16).

Библиотека Stepper.h позволяет запрограммировать плату в тестовых или учебных целях. Гораздо больше функций содержит библиотека AccelStepper.h: она гибко управляет скоростью, работает с разными моделями двигателей, допускает присоединение к схеме более одной машины и содержит функции, показанные в таблице 2.

Инструкции и аргументы Комментарий
AccelStepper stepperQ(1, pinStep, pinDirection); Объявление шагового двигателя с именем stepperQ.
AccelStepper stepperQ(2, pin1, pin2); Описание 2-полярной машины под управлением H-моста.
AccelStepper stepperV(4, pin1-4); Конфигурация 1-полярного движка stepperV, управляемого 4 транзисторными ключами.
stepperQ.setMaxSpeed(stepsPerSecond); Поскольку по умолчанию скорость низкая, следует записать свою, в шагах/с.
stepperQ.setAcceleration(stepsPerSecondSquared); Ускорение, шагов/с².
stepperQ.moveTo(targetPosition); Перемещение вала в новую абсолютную позицию под управлением функции run().
stepperQ.runSpeed(); Апдейт — должен выполняться периодически, чтобы вал вращался.

Описание библиотеки для работы

Скетчи для «Ардуино» Stepper h

Алгоритм управления представлен ниже.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include Stepper.h
 
const int stepsPerRevolution = 100;                // Определение числа шагов на полный оборот.
Stepper myStepper(stepsPerRevolution, x, y, z, n); // Указаны пины на плате Arduino. Вместо символов x, y, z, n следует задать числовые значения, например 8, 9, 10, 11.
 
void setup() 
{
    myStepper.setSpeed(40);                        // Задание скорости вращения ротора, об./мин.
    Serial.begin(9600);                            // Инициализация последовательного порта и установка скорости передачи, бит/с.
}
 
void loop() 
{
    Serial.println("Move right");
    myStepper.step(stepsPerRevolution);            // Выполнение поворота на шаг вправо.
    delay(1000);                                   // Задержка после поворота в 1000 мс.
    Serial.println("Move left");
    myStepper.step(-stepsPerRevolution);           // Выполнение поворота на шаг влево.
    delay(1000);                                   // Задержка в 1000 мс.
}

Если необходимо переопределить режим функционирования пинов платы Arduino, то в стартовый блок добавляется инструкция setup pinMode.

Ссылка на основную публикацию