Шаговый двигатель

Состав системы
Как работает
Кнопки управления
Индикация LCD
Подключение
Что нужно для проекта
Возможные проблемы
Скетч

Фото шагового двигателя
Версия для печати

Вернуться на главную

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

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

Шаговый двигатель 28BYJ-48 с драйвером ULN2003

Шаговый двигатель 28BYJ-48 с драйвером ULN2003

В обычных электродвигателях крутящий момент на валу возникает в результате воздействия на проводник с током магнитного поля, не важно, чем оно создано : постоянным магнитом или обмотками под напряжением. Естественно, ни про какое точное управление здесь речи не идет. В шаговых моторах также есть обмотки в статоре, создающие магнитное поле и воздействующие на ротор, а вот в нем вместо проводников установлены постоянные магниты. Наверняка вы когда-нибудь пытались соединить два магнита : одной стороной они притягиваются, а другой отталкиваются. На этом и основан принцип действия шагового двигателя : подавая напряжение на обмотки статора в разных сочетаниях, вы заставляете ротор занимать то или иное положение (где-то магниты притягиваются к обмоткам, где-то отталкиваются). Да, ротор вращаться не будет, он зафиксируется в какой-то одной позиции, но если из импульсов тока к обмоткам сформировать "круговую" последовательность, вал мотора начнет крутиться. Как нельзя лучше для генерации таких импульсов подходит контроллер.

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

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

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

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

И это еще не все. Что происходит с ротором обычного электродвигателя после снятия питания (остановки)? Он будет находиться в свободном состоянии - вы можете спокойно провернуть рукой вал привода, например, центробежного насоса мощностью 20-30 кВт, что уж говорить про микродвигатели. Это не страшно, если мы говорим про электромотор пожарного или балластного насоса. А если это привод грузоподъемного механизма или колес какого-нибудь робота - после остановки груз на гаке просто уйдет вниз, а робот-вездеход по инерции укатится в неизвестном направлении. То есть нужны тормоза, что сильно усложняет конструкцию. Но при использовании шагового двигателя эта проблема решается сама собой - после того, как ротор мотора повернется в нужное нам положение, питание с обмоток статора можно не снимать, и они своим магнитным полем зафиксируют положение вала - чем не тормоз?

СОСТАВ СИСТЕМЫ

PLC Arduino UNO с шилдом Sensor Shield v 5.0 (питание 7-12 В постоянного тока), LCD-дисплей с шиной I2C, DC-DC конвертер для питания дисплея и мотора, шаговый двигатель 28BYJ-48 и драйвер ULN2003 для его управления, кнопочный пост с 5-ю кнопками.

Немного подробней о шаговом двигателе 28BYJ-48. Фактически это мотор-редуктор. Сам двигатель в полушаговом режиме (в скетче применен именно такой) может совершать 64 шага за оборот. Плюс имеется редуктор с передаточным коэффициентом 1/63,68395 (в интернете часто округляют до 64). Соответственно, на выходе мы имеем приблизительно 4075 шагов выходного вала на оборот или один шаг равен 0,0883°. Как видите, можно очень точно позиционировать вал.

Так как двигатель 28BYJ-48 потребляет большой ток (больше 200 мА), подключать и питать его напрямую от Arduino нельзя. Для этих целей служит драйвер на базе микросхемы ULN2003. К электродвигателю он подключается с помощью специального штекера, перепутать положение которого невозможно. Входные пины драйвера (IN1 - IN4) подсоединяются к любым цифровым пинам контроллера. Питание к драйверу (пины + и -) подается от отдельного источника (не менее 1 А). Для этих целей подойдет Sensor Shield. Перемычка на драйвере одета. Зачем она нужна, непонятно - если ее убрать, мотор работать не будет.

КАК РАБОТАЕТ

Данная система управления позволяет проверить работу шагового двигателя. Вы можете задать необходимое перемещение мотора в удобных вам единицах, а также скорость и направление вращения и проверить, как он реагирует на это. Вся информация выводится на LCD-дисплей. Система позволяет настраивать все необходимые параметры и записывать их в память Arduino.

КНОПКИ УПРАВЛЕНИЯ

Управлять системой можно с помощью пяти кнопок : НАСТРОЙКИ, ВВЕРХ, ВНИЗ, EXIT и START. Рассмотрим их функции подробно :

Кнопка НАСТРОЙКИ

Нажав ее, вы попадете в меню настроек. Продолжая нажимать эту кнопку, вы будете циклично переходить по пунктам меню. Изменение параметров осуществляется кнопками ВВЕРХ и ВНИЗ. Выход из настроек - по кнопке EXIT. Изменение настроек сразу принимается контроллером, подтверждение не нужно. Во время работы двигателя в настройки войти нельзя, а вот запустить мотор из настроек можно.

