Шаговый двигатель 6 проводов подключение ардуино. Как подключить шаговый двигатель к Arduino Uno

Этой публикацией я начинаю цикл уроков об управлении шаговыми двигателями в системе Ардуино. Первый урок посвящен подключению к Ардуино униполярных шаговых двигателей.

Шаговый двигатель – уникальное электромеханическое устройство, которое объединяет в себе двигатель и позиционирующее устройство без обратной связи. Применение шаговых двигателей значительно упрощает механическую конструкцию любого оборудования. Они просто незаменимы в самых разных областях машиностроения: в станках с ЧПУ, робототехнике, в промышленном оборудовании…

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

Шаговый двигатель не может быть подключен непосредственно к выводам микроконтроллера. Недостаточно нагрузочной способности по току и напряжению на выходах микроконтроллера. Необходимо использовать усилитель управляющих сигналов – драйвер. О драйверах шаговых двигателей подробно написано по . Я повторю необходимую информацию.

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

Схема драйвера униполярного шагового двигателя на биполярных транзисторах выглядит так.


Драйвер позволяет коммутировать нагрузки с токами до 2 А и напряжением до 60 В.

Намного предпочтительнее использовать в драйвере MOSFET транзисторы.


Схема собрана на MOSFET транзисторах IRF7313 () со следующими параметрами:

  • предельно допустимый ток 6,5 А;
  • максимальное напряжение 30 В;
  • сопротивление открытого транзистора 0,029 Ом;
  • пороговое напряжение затвора 1 В;
  • исполнение – миниатюрный корпус SO-8;
  • в корпусе два транзистора.

Драйвер униполярного двигателя, выполненный на MOSFET транзисторах имеет значительные преимущества перед аналогичным устройством на биполярных транзисторах:

  • не требует радиаторов охлаждения транзисторов;
  • имеет очень низкие потери в открытых ключах;
  • имеет малые габариты;
  • используется всего два корпуса по 8 выводов.

В обеих схемах ключи управляются непосредственно от выводов микроконтроллера логическими уровнями CMOS (0 / +5 В). Высокий уровень сигнала открывает ключ, и через обмотку двигателя течет ток. Диоды защищают ключи от выбросов напряжения при коммутации.

На схемах показано подключение шаговых двигателей с 6 выводами.

Например, для широко распространенных двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с конфигурацией обмоток 6 проводов выводы промаркированы следующим цветами.

Конфигурация с 5 проводами это вариант, в котором общие провода обмоток соединены внутри двигателя. Такие двигатели бывают. Например, .

Существуют двигатели с 8 выводами. Каждая обмотка имеет отдельные выводы.

Схема подключения такая же, только соединения между обмотками происходят вне двигателя.

Достоинства и недостатки простых драйверов униполярных шаговых двигателей.

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

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

  • Главный недостаток – это отсутствие стабилизации тока обмоток.
  • В статическом режиме ток определяется активным сопротивлением обмотки двигателя и напряжением питания (по закону Ома I = U / R). Т.е. в схеме можно использовать только двигатели с определенным сопротивлением обмоток или приходится подбирать напряжение питания. Это требование значительно сужает выбор двигателей.

Можно ограничить фазные токи дополнительными резисторами, включенными последовательно с каждой обмоткой. Решение вполне рабочее, но при мощных двигателях на этих резисторах рассеивается довольно большая мощность.

  • Отсутствие стабилизации тока также приводит ко второй проблеме. Это медленная скорость нарастания тока связанная со значительной индуктивностью обмоток. Это приводит к значительному снижению максимальной скорости вращения двигателя. Например, у двигателя FL57STH76-1006 индуктивность обмотки 14 мГн. При напряжении 12 В ток в обмотке достигнет рабочего значения 1 А только через 1,2 мс (I = U * T / L). На высоких скоростях вращения фазные токи будут значительно занижены, а значит, уменьшится и мощность двигателя.

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

  • К недостаткам драйвера можно добавить и то, что униполярный шаговый двигатель имеет меньшую мощность по сравнению с биполярным при тех же габаритах. Мощность падает примерно на 40%.

Несмотря на недостатки, такие схемы подключения униполярных шаговых двигателей широко применяются. Например, в все двигатели работают в униполярном режиме.

Можете посмотреть, как работают шаговые двигатели в униполярном режиме.

Для начала я спаял драйвер на биполярных транзисторах и подключил к нему двигатель PM35S-048. Сопротивление обмоток моего двигателя составляет 36 Ом. Ток при 12 В равен 0,33 А. Можно подключить к драйверу без ограничительных резисторов.


Беспаечную макетную плату использовать побоялся. Слишком большие токи.

Stepper - стандартная библиотека Ардуино для управления шаговыми двигателями.

В пакете Arduino IDE есть стандартная библиотека для управления униполярными и биполярными шаговыми двигателями. Ее не надо искать и загружать из интернета. Она устанавливается вместе с пакетом Arduino IDE. Библиотека очень простая. Кроме конструктора имеет всего две функции.

Stepper(steps, pin1, pin2, pin3, pin4)

Конструктор класса Stepper. Создает объект типа Stepper.

Параметры:

  • steps – количество шагов двигателя на один оборот (360°). Параметр используется функцией setSpeed() для вычисления скорости вращения.
  • pin1, pin2, pin3, pin4 – выводы для подключения драйвера двигателя. Для двух проводной схеме подключения pin3 и pin4 не используются. Для четырех проводной схемы pin1, pin2, pin3, pin4 соответствуют фазам A, C, B, D при униполярном режиме управления.

Stepper motor1 (400, 10, 11, 12, 13); // создаем объект motor1

void setSpeed(long rpms)

Устанавливает скорость вращения двигателя в оборотах в минуту.

Параметры:

  • rpms - скорость вращения в оборотах в минуту.

motor1.setSpeed(60); // устанавливаем скорость вращения 60 об. в мин

void step(int steps)

Вызывает поворот двигателя на заданное число шагов. Функция останавливает выполнение программы до тех пор, пока не завершится.

Параметры:

  • steps – число шагов, на которое требуется повернуть ротор двигателя. Отрицательное значение вращает двигатель в противоположную сторону.

motor1.step(20); // сделать 20 шагов против часовой стрелки

Простая программа управления шаговым двигателем.

Программа управляет двигателем по следующему алгоритму:

  • двигатель делает 5 оборотов против часовой стрелки;
  • останавливается на 1 сек;
  • делает 5 оборотов по часовой стрелке;
  • останавливается на 1 сек;
  • и так в бесконечном цикле.

Скетч программы простой и очевидный.

// простая программа управления шаговым двигателем с помощью библиотеки Stepper
// делает 5 оборотов против часовой стрелки со скоростью 1 оборот в секунду
// после паузы 1 сек, делает 5 оборотов по часовой стрелке

#include

Stepper motor(48, 10, 12, 11, 13); // объект motor, 48 шагов на оборот

void setup() {
motor.setSpeed(60); // скорость 60 об. в мин.
}

void loop() {
motor.step(240); // 5 оборотов (240 шагов) по часовой стрелке
delay(1000);
motor.step(-240); // 5 оборотов (240 шагов) против часовой стрелке
delay(1000);
}

Хочу только отметить, что в режиме четырех проводного подключения объект Stepper переключает фазы в следующей последовательности.

Шаг Pin 1 Pin 2 Pin 3 Pin 4
1 1 0 1 0
2 0 1 1 0
3 0 1 0 1
4 1 0 0 1

Видно, что:

  • Всегда включены две фазы, т.е. униполярный двигатель работает в .
  • Выводам pin1, pin2, pin3, pin4 соответствуют фазы A, C, B, D.

Недостатки библиотеки Stepper.

У библиотеки Stepper есть только одно достоинство – достаточно широкий диапазон регулировки скорости. Время переключения фаз отсчитывается постоянным вызовом функции micros() и сравнением значений времени этой функции. На все остальное уже ресурсов микроконтроллера не хватает.

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

  • Главный недостаток – вызов метода step() подвешивает программу. Все ресурсы тратятся на отсчет времени переключения фаз. Даже если запустить параллельный процесс через прерывание по таймеру, то он будет нарушать отсчет времени коммутации фаз. Т.е. когда двигатель крутится больше ничего в программе делать невозможно. Наверное, с помощью этой библиотеки можно сделать только вентилятор, да и то без выключателя или регулятора скорости.
  • Как следствие предыдущего пункта - невозможно управлять одновременно нескольким двигателями.
  • Библиотека Stepper управляет униполярным шаговым двигателем только в между шаговом режиме. А ведь есть еще шаговый и микро шаговый режимы, которые реализуются простыми программными методами и часто необходимы на практике. Биполярный двигатель может работать только в шаговом режиме.
  • Невозможно остановить двигатель, пока не будут отработаны все шаги, заданные функцией step().
  • При остановке двигатель находится в зафиксированном положении, через обмотки продолжает течь ток. В некоторых приложениях необходимо выключать двигатель. Выбора режима остановки двигателя в библиотеке Stepper нет.

В следующем уроке я представлю библиотеку управления шаговыми двигателями, которая свободна от этих недостатков. Управление двигателями происходит в параллельном процессе. Библиотека поддерживает все перечисленные выше режимы.

07 10.2016


На производстве иногда применяют станки ЧПУ (Числовое Программное Управление). Агрегаты позволяют вырезать плоские детали, делать красивую резьбу по дереву и многое другое. На сегодняшний день в моде 3D-принтер, и он всё больше и больше набирает популярность. Я недавно узнал, что ученые в США впервые в мире напечатали человеческий позвоночник из биоматериалов. Вот технологии быстро растут. И во всех этих аппаратов невозможно без шагового двигателя (ШД). Правда, связка — шаговый двигатель и Ардуино — это далеко не идеальный вариант (не для серьёзных объектов). Но всё-таки призываю обратить внимание.

Из этой статьи вы узнаете:

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

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

Как работает шаговик?

Для практических задач с точным перемещением объекта обязательно требуется ШД. Это мотор, который перемещает свой вал в зависимости от заданных шагов в программе контроллера. Чаще всего их применяют в станках ЧПУ, робототехнике, манипуляторах, 3D-принтерах.

Мы же с вами рассмотрим конкретный двигатель 28BYj-48 с драйвером управления . Он достаточно дешёвый, прост в сборке и легко писать программу.


В 4-шаговом режиме он может совершать 2048 шагов, в 8-шаговом 4096 шагов. Питание 5 В, ток потребления 160 мА. Передаточное число 1:64 , то есть один шаг он совершит на 5,625 градусов. Крутящий момент составляет 34 мН.м. Средняя скорость 15 об/мин, с помощью программного кода можно ускорить до 35 об/мин, но вы должны понимать, что мы при этом теряем мощность и точность.

Размеры двигателя указаны из первоисточника — даташита производителя Kiatronics.


А вот таким образом он выглядит изнутри:


Для небольших технических проектов — 28BYj-48 идеальный вариант. Его главным преимуществом является дешевизна и простота. Прилагаю спецификацию:

ШД имеет четыре обмотки, которые запитываются последовательно:


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

1.Шаговый режим — это когда две из четырех обмоток запитываются на каждом шаге. Смотрите карту включения обмоток: Для этого способа используется библиотека my Stepper.h.

2.Полушаговый режим — это когда запитывается первая обмотка, потом вторая и третья вместе, потом четвёртая и т.д. В Даташите разработчика указано, что предпочтительнее режим полушага для мотора. Подробно изображено на карте подключений:

Провод Фазы для полушагового режима
1 2 3 4 5 6 7 8
4 оранжевый
3 желтый
2 розовый
1 синий

Описание драйвера

Плата представляет собой силовой модуль, который содержит в себе семь независимых транзисторов Дарлингтона. Каждая пара представляет собой каскад из двух биполярных транзисторов. является неким усилителем с током нагрузки 500 мА и напряжением 50 В. На изображении отображена сама плата и описание выводов к ней.


Управляющие входы IN1,IN2,IN3,IN4 подключаются к любым дискретным выводам Arduino Uno. Если кому интересно, можете прочитать статью здесь . Светодиоды отображают, какой шаг совершил двигатель. Выводы для подключения внешнего источника питания. Рекомендую запитывать отдельной батареей, так как нагрузка может возрастать до 1 А. Только не забудьте переставить джампер на внешнее питание двигателя.

Схема сборки на Fritzing

Для использования в учебных проектах я рекомендую . Схему подключений я представляю в двух вариантах: принципиальной и визуальной схеме.




Описание библиотеки AccelStepper

Давайте мы перейдём к интересной части нашей статьи. Это описание двух библиотек для работы с двигателями myStepper и AccelStepper. Больше буду обращать внимание на библиотеку AccelStepper, так как у нее больше функции, а именно:

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

Определение конфигурации моторов

AccelStepper mystepper (1, pinStep, pinDirection);

Для управления шаговым двигателем.

AccelStepper mystepper (2, pinA, pinB);

Биполярный ШД, управляемый Н-мостом.

AccelStepper mystepper (4, pinA1, pinA2, pinB1, pinB2);

Униполярный мотор, управляемый четырмя транзисторами.

mystepper.setMaxSpeed (stepsPerSecond);

Максимальная скорость двигателя. Скорость заведомо низкая. Сначала моторчик ускоряется до этой скорости, затем снижает её

mystepper.setAcceleration (stepsPerSecondSquared);

Ускорение шаговика, в шагах в секунду.

Управление положением

mystepper.moveTo (targetPosition);

Переместиться в абсолютно указанное положение. Само движение запускается функцией run ().

mystepper.move (distance);

Переместиться в относительно указанное положение. Само движение запускается функцией run (). Значение distance может быть больше или меньше нуля.

mystepper.currentPosition ();

Вернуть текущее абсолютное положение.

mystepper.distanceToGo ();

Вернуть расстояние до указанного положения. Может использоваться для проверки, достиг ли моторчик указанной конечной точки.

mystepper.run ();

mystepper.runToPosition ();

Начать движение и подождать когда двигатель достигнет указанной точки. Функция не осуществляет возврата пока он не остановится.

Управление скоростью

mystepper.setSpeed (stepsPerSecond);

Установить скорость в шагах за секунду. Сам процесс запускается функцией runSpeed ().

mystepper.runSpeed ();

Начать движение. Для продолжения движения двигателя следует вызывать функцию повторно.

Что такое шаговый двигатель? Название говорит само за себя: двигатель, который может не просто “крутиться”, а крутиться размеренно, управляемо… шагами! То есть, мы сами в программе “говорим” ему, на какой угол нужно повернуться. Для чего это может понадобиться? Например, вы хотите собрать свой станок с ЧПУ, 3d принтер… или любое другое устройство, которое нуждается в точном позиционировании движущихся частей. Подробнее о шаговых двигателях можно почитать в википедии .

Существует огромное разнообразие шаговых двигателей различных размеров и характеристик. Чтобы управлять ими нужно специальное устройство – драйвер.

В этой статье мы будем использовать:

Итак, задача: подключить к arduino uno шаговый двигатель и покрутить им.

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

Подключаем двигатель к драйверу, а драйвер, в свою очередь к плате arduino к цифровым пинам 2, 3, 4, 5 и к питанию (5В) как показано на фото.



Настоятельно рекомендую в своих проектах использовать отдельное питание для двигателя (от другого блока питания, а не от arduino), потому как если дать серьезную нагрузку на двигатель – на плате arduino может перегреться микросхема, отвечающая за питание – что не есть хорошо!


Чтобы управлять двигателем, воспользуемся библиотекой Stepper, которую не нужно ни от куда качать – она входит в поставку Arduino IDE – среду разработки, в которой мы пишем код для arduino. В качестве параметров передаем количество шагов полного оборота и пины, к которым подключаем двигатель.

Stepper myStepper(2048,2,3,4,5);

Методом setSpeed() можно управлять скоростью, а step() отвечает за перемещение вала на заданное количество шагов (если значение отрицательное – вал крутится в обратную сторону).

Полный код программы:

#include Stepper myStepper(2048,2,3,4,5); void setup() { myStepper.setSpeed(10); } void loop() { myStepper.step(2048); delay(1000); myStepper.step(-2048); delay(1000); }

Небольшое замечание по драйверу. Плата согласования Arduino и шагового двигателя на основе UNL2003A имеет всего одну перемычку, которая замыкает 3 и 4 выводы. Данная перемычка подаёт питание на светодиоды. Если на шаговый двигатель подаётся питание +5 В (как в нашем случае), то данная перемычка позволяет наблюдать за переключением выводов управления шаговым двигателем. Если для кого-то важен потребляемый ток (например, для увеличения времени работы от батареи) и не нужна индикация, то перемычку можно смело снимать.

