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

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

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

В этой статье мы детально обсудим один из типов двигателей – шаговый двигатель. Разберемся, в каких случаях уместно его использование. Рассмотрим пример подключения с использованием драйвера Easy Driver.

Необходимые элементы

  • Драйвер для шагового двигателя EasyDriver;
  • Небольшой шаговый двигатель;
  • Макетная плата;
  • Провода мама-мама;
  • Коннекторы;
  • Arduino Uno или подобный микроконтроллер;
  • Паяльник;
  • Источник питания на 12 В (или регулируемый источник питания)

Основное отличие шаговых двигателей от двигателей постоянного тока: они не только вращаются в различных направлениях, но обеспечивают точное угловое позиционирование ротора. Скорость вращения двигателя постоянного тока можно регулировать с помощью подачи большей или меньшей силы тока, но обеспечить остановку ротора в заданном положении невозможно. Теперь представьте себе принтер. Внутри, если вы его разберете, обнаружите огромное количество подвижных узлов, включая и двигатели. Один из установленных моторов обеспечивает подачу бумаги в то время как краска распыляется на бумагу. Этот двигатель должен обеспечивать подачу бумаги на определенное расстояние для построчной печати. Второй двигатель в принтере устанавливается для перемещения картриджа. Опять таки, необходимо обеспечить точно заданное позиционирование картриджа. В подобных случаях рационально использовать именно шаговые двигатели.

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

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

В данной статье в детали мы вдаваться не будем. Конструктивные особенности шаговых двигателей и их принцип действия раскрыты в статье двигатели и Arduino.

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

На сегодняшний день существует огромное количество моделей шаговых двигателей и плат управления к ним (драйверов).

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

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

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

Сборка драйвера

Самый простой метод использования драйвера EasyDriver – установить на нем коннекторы для последующей установки на макетной плате. Теоретически, можно закрепить коннекторы и на макетной плате.

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

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

После этого сверху поставьте драйвер запаяйте все коннекторы.

Схема подключения

После распайки пришло время подключить драйвер к Arduino. Схема подключения несложная и приведена на рисунке ниже.

Примечание. Маленький шаговый двигатель выглядит не так, как он изображен на схеме подключения. У него должен быть коннектор с четырьмя разъемами на конце.

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

Бывает такое, что разводка кабелей не соответсвует пинам на драйвере.

Важно! Шаговые двигатели потребляют больше тока, чем может предоставить Arduino. В связи с этим мы будем питать Arduino от 12 В. При этом вход для питания (М+) на EasyDriver подключен к пину Vin на Arduino. Благодаря этому, можно запитывать Arduino и двигатель от одного источника.

Программа Arduino для вращения шагового двигателя

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

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

int dirpin = 2;

int steppin = 3;

void setup()

{

pinMode(dirpin, OUTPUT);

pinMode(steppin, OUTPUT);

}

void loop()

{

int i;

digitalWrite(dirpin, LOW); // Устанавливаем направление

delay(100);

for (i = 0; i

Источник: http://arduino-diy.com/arduino-upravlyayem-shagovym-dvigatelem-s-pomoshchyu-kontrollera-easy-driver

Опыт изучения Arduino. Подключение шагового двигателя. Часть программная и наладочная. — DRIVE2

Всем привет!

В прошлой части своего повествования о подключении ШД к ардуино я остановился на том, что собрал на макетной плате стабилизатор напряжения на 5 В, установил плату управления (ПУ) и подготовил выводы ШД. Настройка самой платы заключается в установке тока двигателя и выбора значения микрошага.

Начнём с тока двигателя. На ПУ надо подать только питание логической части, т.е. 5 В. Плюс подается на вывод VDD (может быть обозначен VCC, VLOG), минус на GND. ШД и его питание пока не подаю. Сам процесс регулировки сводится к установке Vref.

Формула Vref для A4988 изменяется от номинала токочувствительных резисторов. Это два чёрных прямоугольника на плате драйвера. Обычно подписаны R050 или R100.

Vref = Current Limit * 8 * (RS)

RS = 0,100
Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25

RS = 0,050
Vref = Current Limit * 8 * 0,050 = Current Limit / 2,5

гдеVref – напряжение на пине, который задаёт ток двигателя.Current Limit – ток шагового двигателя.

RS — сопротивление резистора — датчика тока.

Измерять Vref проще всего на подвижном выводе подстроечного резистора. Минус мультиметра (в режиме измерения напряжения постоянного тока соединяется с выводом GND, а плюс цепляется за жало отвёрточки, которой кручу подстроечный резистор. Ток своего двигателя я не знал и подобрал опытным путём.

Если пересчитать по формуле, то получу ток:

Vref = Current Limit * 8 * 0,100 = Current Limit / 1,25

отсюда
Current Limit = 1,25 * Vref = 1,25 * 0,28 = 0,35 А или 350 мА

С током разобрался. Теперь микрошаг.

За микрошаг отвечают выводы MS (micro step) MS1, MS2, MS3.Теперь пару слов о том, что такое микрошаг. Из таблицы видно, что это дробное число. Допустим ШД совершает полный оборот за 200 шагов.

Если будет выбран микрошаг 1/4, то полный оборот будет совершаться уже за 800 шагов, а при микрошаге 1/16 — за 3200 шагов. Для чего это нужно? При полном шаге получается больший момент, меньшая точность и больше шумность.

Чем мельче шаг, тем выше точность позиционирования, плавнее ход (особенно на малых частотах вращения) и значительно меньше шума при работе. Однако при этом момент на валу двигателя будет меньше.

Забегая вперёд, скажу что поигрался с разными значениями, но остановился на 1/16, соединив выводы MS1, MS2, MS3 с выводом VDD.ПУ настроена — можно подключать двигатель и его питание.

Напомню, что одна из обмоток у меня это синий и зелёный провод, вторая — белый и оранжевый.

Схематически подключение ШД к ПУ выглядит у меня так:

После подачи напряжений питания на плату ШД стал произвольно двигаться. Виной тому наводки на выводах STEP (шаг) и DIR (direction — направление) — эти выводы отвечают за управление вращением ШД.Если соединить вывод DIR с выводом VDD, ШД будет двигаться в одну сторону, а если с GND, то в другую.

При переходе напряжения от низкого к высокому уровню на выводе STEP ШД совершает 1 микрошаг. Т.е. для вращения двигателя на этот вывод нужно подавать прямоугольные импульсы с низким уровнем около нуля и высоким около 5 В, так называемые TTL-уровни. Генератором таких импульсов у меня будет плата ардуино.

Я загрузил в неё скетч из примеров под названием Blink. В оригинале он формирует на 13 выводе платы (в моём случае Arduino Nano) импульсы с частотой 1/2 Гц (1 с подается высокий уровень, затем 1 с низкий уровень).

При такой частоте ШД совершил бы один оборот (при микрошаге 1/16) за 6400 с! Так долго я ждать не хотел))) и стал повышать частоту двигателя. Устойчивой работы мне удалось добиться на частотах вплоть до 10 кГц. Т.е. длительность импульса и паузы у меня составляют по 50 мкс.

Операторы delay в скетче пришлось заменить на delayMicroseconds, потому что delay умеет работать только со временами от 1 мс. В итоге скетч стал выглядеть так:

Затем я решил доработать скетч таким образом, чтобы двигатель периодически менял направление вращения. Доработанный скетч выглядит так:
По подключению Arduino.

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

Для тех, кто осилил весь материал, видео устройства в работе.

Это первое моё видео предназначенное для публичного просмотра. И первое виде в блоге, снятое мной.

Напишите в комментариях имеет ли смысл снимать видео или достаточно ограничиться статичными изображениями?

Всем Мира!
До свидания!

Источник: https://www.drive2.ru/b/500341013630419309/

Шаговые двигатели и моторы Ардуино

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

Их можно найти во многих устройствах рядом: от CD-привода до 3D-принтера или робота-манипулятора.

Схема работы шаговых двигетелй, способ подключения к Arduino и примеры скетчей — все это вы найдете в этой статье.

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

Шаговый двигатель – это мотор, перемещающий свой вал в зависимости от заданных в программе микроконтроллера шагов и направления.

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

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

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

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

Читайте также:  Топ-10 квадрокоптеров до 6000 рублей (100$) в 2017 - arduino+

Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.

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

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

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

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

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

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

Для такой коммутации используется схема-мост с четырьмя ключами. Самым распространенным драйвером является микросхема L298N. Этот мостовой драйвер управляет двигателем с током до 2 А и питанием до 46В.

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

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

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

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

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

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

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

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

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

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

Подключение биполярного двигателя через драйвер L298 выглядит похожим образом. В качестве шагового двигателя используется Nema 17.

Для работы в программе Arduino IDE используется встроенная библиотека Stepper.

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

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

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

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

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

Характеристики двигателя:

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

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

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

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

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

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

#include const int stepsPerRevolution = 200; Stepper myStepper(stepsPerRevolution, 8,9,10,11); //подключение к пинам 8…11 на Ардуино void setup() { myStepper.setSpeed(60); //установка скорости вращения ротора Serial.begin(9600); } void loop() { //Функция ожидает, пока поступит команда, преобразовывает текст и подает сигнал на двигатель для его вращения на указанное число шагов. Serial.println(“Move right”); //по часовой стрелке myStepper.step(stepsPerRevolution); delay(1000); Serial.println(“Move left”); //против часовой стрелки myStepper.step(-stepsPerRevolution); delay(1000); }

Заключение

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

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

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

Источник: https://ArduinoMaster.ru/motor-dvigatel-privod/shagovye-dvigateli-i-motory-arduino/

Управление двигателем постоянного тока с помощью Arduino и ИМС L298

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

Двигатель постоянного тока (DC) является наиболее распространенным типом электродвигателей. Двигатели постоянного тока обычно имеют только два вывода, один положительный и один отрицательный. Если вы подключите эти два вывода напрямую к аккумулятору, двигатель начнет крутиться. Если же поменять полярность подаваемого напряжения, двигатель будет вращаться в противоположном направлении.

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

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

Эта схема называется Н-мостом потому, что она использует четыре транзистора, подключенных таким образом, что схема выглядит как буква “Н”.

Для сборки данной схемы вы можете использовать дискретные транзисторы, но в этом руководстве мы будем использовать микросхему Н-моста L298.

L298 может управлять скоростью и направлением вращения двигателей постоянного тока и шаговых двигателей и может управлять двумя двигателями одновременно.

Допустимый ток для каждого из двигателей составляет 2 ампера. Однако при таких токах вам будет необходимо использовать радиаторы.

Распиновка микросхемы L298 показана на рисунке ниже. Техническое описание L298 можно скачать здесь.

Распиновка микросхемы L298 (вид сверху)

Распиновка микросхемы L298

Необходимые комплектующие

Комплектующие для эксперимента управления двигателем постоянного тока с помощью ArduinoСхема включения микросхемы L298 для управления двумя электродвигателями

Схема выше показывает, как подключить микросхему L298 для управления двумя электродвигателями. Для управления каждым двигателем у микросхемы есть по три вывода: вход 1 (IN1), вход 2 (IN2) и включение A (EN A) для двигателя 1, и вход 3 (IN3), вход 4 (IN4) и включение B (EN B) для двигателя 2.

Поскольку в данном руководстве мы будем управлять только одним электродвигателем, то мы подключим Arduino к выводам IN1 (вывод 5), IN2 (вывод 7) и EN A (вывод 6) микросхемы L298.

Выводы 5 и 7 цифровые, то есть для вращения двигателя в заданную сторону на эти выводы необходимо подавать неизменяющиеся в времени сигналы логического нуля или единицы.

В то время, как на вывод 6 необходимо подавать широтно-импульсно-модулированный (ШИМ) сигнал, который управляет скоростью вращения двигателя.

Следующая таблица показывает, в каком направлении будет вращаться электродвигатель в зависимости от логических уровней на входах IN1 и IN2.

Выбор направления вращения двигателя при работе с микросхемой L298

IN1IN2Двигатель
остановлен
1 вращение вперед
1 вращение назад
1 1 остановлен

В таблице ниже приведено описание подключения микросхемы L298 к нашей плате Arduino Mega 2560.

Подключение микросхемы L298 к плате Arduino

Выводы L298Выводы ArduinoНазначение
IN1 вывод 8 выбор направления вращения двигателя
IN2 вывод 9
EN A ШИМ вывод 2 управление скоростью вращения двигателя

