Как сделать шаговый двигатель
Страница, которую вы запрашиваете, не существует. Возможно, она была удалена, или был введен неверный адрес. Попробуйте вернуться на главную страницу или воспользуйтесь навигацией.
Меню
Продукция
- Шаговые двигатели
- Блоки управления шаговыми двигателями
- Программируемые устройства
для управления электроприводами
- Бесколлекторные двигатели
и мотор‑редукторы - Блоки управления бесколлекторными двигателями
- Асинхронные мотор‑редукторы
- Коллекторные двигатели
и мотор‑редукторы - Блоки управления коллекторными двигателями
- Сервоприводы
- HMI панели
- Прецизионные редукторы
- Линейные модули
- Соединительные муфты
- Источники питания
Контакты
по России звонок бесплатный
Шаговые двигатели. Принцип работы и управление
Шаговые двигатели широко используются в принтерах, автоматических инструментах, приводах дисководов, автомобильных приборных панелях и других приложениях, требующих высокой точности позиционирования.

ШАГОВЫЕ ДВИГАТЕЛИ: ПРИНЦИП РАБОТЫ И ОТЛИЧИЯ ОТ ДВИГАТЕЛЕЙ ПОСТОЯННОГО ТОКА
Двигатели постоянного тока (ДПТ) с постоянными магнитами начинают работать сразу, как только к якорной обмотке будет приложено постоянное напряжение. Переключение направления тока через обмотки ротора осуществляется механическим коммутатором — коллектором. Постоянные магниты при этом расположены на статоре.
Шаговый двигатель (ШД) может быть рассмотрен как ДПТ без коллекторного узла. Обмотки ШД являются частью статора. На роторе расположен постоянный магнит или, для случаев с переменным магнитным сопротивлением, зубчатый блок из магнитомягкого материала. Все коммутации производятся внешними схемами. Обычно система «мотор — контроллер» разрабатывается так, чтобы была возможность вывода ротора в любую фиксированную позицию, то есть система управляется по положению. Цикличность позиционирования ротора зависит от его геометрии.
Принято различать шаговые двигатели и серводвигатели. Принцип их действия во многом похож, и многие контроллеры могут работать с обоими типами. Основное отличие заключается в шаговом (дискретном) режиме работы шагового двигателя (n шагов на один оборот ротора) и плавности вращения синхронного двигателя. Серводвигатели требуют наличия в системе управления датчика обратной связи по скорости и/или положению, в качестве которого обычно используется резольвер или sin/cos энкодер. Шаговые двигатели используются преимущественно в системах без обратных связей, требующих небольших ускорений при движении. Синхронные сервомоторы обычно используются в скоростных высокодинамичных системах.
Шаговые двигатели(ШД) делятся на две разновидности: с постоянными магнитами и с переменным магнитным сопротивлением (гибридные). Двигатели с постоянными магнитами обычно имеют две независимые обмотки, у которых может присутствовать или отсутствовать срединный отвод (см. рис. 1).

Схема униполярных шаговых двигателей (рис. 1)
Биполярные шаговые двигатели с постоянными магнитами и гибридные двигатели сконструированы более просто, чем униполярные, обмотки в них не имеют центрального отвода (см. рис. 2).
За это упрощение приходится платить более сложным реверсированием полярности каждой пары полюсов мотора.

Схема биполярных шаговых двигателей (рис. 2)
Шаговые двигатели имеют широкий диапазон угловых разрешений. Более грубые моторы обычно вращаются на 90° за шаг, в то время как прецизионные двигатели могут иметь разрешение 1,8° или 0,72° на шаг. Если контроллер позволяет, то возможно использование полушагового режима или режима с более мелким дроблением шага (микрошаговый режим), при этом на обмотки подаются дробные значения напряжений, зачастую формируемые при помощи широтно-импульсной модуляции.
Если в процессе управления используется возбуждение только одной обмотки в любой момент времени, то ротор будет поворачиваться на фиксированный угол, который будет удерживаться пока внешний момент не превысит момента удержания двигателя в точке равновесия.
Для правильного управления биполярным шаговым двигателем необходима электрическая схема, которая должна выполнять функции старта, остановки, реверса и изменения скорости. Шаговый двигатель транслирует последовательность цифровых переключений в движение. «Вращающееся» магнитное поле обеспечивается соответствующими переключениями напряжений на обмотках. Вслед за этим полем будет вращаться ротор, соединенный посредством редуктора с выходным валом двигателя.
Каждая серия содержит высокопроизводительные компоненты, отвечающие все возрастающим требованиям к характеристикам современных электронных устройств.
Схема управления для биполярного шагового двигателя требует наличия мостовой схемы для каждой обмотки. Она позволяет независимо менять полярность напряжения на каждой обмотке.
На рисунке 3 показана последовательность управления для режима с единичным шагом.

Последовательность управления для режима с единичным шагом. (рис. 3)
На рисунке 4 показана последовательность для режима с половинным шагом.
Максимальная скорость движения определяется исходя из физических возможностей шагового двигателя. При этом скорость регулируется путем изменения размера шага. Более крупные шаги соответствуют большей скорости движения.
В системах управления электроприводами для отработки заданного угла или перемещения используют датчики обратной связи по углу или положению выходного вала исполнительного двигателя.
Если в качестве исполнительного двигателя использовать синхронный шаговый двигатель, то можно обойтись без датчика обратной связи (Дт) и упростить систему управления двигателем (СУ), так как отпадает необходимость использования в ней цифро-аналоговых (ЦАП) и аналого-цифровых (АЦП) преобразователей.
Шаговыми двигателями называются синхронные двигатели, преобразующие команду, заданную в виде импульсов, в фиксированный угол поворота двигателя или в фиксированное положение подвижной части двигателя без датчиков обратной связи.

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

Система отработки угла выходного вала двигателя с использованием датчика обратной связи.
ШАГОВЫЕ СИНХРОННЫЕ ДВИГАТЕЛИ АКТИВНОГО ТИПА
В отличие от синхронных машин непрерывного вращения шаговые двигатели имеют на статоре явно выраженные полюса, на которых расположены катушки обмоток управления.
Принцип действия шагового двигателя активного типа рассмотрим на примере двухфазного двигателя.
Различают два вида коммутации обмотки шагового двигателя: симметричную и несимметричную.
При симметричной системе коммутации на всех четырех тактах возбуждается одинаковое число обмоток управления.

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

Симметричная схема коммутации

Несимметричная схема коммутации
Число тактов Kt системы управления называют количеством состояний коммутатора за период его работы t. Как видно из рисунков, для симметричной системы управления Kt = 4, а для несимметричной Kt = 8.
В общем случае число тактов Kt зависит от числа обмоток управления (фаз статора) mу и может быть посчитано по формуле:
где: n1 = 1 — при симметричной системе коммутации;
n1 = 2 — при несимметричной системе коммутации;
n2 = 1 — при однополярной коммутации;
n2 = 2 — при двуполярной коммутации.

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

Двигатель с р парами полюсов имеет зубчатый ротор в виде звездочки с равномерно расположенными вдоль окружности 2р постоянными магнитами. Для многополюсной машины величина углового шага ротора равна:
Чем меньше шаг машины, тем точнее (по абсолютной величине) будет отрабатываться угол. Увеличение числа пар полюсов связано с технологическими возможностями и увеличением потока рассеяния, поэтому р = 4…6. Обычно величина шага ротора активных шаговых двигателей составляет десятки градусов.
РЕАКТИВНЫЕ ШАГОВЫЕ ДВИГАТЕЛИ
У активных шаговых двигателей есть один существенный недостаток: у них — крупный шаг, который может достигать десятков градусов.
Шаговые двигатели позволяют редуцировать частоту вращения ротора. В результате можно получить шаговые двигатели с угловым шагом, составляющим доли градуса.
Отличительной особенностью реактивного редукторного двигателя является расположение зубцов на полюсах статора.

