Как повернуть шаговый двигатель

Как повернуть шаговый двигатель

Arduino и шаговый мотор

Шаговый мотор, в отличие от обычного мотора постоянного вращения, вращается пошагово и позволяет точно установить свой вал на заданный угол. В отличие от сервопривода не имеет обратной связи по углу поворота (не знает, где сейчас находится вал), но зато может вращаться без ограничений. Шаговые моторы используются в ЧПУ станках и прочих устройствах с точным позиционированием частей механизма (2D/3D принтеры, манипуляторы, плоттеры…). В наборе GyverKIT идёт шаговый мотор 28BYJ-48 с драйвером ULN2003:

Данный мотор питается от 5V, имеет 32 шага на оборот (в полношаговом режиме) и встроенный редуктор с отношением 1/63.68395. Таким образом получается 2038 шагов на один оборот выходного вала.

Фазы мотора выведены следующим образом:

Подключение

Мотор управляется через драйвер, который по сути усиливает сигнал с пинов микроконтроллера (подключать моторы напрямую к пинам нельзя!). Драйвер подключается к питанию 5V, а 4 управляющих входа – к любым цифровым пинам МК. Фаза мотора потребляет около 100 мА, поэтому возможно питание драйвера напрямую от платы Arduino.

Библиотеки

Для шаговых моторов существует несколько библиотек, самые известные из них:

  • Stepper – стандартная (идёт в комплекте с Arduino IDE) библиотека с минимальными возможностями – позволяет вращать мотор с плавным ускорением и торможением – моя библиотека с большим количеством возможностей и эффективными алгоритмами движения, читайте на странице библиотеки. Также есть расширенная документация

В примерах на этом сайте мы будем использовать GyverStepper как самую удобную и функциональную. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverStepper. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Примеры

Воспользуемся версией библиотеки GyverStepper2 (входит в набор GyverStepper). Создаём объект GStepper2 , в угловых скобках указываем тип драйвера STEPPER4WIRE , так как используем 4х проводной драйвер. Далее в круглых скобках – количество шагов на один оборот и пины в порядке (фаза А1, фаза А2, фаза В1, фаза В2). Из второй картинки (с описанием проводов мотора) видно, что первая фаза это провода 2 и 4, а вторая – 3 и 1. Драйвер не меняет порядок проводов, поэтому в программе нам нужно будет указать пины в порядке (1, 3, 2, 4), т.е. центральные нужно поменять местами. На схеме я подключил драйвер к пинам D2, D3, D4, D5, и в программе укажу их как (2, 4, 3, 5). Если прописать по порядку пинов – мотор будет работать некорректно!

Данный пример просто крутит мотор на один пол оборота, затем возвращает обратно. Каждый раз ждём, когда мотор приедет на позицию.

Библиотека позволяет двигать мотор не блокируя выполнение кода, поэтому можно переписать следующим образом:

В этом примере также вывожу позицию мотора в порт, можно открыть плоттер и увидеть график:

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

В библиотеке также есть поддержка движения с ускорением, добавим настройку setAcceleration()

Мотор перестанет дёргаться при смене направления движения, а график будет выглядеть вот так:

Крутим шаговый двигатель

Шаговые двигатели достаточны распространены в устройствах, в которых необходимо добиться точного перемещения механизмов. Существует много типов шаговых двигателей, но самыми дружелюбными в плане управления являются 2-х фазные униполярные двигатели. Этот тип двигателей имеет две независимые обмотки с выводами от середины. Их можно встретить преимущественно в старой технике: принтерах, копирах, дисководах (5-и дюймовых) и еще много где.

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

К клемме Udvig подключаются выводы от середин обмоток и туда же подводится напряжение для питания обмоток. Величина напряжения зависит от самого двигателя, для моего например по документации максимальный ток в обмотках 1,5 Ампера, измерив сопротивление обмоток получил 2 Ома, отсюда вывод что напряжение питания не должно превышать 3 В ну или немного больше, учитывая что запитываться будет индуктивная нагрузка.
Кстати диоды D2-D5 стоят для того, чтобы гасить скачки обратного напряжения после закрытия транзистора. Иначе есть вероятность что ЭДС самоиндукции возникающая во время выключения питания обмотки пробъет транзистор.