Для установки значений на выводах 8 и 9 платы Arduino мы будем использовать функцию digitalWrite(), а для установки занчений на выводе 2 – функцию analogWrite().

Ниже показана фотография стенда, собранного для проведения эксперимента.

Стенд для проведения эксперимента по управлению двигателем постоянного тока с помощью Arduino и микросхемы Н-моста L298

Код

const int pwm = 2; // вывод 2 настраивается, как ШИМ // выводы для выбора направления вращения двигателя const int in_1 = 8; const int in_2 = 9; void setup() { pinMode(pwm,OUTPUT); // Мы должны настроить ШИМ вывод на выход pinMode(in_1,OUTPUT); // Логические выводы так же настраиваются на выход pinMode(in_2,OUTPUT); } void loop() { // Для вращения по часовой стрелке необходимо установить in_1 = High , in_2 = Low digitalWrite(in_1,HIGH); digitalWrite(in_2,LOW); analogWrite(pwm,255); // установка pwm в значение 255 // Мы можем изменить скорость вращения, изменив выходное значение pwm. // Вращение двигателя по часовой стрелке 3 секунды. delay(3000); // Остановка digitalWrite(in_1,HIGH); digitalWrite(in_2,HIGH); delay(1000) ; // Для вращения против часовой стрелки необходимо установить IN_1 = LOW , IN_2 = HIGH digitalWrite(in_1,LOW); digitalWrite(in_2,HIGH); delay(3000); //Остановка digitalWrite(in_1,HIGH); digitalWrite(in_2,HIGH); delay(1000); }

Сборка

  1. Подключите выводы 5V и корпус микросхемы L298 к выводам 5V и корпус платы Arduino;
  2. Подключите двигатель к выводам 2 и 3 микросхемы L298;
  3. Подключите вывод IN1 микросхемы L298 к выводу 8 платы Arduino;
  4. Подключите вывод IN2 микросхемы L298 к выводу 9 платы Arduino;
  5. Подключите вывод EN A микросхемы L298 к выводу 2 платы Arduino;
  6. Подключите вывод SENS A микросхемы L298 к корпусу;
  7. Подключите Arduino к компьютеру, используя USB кабель, и загрузите программу на плату, используя Arduino IDE;
  8. Обеспечьте питание платы Arduino с помощью источника питания, аккумулятора или USB кабеля.

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

Видео

Оригинал статьи:

  • Editorial Team. Control a DC Motor with an Arduino

Arduino Mega 2560

Отладочная плата Arduino Mega 2560 построена на микроконтроллере ATmega2560.

Она имеет 54 цифровых входных/выходных выводов (15 из которых могут использоваться в качестве ШИМ выходов), 16 аналоговых входов, 4 порта UART (аппаратных последовательных порта), кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером;…

Читайте также:  Ардуино радиоуправляемая модель лодки своими руками

Набор перемычек (папа-папа)

Набор перемычек папа-папа. 40 штук по 15 см.

Микросхема L298N

L298 – сдвоенный Н-мостовой драйвер для управления двунаправленными нагрузками с токами до 2А и напряжениями от 4,5 до 46 вольт. Микросхема разработана для управления реле, соленоидами, двигателями постоянного тока и шаговыми двигателями.

Источник: https://radioprog.ru/post/160

Подключение шагового двигателя к Arduino через драйвер L298

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

Кроме шагового двигателя (ШД) и Arduino нам потребуется ещё плата драйвера L298, которую можно приобрести у нас в магазине.

Шаговый двигатель позволяет точно спозиционировать вал, поворачивая его на небольшой угол. Один такой поворот зовётся шаг. Соответственно, одной из важных характеристик привода является количество шагов на оборот, то есть «разрешение» поворота.

ШД способен удерживать свою позицию даже в случае внешнего крутящего момента! Шаговые двигатели делятся на униполярные и биполярные.

Мы будем использовать униполярный ШД, так как биполярный требует специальный драйвер для управления, тогда как униполярным можно легко управлять даже при помощи сборки транзисторов.

Обратите внимание – биполярные ШД имеют 4 провода на выходе, униполярные – не 4 (5 или более).

