Управление шаговыми двигателями через usb своими руками

Управление шаговым двигателем на Ардуино

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

Скетч для шагового двигателя на Ардуино (Stepper.h)

#include <Stepper.h> // библиотека для шагового двигателя // количество шагов на 1 оборот, измените значение для вашего мотора const int stepsPerRevolution = 200; // устанавливаем порты для подключения драйвера Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { myStepper.setSpeed(60); // устанавливаем скорость 60 об/мин } void loop() { // поворачиваем ротор по часовой стрелке myStepper.step(stepsPerRevolution); delay(500); // поворачиваем ротор против часовой стрелки myStepper.step(-stepsPerRevolution); delay(500); }

Пояснения к коду:

  1. вместо портов 8,9,10,11 можно использовать любые цифровые порты;
  2. библиотека Stepper.h имеет маленький функционал, поэтому подходит только для тестирования шагового двигателя и проверки подключения драйвера.

Скетч для шагового мотора с библиотекой AccelStepper.h

#include // библиотека для шагового двигателя

Пояснения к коду:

  1. библиотеку AccelStepper.h можно использовать при подключении шагового двигателя к Motor Shield L293D совместно с библиотекой AFMotor.h;
  2. в программе можно задавать не только максимальную скорость, но и ускорение и замедление вала шагового двигателя.

Описание команд библиотеки AccelStepper.h

AccelStepper mystepper(DRIVER, step, direction);// Шаговый двигатель, управляемый платой AccelStepper mystepper(FULL2WIRE, pinA, pinB);// Шаговый двигатель, управляемый Н-мостом AccelStepper mystepper(FULL4WIRE, pinA1, pinA2, pinB1, pinB2);// Униполярный двигатель mystepper.setMaxSpeed(stepsPerSecond);// Установка скорости оборотов в минуту mystepper.setSpeed(stepsPerSecond);// Установка скорости в шагах за секунду mystepper.setAcceleration(stepsPerSecondSquared);// Установка ускорения

mystepper.currentPosition(); // Возвращает текущее положение в шагах mystepper.setCurrentPosition (long position); Обнуляет текущую позицию до нуля mystepper.targetPosition(); // Конечное положение в шагах mystepper.distanceToGo(); // Вернуть расстояние до указанного положения mystepper.moveTo(long absolute); // Переместиться в абсолютно указанное положение mystepper.move(long relative); // Переместиться в относительно указанное положение

mystepper.run(); // Начать движение с ускорением, функцию следует вызывать повторно mystepper.runToPosition(); // Начать движение до указанной точки mystepper.runToNewPosition(); // Начать движение с ускорением до заданной позиции mystepper.stop(); // Максимально быстрая остановка (без замедления) mystepper.runSpeed(); // Начать движение с заданной скоростью без плавного ускорения mystepper.runSpeedToPosition(); // Начать движение без плавного ускорения, до позиции

mystepper.disableOutputs(); // Деактивирует зарезервированные пины и устанавивает их в режим LOW. Снимает напряжение с обмоток двигателя, экономя энергию mystepper.enableOutputs(); // Активирует зарезервированные пины и устанавивает их в режим OUTPUT. Вызывается автоматически при запуске двигателя

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

Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки – 4 провода, первая обмотка – черный (A) и зеленый (A*) провод, вторая обмотка – красный (B) и синий (B*). За одну смену комбинаций делается 1 шаг – 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться – крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.

Чтобы крутить шаговый двигатель, надо:

1) Собрать устройство – USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут – контроллер USB. Если USB связь работает нормально, то можно приступать к изготовлению драйвера.

2) Написать программу для компьютера, которая будет посылать USB команды устройству.

3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель.

Что выбрать: шаговый или серводвигатель?

