Как управлять драйвером для шагового двигателя
Шаговые двигатели и моторы Ардуино 28BYJ-48 с драйвером ULN2003
В этой статье мы поговорим о шаговых двигателях в проектах Ардуино на примере очень популярной модели 28BYJ-48. Так же как и сервоприводы, шаговые моторы являются крайне важным элементом автоматизированных систем и робототехники. Их можно найти во многих устройствах рядом: от CD-привода до 3D-принтера или робота-манипулятора. В этой статье вы найдете описание схемы работы шаговых двигателей, пример подключения к Arduino с помощью драйверов на базе ULN2003 и примеры скетчей с использованием стандартной библиотеки Stepper.
Шаговый двигатель – принцип работы
Шаговый двигатель – это мотор, перемещающий свой вал в зависимости от заданных в программе микроконтроллера шагов и направления. Подобные устройства чаще всего используются в робототехнике, принтерах, манипуляторах, различных станках и прочих электронных приборах. Большим преимуществом шаговых двигателей над двигателями постоянного вращения является обеспечение точного углового позиционирования ротора. Также в шаговых двигателях имеется возможность быстрого старта, остановки, реверса.
Шаговый двигатель обеспечивает вращения ротора на заданный угол при соответствующем управляющем сигнале. Благодаря этому можно контролировать положение узлов механизмов и выходить в заданную позицию. Работа двигателя осуществляется следующим образом – в центральном вале имеется ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться. Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.
Упрощенные анимированные схемы работы шагового двигателя
Основные виды шаговых моторов:
Где купить шаговый двигатель
Самые простые двигатели Варианты на сайте AliExpress:
Драйвер для управления шаговым двигателем
Драйвер – это устройство, которое связывает контроллер и шаговый двигатель. Для управления биполярным шаговым двигателем чаще всего используется драйверы L298N и ULN2003.
Работа двигателя в биполярном режиме имеет несколько преимуществ:
Но существенным минусов в биполярном режиме является сложность самого драйвера. Драйвер униполярного привода требует всего 4 транзисторных ключа, для обеспечения работы драйвера биполярного привода требуется более сложная схема. С каждой обмоткой отдельно нужно проводить различные действия – подключение к источнику питания, отключение. Для такой коммутации используется схема-мост с четырьмя ключами.
Драйвер шагового двигателя на базе L298N
Этот мостовой драйвер управляет двигателем с током до 2 А и питанием до 46В. Модуль на основе драйвера L298N состоит из микросхемы L298N, системы охлаждения, клеммных колодок, разъемов для подключения сигналов, стабилизатора напряжения и защитных диодов.
Драйвер двигателя L298N
Драйвер шагового двигателя ULN2003
Шаговые двигателями с модулями драйверов на базе ULN2003 – частые гости в мастерских Ардуино благодаря своей дешевизне и доступности. Как правило, за это приходится платить не очень высокой надежностью и точностью.
Другие драйвера
Существует другой вид драйверов – STEP/DIR драйверы. Это аппаратные модули, которые работают по протоколу STEP/DIR для связи с микроконтроллером. STEP/DIR драйверы расширяют возможности:
В STEP/DIR драйверах используется 3 сигнала:
Одним из самых недорогих 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хххА мотора является универсальной.
Основные характеристики двигателя:
28BYJ-48 – униполярный шаговый двигатель. Используется в небольших проектах роботов, сервоприводных устройствах, радиоуправляемых приборах.
Описание библиотеки для работы с шаговым двигателем
В среде разработки Ардуино IDE существует стандартная библиотека Strepper.h для написания программ шаговых двигателей. Основные функции в этой библиотеке:
Пример скетча для управления
В наборе примеров библиотеки Stepper.h существует программа stepper_oneRevolution, в которой задаются все параметры для шагового двигателя – количество шагов, скорость, поворот.
Заключение
В этой статье мы с вами узнали, что такое шаговый двигатель, как можно его подключить к ардуино, что такое драйвер шагового двигателя. Мы также рассмотрели пример написания скетча, использующего встроенную библиотеку Stepper. Как видим, ничего особенно сложного в работе с шаговыми моторами нет и мы рекомендуем вам обязательно поэкспериментировать самостоятельно и попробовать включить его в своих проектах Arduino.
Плавность хода, шум и момент шагового двигателя при управлении микроконтроллером
Далее опишу алгоритм управления ШД с помощью микроконтроллера.
Перед тем, как начать описывать задачу, я изложу основы управления ШД, которые будут включать необходимый минимум для рассмотрения, описанных в статье способов управления.
Способы подключения обмоток, необходимые для осуществления данного режима работы. Полношаговый режим управления при задействовании на один шаг двух фаз.
Изменение полярности обмотки с помощью Н-моста.
Принципиальная электрическая схема, включающая в себя 4 драйвера полумоста и 2 Н-моста.
Способ модуляции синусоидального сигнала с помощью широтно-импульсной модуляции (далее просто ШИМ).
Способы подключения обмоток.
ШД имеют 4,5,6 или 8 выводов обмоток. При подключении к модулю управления ШД в каждом конкретном случае необходимо задействовать определенные выводы. В четырех выводном ШД задействуются все четыре вывода. Пяти выводной ШД не подходит для метода управления, описываемого в этой статье. В шести выводном не задействуются выводы нейтральных точек. В восьми выводном ШД обмотки соединены последовательно (см. рис. 1). Конечно можно задействовать все выводы обмоток, но эти методы управления выходят за рамки статьи.
Рис.1
Описание полношагового режима управления.
Рис.2
Рис.3
Для управления ШД используют два Н моста чаще всего на основе восьми N-канальных MOSFET транзисторов. Для управления транзисторами используются мостовые или полумостовые драйверы. Напряжение на затворе зачастую должно быть выше напряжения истока транзистора на 5-15В. Для MOSFET транзисторов это делают драйверы.
Кроме того, драйверы силовых ключей, в отличие от простых преобразователей уровня, снабжены множественными механизмами защиты как самого драйвера, так и управляемых ключей. Это позволяет выполнять формирование выходных управляющих сигналов согласно определенным алгоритмам, чтобы предотвратить выход системы из строя в аварийной ситуации.
Механизм встроенного временного промежутка Dead-Time обеспечивает гарантированное закрытие одного силового ключа до момента начала открытия ключа в противоположном плече. Гарантией надежного закрытия противоположного транзистора является встроенная схема, контролирующая состояние ключей и наличие схемы задержки, формирующей промежуток времени, в течение которого закрыты оба транзистора в плечах полумоста.
На рис.4 приведена принципиальная электрическая схема управления ШД, включающая в себя 4 драйвера полумоста IR2104S и 2 Н-моста на основе транзисторов IRF7836. При подаче 0 В на вход SD драйвера IR2104s драйвер переходит в неактивное состояние.
На приведенной схеме сигнал с диаграмм можно подавать на 4 входа. Так на ШИМ1 А+, на ШИМ2 А-, на ШИМ3 В+, на ШИМ4 В- соответственно (Рис.4).
Рис.4
Ниже кратко опишу принцип работы ШИМ, расчет и модулирование синусоиды.
ШИМ или PWM (широтно-импульсная модуляция или pulse-width modulation) – это способ изменения мощности, подаваемой на нагрузку. Управление заключается в изменении ширины импульса постоянной амплитуды, следующих через равные интервалы времени.
На рис.5 видно, как регулируется мощность. Так 20%, 40%, 80%, 100% это время, когда транзистор открыт относительно времени периода. Соответственно среднее напряжение будет приблизительно равно 20%, 40%, 80%, 100% от максимального.
Рис.5
Меняя ширину импульса, можно модулировать различную форму сигнала. Так, по синусоидальному закону, при котором ширина импульсов изменяется следующим образом (рис. 6), максимальна в середине шага, а к началу и концу шага уменьшается. Синусоиду можно увидеть на осциллографе, пропустив ШИМ-сигнал с контроллера через RC фильтр. Для RC фильтра использовал конденсатор 2.2 нФ и резистор 1.5кОм.
На рис. 6 показан пример модуляции одного синусоидального шага, состоящего всего из 4 уровней напряжения. Напряжение питания 12В.
Рис.6
Для формирования модулированного сигнала необходимо рассчитать уровни ШИМ и их количество на один шаг. На рис.7 приведено два примера одного синусоидального шага с разным количеством ШИМ уровней, где ШИМ можно изменять в пределах от 0 до 255, что соответствует напряжению от 0 до 100%. Как видно на рис.7, чем больше уровней ШИМ, тем больше форма модулированного сигнала будет повторять синусоиду. Каждое изменение ШИМ происходит по прерыванию таймера в микроконтроллере. Меняя время срабатывания прерывания, можно регулировать время одного шага соответственно и скорость двигателя.
Рис.7
Формулу для расчета ШИМ уровней можно получить из формулы мгновенных значений синусоидальных функции. U = Umsin(ω*t + Ψ)
Рис.8
Синусоида от 0 до Т/4 повторяет форму половины шага, а от T/4 до Т/2 зеркально отображает вторую половину шага. Поэтому для расчета достаточно взять участок от 0 до Т/4 или от 0° до 90°. ωt – для удобства можно заменить на угол α = 0° до 90°. Um заменим на максимальное значение ШИМ_max в примере 255. U заменим на ШИМ_N. Получается ШИМ_N = ШИМ_maxSIN(α). Количество вычислений уровней ШИМ зависит от величины точности к примеру 16 с шагом угла 90°/16 = 5,625°
Значения ШИМ необходимо округлять, так как оно может быть только целым.
Вычислив уровни ШИМ, можно модулировать синусоиду. Для этого я занес значения уровней в массив по прерыванию от таймера, поочередно подставляя значения от ШИМ_0 до ШИМ_16 в ШИМ контроллера. Так модулируется половина шага. Для модуляции второй половины нужно наоборот подставлять значения от ШИМ_16 до ШИМ_0.
Так модулируется один шаг. Меняя время срабатывания таймера можно менять время шага. Теперь такие синусоидальные шаги можно подавать, заменив прямоугольные шаги на диаграммах (рис.2).
0 25 50 74 98 120 142 162 180 197 212 225 236 244 250 254 255
На этом необходимый минимум основ управления ШД завершается. Далее будет описана поставленная задача, возникшие трудности и их решение.
Осовные характеристики двигателей:
двигатель №1 Рабочий ток 3,1 А. Активное сопротивление обмотки 1,5 Ом Индуктивность обмотки 3,5 мГн. Момент удержания 0,3 кг*м Величина полного шага 1,8° (200 шагов на один оборот ротора).
двигатель №2 Рабочий ток 4А. Активное сопротивление обмотки 0,8 Ом. Индуктивность обмотки 3,1 мГн. Момент удержания 0,45 кг*м. Величина полного шага 1,8° (200 шагов на один оборот ротора).
двигатель №3 не соответствовал характеристикам, заявленным производителем. Производитель утверждал, что он является аналогом двигателя №2. При замере активного сопротивления обмоток выяснилось, что сопротивление не соответствовало заявленным 0,8 Ом, а составляло всего 0,2 Ом. Следовательно, рабочий ток и индуктивность тоже отличались.
Изначально решить поставленную задачу я планировал с помощью готового блока управления ШД. Было испытано около пяти готовых блоков управления ШД разной ценовой категории и разных производителей. У всех были приблизительно одни и те же результаты, которые будут описаны ниже.
При испытании двигатель №3 по шуму и вибрациям отличался от первых двух в худшую сторону. Также было замечено, что все блоки управления с этим двигателем сильно грелись. Было решено больше не использовать этот двигатель.
Проблема №1. Свист двигателя. При уменьшении тока на блоках управления шум становился меньше, двигатель более плавно вращает ротор, и всё-таки шум и плавность вращения оставляли желать лучшего. При увеличении дробления шага на блоках управления до 1/16 шум уменьшился, и плавность хода увеличилась, но эти улучшения были незначительны. Дальнейшее повышение дробления вплоть до 1/512 не привело к улучшению показателей.
Решение проблемы №1. Решил сделать свой драйвер управления ШД на основе микроконтроллера PIC18F2331. Он заточен под управление двигателями. Было задействовано 4 канала широтно-импульсной модуляции для управления 4 драйверами полумоста.
Я начал эксперименты с формой сигнала, модулируемого с помощью ШИМ. Подавал треугольный, прямоугольный, трапециевидный сигналы на обмотки двигателя. Результаты: неутешительные показатели по шуму, вибрации и плавности хода были значительно хуже по сравнению с готовыми блоками управления. Подавая на обмотки двигателя синусоидальный сигнал, плавность хода, начиная от 5 об/мин и выше, стала практически незаметной на глаз. Детали механизма не гремели, но если скорость была ниже 5 об/мин, детали гремели, механизм передвигался рывками, ток потребляемый двигателем рос и выходил за пределы рабочего тока двигателя. Что касается шума, даже при скорости выше 5 об/мин был неприятный шум. Свист похожий на звук, издаваемый зарядными устройствами для телефонов ноутбуков, только гораздо сильнее. Такой же шум я слышал от асинхронных двигателей, управляемых частотными преобразователями. Изучив работу частотных преобразователей, стало ясно, что свист зависит от частоты ШИМ. У меня частота ШИМ составляла 4кГц. При изменении частоты свист менялся, и когда я поднял частоту до 20кГц, шум полностью пропал. Слух человека в большинстве случаев не воспринимает частоту выше 20кГц.Так была решена проблема №1.
Проблема №2. Двигатель ниже 5 об/мин двигается рывками, а ток сильно возрастает, так как у драйвера нет обратной связи по току, соответственно и контроля по перегрузке тоже нет.
Решение проблемы №2. Когда напряжение питания драйвера с 12V снизил до 9V, рывки при передвижении механизма тоже стали меньше, но всё равно недостаточно плавно. Тогда напряжение выставил 12V, а амплитуду ШИМ синусоиды начал уменьшать, и при 20% амплитуды от максимума движение было плавным и тихим.
Для примера покажу график Рис.9. Взятый из даташита.
На двигатель FL86STH156-6204 ток фазы 6,0 А. Максимальный постоянный ток потребления от источника питания 3,8 А для блока SMD-9.0 Блоки управления SMD-9.0 (напряжение 72В) и SMD-82 (напряжение 220В) Дробление шага ½, источник питания 72 В, 300 Вт.
Рис.9
Чем больше напряжение подается на обмотки ШД, тем быстрее идет нарастание тока в них. Соответственно зависимость момента от скорости улучшается.
В моем случае питание 12В и диапазон допустимых скоростей невысок, так как момент стремительно падает с увеличением скорости.
Так как при равномерном ускорении не удавалось разогнать механизм. Я решил разделить ускорение на три диапазона. Первый при скорости ниже 5 об/мин ускорение максимально, так как момент максимально высокий. Второй диапазон от 5 до 7 об/мин ускорение уже в три раза меньше и последний третий диапазон от 7 об/мин и выше, ускорение в десять раз меньше относительно первого диапазона. Таким образом двигатель набирал максимально быстро скорость в начале пути и укладывался в 1с. Нелинейно разгоняя двигатель, можно значительно сократить время разгона ШД. Замедление механизма проходило в обратном порядке. Так как сохраненной осциллограммы сигнала, подаваемого на драйверы полумостов, у меня не осталось, я нарисовал, как, примерно, должна выглядеть осциллограмма.
Рис.10
Решение проблемы №4. Целесообразно для измерения скорости использовать 12 разрядный датчик это 4096 бит. Точность измерения увеличится в четыре раза, что позволит точно подбирать скорость движения механизма под скорость движения руки.
Так была решена последняя проблема.
Думаю, эта статья принесет практическую пользу и поможет читателю лучше понять принципы управления шаговым двигателем.