Количество выводов зависит от количества обмоток в двигателе, чаще всего их 4 –поэтому 5 проводов (4 обмотки и общий). Управление униполярным двигателем, в теории, сводится к перебору обмоток (подачи поочерёдно логической единицы). Задержка между переключением обмотки определяет скорость и ускорение двигателя.

Для управления шаговым двигателем сгодится любой контроллер Arduino, мы же используем Arduino UNO.  От шаговика отходят две пары проводов и общий(GND). A, A+ подключаются к MA, MA+, также и B, B+ к MB, MB+.

Питание 12В подаётся на первый контакт разъёма питания, 5В – на второй, GND –  на третий (см. фото ниже). Выводы IN1-IN4 подключаются по порядку к цифровым пинам с 8 по 11 – по ним передаются управляющие импульсы.

После подключения надо загрузить в контроллер программу-пример stepper_oneRevolution из библиотеки Stepper (включена в комплект поставки). Можете добавить ее либо с этой страницы, либо найти в Файл Примеры Stepper stepper_oneRevolution

Подключение шагового двигателя к Arduino через драйвер L298

const int stepsPerRevolution = 200; // steps per revolution of your motor// initialize the stepper library on pins 8 through 11:Stepper myStepper(stepsPerRevolution, 8,9,10,11);   // set the speed at 60 rpm:   // initialize the serial port:   // step one revolution in one direction:   Serial.println(“clockwise”);   myStepper.step(stepsPerRevolution);   // step one revolution in the other direction:   Serial.println(“counterclockwise”);   myStepper.step(-stepsPerRevolution);

Источник: https://Voltiq.ru/l298-driver-with-stepper-motor-and-l298/

Шаговый двигатель 28BYJ-48 с драйвером ULN2003 и Arduino UNO | РОБОТОША

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

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

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

28BYJ-48 — это маленький, дешевый, 5 вольтовый шаговый моторчик с редуктором. Передаточное число редуктора у него примерно 64:1, что позволяет получить вполне достойный крутящий момент для моторчика такого размера и скорость порядка 15 об/мин.

С некоторыми программными хитростями для постепенного ускорения можно достичь более 25 об/мин. Эти маленькие шаговики вместе с небольшой платкой-драйвером на базе м/сх ULN2003 для использования совместно c Arduino UNO можно приобрести здесь за сущие копейки.

Достаточно выгодное приобретение, если сравнивать с редукторным двигателем постоянного тока, контроллером двигателя и колесным энкодером!

Размеры шагового двигателя 28BYJ-48

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

Тип мотора Униполярный шаговый двигатель
Число фаз 4
Подключение 5-выводов (к контроллеру двигателя)
Рабочее напряжение 5-12 вольт
Частота 100 Гц
Сопротивление по постоянному току 50 Ом ± 7%(25°C)
Частота под нагрузкой > 600 Гц
Частота на холостом ходу > 1000 Гц
Крутящий момент > 34.3 мН*м (120 Гц)
Момент самопозиционирования > 34.3 мН*м
Стопорящий момент 600-1200 г*см
Тяга 300 г*см
Сопротивление изоляции > 10 МОм (500 В)
Класс изоляции A
Шум < 35 дБ (120 Гц, без нагрузки, 10 см)
Режим шага Рекомендован полушаговый режим (8-шаговая управляющая сигнальная последовательность)
Угол шага Полушаговый режим: 8-шаговая управляющая сигнальная последовательность (рекомендовано). 5.625 градусов на шаг, 64 шага на оборот внутреннего вала мотора. Режим полного шага: 4-шаговая управляющая сигнальная последовательность. 11.25º/шаг, 32 шага на оборот внутреннего вала двигателя.
Передаточное отношение редуктора Производителем заявлено 64:1. Однако, некоторые пытливые товарищи с форума Arduino разобрали редуктор и определили, что, в действительности передаточное число равно 63.68395:1. Это означает, что в рекомендованном полушаговом режиме мы имеем: 64 шага на оборот мотора помноженное на передаточное число 63.684 ≈ 4076 шагов на полный оборот.
Подключение к контроллеру ULN2003 A (синий), B (розовый), C (желтый), D (Оранжевый), E (красный, средний вывод обмоток)
Вес 30г

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

https://www.youtube.com/watch?v=QDo3Xf8UMOM

Подключение выводов шагового двигателя 28BYJ-48

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

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