Статья, которая поможет разобраться в чем отличие серводвигателя от шагового двигателя.

  1. Бюджет
    Если Вы жестко ограничены в бюджете, возможно, выбора как такового и нет. Шаговые двигатели значительно дешевле серводвигателей. Однако, такая закономерность действует только до определенного момента. Начиная с двигателей с размером фланца 110мм, стоимость приводов на шаговых моторах и сервоприводов Darxton серии DXS уже сопоставима.
  2. Размер станка.
    Чем больше станок, тем более крупные шаговые двигатели ему требуются. Резонанс больших шаговых двигателей может привести к пропуску шагов и снижению чистоты обработки. Рекомендация : Если рабочее поле станка превышает 1.2 м2, или масса портала превышает 50 кг, мы настоятельно рекомендуем использовать серводвигатели.
  3. Сложность настройки
    Сервосистемы имеют десятки настраиваемых параметров, требуют больше внимания и более высокую квалификацию оператора. Если Вы ищете простое решение «включил и работай» — возможно, вам лучше использовать шаговые двигатели.
  4. Наличие нагрузки на передачу в момент остановки

    Так, на ось Z для удержания шпинделя обычно лучше подходят шаговые двигатели — для них удержание самый эффективный режим, вал фиксируется в положении удержания совершенно неподвижно, а высоких скоростей и ускорений по Z как правило не требуется. Сервопривод в таких условиях будет совершать микроколебания, что нежелательно.Аналогично, если двигатель планируется к установке на поворотную ось, где требуется медленное вращение, и после каждого углового шага следует серия движений шпинделя вдоль заготовки — шаговый двигатель лучше справится с удержанием.

  5. Необходимость достигать высоких ускорений

    Если есть такая необходимость — альтернативы серводвигателям нет. Шаговые двигатели весьма инертны, и попытка быстро разогнать его приведет к т.н. «срыву» — пропуску шагов или остановке вала. Тогда как сервоприводы способны кратковременно увеличить ток обмоток в 3-4 раза от номинального значения, чтобы развить больший момент и, соответственно, большее ускорение

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

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

Параметр

Шаговые приводы

Бесщеточные сервоприводы

Момент

Резко падает с увеличением скорости. Максимален при неподвижном вале

Высокий на всем диапазоне скоростей. Максимален на высоких оборотах

Удельная мощность

Малая. Шаговый двигатель имеет крайне малый КПД — постоянно потребляет большой ток, основная часть энергии при этом выделяется в виде тепла

Высокая. Потребляемый ток пропорционален нагрузке

Обратная связь по положению

Отсутствует. Пропущенный шаг останется незамеченным для системы ЧПУ. Однако, при правильном проектировании станка обратная связь не требуется

Есть. Положение вала будет скорректировано, если это будет невозможно(например, вал заклинило) — система выдаст ошибку

Точность позиционирования

Не более 5% от величины шага

Определяется установленным энкодером

Безопасность

Высокая. Если вал двигателя заклинило — он просто будет пропускать шаги

Низкая. При заклинивании вала сервопривод может провернуть передачу, повредив её. Двигатель также может сгореть при неправильной настройке поведения драйвера при перегрузке

Срок службы

Очень большой

Очень большой

Резонанс ротора

Есть. Шаговые двигатели подвержены резонансу, что приводит к пропуску шагов, снижению качества обработки и пр.

Отсутствует

Звук

Сильный гул

Слабый

Нагрев

Сильный. Зачастую требуется доп. охлаждение с помощью радиатора и вентилятора

Слабый

Перегрузки

При перегрузках пропускает шаги, не способен резко ускориться

Хорошо переносит перегрузки за счет кратковременного увеличения потребляемой мощности. Способен резко ускориться

Что такое шаговый двигатель?

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

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

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

Ротор такого двигателя вращается просто вокруг своей оси без каких-либо ограничений, на 360 градусов, и остановится он в любом месте. Зафиксировать его положением можно только механически (тормозом). По этой причине не получится добиться точного позиционирования исполнительных механизмов, что требуется в робототехнике, ЧПУ-станках и другом автоматизированном оборудовании.

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

Питание такого двигателя невозможно без системы управления, или как его еще называют, драйвера — он подаёт импульсы в нужные обмотки, чтобы повернуть ротор на нужный угол. Это наглядно иллюстрирует приведенная ниже анимация.

Кроме того, что можно поворачивать двигатель на определенный угол и фиксировать его в этом положении, делать это всё можно без схемы обратной связи (датчиков положения и прочего).

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

2. С постоянными магнитами.

