Управление шаговым двигателем arduino. Управление шаговым двигателем arduino

Двигатель
Управление шаговым двигателем arduino - Обзор основных моделей шаговых двигателей для ардуино Подключение Nema 17 через A4988 Выбор драйвера для управления Nema 17 Пошаговая инструкция Программа для Arduino

В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

Управление шаговым двигателем с помощью Arduino и потенциометра

Шаговые двигатели с каждым годом приобретают все большую популярность в мире электроники поскольку именно они обеспечивают превосходную точность позиционирования различных механизмов. В этой статье мы рассмотрим подключение одного из самых распространенных шаговых двигателей 28-BYJ48 к плате Arduino при помощи модуля ULN2003 и управление им с помощью потенциометра.

Управление шаговым двигателем с помощью Arduino и потенциометра: внешний вид конструкции

В нашей предыдущей статье про подключение шагового двигателя к плате Arduino мы управляли углом его поворота из она монитора последовательной связи, в этом же проекте мы будем управлять поворотом шагового двигателя вращая ручку потенциометра. Если мы будем вращать ручку потенциометра по часовой стрелке, то и шаговый двигатель будет поворачиваться по часовой стрелке, а если мы ручку потенциометра будем поворачивать против часовой стрелки – то и шаговый двигатель будет вращаться против часовой стрелки.

Общие принципы работы шаговых двигателей

Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

Внешний вид шагового двигателя 28-BYJ48

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.

Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Внутрення схема шагового двигателя

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

Технические характеристики шагового двигателя 28-BYJ48

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

Расчет шагов на оборот для шагового двигателя

Важно знать, как рассчитать количество шагов за один оборот для вашего шагового двигателя, потому что только тогда вы можете эффективно его запрограммировать.

Также у Дмитрия Осипова есть код для изменения скорости вращения с помощью потенциометра. Я его немного доработал, сделал обработку нажатия кнопки без задержки в 500 мс. Сейчас двигатель стал вращаться в обратную сторону без видимой задержки.

Шаг 1: Как подключать степперы

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

  • Аккуратно установите Arduino Motor Shield поверх Ардуино, не погните пины.
  • Найдите катушки. При помощи мультиметра определите сопротивление между всеми проводами. Провода с низким сопротивлением между ними будут катушками.
  • Соедините 4 провода степпера с основным выходом клемм на Shield. Одна катушка идёт на один выход двигателя, а вторая на другой выход.

На картинке изображено как всё должно выглядеть.

Шаг 2: Код

Следующий код повернёт двигатель на 100 шагов в одном направлении и на 100 шагов в обратном.

В коде объявляется использование степпера, устанавливается его скорость и мотор поворачивается по команде в обоих направлениях.

На этом этапе объявляется использование степпера. Синтаксис требует указать в качестве первого параметра количество шагов двигателя, а затем пины, к которым он подключен. Нам нужно указать два пина направлений Arduino Motor Shield, они указывают, в котором направлении будут возбуждаться катушки:

В обычном управлении шаговым двигателем постоянного тока в Motor Shield, два пина PWM определяют, какую мощность мы направляем на каждый моторчик. Тем не менее, так как мы работаем со степпером, мы хотим использовать его на полную мощность, поэтому мы упростим задачу и напрямую зададим пинам PWM постоянное состояние HIGH:

Еще одним важным шагом является определение скорости, на которой мы хотим, чтобы мотор вращался. Если, например, мы устанавливаем скорость на 60 оборотов в минуту, как в нашем случае, а у мотора 200 шагов, то у него займёт около 5 миллисекунд для того, чтобы пройти 1 шаг. Скорость моторчика можно поменять в любое время:

И, наконец, чтобы заставить моторчик двигаться, мы должны отправить команду с количеством шагов, которое он должен пройти. Если мы отправим отрицательное число шагов, он будет двигаться в обратном направлении. Заметьте, что функция step() остановит выполнение программы, пока моторчик не повернётся до конца. Если, к примеру, мы задали 200 шагов на скорости 1 оборот в минуту, то пройдёт ровно 1 минута перед тем, как Ардуино продолжит выполнять код программы.

Ардуино ожидает, что степпер движется, в то время как он отдаёт ему эту команду. У степпера нет обратной связи, поэтому если мы зажмём штифт моторчика, Ардуино всё же будет думать, что он вращается, в то время как на самом деле моторчик стоит на месте.

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

Скетч Arduino

В программе используется серийный монитор. После запуска, откройте его и укажите количество «шагов». Для начала попробуйте значение близкое к 500. В результате ваш двигатель должен повернуться примерно на 360 градусов. Введите -500 и ротор отработает поворот в обратном направлении.

