Arduino, шаговый двигатель 28-BYJ48 и драйвер ULN2003
Arduino, шаговый двигатель 28-BYJ48 и драйвер ULN2003
Шаговый двигатель — это мотор, который управляется несколькими электромагнитными катушками.
На центральном валу — роторе — расположены магниты. В зависимости от от того, есть ток на катушках, которые находятся вокруг вала, или нет, создаются магнитные поля, которые притягивают или отталкивают магниты на роторе. В результате вал шагового двигателя вращается.
Подобная конструкция позволяет реализовать очень точное управление углом поворота ротора шагового двигателя относительно катушек — статора. Можно выделить два основных типа шаговых моторов: униполярные и биполярные шаговые двигатели.
В данной статье мы рассмотрим работу униполярного шагового двигателя 28-BYJ48 с драйвером ULN2003.
Униполярные шаговые двигатели имеют пять или шесть контактов для подключения и четыре электромагнитные катушки в корпусе (если быть более точными, то две катушки, разделенные на четыре). Центральные контакты катушек соединены вместе и используются для подачи питания на двигатель. Эти шаговые моторы называются униполярными, потому-что питание всегда подается на один из этих полюсов.
Спецификация и драйвер шагового двигателя
Существуют разные модели драйверов (контроллеров) шаговых двигателей. Среди них можно выделить самые популярные в DIY разработках на базе Arduino: L293, ULN2003, A3967SLB.
Как правило, шаговый двигатель 28-BYJ48 используют в паре с драйвером ULN2003.
Спецификацию шагового двигателя 28-BYJ48 на английском языке вы можете скачать здесь. Краткие выдержки основных технических характеристик приведены ниже:
- Напряжение питания: 5 В (постоянный ток);
- Количество фаз: 4;
- Количество шагов: 64;
- Угол поврота на один шаг: 5.625 градуса
- Частота: 100 Герц;
- Частота холостого хода по часовой стрелке: > 600 Герц;
- Частота холостого хода против часовой стрелки: > 1000 Герц;
- Крутящий момент > 34.3 миллиньютон на метр;
- Сопротивление вращению: 600-1200 грамм на сантиметр;
- Класс элетробезопасности: A;
Внешний вид и схемы подключения ULN2003 приведены на изображениях ниже
Примечание. Если вы захотите использовать плату L293 вместо ULN2003, красный контакт подключать не надо.
Необходимые компоненты
- Микроконтроллер Arduino.
- Шаговый двигатель BYJ48 5В.
- Драйвер шагового двигателя ULN2003.
- Коннекторы.
- Источник питания 5v — необязательно.
Скетч для Arduino
В Arduino IDE есть встроенная библиотека для управления шаговыми двигателями. После подключения шагового двигателя, ULN2003 и Arduino, вы можете загрузить скетч из категории Examples и .
На этом этапе возникают определенные нюансы:
У этого двигателя передаточное отношение 1:64, а угол поворота 5.625, то есть у него 4096 шагов.
Шаг = Количество шагов на один поворот * передаточное отношение.
Шаги= (360/5.625)*64″Передаточное отношение» = 64 * 64 =4096. Это значение надо учесть в скетче Arduino.
А вот угол поворота для шаговых двигателей от adafruit равен 7.5 градусов, а передаточное отношение 1:16, так что количество шагов за 1 полный оборот вала равно:
Шаги за один оборот = 360 / 7.5 = 48.
Шаги = 48 * 16 = 768
То есть, это значение меняется в зависимости от двигателя, который вы используете. Поэтому проверяйте даташит для калибровки и корректной работы вашего шагового двигателя.
Модуль драйвера шагового двигателя ULN2003 подключается к Arduino контактами IN1 — IN4 к D8 — D11 соответственно.
Для подачи питания на ваш мотор, рекомендуется использовать внешний источник питания 5V с силой тока 500mA минимум. Не питайте двигатель непосредственно от контакта 5V на плате Arduino.
Проблема направления вращения в библиотеке и как ее исправить
Когда вы загрузите скетч на Arduino, шаговый двигатель будет вращаться в одном направлении с помощью функции:
То есть, вам надо указать в параметрах количество шагов для поворота ротора вала.
По идее, указав положительное или отрицательное значение, вы можете управлять направлением вращения. Если ваш шаговый двигать так и работает, то можете не читать дальше.
Но если шаговый двигатель вращается в том же направлении вне зависимости от знака, то надо внести изменения в библиотеку Arduino. В следующем разделе приведен код, используя который вы можете управлять направлением вращения.
Измененный код для Arduino
Окончательная версия скетча для шагового двигателя:
/* Скетч для шагового двигателя BYJ48
Схема подключения: IN1 >> D8 IN2 >> D9 IN3 >> D10 IN4 >> D11 VCC . 5V.
Лучше использовать внешний источник питания Gnd
Автор кода: Mohannad Rawashdeh
Детали на русском языке: /arduino-shagovii-motor-28-BYJ48-draiver-ULN2003
Англоязычный вариант: http://www.instructables.com/member/Mohannad+Rawashdeh/ 28/9/2013 */
boolean Direction = true;
unsigned long last_time;
unsigned long currentMillis ;
void stepper(int xw)<
StepperMotor::StepperMotor(int In1, int In2, int In3, int In4)<
// Записываем номера пинов в массив inputPins
// Проходим в цикле по массиву inputPins, устанавливая каждый из них в режим Output
for (int inputCount = 0; inputCount inputPins[inputCount], OUTPUT);
void StepperMotor::setStepDuration(int duration)<
void StepperMotor::step(int noOfSteps)<
* в данном 2D массиве хранится последовательность, которая
* используется для поворота. В строках хранится шаг,
* а в столбцах — текущий input пин
int factor = abs(noOfSteps) / noOfSteps; // Если noOfSteps со знаком +, factor = 1. Если noOfSteps со знаком -, factor = -1
noOfSteps = abs(noOfSteps); // Если noOfSteps был отрицательным, делаем его позитивным для дальнейших операций
* В цикле ниже обрабатываем массив sequence
* указанное количество раз
for(int sequenceNum = 0; sequenceNum inputPins[inputCount], sequence[(int)(3.5-(3.5*factor)+(factor*position))][inputCount]);
Давайте посмотрим на конструктор на строчке 4. Мы начинаем с того, что добавляем выбранные пользователем пины в массив inputinputPins в строчках 6-9. В результате мы получаем простой и интуитивно понятный доступ к номерам пинов в дальнейшем коде.
В 12 строке мы пробегаемся по массиву inputinputPins и устанавливаем для каждого режим OUTPUT.
В 15 строке мы устанавливаем длительность шага по-умолчанию равной 15 мс.
В 18 строчке у нас функция-сеттер для установки длительности шага.
Теперь давайте рассмотрим метод step. Этот метод дает возможность шаговому двигателю делать переданное методу количество шагов.
В 28 строчке мы объявляем частоту вращения с использованием 2-х мерного массива. Строки представляют шаг, столбцы — выходящие пины.
В 37 строчке рассчитывается значение переменной factor, которое равно +1 или -1 в зависимости от знака, который мы передали при указании шагов. Это значение используется для определения направления перебора массива, то есть, в результате, для изменения направления вращения.
В 38 строчке мы присваем noOfSteps переменной позитивное значение.
В 44 строке мы запускаем цикл, который будет отрабатывать для каждой последовательности оборотов, то есть в начале каждого 8-го щага.
В 45 строке мы запускаем второй цикл, который пробегается по строкам в нашем массиве.
В 46 строчке мы устанавливаем задержку в соответствии со спецификацией.
В 47 строке мы пробегаемся по номерам пинов.
В 48 строке мы передаем цифровой сигнал на текущий номер пина.
Если переменная factor отрицательная, в 48-й строчке кода строки массива обрабатываются в противоположном порядке, то есть с низу вверх.
Доступ к библиотеке для шагового двигателя из Arduino IDE
Нам осталось добавить созданные файлы в папку библиотек Arduino IDE и мы сможем импортировать ее в любой наш проект.
Перейдите в папку:
C:Program Files (x86)Arduinolibraries
И создайте папку под названием StepperMotor.
Переместите созданные файлы .h и .cpp в созданную папку.
Теперь вы можете импортировать библиотеку в IDE (sketch > import library. > StepperMotor) с помощью директивы
Как работает шаговый двигатель
В современной робототехнике очень часто применяются шаговые двигатели, даже ведущие мировые производители на четырёхосевых поворотных роботах типа SCARA устанавливают степперы производства компании KINCO Electric.
Шаговый двигатель — это бесколлекторный двигатель, ротор которого вращается не плавно, а шагами (дискретно). Полный оборот ротора состоит из нескольких шагов. Меняя форму сигнала, количество импульсов, их длительность и фазовый сдвиг, можно задавать скорость вращения, направление вращения и количество оборотов ротора двигателя.
По типу ротора, шаговые двигатели делятся на: двигатели с постоянными магнитами, реактивные двигатели и гибридные двигатели.
• Двигатель с постоянными магнитами (ротор из магнитотвердого материала). На роторе установлен один, или несколько, постоянных магнитов. Количество полных шагов в одном обороте таких двигателей, зависит от количества постоянных магнитов на роторе, и количества электромагнитов на статоре. Обычно в одном обороте от 4 до 48 шагов (один шаг от 7,5° до 90°).
• Реактивный двигатель (ротор из магнитомягкого материала). Еще такие двигатели называют двигателями с переменным магнитным сопротивлением. Ротор не имеет постоянных магнитов, он выполнен из магнитомягкого материала в виде многоконечной звезды. Данные двигатели встречаются редко, так как у них наименьший крутящий момент, по сравнению с остальными, при тех же размерах. Количество полных шагов в одном обороте таких двигателей, зависит от количества зубцов на звезде ротора, и количества электромагнитов на статоре. Обычно в одном обороте от 24 до 72 шагов (один шаг от 5° до 15°.)
• Гибридный двигатель (совмещает технологии двух предыдущих двигателей). Ротор выполнен из магнитотвердого материала (как у двигателя с постоянными магнитами), но имеет форму многоконечной звезды (как у реактивного двигателя). Количество полных шагов в одном обороте таких двигателей, зависит от количества постоянных магнитов на звезде ротора, и количества электромагнитов на статоре. Количество шагов в одном обороте таких двигателей может доходить до 400 (один шаг от 0,9°).
По типу соединения электромагнитов, шаговые двигатели делятся на: униполярные и биполярные.
— Биполярный двигатель имеет 4 вывода. Выводы A и A питают обмотку AA, выводы B и B питают обмотку BB. Для включения электромагнита, на выводы обмотки необходимо подать разность потенциалов (два разных уровня), поэтому двигатель называется биполярным. Направление магнитного поля зависит от полярности потенциалов на выводах.
— Униполярный двигатель имеет 5 выводов. Центральные точки его обмоток соединены между собой и являются общим (пятым) выводом, который, обычно, подключают к GND. Для включения электромагнита, достаточно подать положительный потенциал на один из выводов обмотки, поэтому двигатель называется униполярным. Направление магнитного поля зависит от того, на какой именно вывод обмотки подан положительный потенциал. 6-выводной двигатель имеет ответвление от центральных точек обмоток, но обмотка AA не соединена с обмоткой BB. Если не использовать выводы центральных точек обмоток, то двигатель будет биполярным, а если эти выводы соединить и подключить к GND, то двигатель будет униполярным. 8-выводной двигатель является наиболее гибким в плане подключения электромагнитов. Данный двигатель можно не только использовать как биполярный или униполярный, но и самим определять, как соединить электромагниты обмоток, последовательно или параллельно.
Если у Вашего двигателя 4 вывода, значит он биполярный. Если у Вашего двигателя 5 выводов, значит он униполярный. Но если у Вашего двигателя 6 и более выводов, то это не значит что некоторые из них являются центральными выводами катушек электромагнитов. Дело в том, что есть двигатели, некоторые выводы которых (обычно крайние), электрически замкнуты, так биполярный двигатель может иметь 6 выводов. Точно определить тип соединений, для двигателей с 6 и более выводами, можно только измеряя сопротивление между выводами.
Для работы шагового двигателя (вне зависимости от его вида) можно выбрать один из трех режимов работы: Полношаговый режим — ротор поворачивается на 1 шаг за 1 такт. Полушаговый режим — ротор поворачивается на ½ шага за 1 такт. Микрошаговый режим — ротор поворачивается на ¼, ⅛ и т.д. шагов за 1 такт.
Таким образом, после рассмотрения видов шаговых двигателей и их основных режимов работы, мы можем заключить, что двигатели данного типа справедливо используются для управления механикой в широком диапазоне применений, ввиду своей надёжности и невысокой стоимости при наличии приемлемых технических параметров.
Как узнать количество шагов на шаговом двигателе?
#1 OFFLINE Крокодил