Код в Bascom-AVR:

$regfile = «2313def.dat»
$crystal = 4000000

Dim S As Byte ‘эта переменная следит за номером шага двигателя

On Int0 Knopka1 ‘даем имена обработчикам внешних прерываний
On Int1 Knopka2

Config Portb = Output ‘конфигурируем порт на выход
Config Portd.5 = Output ‘конфигурируем ногу для подключения светодиода
Led Alias Portd.5 ‘присваиваем имя LED выводу 5 порта D

‘прерывания будут генерироваться пока на ноге низкий уровень, то есть пока кнопка будет нажата
Config Int0 = Low Level
Config Int1 = Low Level

‘разрешаем прерывания
Enable Interrupts
Enable Int0
Enable Int1

‘основной цикл программы, просто ждем прерывания
Do

Knopka1 : ‘обработчик прерывания первой кнопки

Led = 1 ‘зажигаем светодиод

Incr S ‘увеличим номер шага

If S = 9 Then ‘максимально возможный номер шага = 8
S = 1
End If

Select Case S ‘выбираем какие обмотки включать в зависимости от номера шага

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

Waitus 1000 ‘задержка между шагами

Led = 0 ‘гасим светодиод

Knopka2 : ‘обработчик прерывания второй кнопки

Led = 1 ‘зажигаем светодиод

Decr S ‘тут все тоже самое, только в обратном направлении

If S = 0 Then ‘минимально возможный номер шага = 1
S = 8
End If

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

Led = 0 ‘гасим светодиод

Изменяя величину задержки между шагами, можно в больших пределах регулировать скорость вращения вала. При выбранной мной задержке в 1000 мкс с шаговиком имеющем 200 шагов на оборот (400 полушагов) скорость вращения получается примерно 2,5 оборота в секунду.

UPD: Здесь допилил программу, теперь стало возможным управление шаговым двигателем с компьютера.

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

$regfile = «2313def.dat»
$crystal = 4000000

Dim P As Word
Const F = 1000 ‘этой константой задаем кол-во полушагов которые сделает двигатель при нажатии на кнопку

Dim S As Byte ‘эта переменная следит за номером шага двигателя

On Int0 Knopka1 ‘даем имена обработчикам внешних прерываний
On Int1 Knopka2

Config Portb = Output ‘конфигурируем порт на выход
Config Portd.5 = Output ‘конфигурируем ногу для подключения светодиода
Led Alias Portd.5 ‘присваиваем имя LED выводу 5 порта D

‘прерывания будут генерироваться пока на ноге низкий уровень, то есть пока кнопка будет нажата
Config Int0 = Low Level
Config Int1 = Low Level

‘разрешаем прерывания
Enable Interrupts
Enable Int0
Enable Int1

‘основной цикл программы, просто ждем прерывания
Do

Knopka1: ‘обработчик прерывания первой кнопки

Led = 1 ‘зажигаем светодиод

Incr S ‘увеличим номер шага

If S = 9 Then ‘максимально возможный номер шага = 8
S = 1
End If

Select Case S ‘выбираем какие обмотки включать в зависимости от номера шага
Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001
End Select
Waitus 1000 ‘задержка между шагами

Loop Until P = F ‘когда колво шагов станет равно установленному значению двигатель остановится
P = 0
Led = 0 ‘гасим светодиод
Gifr = 64
Return

Knopka2: ‘обработчик прерывания второй кнопки

Led = 1 ‘зажигаем светодиод

Decr S ‘тут все тоже самое, только в обратном направлении

If S = 0 Then ‘минимально возможный номер шага = 1
S = 8
End If

Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001

Waitus 1000
Loop Until P = F
P = 0
Led = 0 ‘гасим светодиод
Gifr = 128
Return

дописал в шапку
Config Pind.2 = Input
Config Pind.3 = Input
Shag1 Alias Pind.2
Shag2 Alias Pind.3

потом в тело
Do

If Shag1 = 1 And Shag2 = 1 Then
Portb = &B00000000
End If
Loop

Управление шаговым двигателем с помощью Arduino и потенциометра

Шаговые двигатели с каждым годом приобретают все большую популярность в мире электроники поскольку именно они обеспечивают превосходную точность позиционирования различных механизмов. В этой статье мы рассмотрим подключение одного из самых распространенных шаговых двигателей 28-BYJ48 к плате Arduino при помощи модуля ULN2003 и управление им с помощью потенциометра.

Управление шаговым двигателем с помощью Arduino и потенциометра: внешний вид конструкции

В нашей предыдущей статье про подключение шагового двигателя к плате Arduino мы управляли углом его поворота из она монитора последовательной связи, в этом же проекте мы будем управлять поворотом шагового двигателя вращая ручку потенциометра. Если мы будем вращать ручку потенциометра по часовой стрелке, то и шаговый двигатель будет поворачиваться по часовой стрелке, а если мы ручку потенциометра будем поворачивать против часовой стрелки – то и шаговый двигатель будет вращаться против часовой стрелки.

Общие принципы работы шаговых двигателей

Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

Внешний вид шагового двигателя 28-BYJ48

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.

Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Внутрення схема шагового двигателя

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

Технические характеристики шагового двигателя 28-BYJ48

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

Расчет шагов на оборот для шагового двигателя

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

В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

Справедлива следующая формула:

Количество шагов за оборот = 360 / угол шага.

В нашем случае 360/11.25 = 32 шага за оборот.

Зачем нужен драйвер мотора для управления шаговым двигателем

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

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема для управления шаговым двигателем с помощью Arduino и потенциометра

Чтобы подавать питание на соответствующие катушки шагового двигателя мы будем использовать цифровые контакты 8, 9, 10 и 11 платы Arduino, к которым подключены соответствующие контакты драйвера двигателей ULN2003. Потенциометр, с помощью которого мы будем управлять вращением шагового двигателя, подключен к аналоговому контакту A0 платы Arduino.

Драйвер мотора запитывается от контакта 5V платы Arduino. Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.

Объяснение программы для платы Arduino

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

Номер шагаКонтакты, на которое подается питаниеКатушки, на которое подается питание
Шаг 18 и 9A и B
Шаг 29 и 10B и C
Шаг 310 и 11C и D
Шаг 411 и 8D и A

На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.

Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.

Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:

#define STEPS 32

Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).

Stepper stepper (STEPS, 8, 10, 9, 11);

Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.

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

Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.

Теперь, чтобы двигатель сделал один шаг, мы можем использовать следующую команду:

Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.

Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:

А один шаг против часовой стрелки:

В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.

potVal = map(analogRead(A0),0,1024,0,500);
if (potVal>Pval)
stepper.step(5);
if (potValstepper.step(-5);
Pval = potVal;

Работа проекта

Когда вы сделаете все необходимые соединения в схеме данного проекта у вас должна получиться примерно следующая конструкция:

Внешний вид собранной конструкции для этого проекта

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

Исходный код программы

Код программы достаточно простой, я надеюсь у вас не вызовет никаких затруднений реализация данного проекта.

Быстрые движения под высоким напряжением, или почти вся правда об управлении шаговым мотором

Доброго вам времени суток, уважаемые гики и сочувствующие!

В этой публикации я хочу поделиться своим опытом управления. Точнее – управления шагами. А уж если быть совсем точным, речь пойдёт об управлении замечательным устройством – шаговым электродвигателем.

Что же такое этот самый шаговый электродвигатель? В принципе, в плане функциональности этот мотор можно представить как обычный электромотор, каждый оборот вала которого разбит на множество одинаковых, точно фиксированных шагов. Перемещением на определённое количество шагов мы можем позиционировать вал шагового мотора с высокой точностью и хорошей повторяемостью. Каждый шаг можно разбить на множество ступенек (так называемый микростеппинг), что увеличивает плавность хода мотора, способствует подавлению резонансов, а также увеличивает угловое разрешение. Различия между полношаговым режимом (слева), 1/2 микростеппингом (в центре) и 1/16 микростеппингом (справа) видны невооружённым глазом:

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

Из этой картинки видно, что шаговый мотор в электрическом плане представляет собой два или более электромагнита, которые необходимо переключать в определённой последовательности для приведения ротора в движение.
Лирическое отступление: На настоящий момент существуют два основных типа шаговых моторов: униполярный и биполярный. Поскольку униполярные моторы имеют меньший крутящий момент и худшие скоростные характеристики, в данной публикации они рассматриваться не будут.
Итак, вернёмся к управлению биполярным мотором. Как это ни парадоксально звучит, но зачастую проще обсуждать общие принципы на конкретных примерах. В качестве примера мы возьмём шаговый мотор ST4118L1804-A производителя Nanotec. Почему именно этот мотор и производитель? Причина проста: по основным характеристикам это типичный представитель моторов типоразмера NEMA 17, широко применяющихся в радиолюбительской практике, и имеет к тому же довольно подробную техдокументацию (которая начисто отсутствует у китайских noname-моторов).

Основные характеристики данного мотора:
Рабочее напряжение 3,15 В
Рабочий ток 1,8 А
Активное сопротивление обмотки 1,75 Ом
Индуктивность обмотки 3,3 мГн
Момент удержания 0,5 Нм
Угловой размер шага 1,8° (200 шагов на один оборот ротора)

В данном случае самое главное — это правильная интерпретация данных. Применив закон Ома, выясняем, что производитель указал рабочий ток и напряжение для постоянного тока, протекающего через обмотки двигателя, без учёта индуктивности.
Проверка: I = U/R, или 1,8 А = 3,15 В/1,75 Ом. Всё сходится.
Какой же будет мощность рассеяния при питании обмоток постоянным током?
Всё просто: P=I x U, или 1,8 А х 3,15 В = 5,67 Вт. В полушаговом режиме возможна ситуация, когда ток течёт через обе обмотки мотора, соответственно рассеиваемую мощность нужно удвоить: 5,67 Вт х 2 = 11,34 Вт. Это достаточно много, и может привести к перегреву мотора. Эта же величина является минимальной мощностью блока питания для этого мотора. Обыкновенный 3D принтер имеет пять подобных моторов, соответственно для питания драйверов необходим источник питания с минимальной мощностью 11,34 Вт х 5 = 56,7 Вт. К этой цифре необходимо добавить электрическую мощность, превращённую мотором в кинетическую или потенциальную энергию при работе принтера. Точный расчёт этой мощности — дело достаточно сложное, на практике проще всего добавить 75% к рассчитанной тепловой мощности и на том завершить расчёты. Почему именно 75%? Дело в том, что обычный шаговый мотор способен совершить полезную работу на величину примерно 2/3 от максимальной тепловой мощности. В данном случае для создания какого-либо узла или устройства сначала подбирается подходящий мотор (например, по крутящему моменту), а после этого рассчитывается мощность блока питания.
Итоговая мощность блока питания для пяти шаговых моторов: 56,7 Вт х 1,75 = 99,225 Вт.
Конечно, на практике ни в одном любительском устройстве не используются моторы под максимальной нагрузкой, и реальная мощность потребления будет, скорее всего, намного ниже расчётной. Я же, как человек ленивый и скаредный, крайне не люблю делать одно и то же два раза, поэтому беру блок питания всегда с некоторым запасом (то есть, согласно вышеприведённым расчётам).
Теперь пришла пора приступить к определению минимально необходимого напряжения блока питания. К сожалению, этому параметру уделяется незаслуженно маленькое внимание в тематических публикациях. Почему этот параметр так важен? Дело в том, что при вращении ротора шагового мотора через катушки течёт переменный ток, ограниченный не только активным, но также и индуктивным сопротивлением обмоток.
Рассмотрим предоставленный производителем график зависимости крутящего момента нашего мотора от частоты вращения:

На графике присутствуют две линии, показывающие зависимость крутящего момента от частоты вращения для напряжения питания 24 В (красная линия) и 48 В (зелёная линия). Нетрудно заметить, что спад крутящего момента начинается примерно с 300 об/мин для 24 В и примерно с 600-700 об/мин для напряжения 48 В. При этом необходимо упомянуть, что производитель использует недоступные любителям дорогостоящие промышленные драйверы. Почему же так важно напряжение питания драйвера, если оно даже в случае питания от 12 В заведомо выше паспортной величины напряжения питания шагового мотора (3,15 В)? Дело в том, что шаговый мотор управляется током, а не напряжением, и именно источниками тока являются все современные драйверы. В идеальном случае драйвер обеспечивает заданный ток в обмотках двигателя вне зависимости от частоты вращения ротора, нагрузки, изменения температуры и других параметров. Это организовано за счёт работы ШИМ-регулятора, управляемого зачастую довольно сложными алгоритмами. Из технической документации нашего мотора видно, что для полного оборота ротору необходимо совершить 200 шагов, при 300 об/мин это составит 60 000 шагов в минуту, или 1000 шагов в секунду. Это, проще говоря, соответствует переменному току частотой 1 кГц. На этой частоте индуктивное сопротивление обмотки составит (R(L)=2π×F×L): 2π х 1 кГц х 3,3 мГн = 20,73 Ом. Какое же напряжение необходимо для обеспеченияя тока в 1,8 А при этом сопротивлении? Закон Ома не дремлет (U=IR): 1,8 А х 20,73 Ом = 37,31 В. Неудивительно, что выше частоты вращения 300 об/мин наблюдается спад крутящего момента: драйверу банально не хватает напряжения питания. Почему же при таком вопиющем недостатке питания (37 — 24 =13 В) спад не наступает при более низкой частоте вращения? Дело в том, что в современных драйверах используется мостовая схема выходных каскадов, что позволяет «удваивать» напряжение, прикладываемое к обмоткам мотора. То есть, теоретически драйвер способен приложить «виртуальные» 48 В к обмоткам при напряжении питания 24 В, что создаёт теоретический запас по напряжению 48 — 37 = 11 В. На практике же этот запас будет нивелирован потерями в драйвере, сопутствующих цепях и активным сопротивлением обмоток мотора (активное сопротивление обмоток присутствует постоянно, и даже несколько возрастает при нагреве мотора). При увеличении частоты вращения ротора свыше 300 об/мин пропорционально растёт частота импульсов и, соответственно, увеличивается индуктивное сопротивление обмотки. При питании от 24 В драйверу перестаёт хватать напряжения питания для поддержания тока в обмотках, и крутящий момент неуклонно снижается. То же самое происходит при питании драйвера от 48 В, но уже гораздо значительно позже, при частоте вращения 600-700 об/мин.
Итак, с мощностью и величиной напряжения блока питания всё ясно, теперь необходимо переходить к практической реализации универсального драйвера, способного как к филигранной работе при помощи крохотных NEMA 11, так и к сотрясению основ мира в паре с могучими NEMA 23. Какими же основными качествами должен иметь драйвер моей мечты?

Читайте также  Как сделать двигатель для лодки из бензокосы чертежи

1. Высокое напряжение питания. Поскольку в техдокументации к моторам крайне редко указано максимальное напряжение питания, лучше будет ограничиться напряжением 48 В.
2. Важнейший параметр: высокий выходной ток. NEMA 23 имеют рабочие токи вплоть до 3,5 А, драйвер должен обеспечивать этот ток с запасом 30%. Путём нехитрых расчётов получаем максимальный рабочий ток около 4,5 А.
3. Простая и оперативная подстройка силы выходного тока.
4. Наличие микростеппинга, как минимум 1/8 шага
5. Наличие защиты от КЗ, перегрева, и т.д.
6. Небольшой размер, возможность крепления произвольного радиатора.
7. Исполнeние в виде интегральной схемы. XXI век на дворе!
8. Простая схема включения с минимальным количеством дискретных компонентов.
9. Низкая цена.

После множества бессонных ночей пятиминутного копания в Google выяснилось, что единственной доступной микросхемой драйвера с подходящими параметрами является TB6600HG. Покупка готового китайского драйвера на eBay показала, что не всё ладно в датском королевстве, далеко не всё. В частности, китайский драйвер отказался напрямую работать с выходами Arduino Due, и «завёлся» только через буферный преобразователь уровней. При работе с трёхамперной нагрузкой драйвер грелся и терял шаги десятками. Вскрытие пациента показало, что в нём не только была установлена микросхема предыдущего поколения (TB6560), а даже и термопаста не смогла найти себе места в списке компонентов. К тому же размерами и весом китайский драйвер наводил меня на мысли о моей молодости… о прошлом веке, если быть совсем точным. Ну нафиг, сказал во мне интеллигент в третьем поколении, мы сделаем свой драйвер, с преферансом и поэтессами. Если бы разработчики KiCAD видели, как я обращаюсь с их детищем, я разорился бы на одних только адвокатах:


С целью минимизации размеров была спроектирована четырёхслойная печатная плата. Этот факт, к сожалению, исключает её изготовление в домашних условиях. Посему на берлинской фирме LeitOn были заказаны 36 таких плат, каждая из которых обошлась в итоге около пяти евро. Часть этих плат были впоследствии выкуплены у меня собратьями по увлечению, и в итоге изготовление плат вышло не слишком накладным предприятием. Микросхемы TBB6600HG были заказаны на Aliexpress по 4 евро за штуку, остальные компоненты были заказаны на eBay, в пересчёте на один драйвер цена дискретных компонентов составила 2 евро. В качестве радиаторов были взяты пятисантиметровые отрезки П-образного алюминиевого профиля, пластиковые каркасы были отпечатаны на 3D принтере. Итого цена одного драйвера составила около 12 евро. Это справедливая цена за драйвер со следующими характеристиками:

Напряжение питания от 8 до 42 Вольт
Максимальный долговременный рабочий ток 4,5 Ампер, устанавливается потенциометром
Микростеппинг вплоть до 1/16 шага
Защита: КЗ, перегрев, низкое напряжение питания
Компактные размеры и низкий вес
Работа с уровнями входных сигналов от 3,3 до 5,5 вольт
Простая установка микростеппинга с помошью микропереключателей — к чёрту перемычки!

Готовые печатные платы:

Собранные и недособранные драйверы.

Видео работы драйвера в моём старом 3D принтере. Здесь трёхамперный NEMA 17 бодро гоняет подогреваемую рабочую площадку принтера размером 45 х 25 см через шестнадцатимиллиметровый шпиндель длиной 60 см:

Финальное фото: самодельные драйвера на своём рабочем месте в моём новом 3D принтере.

Публикуется под лицензией WTFPL

Подключение шагового двигателя к Ардуино

Шаговый двигатель Ардуино: схема подключения, управление,

Шаговый двигатель (stepper motor) предназначен для точного позиционирования или перемещения объекта на заданное количество шагов вала. Плата Arduino может управлять шаговым двигателем с помощью драйвера и библиотеки stepper.h или accelstepper.h. Рассмотрим принцип работы и схему подключения шагового двигателя к Arduino Uno / Nano, а также разберем скетч для управления шаговым мотором.

Принцип работы шагового двигателя

В зависимости от конструкции, сегодня применяются три вида шаговых двигателей: с постоянным магнитом, с переменным магнитным сопротивлением и гибридные двигатели. У двигателей с постоянным магнитом число шагов на один оборот вала доходит до 48, то есть один шаг соответствует повороту вала на 7,5°. Гибридные двигатели обеспечивают не меньше 400 шагов на один оборот (угол шага 0,9°).

Устройство шагового мотора Ардуино

Фото. Устройство шагового мотора в разрезе

Подсчитав количество сделанных шагов, можно определить точный угол поворота ротора. Таким образом, шаговый двигатель является сегодня идеальным приводом в 3D принтерах, станках с ЧПУ и в другом промышленном оборудовании. Это лишь краткий обзор устройства и принципа работы stepper motor, нас больше интересует, как осуществляется управление шаговым двигателем с помощью Ардуино.

Драйвер шагового двигателя Ардуино

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

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

Фото. Виды драйверов для управления шаговым двигателем

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

Схема подключения шагового двигателя 28BYJ-48 к Arduino Uno через драйвер ULN2003 изображена на рисунке ниже. Основные характеристики мотора 28BYJ-48: питание от 5 или 12 Вольт, 4-х фазный двигатель, угол шага 5,625°. Порты драйвера IN1 — IN4 подключаются к любым цифровым выводам платы Arduino Mega или Nano. Светодиоды на модуле служат для индикации включения катушек двигателя.

Как подключить шаговый двигатель к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • драйвер шагового двигателя ULN2003;
  • шаговый двигатель 28BYJ-48;
  • провода «папа-мама».

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

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector