Меню Закрыть

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

Содержание

В этой статье мы поговорим о шаговых двигателях в проектах Ардуино на примере очень популярной модели 28BYJ-48. Так же как и сервоприводы, шаговые моторы являются крайне важным элементом автоматизированных систем и робототехники. Их можно найти во многих устройствах рядом: от CD-привода до 3D-принтера или робота-манипулятора. В этой статье вы найдете описание схемы работы шаговых двигателей, пример подключения к Arduino с помощью драйверов на базе ULN2003 и примеры скетчей с использованием стандартной библиотеки Stepper.

Шаговый двигатель – принцип работы

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

Шаговый двигатель обеспечивает вращения ротора на заданный угол при соответствующем управляющем сигнале. Благодаря этому можно контролировать положение узлов механизмов и выходить в заданную позицию. Работа двигателя осуществляется следующим образом – в центральном вале имеется ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться. Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.

Упрощенные анимированные схемы работы шагового двигателя

Основные виды шаговых моторов:

  • Двигатели с переменными магнитами (применяются довольно редко);
  • Двигатели с постоянными магнитами;
  • Гибридные двигатели (более сложные в изготовлении, стоят дороже, но являются самым распространенным видом шаговых двигателей).

Где купить шаговый двигатель

Самые простые двигатели Варианты на сайте AliExpress:

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

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

Работа двигателя в биполярном режиме имеет несколько преимуществ:

  • Увеличение крутящего момента на 40% по сравнению с униполярными двигателями;
  • Возможность применения двигателей с любой конфигурацией фазной обмотки.

Но существенным минусов в биполярном режиме является сложность самого драйвера. Драйвер униполярного привода требует всего 4 транзисторных ключа, для обеспечения работы драйвера биполярного привода требуется более сложная схема. С каждой обмоткой отдельно нужно проводить различные действия – подключение к источнику питания, отключение. Для такой коммутации используется схема-мост с четырьмя ключами.

Драйвер шагового двигателя на базе L298N

Этот мостовой драйвер управляет двигателем с током до 2 А и питанием до 46В. Модуль на основе драйвера L298N состоит из микросхемы L298N, системы охлаждения, клеммных колодок, разъемов для подключения сигналов, стабилизатора напряжения и защитных диодов.

Драйвер двигателя L298N

Драйвер шагового двигателя ULN2003

Шаговые двигателями с модулями драйверов на базе ULN2003 – частые гости в мастерских Ардуино благодаря своей дешевизне и доступности. Как правило, за это приходится платить не очень высокой надежностью и точностью.

Другие драйвера

Существует другой вид драйверов – STEP/DIR драйверы. Это аппаратные модули, которые работают по протоколу STEP/DIR для связи с микроконтроллером. STEP/DIR драйверы расширяют возможности:

  • Они позволяют стабилизировать фазные токи;
  • Возможность установки микрошагового режима;
  • Обеспечение защиты ключа от замыкания;
  • Защита от перегрева;
  • Оптоизоляция сигнала управления, высокая защищенность от помех.

В STEP/DIR драйверах используется 3 сигнала:

  • STEP – импульс, который инициирует поворот на шаг/часть шага в зависимости от режима. От частоты следования импульсов будет определяться скорость вращения двигателя.
  • DIR – сигнал, который задает направление вращения. Обычно при подаче высокого сигнала производится вращение по часовой стрелке. Этот тип сигнала формируется перед импульсом STEP.
  • ENABLE – разрешение/запрет работы драйвера. С помощью этого сигнала можно остановить работу двигателя в режиме без тока удержания.

Одним из самых недорогих STEP/DIR драйверов является модуль TB6560-V2. Этот драйвер обеспечивает все необходимые функции и режимы.

Подключение шагового двигателя к Ардуино

Подключение будет рассмотрено на примере униполярного двигателя 28BYj-48 и драйверов L298 и ULN2003. В качестве платы будет использоваться Arduino Uno.

Подключение шагового двигателя к Ардуино

Еще один вариант схемы с использованием L298:

Подключение шагового двигателя к Ардуино на базе L298

Схема подключения на базе ULN2003 изображена на рисунке ниже. Управляющие выходы с драйвера IN1-IN4 подключаются к любым цифровым контактам на Ардуино. В данном случае используются цифровые контакты 8-11. Питание подключается к 5В. Также для двигателя желательно использовать отдельный источник питания, чтобы не перегрелась плата Ардуино.

Читайте также:  Dragon age origins ошибка physxloader dll

Подключение шагового двигателя к Ардуино

Принципиальная схема подключения.

Принципиальная схема подключения шагового двигателя

Еще одна схема подключения биполярного шагового двигателя Nema17 через драйвер L298 выглядит следующим образом.

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

Nema 17 – биполярный шаговый двигатель, который чаще всего используется в 3D принтерах и ЧПУ станках. Серия 170хHSхххА мотора является универсальной.

Основные характеристики двигателя:

  • Угловой шаг 1,8°, то есть на 1 оборот приходится 200 шагов;
  • Двигатель – двухфазный;
  • Рабочие температуры от -20С до 85С;
  • Номинальный ток 1,7А;
  • Момент удержания 2,8 кг х см;
  • Оснащен фланцем 42 мм для легкого и качественного монтажа;
  • Высокий крутящий момент – 5,5 кг х см.

28BYJ-48 – униполярный шаговый двигатель. Используется в небольших проектах роботов, сервоприводных устройствах, радиоуправляемых приборах.

  • Номинальное питание – 5В;
  • 4-х фазный двигатель, 5 проводов;
  • Число шагов: 64;
  • Угол шага 5,625°;
  • Скорость вращения: 15 оборотов в секунду
  • Крутящий момент 450 г/сантиметр;
  • Сопротивление постоянного тока 50Ω ± 7% (25 ℃).

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

В среде разработки Ардуино IDE существует стандартная библиотека Strepper.h для написания программ шаговых двигателей. Основные функции в этой библиотеке:

  • Stepper(количество шагов, номера контактов). Эта функция создает объект Stepper, которая соответствует подключенному к плате Ардуино двигателю. Аргумент – контакты на плате, к которым подключается двигатель, и количество шагов, которые совершаются для полного оборота вокруг своей оси. Информацию о количестве шагов можно посмотреть в документации к мотору. Вместо количества шагов может быть указан угол, который составляет один шаг. Для определения числа шагов, нужно разделить 360 градусов на это число.
  • Set Speed(long rpms) – функция, в которой указывается скорость вращения. Аргументом является положительное целое число, в котором указано количество оборотов в минуту. Задается после функции Step().
  • Step(Steps) –поворот на указанное количество шагов. Аргументом может быть либо положительное число – поворот двигателя по часовой стрелке, либо отрицательное – против часовой стрелки.

Пример скетча для управления

В наборе примеров библиотеки Stepper.h существует программа stepper_oneRevolution, в которой задаются все параметры для шагового двигателя – количество шагов, скорость, поворот.

Заключение

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

Перед началом очередного проекта на Arduino, было решено использовать шаговый двигатель Nema 17.

Почему именно 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

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

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

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

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

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

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

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

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

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

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

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

Перед началом очередного проекта на Arduino, было решено использовать шаговый двигатель Nema 17.

Почему именно Nema 17? В первую очередь, из-за отличного соотношения цена/качество.

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

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

Читайте также:  Чемпионат мира по dota 2

Выбор драйвера для управления 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

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

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

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

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

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

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

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

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

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

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

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

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.