Меню
Блог Гридина Семёна

Автоматизация и логические контроллеры

Рубрики блога

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

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


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

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

Работа шагового двигателя и описание драйвера
Схема сборки на Fritzing
Описание библиотеки myStep и AccelStep
Описание кода программы

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

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

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

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

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

шаговый двигатель

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

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

Даташит ШД

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

Внутренности ШД

 

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

Тип мотораУниполярный шаговый двигатель
Число фаз4
Рабочее напряжение5-12 вольт
Частота100 Гц
Частота под нагрузкой> 600 Гц
Крутящий момент> 34.3 мН*м (120 Гц)
Режим шагарекомендуется полушаговый режим (8-шаговая управляющая сигнальная последовательность)
Угол шага

8-шаговая управляющая сигнальная последовательность - 5.625º/шаг

4-шаговая управляющая сигнальная последовательность - 11.25º/шаг
Передаточное отношение редуктораПроизводителем заявлено 64:1
Вес30 г

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

Схема ШД

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

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

ПроводФазы для шагового режима
1234
4 оранжевый
3 желтый
2 розовый
1 синий

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

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

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

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

ULN2003

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

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

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

Принципиальная схема

Визуальная схема ШД

Описание библиотеки 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 ();

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

Как видите функции управления в принципе не сложны, достаточно посидеть несколько вечеров.

Описание кода программы

Я выложу для вас простой код, который будет достаточно скопировать и добавить в Ардуино IDE. О том, как программировать в этой среде я писал статью. Все описания строчек кода я написал в комментариях.

И напоследок небольшое видео демонстрации работы сборки:

На этом я заканчиваю, хорошего вам настроения, до встречи в новой статье.
Друзья! Если вам понравилась статья, прошу поделиться ею в соц. сетях. Буду бесконечно благодарен

Вам так же может быть интересно

Комментариев к статье: 19
  • #define HALFSTEP 7 — ошибка.В описании библиотеки HALFSTEP определяет тип интерфейса двигателя и может принимать значения 0,1,2,3,4,6,8. См. www.airspayce.com/mikem/a…c5fbcb764cabeea5

  • Странно, у меня чётко сработал этот код…

  • AccelStepper mystepper (1, pinStep, pinDirection);

    Шаговый двигатель, управляемый выделенной платой.

    AccelStepper mystepper (2, pinA, pinB);

    Биполярный шаговый двигатель, управляемый Н-мостом.

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

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

  • Из комментов в библиотеке , по умолчанию : Defaults to AccelStepper::FULL4WIRE (4) pins.

    может библиотека не нашла 7, подставила 4?( полношаговый режим). А 8- полушаговый режим.

    338 /// Defaults to AccelStepper::FULL4WIRE (4) pins.

  • Это все данные библиотеки с даташита, как я понимаю… Вполне возможно, что бибка просто заводское значение подставила…

  • Всем большой ПРИВЕТ! Помогите вставить две кнопки,нажатие на первую запускает движение в одну сторону и потом мотор просто останавливается,а нажатие на вторую кнопку запускает процесс в обратную сторону.Если нажимать одну и туже кнопку то мотор каждый раз начинает движение в одну сторону.

    #include

    #define HALFSTEP 8

    // Определение пинов для управления двигателем

    #define motorPin1 3 // IN1 на 1-м драйвере ULN2003

    #define motorPin2 4 // IN2 на 1-м драйвере ULN2003

    #define motorPin3 5 // IN3 на 1-м драйвере ULN2003

    #define motorPin4 6 // IN4 на 1-м драйвере ULN2003

    // Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4

    // для использования AccelStepper с 28BYJ-48

    AccelStepper stepper1 (HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

    void setup (){ stepper1.setMaxSpeed (800.0);

    stepper1.setAcceleration (100.0);

    stepper1.setSpeed (200);

    stepper1.moveTo (20000);

    } void loop (){

    // Изменяем направление, если шаговик достигает заданного положения

    if (stepper1.distanceToGo ()==0)

    stepper1.moveTo (-stepper1.currentPosition ());

    stepper1.run (); }

  • По умолчанию моторчик крутится без остановки в разные стороны.

  • Здесь живые есть!

    • Кто здесь? :roll:

  • Кого здесь потеряли?? :grin:

  • Кто-нибудь подскажет мне почему не получается залить скаченную программу с работающей микросхемы ULN2803APG ? После заливки программы, микросхема работает не правильно. :cry: :cry: :razz:

    • Можно поподробнее??

  • Подскажите пожалуйста, как Вы во Fritzing нарисовали такую схему — где взяли компоненты?

    • Они все стандартные, находятся они все в библиотеках. С официального сайта можно скачать.

  • Добрый день! Хочу сделать драйвер шагового двигателя на arduino и ULN2003 для униполярного двигателя управление 2 пина шаг направление., Пожалуйста напишите простой пример как это сделать, и скажите может ли 1 ардуина управлять 2 или 3 ULN2003 одновременно. У меня совершенно нет не каких знаний языков программирования, в ардуино мой первый опыт. У меня получается слегка редактировать уже написанные программы но я не нашел в библиотеке не чего про STEP-DIR (ШАГ-НАПРАВЛЕНИЕ). ЗАРАНИЕ БЛАГОДАРЮ ЗА ПОМОЩЬ!

    • Добрый день, вы можете спокойно использовать драйверы двигателей на L293 или L298N. С ним проще работать, уже есть готовые команды.

      Прям по даташиту можно спокойно делать.

  • С кодом программы для ардуино помогите пожалуйста я не представляю как сделать чтоб можно было управлять сигналом ( шаг направление ).

  • Подключение шагового двигателя 28BYJ-48 с драйвером на микросхеме ULN2003 к Arduino Uno

    youtu.be/8b-9drmBPTY

  • это код для Униполярного. Как его переписать на биполярный?

    #define HALFSTEP 8

    // Motor pin definitions

    #define motorPin1 3 // IN1

    #define motorPin2 4 // IN2

    #define motorPin3 5 // IN3

    #define motorPin4 6 // IN4

    AccelStepper stepper1 (HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

    на драйвере L293N

    меняю 8 на 4 он жужжит и не крутится. а в этом режиме у него нет тягового усилия. Двигатель 17PM-K212-PIT