Пройдемся по пунктам меню Настройки.

  • Control Mode : здесь вы можете определить единицы, в которых будет задаваться перемещение выходного вала мотора. На выбор : шаги, угол в градусах, обороты, время в микросекундах и полностью ручной режим. В ручном режиме мотор будет вращаться, пока удерживаются кнопки ВВЕРХ или ВНИЗ.
  • Direction : направление вращения выходного вала мотор-редуктора. CW - по часовой, CCW - против часовой.
  • Brake Current : оставлять ли двигатель под током после прекращения движения. Эта функция может понадобиться при необходимости дополнительного тормозного момента на валу, чтобы исключить самопроизвольное проворачивание.
  • Steps per Revol : количество шагов на оборот выходного вала (не электродвигателя). Получается путем перемножение числа шагов на оборот вала мотора на понижающий коэффициент редуктора. Для данной модели двигателя 28BYJ-48 это число равно 4075. Эта величина постоянная, задается один раз и больше не меняется.
  • Step Time, mcs : продолжительность одного шага выходного вала в мкс. Фактически этим параметром мы задаем скорость вращения выходного вала.
  • Speed (rev/min) : скорость вращения выходного вала в об/мин. Этот и последующие два параметра дублируют предыдущий. Вы можете выбрать удобную вам форму задачи скорости выходного вала мотор-редуктора.
  • Speed (step/min) : скорость вращения выходного вала в шаг/мин.
  • Speed (degr/min) : скорость вращения выходного вала в градус/мин.
  • Synchronization : синхронизация параметров. Как вы могли заметить, угол перемещения вала и скорость его вращения можно задать разными способами (в разных единицах). В режиме синхронизации при изменении одного соответствующего параметра остальные будут пересчитываться автоматически.
  • Read Settings : чтение настроек из энергонезависимой памяти Arduino. При нажатии кнопки ВВЕРХ настройки из памяти PLC перейдут в оперативную.
  • Save Settings : запись настроек в энергонезависимую память Arduino. При нажатии кнопки ВВЕРХ текущие параметры запишутся в постоянную память PLC.
  • Load Default : загрузка значений по умолчанию. При нажатии кнопки ВВЕРХ параметры, определенные в начале скетча, загрузятся в оперативную память PLC (в текущие настройки). Эта функция может быть полезна, когда вы запутались в регулировках и хотите все вернуть в исходное положение. Но есть и еще одна причина ее использования. Если вы на одну и ту же плату Arduino постоянно записываете скетчи разных проектов, возможна ситуация, когда параметры одного проекта запишутся в настройки другого. Конечно, это можно исправить, но представьте, что в параметре, где должно быть, например, число 10, стоит 32000. Вручную кнопками ВВЕРХ или ВНИЗ корректировать это очень долго, проще сбросить настройки к заводским, а уже затем их подправить.

Кнопки ВВЕРХ-ВНИЗ

В основном экране кнопками ВВЕРХ и ВНИЗ задается величина перемещения выходного вала мотор-редуктора в тех единицах, которые указаны в настройках (Control Mode). В ручном режиме при удерживании кнопки ВВЕРХ вал будет вращаться по часовой стрелке, а кнопки ВНИЗ - против часовой. В режиме настроек этими кнопками меняются параметры.

Кнопка EXIT

В основном экране с помощью этой кнопки можно циклично менять единицы (режим) уставки перемещения выходного вала шагового двигателя. Фактически она дублирует пункт меню настроек Control Mode. Нажав на кнопку EXIT в настройках, вы выйдете из них.

Кнопка START

Эта кнопка запускает движение мотора. Если ее нажать в процессе вращения, двигатель остановится раньше заданного перемещения. В ручном режиме (Manual Mode) после окончания вращения в нижней строке выводится пройденный валом путь (угол). Нажимая кнопку START, вы можете просмотреть этот угол в разных единицах.

ИНДИКАЦИЯ LCD

Основной экран :
верхняя строчка - режим (единицы) уставки перемещения выходного вала мотора. На выбор есть : шаги, угол в градусах, обороты, время в микросекундах и полностью ручной режим. Также здесь показано текущее значение параметра. Кроме этого, специальным символом указано направление вращения вала.
нижняя строчка - "Press START" - приглашение запустить мотор. Во время движения шагового двигателя вы увидите простейший индикатор процесса (Progress Bar). Если вы остановите мотор раньше времени, то на экране появится текущее значение перемещения вала и процент от заданного. В ручном режиме в нижней строке появится приглашение "Press UP/DOWN" для начала вращения двигателя. После окончания движения вы увидите пройденный валом путь. Единицы можно выбрать кнопкой START.
В режиме настроек :
верхняя строчка - параметр
нижняя строчка - значение параметра

ПОДКЛЮЧЕНИЕ

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

  • питание Arduino : от адаптера 7-12VDC (2A)
  • питание шилда (перемычка убрана) : от адаптера 7-12VDC (2A) через понижающий DC-DC преобразователь типа LM2596 (не менее 2А)
  • LCD-дисплей 1602 + модуль I2C : питание от шилда (подсоединяем GND и VCC к любым свободным пинам G и V цифровых входов), SDA (I2C) - A4 (шилд), SCL (I2C) - A5 (шилд)
  • сигнал от кнопки НАСТРОЙКИ : вход в Arduino - цифровой пин 7. Линию сигнала и земли шунтируем резистором 10 кОм. Пины + и - кнопочного поста, общие для всех кнопок НАСТРОЙКИ, ВВЕРХ, ВНИЗ, EXIT, START, подсоединяем к любым свободным пинам V и G цифровых входов.
  • сигнал от кнопки ВВЕРХ : вход в Arduino - цифровой пин 6. Линию сигнала и земли шунтируем резистором 10 кОм
  • сигнал от кнопки ВНИЗ : вход в Arduino - цифровой пин 5. Линию сигнала и земли шунтируем резистором 10 кОм
  • сигнал от кнопки EXIT : вход в Arduino - цифровой пин 4. Линию сигнала и земли шунтируем резистором 10 кОм
  • сигнал от кнопки START : вход в Arduino - цифровой пин 3. Линию сигнала и земли шунтируем резистором 10 кОм
  • Драйвер ULN2003 подсоединяем к контроллеру следующим образом : IN1 - пин 8, IN2 - пин 9, IN3 - пин 10, IN4 - пин 11. Питание драйвера (+ и -) подсоединяем к любым свободным пинам питания (V и G) цифровых пинов шилда.
  • Шаговый двигатель подключается к драйверу с помощью специального разъема.
Схема подключения шагового двигателя

Схема подключения шагового двигателя

ЧТО НУЖНО ДЛЯ ПРОЕКТА

  • PLC Arduino UNO (datasheet) - 1 шт
  • Sensor Shield v 5.0 (datasheet) - 1 шт
  • Шаговый двигатель 28BYJ-48 (datasheet) - 1 шт
  • драйвер ULN2003 (datasheet) - 1 шт
  • понижающий DC-DC преобразователь типа LM2596 (не менее 2А) (datasheet) - 1 шт
  • LCD-дисплей 1602 (datasheet) + модуль I2C - 1 шт
  • кнопка тактовая с колпачком (datasheet) - 5 шт
  • резистор 10 кОм (0,25 Вт) - 5 шт
  • макетная плата под пайку 30х85 - 1 шт (для монтажа кнопок)
  • стойка мама-мама М3х15 - 4 шт (для монтажа LCD-дисплея)
  • стойка мама-мама М3х10 - 4 шт (для монтажа драйвера ULN2003)
  • стойка мама-мама М3х25 - 2 шт (для монтажа шагового двигателя)
  • гайка М3 - 50 шт и более в зависимости от способа крепления вышеуказанных элементов
  • болт М3х15, М3х10 - 20 шт и более
  • провод Dupont мама-мама или папа-мама (20 см) - 30 шт и более в зависимости от типа пинов соединяемых элементов
  • провод типа AWG - 50 см (соединение штекер - DC-DC преобразователь - Sensor Shield)
  • штыревой соединитель 40pin - 1 шт
  • штекер питания DC 2.1 мм с клеммной колодкой папа и мама - 1 пара (для подключения шилда)
  • кусок оргстекла или т.п. - 20х30 см (для монтажа всех элементов)
  • болт М6х15 и гайка - 4 шт (ножки оргстекла)

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

Проблема, возможно, надуманная, но все же расскажу про нее. Изначально при программировании скетча для этого проекта планировалось выводить в нижней строке экрана LCD текущее значение перемещения вала, так сказать в режиме реального времени (LCD у меня подключен по шине I2C). Учитывая, что время одного шага двигателя составляет десятки миллисекунд, обновление экрана LCD должно было быть довольно частым. Я в этом проблему не видел, но оказалось, что сам процесс вывода на экран занимает относительно много времени (у меня получилось 20 мс на обновление экрана). То есть, если у вас шаг - 10 мс, а количество шагов 1000, то вместо 10 секунд на разворот у вас уйдет 30 секунд. Пришлось от этой "фишки" отказаться и заменить ее простейшим индикатором процесса с градацией в 10% от заданного перемещения.

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

СКЕТЧ

Ниже представлен скетч системы управления. В этом окне он неудобочитаем, поэтому скачать его в формате ino вы можете по этой ссылке.

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

  • EEPROM.h - библиотека работы с памятью (она нужна для чтения и записи наших настроек в энергонезависимую память Arduino). Это стандартная библиотека, она входит в комплект среды программирования Arduino IDE.
  • Wire.h - библиотека для работы с протоколом I2C. Это тоже стандартная библиотека, ее устанавливать не нужно.
  • LiquidCrystal_I2C.h - библиотека для работы с LCD по протоколу I2C. Скачать.

Если есть возможность, проверьте эти библиотеки на наличие обновлений.

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