Меню

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

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

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

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

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

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

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

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

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

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

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

Намного предпочтительнее использовать в драйвере 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 черный
желтый
C зеленый
B красный
0* белый
D синий

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

Существуют двигатели с 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 оборотов по часовой стрелке

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 1
2 1 1
3 1 1
4 1 1
  • Всегда включены две фазы, т.е. униполярный двигатель работает в между шаговом режиме.
  • Выводам pin1, pin2, pin3, pin4 соответствуют фазы A, C, B, D.

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

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

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

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

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

Источник

Библиотека Stepper

Для управления шаговым двигателем в Arduino имеется стандартная библиотека

Набор функций у нее следующий:

Функция Stepper()

Функция Stepper() создает новый объект класса Stepper, привязанный к одному шаговому двигателю, подключенному к контроллеру Arduino. Конструктор следует использовать при объявлении переменной класса Stepper, обычно в самом начале — вне setup() и loop(). Количество параметров зависит от способа подключения — 2 или 4 выхода используются для управления двигателем.

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

steps — количество шагов в полном обороте используемого двигателя. Если в документации к двигателю указан угол одного шага, то следует разделить 360° на этот угол, что даст нам искомое количество шагов;

pin1, pin2, pin3, pin4 — выходы Arduino для подключения шагового двигателя. Возвращаемое значение: новый экземпляр объекта класса Stepper.

Функция setSpeed(rpm)

Функция setSpeed(rpm) устанавливает скорость вращения в оборотах в минуту. Эта функция не заставляет двигатель вращаться, а лишь устанавливает скорость вращения, которая будет использована при вызове функции step().

Параметр: rpm — скорость, на которой будет производиться вращение шагового двигателя, выражается в оборотах в минуту.

Возвращаемого значения нет.

Функция step(steps)

Функция step(steps) вращает шаговый двигатель на определенное количество шагов на скорости, заданной функцией setSpeed(). Эта функция блокирующая, т. е. она ожидает окончания вращения двигателя, прежде чем передать управление в следующую строку кода. Во избежание длительной блокировки выполнения кода скетча, управление необходимо организовывать так, чтобы скорость была высокая, а за один вызов step() делалось всего несколько шагов.

Параметр: steps — количество шагов:

• положительное число — вызывает вращение в одну сторону;

• отрицательное — в противоположную. Возвращаемого значения нет.

Пример использования библиотеки Stepper

В примере представлен пример использования библиотеки Stepper — поворот шагового двигателя при нажатии кнопок «влево» и «вправо» на определенный угол, что можно представить как программную заготовку для поворота панорамной камеры в одной плоскости. В примере использованы шаговый двигатель и аналоговая клавиатура

const int stepsPerRevolution=200; // количество шагов в полном обороте двигателя

int minangle=15; // угол поворота на 1 нажатие (шаг камеры) struct KEYS // структура для хранения статусов клавиш

int button; // нажатая кнопка

long millisbutton[7]; // millis для button

// опрос клавиатуры valbutton=analogRead(A0); if(valbutton

// обработка нажатия кнопки int buttonClick1(int val)

Источник

Adblock
detector