- Пол: Мужчина
- Из:Киргизия
Здравствуйте! Помогите пожалуйста узнать сколько микрошагов у моих двигателей. Никаких переключателей нет. Станок китайский. У производителя спрашиваю, он не понимает, чего я от них хочу. Спасибо.
Прикрепленные изображения
- Наверх
#2 OFFLINE lkbyysq











- Пол: Мужчина
- Город: Санкт-Петербург
- Из:Санкт-Петербург
От обратного пляшите. Двигатель 200 или 400 полных шагов на оборот. Импульсов на миллиметр посмотрите в программе. Миллиметров перемещения на один оборот двигателя измерьте.
- Наверх
#3 OFFLINE Крокодил


- Пол: Мужчина
- Из:Киргизия
От обратного пляшите. Двигатель 200 или 400 полных шагов на оборот. Импульсов на миллиметр посмотрите в программе. Миллиметров перемещения на один оборот двигателя измерьте.
Спасибо, что ответили. Двигатель 200 шагов, Steps per 320 (заводская настройка), за оборот проезжает 5мм. Скажите, как это просчитать?
- Наверх
#4 OFFLINE lkbyysq











- Пол: Мужчина
- Город: Санкт-Петербург
- Из:Санкт-Петербург
- Наверх
#5 OFFLINE T-Rex