Пример — шаговый двигатель

Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);

// эта строка для Arduino Leonardo. Генерируется задержка в серийном мониторе

int steps = Serial.parseInt();

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

После подключения библиотеки ‘Stepper’ инициализируются управляющие пины от ‘in1’ до ‘in4’.

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

Stepper motor(768, in1Pin, in2Pin, in3Pin, in4Pin);

Первый параметр — количество ‘шагов’, которые сделает шаговый двигатель для одного полного оборота. Для точного позиционирования, можно вращать ротор двигателя с дискретностью в один шаг.

После этого налаживается связь по серийному протоколу и в результате плата Arduino может получать команды из окна серийного монитора в Arduino IDE.

Следующая команда устанавливает скорость вращения ротора шагового двигателя:

Функция ‘loop’ очень простая. Функция ожидает, пока придет команда из серийного монитора и преобразовывает текст в виде числового значения в переменную типа int с помощью ‘parseInt’. После этого подается сигнал на двигатель для его вращения на указанное количество шагов.

Полезная информация о шаговых двигателях

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

Питая катушки в определенном порядке, двигатель начинает вращать ротор. Количество шагов, которое имеет двигатель на 360 градусов поворота фактически равняется количеству зубцов.

Двигатель, который мы используем имеет 48 шагов, но в нем также установлен редуктор 1:16. В результате мы получаем 16×48=768 шагов.

В данном примере мы не используем красный кабель для общего подключения. Используя этот кабель вы можете добиться питания левой или правой части каждой отдельной катушки и реализовать эффект реверса потока электричества не меняя направление с помощью электроцепи.

Так как мы используем чип L293D, который обеспечивает реверс тока в цепи, общее подключение нам не нужно. Мы можем спокойно запитывать полностью каждую катушку.

Для уменьшения количества элементов в схеме решил заменить потенциометр и тактовую кнопку на энкодер вращения KY-040. Как подключить энкодер вращения к Arduino рассказывал в предыдущем уроке.

Шаговый двигатель сильно вибрирует

Во время вращения ротора двигатель сильно вибрировал. О плавном движении не было и речи. Гугл вновь в помощь. Первая мысль — неправильное подключение обмоток. Ознакомление с даташитом шагового двигателя и несколько форумов убедили, что проблема не в этом. При неправильном подключении обмоток двигатель просто не будет работать. Решение проблемы крылось в скетче.

Оказалось, что есть замечательная библиотека для шаговых двигателей, написанная ребятами из Adafruit. Используем библиотеку AcclStepper и шаговый двигатель начинает работать плавно, без чрезмерных вибраций.

Кратко, что такое шаговый двигатель (ШД) — это двигатель, который способен осуществлять вращение на 1 шаг. Шаг — это угол, который обусловлен устройством каждого конкретного шагового двигателя.

Прямое подключение шагового двигателя 28BYJ-48 к Arduino.

В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.

Схема подключения к Arduino UNO будет следующая.

В связи с тем, что двигатель 28BYJ-48 работает от 5в и при небольших токах, его можно подключить на прямую к Arduino.

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

Для этого можно сделать массив подачи сигнала на пины микроконтроллера.

Для этого можно сделать массив подачи сигнала на пины микроконтроллера.

И в цикле выполнять каждую строчку массива. Но есть решение с более компактным кодом. Нашел я данный пример на канале Дмитрия Осипова. За что ему отельное спасибо!

Код для вращения в одну и в другую сторону будет вот таким.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Пример подключения шагового двигателя 28BYJ-48 (5V)с использованием драйвер ULN2003.

Также у Дмитрия Осипова есть код для изменения скорости вращения с помощью потенциометра. Я его немного доработал, сделал обработку нажатия кнопки без задержки в 500 мс. Сейчас двигатель стал вращаться в обратную сторону без видимой задержки.

Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.

Для подключения буду использовать модуль SBT0811 на драйвере ULN2003.

Драйвер устроен вот таким образом.

Драйвер устроен вот таким образом.

Соответственно, наш код будет работать и с данным драйвером.

Подключим все по схеме и загрузим код в Arduino NANO.

Подключим все по схеме и загрузим код в Arduino NANO.

Схема подключения для Arduino UNO будет аналогичной.

Как видим, двигатель без проблем вращается по часовой стрелке и против часовой, при нажатии на кнопку вращается в противоположном направлении. При вращении потенциометра в одну сторону — скорость уменьшается, при вращении в противоположном направлении скорость увеличивается.

ВНИМАНИЕ! Материалы для скачивания находятся внизу статьи!

Оцените статью