С 4 обмотками это дает 8 различных сигналов, как показано в таблице ниже.

Провод→ Направление вращения по часовой стрелке (1-2 фазы)
1 2 3 4 5 6 7 8
4 Оранжевый
3 Желтый
2 Розовый
1 Синий

Подключение драйвера шагового двигателя ULN2003 к Arduino Uno

Плата драйвера шагового двигателя на базе микросхемы ULN2003, представляющей собой массив транзисторов, включенных по схеме Дарлингтона, позволяет достаточно просто управлять мотором 28BYJ-48, используя микроконтроллер.

В нашем случае, в качестве управляющего микроконтроллера мы выберем плату Arduino Uno с микроконтроллером ATmega328.

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

Плата управления на базе ULN2003

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

Замечу, что питать мотор от 5 В Arduino не рекомендуется, так как мотор может потреблять ток, превышающий возможности Arduino. Лучше использовать внешний 5-12 В источник питания, выдающий ток не менее 1 А.

Четыре управляющих входа помечены как IN1-IN4 и должны быть подключены к четырем цифровым выводам Arduino.

Подключите выводы IN1, IN2, IN3 и IN4 к пинам 3, 4, 5 и 6 Arduino Uno. Положительный контакт источника питания необходимо подключить к выводу, помеченному как «+», а землю источника питания к выводу «-» на плате контроллера. Если для питания Arduino и мотора используются различные источники питания, то необходимо объединить выводы «земля» источников вместе.

Библиотека AccelStepper

Стандартная библиотека Stepper, идущая с Arduino IDE, поддерживает только полношаговый метод управления и имеет сильно ограниченные возможности. Использовать ее можно только в очень простых приложениях, в которых используется только один мотор. Применение библиотеки Stepper для управления 28BYJ-48 является не самым эффективным решением.

Есть решение получше — это использовать библиотеку Accel Stepper. Эта библиотека очень хорошо работает совместно с шаговым мотором 28BYJ-48 (мотор почти не греется), а также поддерживает ускорение, что позволяет заставить мотор вращаться быстрее. Библиотека использует код, не блокирующий шаги и включает немало других приятных особенностей.

  • Объектно-ориентированный интерфейс для 2, 3 или 4-выводных шаговых двигателей
  • Поддержка ускорения и замедления
  • Поддержка одновременно нескольких шаговых двигателей с независимой работой для каждого мотора
  • Функции API не используют функцию delay и не прерывают работу
  • Поддержка выбора функции для реализации шага позволяет работать совместно с библиотекой AFMotor
  • Поддержка контроллеров шаговых двигателей таких как Sparkfun EasyDriver (основанных на микросхеме драйвера 3967)
  • Поддержка низких скоростей
  • Расширяемый API
  • Поддержка подклассов

Как установить библиотеку в Arduino IDE.

Представленный ниже код медленно ускоряет мотор 28BYJ-28 в одном направлении, затем замедляется до остановки и вновь ускоряется, но уже вращаясь в противоположном направлении.

123456789101112131415161718192021222324252627 #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-48AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);void setup(){  stepper1.setMaxSpeed(1000.0);  stepper1.setAcceleration(100.0);  stepper1.setSpeed(200);  stepper1.moveTo(20000);}void loop(){  // Изменяем направление, если шаговик достигает заданного положения  if(stepper1.distanceToGo()==0)    stepper1.moveTo(-stepper1.currentPosition());  stepper1.run();}

Источник: http://robotosha.ru/arduino/stepper-motor-28byj-uln2003-arduino.html

Управление двигателями и сервоприводами с помощью Ардуино

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

Самый простой и популярный вариант – это двигатель постоянного тока. Он завоевал любовь любителей своей доступностью, простотой регулировки оборотов.

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

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

Двигатель постоянного тока

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

Ток в обмотку подается через щеточный узел. Щетки сделаны из графита, иногда встречаются медные скользящие контакты. Щетки скользят по ламелям расположенным на одном из концов ротора. Если не вдаваться в подробности, то от тока обмотки якоря зависит его скорость вращения.

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

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

При подключении к питающей сети двигатель постоянного тока начинает вращаться с номинальной скоростью. Чтобы понизить частоту вращения нужно ограничить ток. Для этого вводят балластные сопротивления, но это снижает КПД установки в целом и появляется лишний источник тепла. Для более эффективного регулирования напряжения и тока используют другой метод – ШИМ-регулирование.

Читайте также:  Ардуино левитация горшка с карликовым деревом

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

То есть период делится на две части:

1. Время импульса.

2. Время паузы.

Отношение времени импульса к общему времени периода называют коэффициентом заполнения:

Кз=tи/tпер

обратная величина называется “скважность”:

D=1/Kз=tпер/tи

Для описания режима работы ШИМ-контроллера используют оба понятия: и коэффициент заполнения, и скважность.

Ток потребления двигателя зависит от его мощности. Число оборотов, как было сказано, зависит от тока. Ток можно регулировать, изменяя величину приложенного к обмоткам напряжения.

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

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

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

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

Подключаем к ардуино

У меня лежал маленький моторчик, кажется от кассетного плеера, значит, его номинальное напряжение будет ниже 5 вольт, тогда выходного питания ардуины будет достаточно. Я запитаю его от пина «5V», т.е. от выхода линейного стабилизатора расположенного на плате. По схеме, которую вы видите ниже.

Я не знаю ток этого двигателя, поэтому я его подключил к питания, а между двигателем и пином питания установил полевой транзистор, на затвор которого был подан сигнал с ШИМ-выхода, можно использовать любой из доступных.

Для регулировки оборотов я добавил переменный резистор в схему, подключив его к аналоговому входу А0. Для быстрого соединения я использовал беспаечную макетную плату, как её еще называют «breadboard».

В обвязку транзистора я установил токоограничивающий резистор (для снижения тока заряда затворной ёмкости, это убережет порт от сгорания и питание микроконтроллера от просадок и его зависания) на 240 Ом, и притянул его к земле резистором на 12 кОм, это нужно делать, чтобы он стабильнее работал и быстрее разряжалась затворная ёмкость.

Подробно о полевых транзисторах описано в статье на нашем сайте. Я использовал мощный, распространённый и не слишком дорогой mosfet с n-каналом и встроенным обратным диодом IRF840.

Вот так выглядит мой лабораторный стенд в сборе:

Функция ШИМ-регулирования вызывается при записи в соответствующий выход (3, 5, 6, 9, 10, 11) значения от 0 до 255 командой AnalogWrite(pin, значение). Логика её работы изображена на графиках ниже.

Такой сигнал подаётся на затвор транзистора:

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

int sensorPin = A0; // вход с потенциометра

int motorPin = 3; // выход ШИМ на затвор тр-ра

void setup() {

pinMode(motorPin, OUTPUT);

}

void loop() {

analogWrite(motorPin, map (analogRead(sensorPin), 0, 1023, 0, 256));

}

В функции analogWrite я присваиваю значение на ШИМ-выход, через команду map, её использование позволяет убрать несколько строчек кода и одну переменную.

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

При этом вместо 5В на нагрузку можно подавать любое напряжение, например 12В, не забудьте соединить минус питания с контактом, например 12В, не забудьте соединить минус питания с контактом GND на плате микроконтроллера.

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

Сервоприводы

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

Сервопривод, это двигатель управляемый отрицательной обратной связью.

Обычно с сервопривода выходит три провода:

  • Плюс питания.
  • Минус питания.
  • Управляющий сигнал.

Сервопривод состоит из:

  • Электродвигателя постоянного тока (или бесколлекторного двигателя);
  • Платы управления;
  • Датчика положения (энкодера у сервоприводов с углом поворота 360° или потенциометра у серв с углом поворота 180°);
  • Понижающего редуктора (понижает скорость вращения двигателя, и повышает момент на валу привода).

Блок управления сравнивает сигнал на встроенном датчике положения и сигнал, пришедший по управляющему проводу, если они различаются, то происходит поворот на угол, при котором разница между сигнала нивелируется.

Основные характеристики сервоприводов:

  • Скорость поворота (время, за которое вал поворачивается на угол 60°);
  • Крутящий момент (кг/см, т.е. сколько килограмм может выдерживать двигатель на рычаге в 1 см от вала);
  • Напряжение питания;
  • Потребляемый ток;
  • По способу управления (аналоговый или цифровой, существенной разницы нет, но цифровой более быстродействующий и стабильный).