Принцип действия реактивного редукторного шагового двигателя: (а) — исходное положение устойчивого равновесия; (б) — положение устойчивого равновесия, сдвинутое на один шаг
При большом числе зубцов ротора Zр его угол поворота значительно меньше угла поворота поля статора.
Величина углового шага редукторного реактивного шагового двигателя определяется выражением:
αш = 360 / Kt * Zр
В выражении для KT величину n2 следует брать равной 1, так как изменение направления поля не влияет на положение ротора.
Электромагнитный синхронизирующий момент реактивного двигателя обусловлен, как и в случае обычного синхронного двигателя, разной величиной магнитных сопротивлений по продольной и поперечной осям двигателя.
Основным недостатком шагового реактивного двигателя является отсутствие синхронизирующего момента при обесточенных обмотках статора.
Повышения степени редукции шаговых двигателей как активного, так и реактивного типа, можно достичь применением двух-, трех- и многопакетных конструкций. Зубцы статора каждого пакета сдвинуты относительно друг друга на часть зубцового деления. Если число пакетов — два, то этот сдвиг равен 1/2 зубцового деления, если три, то — 1/3, и т.д. В то же время, роторы-звездочки каждого из пакетов не имеют пространственного сдвига, то есть оси их полюсов полностью совпадают. Такая конструкция сложнее в изготовлении и дороже однопакетной. Кроме того, она требует сложного коммутатора.
Индукторные (гибридные шаговые двигатели)
Стремление совместить преимущества активного шагового двигателя (большой удельный синхронизирующий момент на единицу объема, наличие фиксирующего момента) и реактивного шагового двигателя (малая величина шага) привело к созданию гибридных индукторных шаговых двигателей.
В настоящее время имеется большое число различных конструкций индукторных двигателей, различающихся числом фаз, размещением обмоток, способом фиксации ротора при обесточенном статоре и т.д. Во всех конструкциях индукторных шаговых двигателей вращающий момент создается за счет взаимодействия магнитного поля, создаваемого обмотками статора и постоянного магнита в зубчатой структуре воздушного зазора. При этом синхронизирующий момент шагового индукторного двигателя по природе является реактивным и создается намагничивающей силой обмоток статора, а постоянный магнит, расположенный либо на статоре, либо на роторе, создает фиксирующий момент, удерживающий ротор двигателя в заданном положении при отсутствии тока в обмотках статора.
По сравнению с шаговым двигателем реактивного типа у индукторного шагового двигателя при одинаковой величине шага — больший синхронизирующий момент, лучшие энергетические и динамические характеристики.
ЛИНЕЙНЫЕ ШАГОВЫЕ СИНХРОННЫЕ ДВИГАТЕЛИ
При автоматизации производственных процессов часто бывает необходимо перемещать объекты в плоскости (например, в графопостроителях современных ЭВМ и т. д.). В этом случае приходится применять преобразователь вращательного движения в поступательное с помощью кинематического механизма.
Линейные шаговые двигатели преобразуют импульсную команду непосредственно в линейное перемещение. Это позволяет упростить кинематическую схему различных электроприводов.
Статор линейного шагового двигателя представляет собой плиту из магнитомягкого материала. Подмагничивание магнитопроводов производится постоянным магнитом.

Схема, иллюстрирующая работу линейного шагового двигателя
Зубцовые деления статора и подвижной части двигателя равны. В пределах одного магнитопровода ротора они сдвинуты на половину зубцового деления t/2. Зубцовые деления второго магнитопровода сдвинуты относительно соответствующих параметров первого магнитопровода на четверть зубцового деления t/4. Магнитное сопротивление потоку подмагничивания не зависит от положения подвижной части.
Принцип действия линейного шагового двигателя не отличается от принципа действия индукторного шагового двигателя. Разница — лишь в том, что при взаимодействии потока обмоток управления с переменной составляющей потока подмагничивания создается не момент, а сила FС, которая перемещает подвижную часть таким образом, чтобы против зубцов данного магнитопровода находились зубцы статора, то есть на четверть зубцового деления t/4.
где Kt — число тактов схемы управления.
Для перемещения объекта в плоскости по двум координатам применяются двухкоординатные линейные шаговые двигатели.
В линейных шаговых двигателях применяют магнитовоздушную подвеску. Ротор притягивается к статору силами магнитного притяжения полюсов ротора. Через специальные форсунки под него нагнетается сжатый воздух, что создает силу отталкивания ротора от статора. Таким образом, между ними создается воздушная подушка, и ротор подвешивается над статором с минимальным воздушным зазором. При этом обеспечиваются минимальное сопротивление движению ротора и высокая точность позиционирования.
РЕЖИМЫ РАБОТЫ
СИНХРОННОГО ШАГОВОГО ДВИГАТЕЛЯ
Шаговый двигатель работает устойчиво, если в процессе отработки угла при подаче на его обмотки управления серии импульсов не происходит потери ни одного шага. Это значит, что в процессе отработки каждого из шагов ротор двигателя занимает устойчивое равновесие по отношению к вектору результирующей магнитной индукции дискретно вращающегося магнитного поля статора.
Режим отработки единичных шагов соответствует частоте импульсов управления, подаваемых на обмотки шагового двигателя, при которой шаговый двигатель отрабатывает до прихода следующего импульса заданный угол вращения. Это значит, что в начале каждого шага угловая скорость вращения двигателя равна 0.
При этом возможны колебания углового вала двигателя относительно установившегося значения. Эти колебания обусловлены запасом кинетической энергии, которая была накоплена валом двигателя при отработке угла. Кинетическая энергия преобразуется в потери: механические, магнитные и электрические. Чем больше величина перечисленных потерь, тем быстрее заканчивается переходный процесс отработки единичного шага двигателем.

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

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

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

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Войти
Уже есть аккаунт? Войти в систему.
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу
- IPS Theme by IPSFocus
- Политика конфиденциальности
- Обратная связь
- Уже зарегистрированы? Войти
- Регистрация
Главная
Активность
- Создать.
Важная информация
Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.
Управление шаговым двигателем NEMA17 с помощью Arduino

