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

Робототехника — это наука о будущем

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

Как подключить шаговый двигатель к 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. О том, как программировать в этой среде я писал статью. Все описания строчек кода я написал в комментариях.

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

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

Интересен блог? Подпишись и получай новости на почту

Подписка на новости блога

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

Комментариев к статье: 12
  • #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 (); }

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

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

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

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

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

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

  • ;-)
  • :smile:
  • :sad:
  • :roll:
  • :razz:
  • :oops:
  • :o
  • :lol:
  • :idea:
  • :grin:
  • :cry:
  • :cool:
  • :???: