Урок 35. Подключение STEP/DIR драйверов шаговых двигателей к Ардуино. Библиотека StepDirDriver.

модуль TB6560-V2
В уроке подключим STEP/DIR драйвер TB6560-V2 к плате Ардуино. Научимся управлять им с помощью библиотеки StepDirDriver.

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

TB6560-V2 не дорогой драйвер шаговых двигателей поддерживающий все типичные режимы и функции STEP/DIR драйверов.

 

В уроке будем подключать его к плате Ардуино. Все схемы и программы урока подойдут к любому другому STEP/DIR драйверу.

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

 В статье о модуле TB6560-V2 есть две схемы подключения к микроконтроллеру. Будем использовать эту.

Схема подключения модуля TB6560-V2При высоком уровне сигнала (+5 В) через светодиод входного оптрона течет ток, и модуль воспринимает это как активный управляющий уровень. Резисторы 330 Ом ограничивают ток светодиодов. Т.е. драйвером можно управлять сигналами непосредственно с выводов микроконтроллеров.

С учетом этого схема подключения драйвера TB6560-V2 к плате Ардуино выглядит так.

Схема подключения к АрдуиноОбратите внимание на плавкий предохранитель. Я настоятельно рекомендую его поставить. В схемах с простыми драйверами при сгорании ключей через двигатель течет рабочий ток, ограниченный либо сопротивлением обмотки, либо дополнительным резистором. В драйверах со стабилизацией тока ток регулируется за счет ШИМ модуляции. Если в подобных устройствах сгорают выходные ключи, то на двигатель может попасть полное напряжение питания. Это приведет к недопустимому току и сгоранию шагового двигателя. Процесс это медленный, поэтому от выхода из строя привода спасет любой предохранитель – плавкий или самовосстанавливающийся.

Параметры драйвера задаются переключателями на плате модуля. Я задал ток фазы 1 А.

Положение переключателей

Переключателями S3 иS4 выбирается режим коммутации фаз.

Состояние переключателей Режим
S3 S4
OFF OFF шаговый
ON OFF полу шаговый
ON ON микро шаговый
1/8 шага
OFF ON микро шаговый
1/16 шага

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

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

Система управленияОсталось научиться управлять такой системой.

 

Библиотека StepDirDriver.

Эту библиотеку я разработал для управления STEP/DIR драйверами. Она полностью совместима по функциям с библиотекой StepMotor (урок 29). Только 2 отличия:

  • Конструктор имеет другие аргументы. Просто для STEP/DIR драйвера требуются другие сигналы управления и другое количество сигналов.
  • В функции установки режима setMode() игнорируется параметр stepMode – режим коммутации. Режим задается переключателями на драйвере.

Загрузить библиотеку StepDirDriver можно по этой ссылке.

Описание класса StepDirDriver.

У класса следующие public методы.

class StepDirDriver {

  public:
    StepDirDriver(byte pinStep, byte pinDir, byte pinEn); // конструктор
    void  control();  // управление, функция должна вызываться регулярно с максимальной частотой коммутации фаз
    void  step(int steps);  // инициирует поворот ротора на заданное число шагов
    void  setMode(byte stepMode, boolean fixStop);  // задает режимы коммутации фаз и остановки
    void  setDivider(int divider);  // установка делителя частоты для коммутации фаз
    int readSteps();  // чтение оставшихся шагов   
} ;

Не трудно догадаться, о назначении аргументов конструктора:

  • pinStep - вывод сигнала STEP;
  • pinDir - вывод сигнала DIR;
  • pinEn - вывод сигнала ENABLE.

StepDirDriver myMotor1(10, 11, 12);  // создаем объект StepDirDriver, задаем выводы для сигналов STEP, DIR, ENABLE

Описание методов библиотеки StepDirDriver.

void control()

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

// обработчик прерывания 200 мкс
void  timerInt () {  
  myMotor1.control(); // управление двигателем
 }

void step(int steps)

Метод инициирует поворот двигателя на заданное число шагов. В микро шаговых режимах речь идет не о физических шагах двигателя, а о микро шагах. Параметр steps с положительным значением инициирует поворот против часовой стрелки, с отрицательным значением – по часовой стрелке.

Запустив вращение функцией step()

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

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

myMotor1.step(0);  // остановить привод

Ничего не мешает задать новое число шагов, не дожидаясь остановки двигателя. Для непрерывного вращения можно периодически вызывать функцию step() с большим числом шагов.

myMotor1.step(30000);  // постоянное вращение

О том, что двигатель остановился можно узнать с помощью метода readSteps().

void setMode(byte stepMode, boolean fixStop)

Метод задает состояние двигателя при остановке.

  • Если fixStop = true, то при остановке на обмотки двигателя подается ток удержания, положение ротора зафиксировано.
  • При fixStop = false, напряжение с обмоток двигателя при остановке снимается.

Аргумент stepMode игнорируется. Он добавлен для совместимости с такой же функцией библиотеки StepMotor.

myMotor1.setMode(0, true);  // фиксация ротора при остановке
myMotor1.setMode(0, false);  // двигатель полностью отключен

void setDivider(int divider)

Функция задает коэффициент деления частоты вызова метода control(), а значит, определяет скорость вращения двигателя. Скорость вращения можно вычислить по следующей формуле:

Rpm = 60 000  /   ( divider  * Tcontrol * Nдвигателя  ) / Nмикрошагов

  • Rpm – скорость вращения в оборотах в минуту;
  • Tcontrol – период вызова метода control() в мс;
  • Nдвигателя – число шагов двигателя на полный оборот;
  • Nмикрошагов – число микро шагов двигателя на одну фазу.

Для шагового режима Nмикрошагов = 1, для полу шагового Nмикрошагов = 2 и т.д.

myMotor1.setDivider(5);     // делитель частоты 5

int readSteps()

Метод считывает количество шагов, оставшихся до остановки двигателя. Возврат 0 означает, что двигатель остановлен.

if (myMoto1r.readSteps() == 0)  {
  // двигатель остановлен
}

 

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

Использование новой библиотеки ничем не отличается от применения функций библиотеки StepMotor из предыдущих уроков.

Всего два отличия:

  • Подключение библиотеки #include <StepDirDriver.h>  вместо #include <StepMotor.h>.
  • Другой формат конструктора StepDirDriver myMotor(10, 11, 12); вместо StepMotor myMotor(10, 11, 12, 13).

В программе меняются всего 2 строки. 

Можете загрузить и проверить скетч программы, которая заставляет сделать двигатель 2 оборота по часовой стрелке со скоростью 1 оборот в секунду, затем пауза 1 секунда, 2 оборота против часовой стрелки, опять пауза на секунду и так в цикле. Он похож на примеры из предыдущих уроков для библиотеки StepMotor. Не забудьте установить библиотеку StepDirDriver.

Проверка драйвера шагового двигателя с AT командами.

Я заменил две строчки программы драйвера с управлением от компьютера из Урока31 и получилось новое устройство для работы с шаговым двигателем. Загрузить новый драйвер с управлением по протоколу AT команд можно по этой ссылке.

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

Задал микро шаговый режим с 16 микро шагами. У меня двигатель имеет 400 физических шагов. В микро шаговом режиме получился двигатель, имеющий целых 6400 шагов на оборот! Поробовал управлять программой верхнего уровня StepMotor (урок 31).


Окно программы StepMotorВсе работает. Точность установки просто не вероятная.

Проверил и работу следящего электропривода из урока 32.


Окно программы следящего электроприводаРазрешающая способность положения ротора почти 0,05 °!

Наверное, в последних двух уроках я убедительно показал преимущества STEP/DIR драйверов. Но какой драйвер применять в конкретном случае решать разработчику. Что важнее низкая цена простого драйвера из ключей или функциональность STEP/DIR драйвера.

Бывают очень серьезные разработки с простыми драйверами. Например, практически все шаговые двигатели в фасовочном оборудовании НПП ”РОСТ” работают в униполярном режиме с простыми драйверами-ключами. Из-за этого у двигателей уменьшился крутящий момент, снизилась максимальная скорость вращения, но зато значительно упала цена системы управления. Для устройств с 7-10 шаговыми двигателями это важно.

 

Надо выбирать оптимальный вариант. В каких-то случаях без STEP/DIR драйвера не обойтись, в других проектах вполне удачно будут работать простые драйверы.

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

7 комментариев на «Урок 35. Подключение STEP/DIR драйверов шаговых двигателей к Ардуино. Библиотека StepDirDriver.»

  1. Здравствуйте, спасибо за урок. Не могли бы вы подсказать, как с помощью вашей библиотеки реализовать движение двигателя на один шаг и остановку, подобно кнопке «+1 шаг» в вашей программе? никак не могу разобраться с таймингами. Заранее благодарю.

    • Здравствуйте!
      Сделать функцией step() один шаг. myMotor.step(1); Программа верхнего уровня эту команду и вызывает.

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

      И еще. Арсентий, если хотите подробно обсудить какой-нибудь вопрос — я открыл форум http://mypractic-forum.ru.

  2. Здравствуйте
    А как решить задачу управления двумя или тремя шаговыми двигателями одновременно но с разными скоростями?

    • Здравствуйте. Создать три объекта StepDirDriver и задать для них разные скорости.

  3. Не компилируется sketch_34_5.
    GetFileAttributesEx C:\DOCUME~1\Admin\LOCALS~1\Temp\arduino_build_726012: Не удается найти указанный файл.

    Ошибка компиляции для платы Arduino/Genuino Uno.

    • Еще раз проверил. Все компилируется. Может быть библиотеки не подключили. Какую ошибку компилятор пишет?

      • На работе проверил все компилится.
        Скорее всего чтото с компилятором или с компом.
        Спосибо за ответ.
        Уроки Класс.

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

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