Биполярный шаговый двигатель используется в роботизированных механизмах, таких как 3D-принтеры, станки с ЧПУ, игрушки и так далее. Особенностью шагового двигателя является дискретное вращение. То есть, при подаче на обмотку двигателя импульса совершается небольшой поворот ротора. Шаговый двигатель износостойкий, потому что не имеет в своей конструкции щёток, которые соприкасаются с ротором. Биполярный двигатель имеет по одной обмотке для каждой фазы движения магнитного ротора.
Самым простым решением для управления шаговыми двигателями являются специальные драйверы в различных исполнениях. На рисунке снизу компактный драйвер двигателя A4988 с платой расширения, упрощающей коммутацию с контроллером.

Рис. 2 Драйвер шагового двигателя A4988 на плате расширения
Возможности данной платы и драйвера ограничиваются управлением только одним шаговым двигателем. Используя такой вариант подключение проще всего изучить и понять взаимодействие микроконтроллера и шагового двигателя и, соответственно, научится управлять шаговиком.
В нашем проекте используются:
- Шаговый двигатель NEMA17
- Драйвер шагового двигателя A4988
- Плата расширения для драйверов шаговых двигателей A4988/DRV8825
- Микроконтроллер Arduino UNO R3
- Тактовая кнопка на модуле KY-004
Подключение шагового двигателя к микроконтроллеру
Чтобы подключить шаговый двигатель к плате расширения, достаточно соединить штатные разъёмы на двигателе и плате кабелем, который обычно входит в комплект при покупке NEMA17. Сложностей с подключением не должно возникнуть, так как разъемы стандартные.

Рис. 3 Подключённые устройства
Единственная сложность может возникнуть с управляющими пинами. Поэтому внимательно посмотрите на плату расширения драйвера шагового двигателя. На ней вы найдёте пины, которые обозначены:
- S – step – шаг,
- D – direction – направление,
- E – enable – включить-выключить двигатель (подача питания на его обмотки).
Так же на плате есть пины питания:
- 5В – напряжение питания логики,
- 9В – напряжение питания двигателя,
- GND – земля.
Не забудьте правильно подключить питание 5В и 9В платы расширения. Основное питание схемы происходит через штатный разъем Arduino блоком питания 9В с током не менее 1А. Ни в коем случае не запитывайте схему только от USB-разъема, т.к. это может привести к выходу контроллера из строя. Далее питание драйвера и двигателя производится с контроллера. 5В с пина на Arduino UNO, земля GND также подключается к микроконтроллеру к соответствующему пину. 9В подключаются к разъёму на контроллере, который обозначается как VIN. Управляющие пины платы расширения S, D, E в нашем проекте мы подключаем к цифровым пинам микроконтроллера D2, D3, D4. Проверьте подключение, сверившись с таблицей ниже.

Рис. 4 Таблица подключения платы расширения драйвера двигателя к Arduino UNO
Справка:
Двигатель NEMA17 сконструирован таким образом, что совершает 200 шагов за оборот в стандартном полношаговом режиме. Каждый шаг поворачивает ротор на 1,8 градуса.
Для обеспечения работы двигателя в разных режимах на плате расширения есть переключатели. Разное положение переключателей задаёт разный режим работы. Это удобно при решении некоторых задач. Режимы работы смотрите в таблице ниже:

Рис. 5 Режимы работы шагового двигателя в соответствии с расположением переключателей на плате расширения.
Для нашего проекта мы будем использовать микрошаговый режим, соответствующий 1/16 шага. Для этого передвиньте все переключатели на плате расширения двигателя в положение ON.
Примечание: Изменяя режим работы шагового двигателя можно менять скорость вращения и количество оборотов.
Далее мы подключим тактовую кнопку. В нашем примере кнопка используется для запуска алгоритма работы шаговика, прописанного в контроллере.
Кнопку подключаем двумя проводами. К шестому пину D6 на плате микроконтроллера подключаем управляющий разъем кнопки, обозначенный буквой S. Контакт, обозначенный «-» мы подключаем к GND на плате микроконтроллера.
Питание микроконтроллера производится от блока питания 9В.
Далее подключаем микроконтроллер к компьютеру и переходим к его программированию.
Разбор скетча управления шаговым двигателем
Вы можете скачать полный скетч, который мы здесь используем по этой ссылке.
Первые строки нашего кода определяют, какие пины мы используем для управления шаговиком и для управления кнопкой:
//Пины управления шаговиком
#define STEP_PIN 2 #define DIR_PIN 3 #define ENABLE_PIN 4 //Пин кнопки #define start_button 6
Далее необходимо определить переменные для управления временем поворота и паузы, то есть задержки между импульсами. Задержка считается в микросекундах (1000 мксек = 1 мсек = 0.001 сек.). Обратите внимание, что, чем больше задержка между импульсами, тем медленнее вращается двигатель. И ещё один важный момент, не рекомендуется устанавливать время меньше 100 мксек.
В этой части кода можно настроить время поворота и паузы.
#define move_forward_time 3000 //время прямого хода в мсек #define move_back_time 3000 //время обратного хода в мсек #define pause_time 4000 //время паузы в мсек #define frequency 2250 //Время между импульсами в мксек.
Определяем переменную для хранения времени.
//Таймер для millis() uint32_t timer = 0;
Необходимо определить переменную для рабочего режима, чтобы программа понимала, когда двигатель включён, а когда нет, то есть эта переменная будет менять своё значение в зависимости от нажатия кнопки. Обратите внимание, что переменная может иметь всего два значения – один и ноль.
//Логический флаг для рабочего режима bool flag = 0;
После определения переменных необходимо настроить микроконтроллер для работы.
В разделе setup производится первичная настройка:
void setup() pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления pinMode(DIR_PIN , OUTPUT); pinMode(ENABLE_PIN , OUTPUT); digitalWrite(ENABLE_PIN , HIGH); //Выключаем мотор, чтобы не грелся >
Здесь мы задаём режим работы пинов, к которым мы подключили кнопку и плату расширения драйвера двигателя. Обратите внимание на последнюю строчку кода, данной командой мы выключаем двигатель. Шаговик будет выключен тогда, когда мы подаём напряжение на Pin ENABLE. В противном случае мотор будет греться.
Далее в программе следует основной цикл loop, где происходит вся обработка событий. Напомню, что смысл нашей задачи сводится к тому, чтобы при нажатии на кнопку двигатель совершил вращение. Поэтому первым условием в основном цикле будет проверка нажата ли кнопка. Соответственно, если кнопка нажата, то переменная flag становится равна единице. Это будет означать, что у нас рабочий режим. В этом же условии мы включаем мотор и запускаем таймер присваивая переменной timer значение функции millis().
void loop () if (!digitalRead(start_button)) //Если нажали на кнопку digitalWrite(ENABLE_PIN , LOW); //Включаем мотор flag = 1; //Активируем флаг рабочего режима timer = millis(); //Запускаем таймер >
Управление по времени при нажатии на кнопку
Уточняем нашу задачу. Сделаем так, чтобы при нажатии на кнопку двигатель начинал вращение по часовой стрелке в течение трех секунд, потом делал бы паузу и после совершил несколько оборотов назад за то же время.
Эти параметры мы настроили в самом начале программы:
- move_forward_time 3000 время прямого хода в мсек по часовой стрелке.
- define move_back_time 3000 время обратного хода в мсек против часовой стрелки.
- define pause_time 4000 время паузы в мсек.
- define frequency 2250 Время между импульсами в мксек.
Эти параметры можно менять в зависимости от условия задачи.
Далее будет следующий цикл:
if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения
Если мы нажали на кнопку и у нас включился рабочий режим, то есть переменная flag равна единице, то сначала задаём направление вращения двигателю подавая на управляющий Pin DIR напряжение.
Далее в цикле будем использовать ещё один цикл do while, условие которого проверяется в конце цикла.
do //Крутим движок move_forward_time мсек digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > while (millis() - timer move_forward_time);
Задача этого цикла заставить двигатель вращаться три секунды по часовой стрелке. Мы попеременно подаём и отключаем напряжение на управляющем Pin STEP с задержкой frequency = 2250 микросекунд. Это примерно соответствует 10 оборотам в минуту для двигателя NEMA17, который мы используем в проекте. Чем меньше частота задержки, тем быстрее будет вращаться двигатель. Цикл будет работать до тех пор, пока заданное время в переменной move_forward_time будет больше величины millis() – timer. Такая формула применяется по причине того, что функция millis() уже запущена и в момент нажатия кнопки мы фиксируем её значение записывая в переменную timer. Именно от этого значения нам нужно отсчитать время три секунды. Таким образом функция millis() всё время увеличивает своё значение, а timer остаётся постоянной. Когда разница между millis() – timer составит три секунды, условие сработает и цикл завершится.
После того, как двигатель совершил вращение по часовой стрелке в течении трёх секунд, по условию задачи мы должны сделать паузу.
delay(pause_time); //Пауза pause_time мсек timer = millis(); //Снова запускаем таймер digitalWrite(DIR_PIN , LOW); //Крутим движок move_back_time мсек
Пауза у нас задавалась переменной pause_time. Для паузы используем функцию delay. Далее снова фиксируем новое значение функции millis() в момент начала следующего цикла. Теперь нам необходимо поменять направление вращения двигателя подавая на управляющий Pin DIR сигнал LOW – это будет соответствовать вращению двигателя против часовой стрелки.
do digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > while (millis() - timer move_back_time); flag = 0; //Гасим флаг digitalWrite(ENABLE_PIN , HIGH); //Выключаем движок, чтобы не грелся > >
Данный цикл вращения практически повторяет предыдущий за исключением последних двух строк. После завершения вращения в обратную сторону, нам необходимо обнулить переменную flag, чтобы основной цикл программы не повторялся и снова ждал нажатия на кнопку. Для этого присваиваем переменной flag значение ноль. Этим мы даём понять программе, что двигатель завершил программу и находится в нерабочем режиме. И в целях экономии энергии выключаем двигатель.
Поздравляем! Вы научились управлять шаговым двигателем задавая ему параметры времени и направление вращения.
Управление по числу шагов
А теперь научимся управлять двигателем с заданным количеством шагов. Для этого поменяем основный цикл программы на такой:
void loop () if (!digitalRead(start_button)) //Если нажали на кнопку digitalWrite(ENABLE_PIN , LOW); //Включаем мотор flag = 1; //Активируем флаг рабочего режима timer = millis(); //Запускаем таймер > if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения for (int i = 0; i 200; i++) //Выполняем нужное число шагов 200*16 = 3200 шагов оборот digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); > flag = 0; > >
Новым в этом коде станет только часть основного цикла, следующая за включением кнопки. То есть, когда программа обнаружила, что кнопка нажата, то активируется рабочий режим, включается мотор и срабатывает следующий код:
if (flag) //Если флаг активирован digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения
Первые две строчки мы описывать не будем, так как они повторяются, и последняя задаёт направление вращение двигателя, а вот на следующий элемент кода нужно обратить внимание:
for (int i = 0; i 3200; i++)
Цикл for будет выполняться до тех пор, пока переменная i будет меньше 3200. Откуда взялась цифра 3200 и что она означает? Наш двигатель работает с расчётом, что один шаг равен 1,8 градуса. Соответственно полный оборот двигателя (360 градусов) будет совершён за 200 шагов. Поскольку мы переключили режим работы двигателя в микрошаговый режим, а это 1/16 шага, то, соответственно, умножаем 200 шагов на 16 и получаем 3200 шагов за оборот. Таким образом нижеследующий код, который попеременно подаёт и отключает напряжение на управляющем Pin STEP с задержкой frequency = 2250 микросекунд, будет выполнен 3200 раз и цикл for завершится, а двигатель совершит один оборот.
digitalWrite(STEP_PIN , HIGH); delayMicroseconds(frequency); digitalWrite(STEP_PIN , LOW); >
Как только цикл for завершился, то необходимо присвоить переменной flag нулевое значение, чтобы завершить рабочий режим.
flag = 0; >
Теперь вы научились управлять шаговым двигателем задавая количество шагов!
Для работы данного скетча не нужно устанавливать дополнительных библиотек. Скетч вы можете скачать по этой ссылке.