В этой статье мы поговорим о шаговых двигателях в проектах Ардуино на примере очень популярной модели 28BYJ-48. Так же как и сервоприводы, шаговые моторы являются крайне важным элементом автоматизированных систем и робототехники.
Их можно найти во многих устройствах рядом: от CD-привода до 3D-принтера или робота-манипулятора.
В этой статье вы найдете описание схемы работы шаговых двигателей, пример подключения к Arduino с помощью драйверов на базе ULN2003 и примеры скетчей с использованием стандартной библиотеки Stepper.
Шаговый двигатель – принцип работы
Схема шагового двигателя
Шаговый двигатель – это мотор, перемещающий свой вал в зависимости от заданных в программе микроконтроллера шагов и направления. Подобные устройства чаще всего используются в робототехнике, принтерах, манипуляторах, различных станках и прочих электронных приборах. Большим преимуществом шаговых двигателей над двигателями постоянного вращения является обеспечение точного углового позиционирования ротора. Также в шаговых двигателях имеется возможность быстрого старта, остановки, реверса.
Шаговый двигатель обеспечивает вращения ротора на заданный угол при соответствующем управляющем сигнале. Благодаря этому можно контролировать положение узлов механизмов и выходить в заданную позицию.
Работа двигателя осуществляется следующим образом – в центральном вале имеется ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться.
Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.
Упрощенные анимированные схемы работы шагового двигателя
Основные виды шаговых моторов:
- Двигатели с переменными магнитами (применяются довольно редко);
- Двигатели с постоянными магнитами;
- Гибридные двигатели (более сложные в изготовлении, стоят дороже, но являются самым распространенным видом шаговых двигателей).
Где купить шаговый двигатель
Самые простые двигатели Варианты на сайте AliExpress:
Драйвер для управления шаговым двигателем
Драйвер – это устройство, которое связывает контроллер и шаговый двигатель. Для управления биполярным шаговым двигателем чаще всего используется драйверы L298N и ULN2003.
Работа двигателя в биполярном режиме имеет несколько преимуществ:
- Увеличение крутящего момента на 40% по сравнению с униполярными двигателями;
- Возможность применения двигателей с любой конфигурацией фазной обмотки.
Но существенным минусов в биполярном режиме является сложность самого драйвера.
Драйвер униполярного привода требует всего 4 транзисторных ключа, для обеспечения работы драйвера биполярного привода требуется более сложная схема.
С каждой обмоткой отдельно нужно проводить различные действия – подключение к источнику питания, отключение. Для такой коммутации используется схема-мост с четырьмя ключами.
Драйвер шагового двигателя на базе L298N
Этот мостовой драйвер управляет двигателем с током до 2 А и питанием до 46В. Модуль на основе драйвера L298N состоит из микросхемы L298N, системы охлаждения, клеммных колодок, разъемов для подключения сигналов, стабилизатора напряжения и защитных диодов.
Драйвер двигателя L298N
Драйвер шагового двигателя ULN2003
Описание драйвера шаговых двигателей UNL2003
Шаговые двигателями с модулями драйверов на базе 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В. Также для двигателя желательно использовать отдельный источник питания, чтобы не перегрелась плата Ардуино.
Подключение шагового двигателя к Ардуино
Принципиальная схема подключения.
Принципиальная схема подключения шагового двигателя
Еще одна схема подключения биполярного шагового двигателя 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, в которой задаются все параметры для шагового двигателя – количество шагов, скорость, поворот.
#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.
Управление Ардуино шаговым двигателем от принтера
В этом уроке вы узнаете, как управлять с помощью Ардуино шаговым двигателем, который был взят от старого принтера.
Шаг 1. Что такое шаговый двигатель?
Шаговый двигатель состоит из двух основных частей: ротора и статора.
Ротор является частью двигателя, который фактически вращается и обеспечивает работу. Статор представляет собой неподвижную часть двигателя, в котором размещается ротор. В шаговом двигателе ротор представляет собой постоянный магнит.
Статор состоит из нескольких катушек, которые действуют как электромагниты, когда через них проходит электрический ток. Электромагнитная катушка заставит ротор выровняться вместе с ним при зарядке.
Ротор приводится в движение путем чередования тока на катушках, протекающий через них.
Шаговые двигатели имеют ряд преимуществ. Они дешевы и просты в использовании. Когда ток не поступает в двигатель, ничего не происходит. Шаговые двигатели также могут вращаться без ограничений и изменять направление в зависимости от установленной полярности.
Шаг 2: Список деталей
Необходимые детали для проекта Ардуино шагового двигателя:
- Шаговый двигатель (этот двигатель был взят от старого принтера)
- Arduino
- Изолированный медный провод
- Проволочные резаки / стрипперы
- Регулятор тока
- транзистор
- драйвер двигателя H-Bridge 1A
- моторный шилд
Дополнительные детали:
- паяльник
- припой
- инструменты
- безопасные очки
Шаг 3: Присоединяем провода
Большинство шаговых двигателей имеют четыре провода, поэтому вам нужно будет обрезать четыре медных провода (обратите внимание, что цвет не коррелирует с чем-либо конкретным (обычно есть правило, что черный — это земля, но не сейчас). Различные цвета были использованы только для облегчения понимания. Эти выводы будут использоваться для управления, какая катушка в настоящее время активна в двигателе. Для этого проекта Ардуино шаговый двигатель был взят от старого принтера, поэтому пайка проводов была самым простым вариантом для этого проекта. В любом случае, вы можете безопасно установить соединение (пайка, штекер, клипы).
Шаг 4: Эскиз/скетч Arduino
Arduino уже имеет встроенную библиотеку для шаговых двигателей. Просто перейдите в меню:
Файл → Примеры → Шаговые → stepper_oneRevolution
File → Examples → Stepper → stepper_oneRevolution
Затем вам нужно изменить переменную stepsPerRevolution, чтобы она соответствовала вашему конкретному двигателю. После просмотра номера деталей двигателей в Интернете наш конкретный двигатель был рассчитан на 48 шагов для завершения одного оборота.
То, что на самом деле делает библиотека Stepper — чередует сигналы HIGH и LOW для каждой катушки, как показано в анимации выше.
Шаг 5: Что такое мост H-bridge?
H-Bridge — схема, состоящая из 4 переключателей, которые могут безопасно управлять двигателем постоянного тока или шаговым двигателем. Эти переключатели могут быть реле или (чаще всего) транзисторами. Транзистор представляет собой твердотельный переключатель, который можно закрыть, посылая небольшой ток (сигнал) на один из его контактов.
В отличие от одного транзистора, который позволяет вам контролировать скорость двигателя, H-мосты позволяют вам также контролировать направление вращения двигателя. Он делает это, открывая различные переключатели (транзисторы), чтобы ток тек в разных направлениях и, таким образом, изменяя полярность на двигателе.
Важно! Переключатели 1 и 2 или 3 и 4 никогда не должны быть закрыты вместе. Это приведет к короткому замыканию и возможному повреждению устройства.
H-Bridges может помочь вам предотвратить перегорания вашего Arduino моторами, которыми вы пользуетесь. Двигатели являются индукторами, а это означает, что они хранят электрическую энергию в магнитных полях.
Когда ток больше не посылается двигателям, магнитная энергия возвращается в электрическую энергию и может повредить компоненты. H-Bridge помогает изолировать ваш Arduino лучше всего.
Вы не должны подключать двигатель непосредственно к Arduino.
Хотя H-Bridges можно легко сделать самому многие предпочитают покупать H-Bridge (например, чип L293NE / SN754410) из-за удобства. Это чип, который мы будем использовать в этом уроке. Физические номера контактов и их назначение ниже:
- Пин 1 (1, 2EN) → Мотор 1 Включен/Выключен (HIGH/LOW)
- Пин 2 (1A) → Мотор 1 логический выход 1
- Пин 3 (1Y) → Мотор 1 терминал 1
- Пин 4 → Земля
- Пин 5 → Земля
- Пин 6 (2Y) → Мотор 1 терминал 2
- Пин 7 (2A) → Мотор 1 логический выход 2
- Пин 8 (VCC2) → Питание для двигателей
- Пин 9 → Мотор 2 Включен/Выключен (HIGH/LOW)
- Пин 10 → Мотор 2 логический выход 1
- Пин 11 → Мотор 2 терминал 1
- Пин 12 → Земля
- Пин 13 → Земля
- Пин 14 → Мотор 2 терминал 2
- Пин 15 → Мотор 2 логический выход 2
- Пин 16 (VCC1) → Питание для H Bridge (5В)
Шаг 6: Схема соединения
- Схема соединения нашего проекта Ардуино шагового двигателя ниже.
Для шагового двигателя Ардуино 4 вывода на H-Bridge должны подключаться к 4 выводам двигателя.
Затем 4 логических вывода подключаются к Arduino (8, 9, 10 и 11). Как показано на диаграмме выше, для питания двигателей можно подключить внешний источник питания.
Чип может обрабатывать внешний источник питания от 4,5 до 36 В (мы выбрали батарею 9В).
Шаг 7: Загрузка кода и тестирование
Загрузите свой код в Ардуино. Если вы запустите свой код и все сработает так, как ожидалось, это потрясающе! Если провода вставлены в неправильные контакты, двигатель просто вибрирует, а не полностью вращается. Играйте со скоростью и направлением двигателя, как сочтете нужным.
На этом всё, теперь у вас должен быть рабочий шаговый двигатель Arduino. То, что вы сделаете дальше, зависит только от вас.
Наверх ↑
← Мигаем светодиодом с помощью Ардуино эмулятора Tinkercad → Мини-ноутбук на Raspberry своими руками
Шаговый двигатель и Arduino — основы
- Шаговые двигатели представляют из себя нечто среднее между обычным двигателем постоянного тока и серводвигателем.
- У них есть возможность точного позиционирования ротора в заданном положении, вращаться в обе стороны, по одному «шагу», но при этом могут и вращаться с заданной частотой.
- В этом примере мы рассмотрим управление шаговым двигателем с использованием Arduino и чипа L293D, который можно использовать и для управления двигателями постоянного тока.
Необходимые элементы
- Для данного проекта нам понадобятся:
- 1 шаговый двигатель с напряжением питания 5 вольт
- 1 чип L293D
- 1 монтажная плата
- 1 Arduino Uno R3 (или другая плата от Arduino)
- Набор коннекторов
Схема подключения шагового двигателя
У нашего шагового двигателя 5 выходов. Мы будем использовать обе коннекторы по обе стороны L293D. Подключать придется все это долго достаточно мучительно.
Схема подключения приведена на рисунке выше. Обратите внимание, что один из выходов шагового двигателя никуда не подключен.
Скетч Arduino
В программе используется серийный монитор. После запуска, откройте его и укажите количество «шагов». Для начала попробуйте значение близкое к 500. В результате ваш двигатель должен повернуться примерно на 360 градусов. Введите -500 и ротор отработает поворот в обратном направлении.
- /*
- Пример — шаговый двигатель
- */
- #include
- int in1Pin = 12;
- int in2Pin = 11;
- int in3Pin = 10;
- int in4Pin = 9;
- Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);
- void setup()
- {
- pinMode(in1Pin, OUTPUT);
- pinMode(in2Pin, OUTPUT);
- pinMode(in3Pin, OUTPUT);
- pinMode(in4Pin, OUTPUT);
- // эта строка для Arduino Leonardo. Генерируется задержка в серийном мониторе
- // пока он открыт
- while (!Serial);
- Serial.begin(9600);
- motor.setSpeed(20);
- }
- void loop()
- {
- if (Serial.available())
- {
- int steps = Serial.parseInt();
- motor.step(steps);
- }
- }
Как вы уже могли догадаться, существует специальная библиотека в Arduino IDE, которая поддерживает работу с шаговыми двигателями. Благодаря этому использование двигателей становится предельно простым.
После подключения библиотеки 'Stepper' инициализируются управляющие пины от 'in1' до 'in4'.
Для объявления данных пинов с использованием библиотеки шаговых двигателей, используется следующая команда:
Stepper motor(768, in1Pin, in2Pin, in3Pin, in4Pin);
Первый параметр — количество 'шагов', которые сделает шаговый двигатель для одного полного оборота. Для точного позиционирования, можно вращать ротор двигателя с дискретностью в один шаг.
После этого налаживается связь по серийному протоколу и в результате плата Arduino может получать команды из окна серийного монитора в Arduino IDE.
Следующая команда устанавливает скорость вращения ротора шагового двигателя:
Функция 'loop' очень простая. Функция ожидает, пока придет команда из серийного монитора и преобразовывает текст в виде числового значения в переменную типа int с помощью 'parseInt'. После этого подается сигнал на двигатель для его вращения на указанное количество шагов.
Полезная информация о шаговых двигателях
По сути шаговый двигатель представляет из себя зубчатое колесо, которое взаимодействует с электромагнитной катушкой и вращается на определенный шаг.
Питая катушки в определенном порядке, двигатель начинает вращать ротор. Количество шагов, которое имеет двигатель на 360 градусов поворота фактически равняется количеству зубцов.
Двигатель, который мы используем имеет 48 шагов, но в нем также установлен редуктор 1:16. В результате мы получаем 16×48=768 шагов.
В данном примере мы не используем красный кабель для общего подключения. Используя этот кабель вы можете добиться питания левой или правой части каждой отдельной катушки и реализовать эффект реверса потока электричества не меняя направление с помощью электроцепи.
Так как мы используем чип L293D, который обеспечивает реверс тока в цепи, общее подключение нам не нужно. Мы можем спокойно запитывать полностью каждую катушку.
С чем еще можно поэкспериментировать
Попробуйте изменить аргумент команды, которая устанавливает скорость вращения шагового двигателя:
Установите, например, меньшее значение (5), загрузите скетч и обратите внимание, что шаговик начал вращаться медленнее.
Теперь попробуйте найти максимальную скорость шаговика, увеличивая скорость на 20. В результате после некоторого значения шаговый двигатель перестанет двигаться из-за того, что он просто не успевает считывать импульсы, генерирующие шаги.
Попробуйте отключить оранжевый и розовый провода шагового двигателя. Он должен все равно вращаться, но вы заметите, что он стал слабее из-за того, что не работают обе катушки, толкающие ротор.
Ардуино: установка библиотек в Arduino IDE
Библиотеки для Arduino IDE ► облегчают написание скетчей. Узнайте, что такое библиотека в Arduino, как самому создать, установить и добавить библиотеку.
Установка и подключение библиотеки Ардуино значительно облегчает работу с модулями и датчиками, так как одной командой можно заменить несколько строк кода и не требуется несколько часов разбираться с datasheet определенного модуля. Рассмотрим, что такое библиотека в Arduino, как установить и добавить библиотеку Arduino, а также расскажем как создать самостоятельно библиотеку для Arduino IDE.
Что такое библиотека для Arduino
Итак, файлы библиотек значительно облегчают программирование платы Arduino Uno для любителей что-то сделать своими руками, но не сильно разбирающихcя в языке программирования C++. Библиотеки — это несколько файлов (минимум два), и у каждого файла есть свое назначение. Также в архиве часто можно найти примеры использования команд в скетчах, чтобы избежать ошибки при компиляции.
Установка библиотек на компьютер для платы Arduino UNO
Библиотека – это программный код для скетча, хранящийся во внешнем файле, которые подключается к проекту.
Все библиотеки Arduino можно разделить на стандартные — эти библиотеки не требуется устанавливать, они изначально встроены в среду Arduino IDE.
Дополнительные библиотеки разрабатывает производитель датчиков и модулей, их требуется скачивать и устанавливать. В Интернете размещено сотни готовых библиотек для модулей, а можно написать библиотеку самостоятельно.
Arduino IDE: установка библиотеки Arduino
Перед тем как использовать методы и функции из библиотеки, ее следует скачать и установить на компьютере. Добавить библиотеку можно через среду Arduino IDE или вручную, распаковав архив с файлами в определенное место.
Кроме примеров со скетчами в архиве должны находиться следующие файлы: example.h — заголовочный файл, example.cpp — файл с кодом, keywords.txt — выделение команд цветом.
Добавление библиотек через Arduino IDE:
Добавление библиотеки в компьютер через Arduino IDE
Если вы скачали библиотеку для своего проекта, упакованную в ZIP-архив, установку можно провести через среду Arduino IDE.
Для установки следует перейти в меню:
Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и выбрать ZIP-архив на компьютере. Файл будет автоматически распакован и помещен в директорию с библиотеками.
После установки библиотека будет доступна в меню Файл → Примеры.
Добавление библиотек вручную на компьютер:
Сейчас рассмотрим, как установить библиотеку Ардуино вручную. Для установки требуется распаковать папку с файлами библиотеки и переместить ее в раздел на ПК Мои документы → Arduino → libraries.
Перед тем, как подключить библиотеку в скетче, необходимо закрыть все окна Arduino IDE. После запуска среды программирования функции и команды из установленной библиотеки станут доступны в скетче.
Arduino: подключение библиотеки в скетче
Перед тем как использовать команды и функции в программе, необходимо подключить в скетче нужную библиотеку. Для этого используется директива #include, после которой в кавычках » » или в скобках < > указывается имя библиотеки с расширением. Например, для того, чтобы в скетче подключить библиотеку для ультразвукового датчика HC-SR04 следует добавить строчку директивы #include .
Пример добавления нескольких библиотек для модулей Ардуино
Библиотеки добавляют в начале скетча, до процедуры void setup (). Если в программе функция будет использована до того, как подключена библиотека в скетче, то это вызовет ошибку при компиляции. На нашем сайте Ардуино. Уроки для начинающих при использовании датчиков и модулей для микроконтроллеров приведены подробные инструкции по использованию библиотек и даны ссылки для скачивания файлов.
Работа с библиотеками для Arduino IDE
Каталог библиотек — сборник популярных библиотек Arduino IDE в одном месте;
Создание библиотеки — пошаговая инструкция по созданию своей библиотеки.
(2 votes, average: 5,00
Как управлять шаговым двигателем через Arduino: схема подключения
Шаговый двигатель — один из основных компонентов роботехники, ЧПУ-станко, 3D-принетеров и других автоматических систем. В этой статье рассмотрим что это такое, как его подключить и как управлять шаговым двигателем с помощью Arduino.
На производстве и в быту при автоматической работе каких-либо механизмов часто требуется точное позиционирование рабочего органа или оснастки. Для этого могут использоваться серво приводы и шаговые двигатели.
Эти два вида электропривода значительно отличаются, как по конструкции, так и по особенности работы и управления.
В этой статье мы затронем тему работы с шаговыми двигателями с помощью Arduino и модуля для управления электродвигателями на базе ИМС ULN2003.
Что такое шаговый двигатель?
Прежде чем перейти к статье, давайте сразу договоримся, что статья не направлена на специалистов, а её цель – донести любознательным любителям техники и технологий о таком устройстве, как шаговый двигатель и об основах работы с ними. Поэтому умников и критиков, жаждущих поговорить о великом многообразии управляемого и регулируемого электропривода, прошу идти общаться на тематические ресурсы по ЧПУ-станкам и 3D-принтерам.
Итак, для начала сформулируем определение. Согласно Википедии: «Шаговый электродвигатель — синхронный бесщёточный электродвигатель с несколькими обмотками, в котором ток, подаваемый в одну из обмоток статора, вызывает фиксацию ротора.
Последовательная активация обмоток двигателя вызывает дискретные угловые перемещения (шаги) ротора».
Формулировка достаточно понятна, но её последнее предложение может вызвать некоторое недопонимание.
Поэтому я предлагаю провести небольшое сравнение.
Всем известно что ротор «обычного» электродвигателя, будь то асинхронного, синхронного, коллекторного или любого другого будет вращаться до тех пор, пока на него подают напряжение питания, и после отключения питания он будет вращаться еще какое-то время по инерции, если же не используются какие-либо средства для его торможения.
Ротор такого двигателя вращается просто вокруг своей оси без каких-либо ограничений, на 360 градусов, и остановится он в любом месте. Зафиксировать его положением можно только механически (тормозом). По этой причине не получится добиться точного позиционирования исполнительных механизмов, что требуется в робототехнике, ЧПУ-станках и другом автоматизированном оборудовании.
Но шаговые двигатели разработаны для применения в механизмах, где детали поворачиваются точно на требуемый угол.
В приведенном выше определении было сказано «…вызывает дискретные угловые перемещения (шаги) ротора…» — это значит, что ротор шагового двигателя не вращается в обычном понимании, а поворачивается на какой-то определенный, «дискретный» угол. Этот угол называется шагом, отсюда и название «шаговый двигатель».
Мне нравится еще одно название этих устройств — «двигатель с конечным числом положений ротора».
Питание такого двигателя невозможно без системы управления, или как его еще называют, драйвера — он подаёт импульсы в нужные обмотки, чтобы повернуть ротор на нужный угол.
Это наглядно иллюстрирует приведенная ниже анимация.
Кроме того, что можно поворачивать двигатель на определенный угол и фиксировать его в этом положении, делать это всё можно без схемы обратной связи (датчиков положения и прочего).
Рассматривать типы шаговых двигателей в пределах этой статьи мы не будем, лишь кратко перечислим, какими они бывают. По конструкции:
1. Реактивные.
2. С постоянными магнитами.
3. Гибридные.
По способу питания:
- Униполярные (однополярные — ток пропускают через обмотки только в одну сторону).
- Биполярные (ток пропускают через обмотки в обе стороны). Здесь драйвер должен подавать напряжение различной полярности, что несколько усложняет схемотехнику. При тех же размерах развивают бОльшую мощность по сравнению с униполярными.
В униполярном двигателе зачастую 5 проводов — 1 общий, от середины каждой из двух обмоток, и 4 от концов обмоток. Иногда говорят «4 обмотки» — это также правильно, поскольку фактически мы получаем 4 обмотки соединенных в общей точки.
Униполярный шаговый двигатель
Также ШД могут отличаться и по количеству проводов, это зависит от того, как соединены обмотки и какое питание предполагается, некоторые варианты вы видите в таблице ниже.
Варианты схем соединения обмоток в шаговых двигателях
Управление шаговым двигателем
Различают два способа управления шаговым двигателем:
1. Полношаговое. Одновременно включается только пара обмоток (без перекрытия с другими). Достигается максимальный момент на валу, но точность установления угла меньше, чем в других способах.
2. Полушаговое. В этом случае увеличивается количество шагов, соответственно повышается точность установки положения вала. На каждый первый шаг включается одна обмотка, на каждый второй шагами (полушаг) – пара обмоток. Но когда включена одна обмотка момент на валу снижается вдвое.
На анимациях ниже наглядно продемонстрировано
Полношаговое управление
В некоторых источниках отдельно обозначают микрошаговое управление. Используется, когда необходимо максимальное количество шагов и точность управления. По способу управления оно похоже на полушаговый режим, между шагами включаются две обмотки, а отличие в том, что токи в них распределяются не равномерно. Главный недостаток такого подхода — усложняется коммутация (система управления).
Перейдем к практике
Теория всегда запутана и непонятна, чтобы разобраться, что и как, нужно брать и делать. Поэтому перейдем к практической стороне вопроса.
Итак, из рассмотренного ранее набора у меня есть:
- Arduino UNO;
- Модуль ULN2003;
- Шаговый двигатель 28BYJ-48 5V DC;
- Куча перемычек, бредборд и источник питания для него.
Модуль ULN2003 – предназначен для управления униполярным шаговым двигателем. Схематически это транзисторная сборка Дарлингтона с 7-ю каналами и, в принципе, ею можно управлять чем угодно. Технические характеристики приведены ниже:
- Номинальный ток коллектора одного ключа — 0,5А;
- Максимальное напряжение на выходе до 50 В;
- Защитные диоды на выходах;
- Вход адаптирован к разным видам логики;
- Возможность применения для управления реле.
В модуле, кроме самой микросхемы ULN2003, есть светодиоды для индикации напряжения на выходе, колодка для подключения и перемычка для отключения питания.
Схема модуля на ULN2003, в левом верхнем углу принципиальная схема одного канала (таких в ней 7)
Двигатель 28BYJ-48 5V DC подключается штатным разъёмом к белой колодке на плате. У него 5 проводов — красный общий, и 4 от обмоток.
Схема фаз двигателя 28BYJ-48 5V DC
Основные характеристики:
- 32 шага за один оборот ротора;
- Встроенный редуктор с передаточным отношением 63.68395:1, благодаря этому вал делает 1 оборот за 2048 шагов, при полношаговом режиме и 4096 при полушаговом;
- Cкорость вращения: номинальная 15 об/мин, максимальная 25 об/мин;
- Напряжение питания 5 В;
- Ток одной обмотки 160 мА;
- Полный ток: в 4-шаговом режиме 320 мА, при быстром вращении 200 мА.
- Коэффициент редукции: 1/63,68395
- Угол шага ротора (без учета редуктора): при 4-ступенчатой последовательности сигналов управления 11,25 ° (32 шага на оборот); при 8-ступенчатой — 5,625 ° (64 шага на оборот)
- Крутящий момент не менее: 34,3 мНм (120 Гц);
- Тормозящий момент: 600–1200 гсм;
- Тяга: 300 гсм;
- Вес:33 г.
Итак, рассмотрим простейшие примеры управления двигателем без использования библиотек. Как нам известно на обмотки нужно подавать импульсы определенной последовательности.
Значит, попробуем выдать такие сигналы с ардуино. Для этого я подключаю модуль ULN2003 по такой схеме (пин ардуино – контакт модуля)
- 13 – IN1;
- 12 – IN2;
- 11 – IN3;
- 10 – IN4.
Схема в сборе
Дальше напишем в Arudino IDE код, который будет подавать на выходы сигналы в соответствии с таблицей выше.
// назначим переменные с номерами портов
int in1 = 13;int in2 = 12;int in3 = 11;int in4 = 10;const int dl = 2; // переменная для задержки
// назначим указанные пины как выходы
void setup() {pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);}void loop() {
//сформируем сигналы для первого шага
digitalWrite( in1, HIGH ); digitalWrite( in2, HIGH ); digitalWrite( in3, LOW ); digitalWrite( in4, LOW );delay(dl); //Задержка между шагами, чем она меньше — тем быстрее вращение вала.
//сформируем сигналы для второго шага
digitalWrite( in1, LOW );digitalWrite( in2, HIGH ); digitalWrite( in3, HIGH ); digitalWrite( in4, LOW ); delay(dl);
//сформируем сигналы для третьего шага
digitalWrite( in1, LOW );digitalWrite( in2, LOW ); digitalWrite( in3, HIGH );digitalWrite( in4, HIGH ); delay(dl);
//сформируем сигналы для четвертого шага
digitalWrite( in1, HIGH );digitalWrite( in2, LOW ); digitalWrite( in3, LOW ); digitalWrite( in4, HIGH ); delay(dl);}
Двигатель начнет вращаться, скорость вращения задаётся переменной dl. Я её ввёл только для того, чтобы в каждом шаге не вводить задержку вручную.
Ниже я приложу видео и в нём для наглядности я показал как вращение с задержкой между шагами равной 2 мс (на 1 мс двигатель просто пищит и не вращается…), и с задержкой в полсекунды, что позволяет наглядно увидеть, в какой последовательности подаются сигналы на обмотки, что позволяет убедиться в том, что напряжение подаётся на две обмотки сразу, согласно таблице выше. При задержке в 2 мс светодиоды светятся как будто все вместе.
Перейдем к полушаговому управлению. В таблице ниже приведен порядок подачи сигналов на обмотки рассматриваемого двигателя для его реализации.
Тогда код будет таким:
// назначим переменные с номерами портов
int in1 = 13;int in2 = 12;int in3 = 11;int in4 = 10;const int dl = 2; // переменная для задержки
// назначим указанные пины как выходы
void setup() {pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);}void loop() {
//сформируем сигналы для первого шага
digitalWrite( in1, HIGH ); digitalWrite( in2, LOW ); digitalWrite( in3, LOW ); digitalWrite( in4, LOW );delay(dl); //Задержка между шагами, чем она меньше — тем быстрее вращение вала.
//сформируем сигналы для второго шага
digitalWrite( in1, HIGH );digitalWrite( in2, HIGH ); digitalWrite( in3, LOW ); digitalWrite( in4, LOW ); delay(dl);
//сформируем сигналы для третьего шага
digitalWrite( in1, LOW );digitalWrite( in2, HIGH ); digitalWrite( in3, LOW ); digitalWrite( in4, LOW ); delay(dl);
//сформируем сигналы для четвертого шага
digitalWrite( in1, LOW );digitalWrite( in2, HIGH ); digitalWrite( in3, HIGH ); digitalWrite( in4, LOW ); delay(dl);
//сформируем сигналы для пятого шага
digitalWrite( in1, LOW );digitalWrite( in2, LOW ); digitalWrite( in3, HIGH );digitalWrite( in4, LOW ); delay(dl);
//сформируем сигналы для шестого шага
digitalWrite( in1, LOW );digitalWrite( in2, LOW ); digitalWrite( in3, HIGH ); digitalWrite( in4, HIGH ); delay(dl);
//сформируем сигналы для седьмого шага
digitalWrite( in1, LOW ); digitalWrite( in2, LOW ); digitalWrite( in3, LOW ); digitalWrite( in4, HIGH ); delay(dl);
//сформируем сигналы для восьмого шага
digitalWrite( in1, HIGH );digitalWrite( in2, LOW ); digitalWrite( in3, LOW ); digitalWrite( in4, HIGH ); delay(dl);}
Но на практике такой подход к управлению шаговым двигателем не используется. Для этого есть готовые библиотеки, в Arduino IDE есть встроенная «Stepper». Возьмем из библиотеки готовый пример «Stepper_oneRevolution» и изменим его под наш двигатель, код привожу ниже и в х опишу основные особенности:
- #include
- const int stepsPerRevolution = 2048; // изменить в соответствии с количеством
- //шагов вашего двигателя. Вообще здесь задаём количество шагов, на которые повернется двигатель
- // мы указали для 1 полного оборота
- // назначаем пины, к которым подключен драйвер ШД
Stepper myStepper(stepsPerRevolution, 13, 12, 11, 10);void setup() {
// указываем номинальную скорость 15 об.мин:
myStepper.setSpeed(15);
// включаем последовательный пор:
Serial.begin(9600);}void loop() {
// делаем оборот по часовой стрелке:
Serial.println(«clockwise»); // сообщение в монитор порта
myStepper.step(stepsPerRevolution); delay(500);
// делаем оборот против часовой стрелке:
Serial.println(«counterclockwise»); // сообщение в монитор порта myStepper.step(-stepsPerRevolution); delay(500);}
Первое что бросается в глаза – код занимает значительно меньше времени, количество шагов для полного оборота ротора задаётся первым аргументом функции Stepper, с её помощью объявляются пины, к которым подключен двигатель и количество шагов в полном обороте вала её синтаксис такой:
Stepper название (количество шагов в полном обороте, пин 1, пин 2, пин 3, пин 4).
Ну а когда нам нужно вращать сам двигатель мы обращаемся к двигателю название которого мы написали в Stepper с приставкой «.step», у нас это myStepper.step. В видео ролике я для наглядности вставил фрагмент, где по часовой стрелке двигатель делает пол оборота, а против – целый оборот. Он в самом конце. Код я для этого изменил следующим образом:
void loop() {
// делаем оборот по часовой стрелке:
Serial.println(«clockwise»); // сообщение в монитор порта myStepper.step(1024); delay(500);
// делаем оборот против часовой стрелке:
Serial.println(«counterclockwise»); // сообщение в монитор порта myStepper.step(-stepsPerRevolution); delay(500);}
В мониторе порта микроконтроллер нам «говорит» в какую сторону вращается двигатель.
Монитор порта
Ну и, наконец, предлагаю посмотреть видео, в котором демонстрируются работа всех примеров кода из этой статьи
Источник: https://lampaexpert.ru/obzory/master-klassy/kak-upravlyat-shagovym-dvigatelem-cherez-arduino