Обычно период сигнала равен 20 мс, а длительность управляющего импульса:

  • 544 мкс – соответствует 0°;
  • 2400 мкс – соответствует углу 180°.

В редких случаях длина импульсов может отличаться, например 760 и 1520 мкс соответственно, эту информацию можно уточнить в технической документации на привод. Одним из популярнейших сервоприводов для хобби является Tower Pro SG90 и подобные модели. Стоит недорого – порядка 4 долларов.

Он удерживает на валу 1.8 кг/см, и в комплекте с ним идут крепежные винты и рычаги со шлицами под вал. На деле этот малыш довольно сильный, и в движении одним пальцем его остановить весьма проблематично – начинает выпадать из пальцев сам привод – такая его сила.

Управление сервоприводом и Ардуино

Как уже было сказано, управление осуществляется изменением длительности импульса, но не стоит путать этот метод с ШИМ(PWM), его правильное назвать PDM (Pulse Duration Modulation). Незначительные отклонения по частоте сигнала (20 мс – длительность, частота 50 Гц) особой роли не играют. Но не стоит отклоняться от частоты более чем на 10 Гц, двигатель может работать рывками или сгореть.

Схема подключение к ардуино довольно проста, можно и запитать привод от 5v –пина, но не желательно. Дело в том, что при старте происходит небольшой скачок тока, это может вызвать просадку по питанию и ложные состояния выходов микроконтроллера. Хотя 1 маленький привод (типа SG90) можно, но не более.

Для управления такими сервоприводами с ардуино в вашем распоряжении есть встроенная в IDE библиотека Servo, у неё небольшой набор команд:

  • attach() — добавить переменную к пину. Пример: названиеПривода.attach(9) – к 9 пину подключаем сервопривод. Если вашему приводу нужны нестандартные длины управляющих импульсов (544 и 2400 мкс), то их можно задать через запятую после номера пина, например: servo.attach(pin, min угол (мкс), max угол в МКС));
  • write() — задает угол поворота вала в градусах;
  • writeMicroseconds() — задает угол, через длину импульса в микросекундах;
  • read() — определяет текущее положение вала;
  • attached() — Проверяет, задан ли пин с подключенным сервоприводом;
  • detach() — отмена команды attach.

Эта библиотека позволяет управлять 12-ю сервоприводами с плат UNO, Nano и подобных (mega368 и 168) при этом исчезает возможность использовать ШИМ на 9 и 10 пине. Если у вас MEGA – вы можете управлять 48-ю сервами, но на пинах 11 и 12 исчезнет ШИМ, если вы используете до 12 серв, то функционирование ШИМ остается полноценным на всех контактах.

Если вы подключили эту библиотеку – вы не сможете работать с 433 МГц приёмниками/передатчиками. Для этого есть библиотека Servo2, которая в остальном идентична.

Вот пример кода, который я использовал для экспериментов с сервоприводом, он есть в стандартном наборе примеров:

#include // подключаем библиотеку

Servo myservo; // объявили имя переменной для сервопривода myservo

int potpin = 0; // пин для подключения задающего потенциометра

int val; // переменная для сохранения результатов чтения сигнала с потенциометра

void setup() {

myservo.attach(9); // устанавливаем 9 пин, как управляющий выход для сервы

}

void loop() {

val = analogRead(potpin); // результаты чтения потенциометра сохр в пер. val, они будут в диапазоне от 0 до 1023

val = map(val, 0, 1023, 0, 180); // переводим диапазон измерений с аналогового входа 0-1023

// в диапазон заданий для сервы 0-180 градусов

myservo.write(val); // передаем преобр. сигнал с пот-ра на упр. вход сервы

delay(15); // задержка нужна для стабильной работы системы

Заключение

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

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

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

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

Алексей Бартош

Источник: http://elektruk.elektruk.info/microcontroller/1390-upravlenie-dvigatelyami-i-servoprivodami-arduino.html

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

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

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

В следующий момент, подаем на начало обмотки минус, на конец плюс. Условимся, что по правилу правой руки (буравчика

Источник: http://avr-start.ru/?p=2392

Ссылка на основную публикацию
Adblock
detector