Закрыть
Motor Shield

Motor Shield

Adafruit Motor Shield или же его клон, который я и использую — Freeduino Motor Shield v.2.0 представляют собой модуль, обеспечивающий функциональность для использования двигателей постоянного тока, сервомоторов и шаговых двигателей совместно с Arduino.

 
 
 
 

Чем же интересен этот шилд?

  • Содержит 4 H-моста: шилд основан на микросхемах L293D, которые обеспечивают ток до 0.6 А (допустимое пиковое значение — 1.2 А) и имеют встроенную тепловую защиту от обратного пробоя диодов. Возможно использование моторов с напряжением питания от 4.5 до 25 В.
  • Возможно подключение до 4 двунаправленных моторов постоянного тока с заданием скорости с 8-битным разрешением для каждого.
  • Возможно подключение до 2 шаговых однообмоточных, двухобмоточных или же с переключением обмоток двигателей (уни- или биполярных).
  • Подтягивающие резисторы, не дающие двигателям включаться при подаче питания.
  • Большие клеммные колодки для подключения моторов и питания.
  • Отдельная кнопка Reset для сброса Arduino.
  • Двухконтактный разъем для подключения внешнего источника питания и джампер для выбора источника питания.
  • Совместимость с Arduino UNO, Mega, Diecimilia и Duemilanove.
  • Простая в использовании программная библиотека.

Motor Shield с подключенными четырьмя двигателями постоянного тока и двумя сервами
Freeduino Motor Shield с подключенными четырьмя двигателями постоянного тока и двумя сервами

Аналогичный шилд (только более дешевый) можно купить, например, здесь

Принципиальная схема Adafruit Motor Shield

Схема Adafruit Motor Shield

 

Используемые пины Arduino

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

  • D11: DC мотор №1 / шаговый двигатель №1 (активация/управление скоростью)
  • D3: DC мотор №2 / шаговый двигатель №1 (активация/управление скоростью)
  • D5: DC мотор №3 / шаговый двигатель №2 (активация/управление скоростью)
  • D6: DC мотор №4 / шаговый двигатель №1 (активация/управление скоростью)

Следующие выводы используются только при использовании шаговых или двигателей постоянного тока:

  • D4, D7, D8, D12: используются для управления моторами через синхронный сдвиговый регистр с регистром данных 74HC595.

Следующие выводы используются только при подключенных сервоприводах:

  • D9: Управление сервой №1
  • D10: Управление сервой №1

Используемые Motor Shield выводы Arduino

Библиотека AFMotor

Для того, чтобы использовать Motor Shield в своих проектах можно воспользоваться библиотекой AFMotor. Для этого:

  • Скачиваем библиотеку AFMotor с GitHub.
  • Распаковываем полученный ZIP-архив.
  • Переименовываем распакованную папку в AFMotor. Внутри папки должы быть файлы AFMotor.cpp и AFMotor.h и некоторые другие.
  • Перемещаем эту папку в вашу папку с библиотеками Arduino. На Windows папка с библиотеками находится в Мои документы/Arduino/libraries(если вы не меняли пути по умолчанию в Arduino IDE). На Mac OS этот путь по-умолчанию Документы/arduino/libraries. Если это первая библиотека, которую вы устанавливаете, то необходимо будет создать в папке arduino папку libraries. Обратите внимание, что название папки пишется в нижнем регистре.
  • Перезапустите Arduino IDE. Должно появиться подменю ФайлПримерыAFMotor

Установленная библиотека AFMotor
 

Питание Motor Shield

Двигатели потребляют много энергии, особенно дешевые, имеющие низкий КПД. Во-первых, нужно выяснить на какое напряжение рассчитан ваш двигатель. Это могут быть совершенно различные величины — 1.5 В, 6-12 В, а может и что-то иное. Контроллеры двигателей на этом модуле рассчитаны для работы в диапазоне 4.5-25 В, и поэтому большинство моторов, рассчитанных на напряжение 1.5-3 В работать не будут!

Во-вторых необходимо выяснить потребляемый вашим двигателем ток. Микросхемы драйверов двигателей, используемые в этом шилде рассчитаны на рабочий ток в 600 мА (1.2 А — допустимое пиковое значение).

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

Сервоприводы питаются от тех же 5 В, что и Arduino. Это нормально при использовании небольших сервомашинок, если же вы используете что-то помощнее, то нужно перерезать дорожку, по которой подается питание +5 В на разъемах, предназначенных для подключения сервоприводов и подвести сюда отдельно внешнее питание 5-6 В.

Двигатели постоянного тока питаются от мощного источника питания, а не от линии 5 В. На этом шилде есть два варианта откуда мы можем получить требуемое напряжение для питания моторов. Один из них — это разъем питания платы Arduino, второй вариант — двухконтактная клеммная колодка на шилде. На плате Arduino после разъема питания установлен защитный диод, который помогает, если вы случайно перепутаете полярность подключения источника питания. На шилде после разъема EXT_PWR таких защитных диодов нет, поэтому нужно быть внимательным и обращать внимание на полярность при подключении питания к Motor Shield.

Схема внешнего питания Motor Shield
Схема внешнего питания Motor Shield

Если в вашем проекте используется один источник питания и для Arduino и для двигателей, то просто подключите его ко входу питания Arduino или же к разъему внешнего питания EXT_PWR на шилде и установить джампер на шилде в положение EXT.

Установка джампера Motor Shield для выбора внешнего источника питания

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

Для случая, когда питание для моторов планируется получать от источника питания платы Arduino, перемычку выбора источника питания необходимо установить в положение Ard. После этого, источником питания будет являться вывод VIN платы Arduino.

Установка перемычки для питания Motor Shield от Arduino

Если вы хотите запитать Arduino от USB, а моторы от внешнего источника постоянного напряжения:

  • Не устанавливайте джампер на шилде!
  • Подключите USB-кабель к плате Arduino
  • Подключите внешний источник питания к разъему EXT_PWR на Motor Shield

Снятый джампер выбора источника питания на Motor Shield

Если вы используете два источника питания для Arduino и для Motor Shield:

  • Не устанавливайте джампер на шилде!
  • Подключите источник питания к плате Arduino
  • Подключите внешний источник питания к разъему EXT_PWR на Motor Shield

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

Использование сервомашинок

Хоббийные сервомашинки являются самым простым способом начать разбираться с управлением двигателями. Они имеют трехконтактый разъем, включающий сигнальную линию, питание +5 В и землю. Motor Shield просто выводит 16-битные ШИМ-выводы Arduino на отдельные разъемы для подключения сервомашинок. Нужно учитывать, что сервомоторы могут потреблять много энергии, поэтому, как уже отмечалось, возможно потребуется подведение отдельной линии питания 5 В.

Подключение сервопривода к Motor Shield
Подключение сервомашинки к Motor Shield

Преимуществом использования встроенных ШИМ-выводов Arduino является то, что это достаточно точно и работает в фоновом режиме. Можно использовать встроенную бибиотеку Servo.

 

Использование двигателей постоянного тока

Motor Shield может управлять до 4-х двигателей постоянного тока в обоих направлениях вращения. Скорость вращения можно варьировать с шагом порядка 0.5% (256 значений) используя функцию ШИМ.

Еще раз обратим внимание на рабочий ток в 600 мА, который может обеспечить H-мост этого шилда. Такое значение тока означает использование достаточно небольших двигателей. Внимательно изучайте характеристики используемых вами моторов. Значительное превышение тока через H-мост может приводить к его чрезмерному нагреву и, как следствие — к выходу его из строя.

Двигатель постоянного тока подключается, используя два провода к парным контактам, обозначенным на шилде как M1, M2, M3, M4.

Подключение двигателя постоянного тока к Motor Shield
Подключение двигателя постоянного тока к Motor Shield

При написании скетча следуйте следующему алгоритму:

  1. Подключите библиотеку AFMotor, используя команду препроцессора #include <AFMotor.h>
  2. Создайте объект AF_DCMotor, используя AF_DCMotor (номер двигателя, частота) для установки H-моста и сдвигового регистра. Экземпляры класса должны иметь уникальные имена для каждого двигателя. Конструктор класса принимает два аргумента.

    Первый аргумент номер двигателя — номер порта, к которому подключен мотор. Данный парметр может принимать значения 1, 2, 3, 4.

    Второй аргумент частота — это частота ШИМ. Для двигателей 1 и 2 этот аргумент может принимать значения MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, или MOTOR12_1KHZ. Работа на больших частотах сопровождается меньшим гулом, но может приводить к снижению крутящего момента для некоторых моторов. К тому же, на частоте 1 кГц будет использовано меньше энергии. Двигатели 3 и 4 работают только на частоте 1 кГц и игнорируют данный параметр. Если этот параметр не задан, по умолчанию используется частота 1 кГц.

  3. Необходимо задать скорость двигателя, используя setSpeed (скорость), где параметр скорость лежит в диапазоне от 0 (двигатель остановлен) до 255 (максимальная скорость). Скорость можно устанавливать в любой момент. Скорость реакции двигателя является нелинейной и, поэтому, реальное число оборотов в секунду не обязательно будет пропорционально заданному значению.
  4. Для запуска двигателя используйте run (направление), где параметр направление может принимать значения FORWARD, BACKWARD или RELEASE. Последнее значение отключает питание двигателя и эквивалентно команде setSpeed (0). Конечно же, Arduino не знает крутится ваш двигатель «вперед» или «назад», так что если вы захотите изменить направление вращения просто поменяйте местами два провода, идущих от двигателя к Motor Shield.

Пример кода, реализующий управление двигателем постоянного тока:

#include <AFMotor.h>

AF_DCMotor motor2(2, MOTOR12_64KHZ); // создаем объект motor №2, ШИМ 64 кГц

void setup()
{
 Serial.begin(9600); // устанавливаем скоросьб передачи по посл. порту 9600 бод
 Serial.println("Тест двигателя");

 motor.setSpeed(200); // устанавливаем скорость вращения 200/255
}

void loop()
{
 Serial.print("вперед");

 motor.run(FORWARD); // вращение вперед
 delay(1000);

 Serial.print("назад");
 motor.run(BACKWARD); // в другую сторону
 delay(1000);
 Serial.print("стоп");
 motor.run(RELEASE); // останавливаем вращение
 delay(1000);
}

 

Использование шаговых двигателей

Шаговые двигатели широко используются в проектах, требующих высокой точности, в частности, они используются в робототехнических разработках и станках с ЧПУ. Motor Shield поддерживает до двух шаговых двигателей. Библиотека работает одинаково и с биполярными и с униполярными двигателями.

Униполярный двигатель. Сначала нужно выяснить какие выводы подсоединены к обмотке, а какие являются отводом от середины обмотки. Если у вас в руках мотор, из которого выходят 5 проводов, то один из них является центральным отводом обеих обмоток. Существуют различные способы как определить выводы обмотки. Центральные отводы нужно соединить вместе и подключить их к выводу GND выходного клеммника. Первую обмотку необходимо подключить к одному выходному порту шилда (например, M1 или M3), вторую обмотку — к другому порту (например, M2 или M4).

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

Подключение шагового двигателя к Motor Shield
Подключение биполярного шагового двигателя к Motor Shield

Работа с шаговым мотором не намного сложнее, чем с двигателем постоянного тока.

  1. Подключите библиотеку AFMotor, используя команду препроцессора #include <AFMotor.h>
  2. Создайте объект шагового двигателя, используя AF_Stepper (шаги, двигатель) для установки H-моста и сдвигового регистра конкретного мотора. Параметр шаги определяет количество шагов на оборот для двигателя. Двигатель с 7.5 градусов/шаг имеет 360/7.5= 48 шагов. Атрибут двигатель — это порт, к которому мы подключили мотор. Если используются выводы шилда M1 и M2, то это порт 1. Если же используются выводы M3 и M4, то в качестве параметра двигатель, то это порт 2 и, следовательно, нужно указать 2.
  3. Установите скорость двигателя, используя setSpeed (обороты), где в качестве параметра обороты необходимо указать желаемое число оборотов в минуту (об/мин).
  4. Каждый раз, когда вы хотите, чтобы двигатель вращался, необходимо вызывать процедуру steps (шаги, направление, тип_шага).

    Параметр шаги задает требуемое число шагов

    В качестве параметра направление может выступать FORWARD или BACKWARD.

    Для задания тип_шага используйте значение SINGLE, DOUBLE, INTERLEAVE или MICROSTEP. SINGLE означает возбуждение одной обмотки, DOUBLE означает что две катушки возбуждаются одновременно, что способствует высокому крутящему моменту, INTERLEAVE означает что происходит чередование между единственной катушкой и двумя катушками, что дает более высокое разрешение, но половинную скорость. MICROSTEP — это способ, при котором производится ШИМ для создания сглаженного движения между шагами. Вы можете выбрать любой метод и изменять его «на ходу», чтобы получить минимальную мощность, больший крутящий момент, или большую точность.

  5. По умолчанию, двигатель удерживает свою позицию, после того как к нему перестали обращаться. Если вы хотите разблокировать обмотки, чтобы мотор смог свободно вращаться, необходимо вызвать функцию release (). Эта функция уменьшает нагрев и снижает потребление тока, но двигатель не сопротивляется вращению извне.
  6. Команды перемещения блокируются и будут возвращены завершенные шаги.

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

В классе AF_Stepper имеется функция onestep (направление, тип_шага), которая реализует перемещение на один шаг двигателя. Параметры направление и тип_шага аналогичны таким же в функции step ().

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

#include <AFMotor.h>

AF_Stepper motor(48, 2);

void setup()
{
 Serial.begin(9600); // Скорость передачи по посл. порту 9600 бод
 Serial.println("Тест шагового двигателя");

 motor.setSpeed(10); // 10 об/мин

 motor.step(100, FORWARD, SINGLE);
 motor.release();
 delay(1000);
}

void loop()
{
 motor.step(100, FORWARD, SINGLE);
 motor.step(100, BACKWARD, SINGLE); 

 motor.step(100, FORWARD, DOUBLE);
 motor.step(100, BACKWARD, DOUBLE);

 motor.step(100, FORWARD, INTERLEAVE);
 motor.step(100, BACKWARD, INTERLEAVE); 
 motor.step(100, FORWARD, MICROSTEP);
 motor.step(100, BACKWARD, MICROSTEP);
}

Если вам требуется больше возможностей для управления шаговым двигателем, то обратите внимание на библиотеку AccelStepper (устанавливается аналогично AFMotor) в которой есть несколько примеров по управлению двумя шаговыми двигателями c различными ускорениями одновременно.

[add_ratings]

8 thoughts on “Motor Shield

  1. Кстате, если запаралелить выводы для движка постоянного тока, то можно увеличить допустимую мощность...Если у нас М1 выдает 0,6Ма и М2 0.6Ма то объединив их выводы мы получим 1,2А...

    Но в таком случае нужно указать это в коде ну и желательно давать плавный старт...

  2. Добрый день! не могу разогнать шаговый биполярный от HDD! Помогите чем сможете!

  3. Если запараллелить все 4 драйвера, то можно получить Н-мост на 1 мотор, способный пропускать до 2.4А?? А как давать плавный старт?

  4. Спасибо вам Андрей Антонов!

    Самая толковая инфа по подключению биполярного двигателя .

    Никогда не имел дело с ардуино , а тут вдруг понадобилась.

    Гуглил,гуглил...все бестолку ни как не удавалось запустить двигатель.

    Попал на эту страничку и через 29 минут уже вертел этот двигатель как хотел!

    В любую сторону .

    Особенно помогла инфа про это :

    «Параметр шаги определяет количество шагов на оборот для двигателя. Двигатель с 7.5 градусов/шаг имеет 360/7.5= 48 шагов

    У меня двигатель оказался 200 шагов с 1,8 градусов

    Спасибо большое!

  5. Вопрос к знатокам ! Можно ли как нибудь подключить два таких мотор шилда для управления 8 моторами ??? Очень надо ...

Оставить ответ

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