- Пол: Мужчина
- Из:Йошкар-Ола
Двигатель 200 или 400 полных шагов на оборот.
400 — большая редкость, «на практике не используется» ©. Массово применяемые гибридные шаговики — 200 полных шагов на один оборот вала.
- Наверх
#6 OFFLINE Крокодил


- Пол: Мужчина
- Из:Киргизия
Микрошаговый режим работы шагового двигателя, дробление шага
Для того, чтобы понять плюсы и минусы дробления шага (работы шагового двигателя в микрошаговом режиме), сначала стоит разобраться, что же это такое.
Микрошаговый режим – это режим, при котором происходит дробление шага большее чем 1/2 за счет получения плавно вращающегося поля статора, т.е. ток плавно снижается на одной обмотке и плавно нарастает на другой. Благодаря этому ротор шагового двигателя теоретически можно зафиксировать в любой произвольной позиции, если установить правильное отношение токов в обмотках (фазах).
Из графика видно, что увеличивая дробление шага мы дискретно приближаемся к изменению значений токов в обмотках по закону Sin, со сдвигом фаз π/2.
Теоретически, благодаря микрошаговому режиму, мы можем повысить разрешение шагового двигателя. Например, взяв двигатель с углом поворота ротора 1.8° (200 шагов на оборот), при микрошаговом режиме 1/8 получаем 800 шагов на оборот, при дроблении 1/16 – 3200 шагов на оборот и так далее. На практике же, для большинства используемых шаговых двигателей, повышение дробления шага больше 1/8 не дает ожидаемого повышения разрешения двигателя. Это происходит из-за несовершенства деталей шагового двигателя, инерции ротора, силы трения и ряда других причин.
Но, помимо увеличения разрешающей способности шагового двигателя, микрошаговый режим помогает значительно снизить вибрации и избежать резонанса на низких частотах вращения шагового двигателя, это получается благодаря меньшей длине между двумя соседними положениями ротора, что снижает влияние инерционных характеристик.
Ниже приведен результат испытаний связки шаговый двигатель + блок управления SMD 4.2 CAN в динамометрическом стенде.
Из графиков можно сделать вывод, что дробление шага отрицательно сказывается на величине максимального момента двигателя, но положительно влияет на его равномерность (особенно это видно при режиме 1/128). Так же микрошаг сильно снижает максимальное количество оборотов в минуту, которое может выдать шаговый двигатель. Это происходит из-за того, что с увеличением дробления шага, растет количество переключений напряжения, подаваемого на обмотки, что ведет к росту потерь. Поэтому в драйверах нового поколения SMD-4.2i разгон и торможение двигателя происходит в микрошаговых режимах, а при увеличении скорости драйвер автоматически понижает дробления шага в момент, когда текущее дробление не дает преимуществ над меньшим дроблением для данной частоты вращения ротора шагового двигателя.
Можно подвести итог, обозначив плюсы и минусы работы шагового двигателя в микрошаговом режиме.
Плюсы:
- повышение разрешающей способности;
- значительное снижение вибраций;
- значительное снижение шума;
- выравнивание момента;
- избегание резонанса.
Минусы:
- снижение максимальной частоты вращения ротора;
- снижение максимального момента шагового двигателя.
Василий Фортуна, Сергей Сергеев
Подпишитесь на наши новости
Получайте первыми актуальную информацию от ООО «Электропривод»