Вот и видео того, что получилось.

Удачных экспериментов!

Возможно, вам потребуются файлы:

  • на 28BYJ-48.

Перед началом очередного проекта на Arduino, было решено использовать шаговый двигатель Nema 17 из-за отличного соотношения цена/качество. Перед подключением Nema 17, за плечами был определенный опыт работы с шаговиком 24byj48 (даташит). Управлялся он и с помощью Arduino, и с помощью Raspberry pi, проблем не возникало. Основная прелесть этого двигателя - цена (около 3 долларов в Китае). Причем, за эту сумму вы приобретаете двигатель с драйвером в комплекте. Согласитесь, такое можно даже и спалить, не особо сожалея о содеянном.

Теперь появилась задача поинтереснее. Управлять шаговым двигателем Nema 17 (даташит). Данная модель от оригинального производителя реализуется по цене около 40 долларов. Китайские копии стоят раза в полтора-два дешевле - около 20-30 долларов. Очень удачная модель, которая часто используется в 3D принтерах и CNC-проектах. Первая возникшая проблема - как подобрать драйвер для этого двигателя. Силы тока на пинах Arduino для питания не хватит.

Выбор драйвера для управления Nema 17

Google подсказал, что для оживления Nema 17 можно использовать драйвер A4988 от Poulou (даташит).

Кроме того, есть вариант использования микросхем L293D. Но A4988 считается более подходящим вариантом, так что на нем и остановились во избежание потенциальных проблем.

Подключение Nema 17 через A4988

Подключение было реализовано на основании этой темы на Arduino форуме. Рисунок приведен ниже.



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

Первая проблема

Наш 12 вольтовый адаптер не выдавал достаточной силы тока. В результате адаптер был заменен на 8 батареек АА. И двигатель начал вращаться! Что ж, тогда захотелось перескочить с макетной платы на прямое подключение. И тут возникла

Вторая проблема

Когда все было распаяно, двигатель опять перестал двигаться. Почему? Не понятно до сих пор. Пришлось вернуться к макетной плате. И вот тут возникла вторая проблема. Стоит предварительно было посидеть на форумах или внимательно почитать даташит. Нельзя подключать-отключать двигатель когда на контроллер подано питание! В результате контроллер A4988 благополучно сгорел.

Эта проблема была решена покупкой нового драйвера на eBay. Теперь, уже с учетом накопленного грустного опыта, Nema 17 был подключен к A4988и запущен, но...

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

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

Программа для Arduino

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

Основные выводы

  1. Никогда не подключайте/отключайте двигатель, когда на контроллер подано питание.
  2. При выборе источника питания, обратите внимание не только на вольтаж, но и на мощность адаптера.
  3. Не расстраивайтесь, если контроллер A4988 вышел из строя. Просто закажите новый;)
  4. Используйте библиотеку AcclStepper вместо голого кода Arduino. Шаговый двигатель с использованием этой библиотеки будет работать без лишних вибраций.

Скетчи для управления шаговым двигателем

Простой Arduino-код для проверки шагового двигателя

//простое подключение A4988

//пины reset и sleep соединены вместе

//подключите VDD к пину 3.3 В или 5 В на Arduino

//подключите GND к Arduino GND (GND рядом с VDD)

//подключите 1A и 1B к 1 катушке шагового двигателя

//подключите 2A и 2B к 2 катушке шагового двигателя

//подключите VMOT к источнику питания (9В источник питания + term)

//подключите GRD к источнику питания (9В источник питания - term)

int stp = 13; //подключите 13 пин к step

int dir = 12; //подключите 12 пин к dir

pinMode(stp, OUTPUT);

pinMode(dir, OUTPUT);

if (a < 200) // вращение на 200 шагов в направлении 1

digitalWrite(stp, HIGH);

digitalWrite(stp, LOW);

else { digitalWrite(dir, HIGH);

digitalWrite(stp, HIGH);

digitalWrite(stp, LOW);

if (a>400) // вращение на 200 шагов в направлении 2

digitalWrite(dir, LOW);

Второй код для Arduino для обеспечения плавного вращения двигателя. Используется библиотека AccelStepper library .

#include

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

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

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

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

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

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

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

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

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

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

tattooe.ru - Журнал современной молодежи