ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ
Блог технической поддержки моих разработок
Урок 34. STEP/DIR драйверы шаговых двигателей. Основные понятия. Протокол STEP/DIR.
В статье рассказываю о STEP/DIR драйверах шаговых двигателей, о преимуществах применения их, об интерфейсе управления STEP/DIR.
В предыдущих уроках для подключения шаговых двигателей к плате Ардуино мы использовали простые драйверы-ключи, которые по сигналам от микроконтроллера коммутировали обмотки двигателей. Вся логика работы была реализована в программе микроконтроллера.
Достоинство такого решения очевидно – простота и минимум аппаратных средств. Всего четыре транзисторных ключа для униполярных приводов или микросхема L298N для биполярных шаговых двигателей достаточно для управления ими. Да и программа коммутации фаз несложная, занимает совсем не много ресурсов микроконтроллера. Альтернативным вариантом управления шаговыми двигателями является использование STEP/DIR драйверов.
STEP/DIR драйвер это аппаратный модуль управления шаговым двигателем, использующий для связи с микроконтроллером протокол STEP/DIR.
Кроме того STEP/DIR драйверы обеспечивают широкий набор дополнительных функциональных возможностей:
- стабилизацию фазных токов;
- микро шаговый режим;
- защиту выходных ключей от замыкания нагрузки;
- сложную коммутацию для ускорения спада токов в обмотках;
- защиту от перегрева;
- оптоизоляцию сигналов управления.
Стабилизация тока фазных обмоток.
Главный недостаток простых драйверов шаговых двигателей – отсутствие стабилизации тока обмоток.
В предыдущих уроках я уже затронул эту тему. Итак, как мы подключали обмотки к источнику питания. По самой простой схеме – через транзисторные ключи.
Какие недостатки этой схемы?
Постоянный ток через обмотку при замкнутом ключе определяется по закону Ома:
Iфазы = ( Uпитания — Uключей )/ Rобмотки
Ток фазы определяется как отношение напряжения питания к активному сопротивлению обмотки. Т.е. какой попало двигатель подключать нельзя. Надо подбирать привод по сопротивлению обмоток или менять напряжение питания.
В предыдущем уроке я использовал двигатель с сопротивлением обмотки 1,65 Ом. Если бы я его подключил к источнику питания 12 В, то ток был бы свыше 7 А. Двигатель просто сгорит. Для обеспечения требуемого тока фазы 1 А, напряжения источника питания должно быть 1,65 Ом * 1 А = 1,65 В. Где взять такой источник питания я не знаю. К тому же на открытых ключах падает напряжение сравнимое с напряжение на обмотке, которое тоже надо учесть в расчетах. А оно не стабильно и строго не определено. Никаких приемлемых вариантов не видно.
Для подключения такого двигателя я использовал ограничительные резисторы, включенные последовательно с обмотками.
Формула вычисления тока фазы выглядит так:
Iфазы = ( Uпитания — Uключей )/ ( Rобмотки + Rограничительный )
Но при такой схеме на ограничительных резисторах может выделяться значительная мощность, часто превышающая мощность, потребляемую двигателем. На маломощных двигателях такой вариант более или менее приемлем. При увеличении мощности двигателя становится сомнительным. В схеме из предыдущего урока только на одном ограничительном резисторе выделялось до 7,4 Вт.
Iфазы =( 12 В – 2 В ) / (1,65 + 10 ) = 0,86 А
Pограничительная = I 2 * R = 0,86 * 0,86 * 10 = 7,4 Вт.
И это для тока фазы 0,86 А и только на одном резисторе. Даже на этом двигателе практически не допустимые потери.
Простые драйверы можно использовать с ограниченным числом типов двигателей, или с двигателями небольших мощностей.
Второй недостаток простых драйверов-ключей связан со скоростью нарастания тока в обмотках двигателя. В уроках 28 и 29 я подключал униполярный двигатель FL57STH76-1006 через транзисторные ключи к источнику питания 12 В. Сопротивление обмоток двигателя 8,6 Ом, индуктивность 14 мГн.
Давайте посмотрим, какую форму будет иметь ток фазы для скорости вращения 1 оборот в секунду. Такая скорость соответствует периоду переключения фаз 1 сек / 400 шагов на оборот = 2,5 мс.
Я промоделировал схему в пакете SwCAD.
На диаграмме видно, как задерживается рост тока через обмотку (синий цвет) по отношению к напряжению на обмотке (зеленый цвет). В предыдущем уроке я рассчитал, что для этого двигателя даже при нулевом сопротивлении обмоток ток фазы достигнет значения 1 А за время
T = I * L / U = 1 А * 14 мГн / 12 В = 1,2 мс.
И все эти расчеты для скорости вращения 1 оборот в сек. У меня на практике и получилась максимальная скорость 1 оборот в сек. Дальше двигатель выходит из синхронизма. Не хватает крутящего момента.
Выход – стабилизировать ток фазы. Стабилизатор тока это схема, меняющая напряжение на нагрузке, стремясь обеспечить заданный ток. Т.е. напряжение на нагрузке зависит от сопротивления. Если сопротивление увеличивается, то для того чтобы обеспечить заданный ток стабилизатор тока увеличивает напряжение. При уменьшении сопротивления нагрузки напряжение снижается. Естественно стабилизатор тока работает в ограниченном диапазоне напряжений. При невозможности обеспечить требуемый ток он формирует на нагрузке максимально возможное напряжение.
Например, если стабилизатор тока питается от источника 12 В, необходимо стабилизировать ток 1 А, а подключили нагрузку сопротивление 1000 Ом, то на нагрузке будет 12 В. Хотя теоретически стабилизатор тока должен обеспечить напряжение 1000 В.
Для шаговых двигателей это идеальный закон управления токами обмоток.
- Можно подключать двигатель с любым сопротивлением обмоток. Ток будет ограничен автоматически.
- Обеспечивается максимально возможная скорость нарастания тока в обмотках. В начале импульса фазы стабилизатор тока выдаст максимальное напряжение на обмотке, а при увеличении тока оно будет снижаться до требуемого значения.
Естественно речь идет об импульсных стабилизаторах, имеющих высокий КПД. Силовая часть стабилизаторов тока в обмотках двигателей практически состоит только из ключей. Роль сглаживающего фильтра выполняет индуктивность обмотки.
Реализовать стабилизацию тока на управляющем микроконтроллере довольно проблематично. К примеру, при скорости 10 оборотов в сек, и числе шагов двигателя на полный оборот равном 400, длительность импульса коммутации фаз равна 250 мкс. За такое время ШИМ регулятор, реализованный в программе микроконтроллера, не успеет выполнить функции стабилизации тока. Примерно каждые 10 мкс необходимо измерить ток фазы и вычислить новое значение ЩИМ. А надо реализовать два отдельных регулятора для разных обмоток. Да и скорости вращения бывают выше.
Поэтому функция стабилизации тока обычно реализуется на отдельном аппаратном драйвере. Даже в этом случае, как правило, используется не ШИМ регулятор, а синхронный релейный регулятор. Релейный регулятор открывает ключи и с помощью аналогового компаратора следит за током. При достижении заданного значения тока ключи закрываются. При снижении тока ниже порога опять открываются. Таким образом, в обмотке создается ток с заданным значением. Пульсации сглаживаются индуктивностью обмотки. Релейный регулятор прост в реализации и, в отличие от ШИМ регулятора, обладает высоким быстродействием.
Кроме того стабилизация тока фаз необходима при реализации микро шагового режима управления двигателем. Для установки ротора в определенное положение между фазными полюсами двигателя необходимо обеспечить заданную пропорцию токов обмоток. В статье о драйвере TB6560 можете посмотреть диаграммы соотношения токов фаз для микро шагового режима с 16 градациями. Точность стабилизации тока должна быть достаточно высокая.
Интерфейс STEP/DIR.
Де факто это основной интерфейс управления аппаратными драйверами шаговых двигателей. Для связи с микроконтроллером используются три сигнала.
STEP – шаг. Каждый импульс инициирует поворот двигателя на один шаг. Если драйвер работает в полу шаговом или микро шаговом режимах, то поворот происходит не на физический шаг двигателя, а на часть шага, определяемого режимом. Для полу шагового режима это половина физического шага, для микро шагового – микро шаг. Драйверы реагируют на фронт импульса, как правило, отрицательный.
Частота следования импульсов сигнала STEP определяет скорость вращения двигателя. Естественно существуют ограничения на максимальную частоту импульсов сигнала STEP и на минимальную длительность импульса. Драйвер должен успеть принять, выделить и обработать каждый импульс. Реальный двигатель добавит свои ограничения на скорость вращения, связанные с механическими параметрами, токами обмоток, числом полюсов, механическими нагрузками и т.п.
DIR – сигнал задающий направления вращения двигателя. Как правило, при высоком уровне сигнала двигатель вращается по часовой стрелке. Сигнал DIR должен быть сформирован до импульса STEP.
ENABLE – сигнал разрешения работы драйвера. Запрещающий уровень сигнала снимает напряжение на выходе драйвера. Логика работы устройства не меняется. Сигнал используется для остановки двигателя в режиме без тока удержания. Положение ротора не фиксируется. Разрешающий уровень сигнала ENABLE – низкий, т.е. отсутствие напряжения. Если сигнал не используется, то его можно просто не подключать, бросить входы драйвера ”в воздухе”.
Как правило, все сигналы STEP/DIR драйверов имеют гальваническую развязку, выполненную на оптоэлектронных компонентах. Коммутация обмоток двигателей вызывает значительные импульсные помехи в цепях питания и приводит к смещению уровней общих (земляных) проводов всех электронных модулей системы. В таких условиях гальваническая развязка сигналов управления абсолютно необходима.
Преимущества применения STEP/DIR драйверов.
Я обобщу положительные качества STEP/DIR драйверов.
- Стабилизация тока фаз и как следствие:
- Можно подключать двигатели с любым сопротивлением обмоток.
- Высокая скорость нарастания тока в обмотках, что позволяет увеличить скорость вращения.
- Микро шаговый режим управления. Позволяет реализовать системы с высокой точностью позиционирования, используя двигатели с ограниченным числом физических шагов. В следующем уроке я свой двигатель, имеющий 400 шагов на оборот, превращу в двигатель с 6400 шагами на полный оборот.
- Защита выходных ключей от замыкания нагрузки;
- Оптимальная коммутация выходных ключей для ускорения спада токов в обмотках. Позволяет увеличить скорость вращения и снизить вибрации.
- Защита от перегрева.
- Опоизоляция управляющих сигналов. Обеспечивает высокую помехозащищенность сиситемы.
В качестве примера STEP/DIR драйвера могу привести модуль TB6560-V2.
Это один из самых недорогих STEP/DIR драйверов. На момент написания статьи (октябрь 2016) цена модуля составляла 500-700 руб. Тем не менее, он обеспечивает все перечисленные в статье функции и режимы.
В следующем уроке будем подключать этот драйвер к плате Ардуино. Я представлю библиотеку управления STEP/DIR драйверами.
Управление шаговым двигателем с помощью Arduino и драйвера A4988
Если вы планируете создать свой собственный 3D-принтер или станок с ЧПУ, вам нужно будет управлять несколькими шаговыми двигателями. Если использовать для этого только Arduino, то большая часть скетча будет занята кодом управления шаговыми двигателями и не останется много места для чего-то еще.
Данную проблему можно решить, использовав специальный автономный драйвер шагового двигателя — A4988 .
Модуль A4988 может контролировать как скорость, так и направление вращения биполярного шагового двигателя, такого как NEMA 17, использую всего два вывода контроллера.
Шаговые двигатели используют зубчатое колесо и электромагниты (катушки), позволяющие вращать ось по одному шагу за раз.
Драйвер двигателя посылает высокий импульс на соответствующую катушку, которая в свою очередь притягивает ближайший зуб зубчатого колеса, в результате чего ось двигателя проворачивается на определенный градус (шаг).
От характера управляющих импульсов зависит поведение шагового двигателя, а именно:
- Последовательность импульсов определяет направление вращения двигателя.
- Частота импульсов определяет скорость двигателя.
- Количество импульсов определяет угол поворота.
Микросхема драйвера шагового двигателя A4988
Модуль собран на чипе A4988. Не смотря на свой малый размер (всего 0,8 ″ × 0,6 ″), но обладает хорошими характеристиками.
Драйвер шагового двигателя A4988 имеет высокую выходную мощность (до 35 В и 2 А) и позволяет управлять одним биполярным шаговым двигателем с выходным током до 2 А на катушку, например NEMA 17.
Для удобства работы драйвер имеет встроенный транслятор. Использование транслятора позволило уменьшить количество управляющих контактов до 2, один для управления шагами, а другой для управления направлением вращения.
Драйвер предлагает 5 различных разрешений шага, а именно:
Распиновка драйвера A4988
Драйвер A4988 имеет всего 16 контактов, которые связывают его с внешним миром. Распиновка у A4988 следующая:
Давайте ознакомимся со всеми контактами по очереди.
Выводы питания
На самом деле A4988 требует подключения двух источников питания.
VDD и GND используется для управления внутренней логической схемой. Напряжение питания должно находиться в пределах от 3 до 5,5 В.
Vmot и GND для обеспечения питания шагового двигателя. Тут напряжение в пределах от 8 до 35 В.
Согласно datasheet, для питания двигателя требуется соответствующий разделительный конденсатор рядом с платой, способный выдерживать ток 4 А.
Этот драйвер имеет на плате керамические конденсаторы с низким ESR , что делает его уязвимым для скачков напряжения. В некоторых случаях эти выбросы могут превышать 35 В (максимальное номинальное напряжение A4988), и это может потенциально необратимо повредить плату и даже двигатель.
Один из способов защитить драйвер от таких скачков — подключить электролитический конденсатор емкостью 100 мкФ (или как минимум 47 мкФ) к контактам источника питания двигателя.
Выводы выбора микрошага
Драйвер A4988 допускает использование режима микрошага. Это достигается за счет подачи питания на катушки с промежуточными уровнями тока.
Например, если вы решите управлять шаговым двигателем NEMA 17 с шагом 1,8 градуса (200 шагов на оборот) в режиме 1/4 шага, то двигатель будет выдавать 800 микрошагов на оборот.
Драйвер A4988 имеет три вывода селектора размера шага (разрешения), а именно: MS1, MS2 и MS3. Установив соответствующие логические уровни на эти контакты, мы можем настроить двигатели на одно из пяти ступенчатых разрешений.
По умолчанию эти три контакта подтянуты к земле внутренним резисторам. Если мы оставим эти выводы не подключенными, то двигатель будет работать в режиме полного шага.
Выводы управления
Драйвер A4988 имеет два управляющих входа, а именно: STEP и DIR.
STEP — управляет микрошагом мотора. Каждый высокий импульс, отправляемый на этот вывод, приводит двигатель в действие на количество микрошагов, заданное выводами Microstep Selection (MS1, MS2 и MS3). Чем быстрее импульсы, тем быстрее будет вращаться двигатель.
DIR — управляет направлением вращения двигателя. Если на него подать высокий уровень, то двигатель будет вращается по часовой стрелке, а если низкий — против часовой стрелки.
Если вы просто хотите, чтобы двигатель вращался только в одном направлении, то вы можете соединить вывод DIR непосредственно с VCC или GND соответственно.
Выводы STEP и DIR не подтянуты внутренними резисторами, поэтому вы не должны оставлять их не подключенными.
Выводы управления питанием A4988
A4988 имеет три различных вывода для управления состоянием питания, а именно. EN, RST и SLP.
EN — вывод включения (0)/ выключения (1) драйвера A4988. По умолчанию на этом выводе установлен низкий уровень, поэтому драйвер всегда включен.
SLP — подача на данный вывод сигнала низкого уровня переводит драйвер в спящий режим, сводя к минимуму потребление энергии. Вы можете использовать это для экономии энергии.
RST — при подаче сигнала низкого уровня все входные данные STEP игнорируются, до тех пор пока не будет установлен высокий уровень. Низкий уровень также сбрасывает драйвер, устанавливая внутренний транслятор в предопределенное состояние Home. Исходное состояние — это в основном начальное положение, с которого запускается двигатель, и оно различается в зависимости от разрешения микрошага.
Если вам не нужно использовать вывод RST, вы можете подключить его к соседнему контакту SLP / SLEEP, чтобы вывести его на высокий уровень и включить драйвер.
Выводы для подключения шагового двигателя
Выходные контакты: 1B, 1A, 2A и 2B.
К этим выводам можно подключить любой биполярный шаговый двигатель с напряжением питания от 8 до 35 В.
Каждый выходной контакт модуля может обеспечить ток до 2 А. Однако величина тока, подаваемого на двигатель, зависит от источника питания системы, системы охлаждения и настройки ограничения тока.
Система охлаждения — радиатор
Чрезмерное рассеивание мощности микросхемы драйвера A4988 приводит к повышению температуры, которая может выйти за пределы возможностей микросхемы, что, вероятно, приведет к ее повреждению.
Даже если микросхема драйвера A4988 имеет максимальный номинальный ток 2 А на катушку, микросхема может подавать только около 1 А на катушку без перегрева.
Для достижения более 1 А на катушку требуется радиатор или другой метод охлаждения.
Драйвер A4988 обычно поставляется с радиатором. Желательно установить его перед использованием драйвера.
Ограничение тока
Перед использованием драйвера нам нужно сделать небольшую настройку. Нам нужно ограничить максимальный ток, протекающий через катушки шагового двигателя, и предотвратить превышение номинального тока двигателя.
На драйвере A4988 есть небольшой потенциометр, который можно использовать для установки ограничения тока. Вы должны установить ограничение по току равным или ниже номинального тока двигателя.
Для этого есть два метода:
Способ 1:
В данном случае мы собираемся установить ограничение тока путем измерения напряжения (Vref) на выводе «ref».
- Взгляните на техническое описание вашего шагового двигателя. Запишите его номинальный ток. В нашем случае мы используем NEMA 17 200 шагов/об, 12 В 350 мА.
- Переведите драйвер в полношаговый режим, оставив три контакта выбора микрошага отключенными.
- Удерживайте двигатель в фиксированном положении, не синхронизируя вход STEP.
- Во время регулировки измерьте напряжение Vref (один щуп мультиметра на минус питания, а другой к металлическому корпусу потенциометра).
- Отрегулируйте напряжение Vref по формуле:
ограничение тока = Vref x 2,5
Например, если ваш двигатель рассчитан на 350mA, вы должны установить опорное напряжение 0,14В.
Способ 2:
В данном случае мы собираемся установить ограничение тока, измеряя ток, протекающий через катушку двигателя.
- Взгляните на техническое описание вашего шагового двигателя. Запишите его номинальный ток. В нашем случае мы используем NEMA 17 200 шагов / оборот, 12 В 350 мА.
- Переведите драйвер в полношаговый режим, оставив три контакта выбора микрошага отключенными.
- Удерживайте двигатель в фиксированном положении, не синхронизируя вход STEP. Не оставляйте вход STEP висящим в воздухе, подключите его к источнику питания логики (5 В)
- Подключите амперметр последовательно с одной из катушек шагового двигателя и измерьте фактический ток.
- Возьмите небольшую отвертку и отрегулируйте потенциометр ограничения тока, пока не установите номинальный ток шагового двигателя.
Подключение драйвера шагового двигателя A4988 к Arduino UNO
Теперь, когда мы имеем всю необходимую информацию о драйвере A4988, мы можем перейти к подключению его к нашей Arduino Uno .
Подключения довольно простое. Начните с подключения VDD и GND (рядом с VDD) к контактам 5V и минус на Arduino. Входные контакты DIR и STEP подключите к цифровым контактам №2 и №3 на Arduino соответственно. Шаговый двигатель подключите к контактам 2B, 2A, 1A и 1B.
Подключение или отключение шагового двигателя при включенном драйвере может привести к его повреждению.
Затем подключите вывод RST к соседнему выводу SLP/SLEEP, чтобы драйвер оставался включенным. Также держите контакты выбора микрошага отключенными, чтобы двигатель работал в полношаговом режиме.
Наконец, подключите источник питания двигателя к контактам VMOT и GND. Не забудьте установить большой развязывающий электролитический конденсатор 100 мкФ на контакты источника питания двигателя, рядом с платой.
Код Arduino — простой пример
Следующий скетч даст вам полное представление о том, как управлять скоростью и направлением вращения биполярного шагового двигателя с помощью драйвера шагового двигателя A4988, и может служить основой для более практических экспериментов и проектов.
Пояснение к скетчу:
Скетч начинается с определения выводов Arduino, к которым подключены выводы STEP и DIR A4988. Мы также определяем stepsPerRevolution. Установите его в соответствии со спецификациями шагового двигателя.
В разделе setup() кода все контакты управления двигателем объявлены как цифровой выход.
В цикле loop() мы медленно вращаем двигатель по часовой стрелке, а затем быстро вращаем его против часовой стрелки с интервалом в секунду.
Управление направлением вращения: для управления направлением вращения двигателя мы устанавливаем вывод DIR в высокое или низкое положение. Сигнал высокого уровня вращает двигатель по часовой стрелке, а низкого — против часовой стрелки.
Скорость двигателя определяется частотой импульсов, которые мы посылаем на вывод STEP. Чем чаще импульсы, тем быстрее вращается двигатель. Импульсы — это не что иное, как установка высокого уровня, некоторое ожидание, затем установка низкого уровня и снова ожидание. Изменяя задержку между двумя импульсами, вы изменяете частоту этих импульсов и, следовательно, скорость двигателя.
Скетч Arduino — использование библиотеки AccelStepper
Управление шаговым двигателем без библиотеки идеально подходит для простых приложений с одним двигателем. Но если вы хотите управлять несколькими шаговыми двигателями, то вам понадобится библиотека.
Итак, для нашего следующего эксперимента мы будем использовать расширенную библиотеку шаговых двигателей под названием AccelStepper library. Она поддерживает:
- Ускорение и замедление.
- Одновременное управление несколькими шаговыми двигателями с независимым шагом для каждого двигателя.
Эта библиотека не включена в IDE Arduino, поэтому вам необходимо сначала установить ее.
Установка библиотеки
Чтобы установить библиотеку, перейдите в Эскиз> Include Library> Manage Libraries… Подождите, пока диспетчер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Отфильтруйте результаты поиска, набрав «Accelstepper». Щелкните первую запись и выберите «Установить».
Скетч Arduino
Вот простой код, который ускоряет шаговый двигатель в одном направлении, а затем замедляется, чтобы остановиться. Как только двигатель совершает один оборот, он меняет направление вращения. И он повторяет это снова и снова.
Пояснение к скетчу:
Мы начинаем с подключения недавно установленной библиотеки AccelStepper.
Определяем выводы Arduino, к которым подключаются выводы STEP и DIR A4988. Устанавливаем motorInterfaceType значение 1. (1 означает внешний шаговый драйвер с выводами Step и Direction).
Затем мы создаем экземпляр библиотеки с именем myStepper.
В функции setup() мы сначала устанавливаем максимальную скорость двигателя 1000. Затем мы устанавливаем коэффициент ускорения для двигателя, чтобы добавить ускорение и замедление к движениям шагового двигателя.
Затем мы устанавливаем обычную скорость 200 и количество шагов, например, 200 (поскольку NEMA 17 совершает 200 шагов за оборот).
В функции loop() мы используем оператор If, чтобы проверить, как далеко двигателю нужно проехать (путем чтения distanceToGo), пока он не достигнет целевой позиции (moveTo). Как только distanceToGo станет равен нулю мы переключаем двигатель в противоположное направление, изменив moveTo на противоположное значение относительно его текущего положения.
Теперь в конце цикла мы вызываем функцию run(). Это самая важная функция, поскольку шаговый двигатель не будет работать, пока эта функция не будет выполнена.