Урок 28. Униполярный шаговый двигатель в системе Ардуино. Библиотека Stepper.

FL57STH

Этой публикацией я начинаю цикл уроков об управлении шаговыми двигателями в системе Ардуино. Первый урок посвящен подключению к Ардуино униполярных шаговых двигателей.

Предыдущий урок     Список уроков     Следующий урок

Шаговый двигатель – уникальное электромеханическое устройство, которое объединяет в себе двигатель и позиционирующее устройство без обратной связи. Применение шаговых двигателей значительно упрощает механическую конструкцию любого оборудования. Они просто незаменимы в самых разных областях машиностроения: в станках с ЧПУ, робототехнике, в промышленном оборудовании…

 

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

 

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

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

Для управления униполярным шаговым двигателем достаточно 4 ключей, коммутирующих 4 обмотки на землю. Я приведу две практические схемы униполярных драйверов: на биполярных транзисторах и MOSFET транзисторах.

Схема драйвера униполярного шагового двигателя на биполярных транзисторах выглядит так.

Схема униполярного драйвера на биполярных транзисторах

Драйвер позволяет коммутировать нагрузки с токами до 2 А и напряжением до 60 В.

Намного предпочтительнее использовать в драйвере MOSFET транзисторы.

Схема униполярного драйвера на MOSFET транзисторах

Схема собрана на MOSFET транзисторах IRF7313 (irf7313.pdf) со следующими параметрами:

  • предельно допустимый ток 6,5 А;
  • максимальное напряжение 30 В;
  • сопротивление открытого транзистора 0,029 Ом;
  • пороговое напряжение затвора 1 В;
  • исполнение – миниатюрный корпус SO-8;
  • в корпусе два транзистора.

Драйвер униполярного двигателя, выполненный на MOSFET транзисторах имеет значительные преимущества перед аналогичным устройством на биполярных транзисторах:

  • не требует радиаторов охлаждения транзисторов;
  • имеет очень низкие потери в открытых ключах;
  • имеет малые габариты;
  • используется всего два корпуса по 8 выводов.

В обеих схемах ключи управляются непосредственно от выводов микроконтроллера логическими уровнями CMOS (0 / +5 В). Высокий уровень сигнала открывает ключ, и через обмотку двигателя течет ток. Диоды защищают ключи от выбросов напряжения при коммутации.

На схемах показано подключение шаговых двигателей с 6 выводами.

Например, для широко распространенных двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с конфигурацией обмоток 6 проводов выводы промаркированы следующим цветами.

 Обозначение вывода на схеме  Цвет провода
 A  черный
 0  желтый
 C  зеленый
 B  красный
 0*  белый
 D  синий

Конфигурация с 5 проводами это вариант, в котором общие провода обмоток соединены внутри двигателя. Такие двигатели бывают. Например, PM35S-048.

Существуют двигатели с 8 выводами. Каждая обмотка имеет отдельные выводы.

Схема подключения с 8 выводами

Схема подключения такая же, только соединения между обмотками происходят вне двигателя.

 

Достоинства и недостатки простых драйверов униполярных шаговых двигателей.

Приведенные выше схемы драйверов очень простые – 4 ключа без обратных связей по току. Это главное преимущество драйверов униполярных шаговых двигателей.

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

  • Главный недостаток – это отсутствие стабилизации тока обмоток.
  • В статическом режиме ток определяется активным сопротивлением обмотки двигателя и напряжением питания (по закону Ома I = U / R). Т.е. в схеме можно использовать только  двигатели с определенным сопротивлением обмоток или приходится подбирать напряжение питания. Это требование значительно сужает выбор двигателей.

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

  • Отсутствие стабилизации тока также приводит ко второй проблеме. Это медленная скорость нарастания тока связанная со значительной индуктивностью обмоток. Это приводит к значительному снижению максимальной скорости вращения двигателя. Например, у двигателя FL57STH76-1006 индуктивность обмотки 14 мГн. При напряжении 12 В ток в обмотке достигнет рабочего значения 1 А только через  1,2 мс (I = U * T / L ). На высоких скоростях вращения фазные токи будут значительно занижены, а значит, уменьшится и мощность двигателя.

Резисторы, включенные последовательно с обмотками, частично исправляют эту проблему, но рассеивают лишнюю мощность.

  • К недостаткам драйвера можно добавить и то, что униполярный шаговый двигатель имеет меньшую мощность по сравнению с биполярным при тех же габаритах. Мощность падает примерно на 40%.

Несмотря на недостатки, такие схемы подключения униполярных  шаговых двигателей широко применяются. Например, в станке для розлива и запайки ампул все двигатели работают в униполярном режиме.

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

Для начала я спаял драйвер на биполярных транзисторах и подключил к нему двигатель PM35S-048. Сопротивление обмоток моего двигателя составляет 36 Ом. Ток при 12 В равен 0,33 А. Можно подключить к драйверу без ограничительных резисторов.

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