По способу питания:

  1. Униполярные (однополярные — ток пропускают через обмотки только в одну сторону).
  2. Биполярные (ток пропускают через обмотки в обе стороны). Здесь драйвер должен подавать напряжение различной полярности, что несколько усложняет схемотехнику. При тех же размерах развивают бОльшую мощность по сравнению с униполярными.

В униполярном двигателе зачастую 5 проводов — 1 общий, от середины каждой из двух обмоток, и 4 от концов обмоток. Иногда говорят «4 обмотки» — это также правильно, поскольку фактически мы получаем 4 обмотки соединенных в общей точки.

Также ШД могут отличаться и по количеству проводов, это зависит от того, как соединены обмотки и какое питание предполагается, некоторые варианты вы видите в таблице ниже.

Управление шаговым двигателем

Различают два способа управления шаговым двигателем:

1. Полношаговое

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

2. Полушаговое

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

На анимациях ниже наглядно продемонстрировано

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

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

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

Двух переключателей достаточно, чтобы построить простейший драйвер шагового двигателя, как показано на рисунке. Здесь используем 6-проводный униполярный двигатель. Также можно сказать, что двигатель в этом случае управляется однополярно, за счет использования средней обмотки катушки и постоянного напряжения питания на нее.

Переключая данные переключатели в последовательности S1, S2, S1, S2, S1, S2… заметим, что двигатель вращается. Рисунок выше иллюстрирует важный принцип управления: обе обмотки не могут питаться от одной пары одновременно. Каждое изменение переключателя поворачивает ротор на один шаг. Чем быстрее начнем переключать переключатели в последовательности S1, S2, S1, S2…, тем быстрее начнет вращаться ротор.

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

Скорость шагового двигателя зависит не от величины напряжения, а от скорости подключения питания к отдельным обмоткам. Чтобы добиться полного вращения ротора с 200-шаговым двигателем, надо изменить положение каждого переключателя 100 раз, то есть выполнить до 200 последовательностей для двух переключателей. Это уже говорит о том, что шаговые двигатели не могут работать на высокой скорости. Из этого следует, что шаговые двигатели можно назвать «цифровыми двигателями», поскольку для вращения ротора необходимо переключать переключатели в соответствующей последовательности.

В нашем случае последовательность переключений также определяет направление вращения шагового двигателя. Когда меняем последовательность включения переключателей, то меняем и направление вращения, например S2, S1, S2, S1, S2, S1… влево, S1, S2, S1, S2, S1, S2… вправо. В этом примере есть двухпозиционные переключатели, которые всегда обеспечивают питание двух из четырех обмоток шагового двигателя в данный момент. Но использование трехпозиционных переключателей дает гораздо больше возможностей.

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

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

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

Вращение униполярного шагового двигателя в последовательных тактах цикла управления волной

Управляющая последовательность A +, B +, A-, B- повторяется каждые четыре импульса тактового генератора. Этот тип управления называется однофазным или волновым. Это полный шаг управления, потому что двигатель выполняет один полный ход (шаг) с одним импульсом генератора.

Самый простой способ изменить направление — поменять местами одну пару проводов катушки (поменять местами, например, B + с B — и B — с B +), затем дадим последовательность A +, B -, A -, B + импульсы, он вращает двигатель в противоположном направлении. Так управление направлением реализовано в некоторых контроллерах шаговых двигателей. Самый простой способ изменить последовательность импульсов — использовать, например, реле.

Форма волны (однофазная) импульсная последовательность драйвера

Упрощенная схема однофазного (волнового) регулятора с изменением направления вращения

Несомненное преимущество униполярных шаговых двигателей — простота управления. Но это связано с волновым управлением, с использованием только половины обмотки за раз, одна из них всегда не используется. Используется только 1/4 всех обмоток шагового двигателя, что значительно снижает максимальную производительность.

Схема шагового двигателя

Его схема обмоток выглядит примерно так:

Очень похоже на схему обычного асинхронного двигателя.

Для запуска понадобится:

  • Конденсатор емкостью 470-3300 мкФ.
  • Источник переменного тока 12 В.

Замыкаем обмотки последовательно.

Середину проводов скручиваем и запаиваем.

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

Подаем питание и двигатель начинает крутиться.

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

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

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

Хотелось бы добавить, что в данном примере используется конденсатор постоянного тока, что является не совсем правильным вариантом. И если вы решитесь использовать такую схему включения, берите конденсатор переменного тока. Его так же можно сделать самому, включив два конденсатора постоянного тока встречно-последовательно.

Схема шагового двигателя

Его схема обмоток выглядит примерно так:

Очень похоже на схему обычного асинхронного двигателя. Для запуска понадобится:

  • Конденсатор емкостью 470-3300 мкФ.
  • Источник переменного тока 12 В.

Замыкаем обмотки последовательно.

Середину проводов скручиваем и запаиваем.

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

Подаем питание и двигатель начинает крутиться.

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

Все предельно просто. А принцип работы этого всего очень прост: конденсатор формирует сдвиг фаз на одной из обмоток, в результате обмотки работают почти попеременно и шаговый двигатель крутится. Очень жалко то, что обороты двигателя невозможно регулировать. Увеличение или уменьшение питающего напряжения ни к чему не приведет, так как обороты задаются частой сети. Хотелось бы добавить, что в данном примере используется конденсатор постоянного тока, что является не совсем правильным вариантом. И если вы решитесь использовать такую схему включения, берите конденсатор переменного тока. Его так же можно сделать самому, включив два конденсатора постоянного тока встречно-последовательно.

Как выбрать шаговый двигатель? На какие параметры обратить внимание.

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

  1. вида двигателя (его размеры)
  2. тока фазы
  3. индуктивность

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

Размер двигателя и его ток проще всего подобрать, ориентируясь на готовые станки от известных производителей, которые близки к конструируемому по размерам и характеристикам – проверенная конструкция означает, что двигатели уже подобраны оптимальным образом и можно взять их характеристики за основу. Производитель двигателя в данном случае не особо важен, так как ввиду отработанной технологии производства их характеристики у разных производителей примерно одинаковые. Остается одна характеристика – индуктивность.

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

Управление шаговым двигателем на Ардуино

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

Скетч для шагового двигателя на Ардуино (Stepper.h)

#include <Stepper.h> // библиотека для шагового двигателя

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

// устанавливаем порты для подключения драйвера
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  myStepper.setSpeed(60); // устанавливаем скорость 60 об/мин
}

void loop() {
  // поворачиваем ротор по часовой стрелке
  myStepper.step(stepsPerRevolution);
  delay(500);

  // поворачиваем ротор против часовой стрелки
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

Пояснения к коду:

  1. вместо портов 8,9,10,11 можно использовать любые цифровые порты;
  2. библиотека Stepper.h имеет маленький функционал, поэтому подходит только для тестирования шагового двигателя и проверки подключения драйвера.

Скетч для шагового мотора с библиотекой AccelStepper.h

#include <AccelStepper.h> // библиотека для шагового двигателя

Пояснения к коду:

  1. библиотеку AccelStepper.h можно использовать при подключении шагового двигателя к Motor Shield L293D совместно с библиотекой AFMotor.h;
  2. в программе можно задавать не только максимальную скорость, но и ускорение и замедление вала шагового двигателя.

Описание команд библиотеки AccelStepper.h

// Шаговый двигатель, управляемый платой// Шаговый двигатель, управляемый Н-мостом// Униполярный двигатель// Установка скорости оборотов в минуту// Установка скорости в шагах за секунду// Установка ускорения

// Возвращает текущее положение в шагахОбнуляет текущую позицию до нуля// Конечное положение в шагах// Вернуть расстояние до указанного положения// Переместиться в абсолютно указанное положение// Переместиться в относительно указанное положение

// Начать движение с ускорением, функцию следует вызывать повторно// Начать движение до указанной точки// Начать движение с ускорением до заданной позиции// Максимально быстрая остановка (без замедления)// Начать движение с заданной скоростью без плавного ускорения// Начать движение без плавного ускорения, до позиции

// Деактивирует зарезервированные пины и устанавивает их в режим LOW. Снимает напряжение с обмоток двигателя, экономя энергию// Активирует зарезервированные пины и устанавивает их в режим OUTPUT. Вызывается автоматически при запуске двигателя