Беспаечную макетную плату использовать побоялся. Слишком большие токи.

 

Stepper  - стандартная библиотека Ардуино для управления шаговыми двигателями.

В пакете Arduino IDE есть стандартная библиотека для управления униполярными и биполярными шаговыми двигателями. Ее не надо искать и загружать из интернета. Она устанавливается вместе с пакетом Arduino IDE. Библиотека очень простая. Кроме конструктора имеет всего две функции.

Stepper( steps, pin1, pin2, pin3, pin4 )

Конструктор класса Stepper. Создает объект типа Stepper.

Параметры:

  • steps – количество шагов двигателя на один оборот (360°). Параметр используется функцией setSpeed() для вычисления скорости вращения.
  • pin1, pin2, pin3, pin4 – выводы для подключения драйвера двигателя. Для двух проводной схеме подключения pin3 и pin4 не используются. Для четырех проводной схемы pin1, pin2, pin3, pin4 соответствуют фазам A, C, B, D при униполярном режиме управления.

Stepper  motor1 (400, 10, 11, 12, 13);  // создаем объект motor1

void setSpeed(long rpms)

Устанавливает скорость вращения двигателя в оборотах в минуту.

Параметры:

  • rpms - скорость вращения в оборотах в минуту.

motor1.setSpeed(60);  // устанавливаем  скорость вращения 60 об. в мин

void step(int steps)

Вызывает поворот двигателя на заданное число шагов. Функция останавливает выполнение программы до тех пор, пока  не завершится.

Параметры:

  • steps – число шагов, на которое требуется повернуть ротор двигателя. Отрицательное значение вращает двигатель в противоположную сторону.

motor1.step(20);  // сделать 20 шагов против часовой стрелки

 

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

Программа управляет двигателем  по следующему алгоритму:

  • двигатель делает 5 оборотов против часовой стрелки;
  • останавливается на 1 сек;
  • делает 5 оборотов по часовой стрелке;
  • останавливается на 1 сек;
  • и так в бесконечном цикле.

Скетч программы простой и очевидный.

// простая программа управления шаговым двигателем с помощью библиотеки Stepper
// делает 5 оборотов против часовой стрелки со скоростью 1 оборот в секунду
// после паузы 1 сек, делает 5 оборотов по часовой стрелке

#include <Stepper.h>

  Stepper motor(48, 10, 12, 11, 13);  // объект motor, 48 шагов на оборот 

void setup() {
  motor.setSpeed(60);  // скорость 60 об. в мин.
}

void loop() { 
  motor.step(240);  // 5 оборотов (240 шагов) по часовой стрелке
  delay(1000);
  motor.step(-240);  // 5 оборотов (240 шагов) против часовой стрелке
  delay(1000); 
}

Хочу только отметить, что в режиме четырех проводного подключения объект Stepper переключает фазы в следующей последовательности.

Шаг Pin 1 Pin 2 Pin 3 Pin 4
1 1 0 1 0
2 0 1 1 0
3 0 1 0 1
4 1 0 0 1

Видно, что:

  • Всегда включены две фазы, т.е. униполярный двигатель работает в между шаговом режиме.
  • Выводам pin1, pin2, pin3, pin4 соответствуют фазы A, C, B, D.

 

Недостатки библиотеки Stepper.

У библиотеки Stepper есть только одно достоинство – достаточно широкий диапазон регулировки скорости. Время переключения фаз отсчитывается постоянным вызовом функции micros() и сравнением значений времени этой функции. На все остальное уже ресурсов микроконтроллера не хватает.

Недостатков у библиотеки Stepper столько, что я не знаю, как ее можно использовать в практических приложениях.

  • Главный недостаток – вызов метода step() подвешивает программу. Все ресурсы тратятся на отсчет времени переключения фаз. Даже если запустить параллельный процесс через прерывание по таймеру, то он будет нарушать отсчет времени коммутации фаз. Т.е. когда двигатель крутится больше ничего в программе делать невозможно. Наверное, с помощью этой библиотеки можно сделать только вентилятор, да и то без выключателя или регулятора скорости.
  • Как следствие предыдущего пункта - невозможно управлять одновременно нескольким двигателями.
  • Библиотека Stepper управляет униполярным шаговым двигателем только в между шаговом режиме. А ведь есть еще шаговый и микро шаговый режимы, которые реализуются простыми программными методами и часто необходимы на практике. Биполярный двигатель может работать только в шаговом режиме.
  • Невозможно остановить двигатель, пока не будут отработаны все шаги, заданные функцией step().
  • При остановке двигатель находится в зафиксированном положении, через обмотки продолжает течь ток. В некоторых приложениях необходимо выключать двигатель. Выбора режима остановки двигателя в библиотеке Stepper нет.

 

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

Предыдущий урок     Список уроков     Следующий урок

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *