Как подключить драйвер двигателя к ардуино

от admin

Arduino UNO урок 13 — драйвер двигателя L298N

Микросхема L298N представляет собой сдвоенный мостовой драйвер двигателей и предназначена для управления DC и шаговыми двигателями. Данная микросхема находит очень широкое применение в роботостроительстве. Одна микросхема L298N способна управлять двумя двигателями и обеспечивает максимальную нагрузку до 2А на каждый двигатель, а если задействовать параллельное включение для одного двигателя, то можно поднять максимальный ток до 4А.

В данной статье я хочу рассмотреть подключение к Arduino готового модуля L298N, которые очень широко представлены на популярном аукционе ebay, AliExpress и в др. местах. Можно конечно купить данную микросхему и в России и сделать самому шилд и всю обвязку, но сегодняшняя реальность такова, что при средней стоимости модуля на ebay в 5 долларов, все комплектующие при покупке у нас выйдут примерно также, а то и дороже. Не говоря уже про трудозатраты на изготовление печатной платы, пайку и т.д.

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

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

Схема модуля на L298N

Шилд имеет следующие пины подключения:
Vcc — подключение внешнего питания двигателей
+5 — питание логики
GND — общий
IN1, IN2, IN3, IN4 (разъем P4 на схеме) — входы управления двигателями
OUT1, OUT2 (разъем P2 на схеме) — выход первого двигателя
OUT3, OUT4 (разъем P3 на схеме) — выход второго двигателя
Выключатель S1 служит для переключения питания логической части микросхемы. Т.е. при включенном S1 питание логической части берется от внутреннего преобразователя модуля. При выключенном S1 питание берется от внешнего источника.
На модулях также присутствуют перемычки ENA и ENB для разрешения включения двигателей. Если необходимо, их можно также подключить к Arduino и задействовать, но это лишние 2 провода и в этих входах нет особого смысла.

Раписновка шилда L298N

ШИМ управление позволяет плавно изменять скорость вращение двигателя. Если нам не нужно ШИМ управление, то на соответствующий вход нужно просто подать логическую 1. На какой именно вход IN1 или IN2 вы подадите сигнал ШИМ, либо направление вращения — разницы не имеет. Тоже самое справедливо и для входов IN3, IN4.

Схема подключения шилда L298N к контроллеру Arduino:

Схема подключения модуля L298N

Для питания логической части схемы необходимо нажать кнопку или вставить перемычку (зависит от типа модуля). Если же на вашем модуле не предусмотрен преобразователь 5В, то дополнительно, необходимо соединить вывод 5V от Arduino к входу +5 шилда.
Как видно из схемы выше, 2 и 4 вывод используются для установки направления движения, а 3 и 5 для ШИМ управления выводами.

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

Ардуино: драйвер L298N для мотора постоянного тока

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

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

Драйвер мотора L298N

Как и в случае L293N, драйвер представляет собой полный H-мост, главная функция которого — менять полярность на нагрузке. А если в качестве нагрузки будет мотор постоянного тока, то смена полярности приведет к смене направления его вращения. Это то, что нам нужно.

Спецификация модуля L298N:

  • напряжение питания двигателей: до 35 В;
  • рабочий ток (на каждый канал): 2 А;
  • периодический ток (80% — вкл, 20% — выкл): 2,5 А;
  • кратковременный ток: 3 А;
  • вес: 33 г.

Драйвер L298N работает с более высоким током, чем L293D. С помощью L298N мы можем управлять и слабыми моторчиками типа n20 и мощными моторами, такими как JGA25 или даже JGA37 с крутящим моментом до 20-25 кг/см. Хватит для большинства DIY проектов!

Назначение элементов и контактов на плате драйвера L298N

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

Драйвер мотора L298N элементы

Логика микросхемы L298N питается напряжением 5 Вольт. Для этого на модуле предусмотрен стабилизатор напряжения 78M05. На вход этого стабилизатора можно подавать напряжение до 35 В, а на выходе всегда получается 5 В. Рабочий ток у 78M05 небольшой — до 500 мА. Однако, при желании, от него можно питать и саму плату Ардуино Уно, к которой мы будем подключать драйвер.

Тройная клемма снизу отвечает за питание модуля. Самый левый контакт — питание моторов. Сюда можно подавать до 35 В. Средний контакт — земля, которая должна быть общей для модуля и контроллера. Правый контакт имеет двоякую функцию. Если на модуле стоит перемычка питания стабилизатора, то на этом контакте будет +5В и к нему можно ничего не подключать, либо питать от него контроллер. Но если перемычку убрать, то к этому контакту нужно будет непременно подключить +5В от контроллера, чтобы питать драйвер. В нашем примере мы будем ориентироваться именно на вариант без перемычки.

Две другие винтовые клеммы (OUT1/2 и OUT 3/4) служат для подключения моторов. Надо отметить, что моторы постоянного тока неполярные, но от того на какой контакт мотора подается плюс, а на какой минус, зависит направление их вращения.

Наконец, осталось разобраться с контактами управления. Их по три штуки на каждый мотор. Контакты ENA и ENB позволяют управлять моторами с помощью ШИМ сигнала. Если ENA и ENB подключить строго к +5 В, то моторы будут всегда вращаться с максимальной возможной скоростью. Именно для этого режима на модуле предусмотрены две перемычки рядом с ENA и ENB.

С помощью контактов IN1,IN2,IN3,IN4 задаётся режим работы моторов. Таблица режимов для двигателя A имеет вид:

Режим IN1 IN2
Вращение в одну сторону 1 0
Вращение в обратную сторону 0 1
Блокировка мотора 1 1
Отключение мотора 0 0

Тут следует пояснить последние два режима. Если нам необходимо резко остановить мотор, то выбираем режим блокировки. Для плавной остановки — выбираем «отключение мотора»

Подключение драйвера L298N к Ардуино Уно

Чтобы попробовать драйвер в деле, подключим его к контроллеру Ардуино Уно и к любому, попавшему под руку, небольшому мотору постоянного тока. В данном уроке мы используем самый простой мотор с напряжением питания 1,5-3 Вольта. Для питания этого мотора нам будет достаточно двух пальчиковых батареек. В такой схеме просто невозможно запитать микросхему драйвера от встроенного стабилизатора, поэтому питание +5В будем брать от Ардуино.

Также отметим, что при данной схеме подключения с внешним питанием +5 В, нам нужно убрать соответствующую перемычку, о которой мы говорили выше (перемычка питания от стабилизатора)!

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

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

Схема подключения L298N к Ардуино

Внешний вид макета

Схема подключения L298N к Ардуино

Программа для драйвера мотора L298N

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

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

Следует отметить, что данная программа не гарантирует вращение мотора с какой-то конкретной скоростью. Мы лишь можем менять мощность, передаваемую на мотор, с помощью изменения коэффициента заполнения ШИМ сигнала (duty cycle). Подробнее о ШИМ сигнале можно узнать в одном из наших уроков.

Заключение

Итак, модуль драйвера L298N оказался не таким сложным, как могло показаться. Все драйверы имеют практически схожие контакты управления: EN,IN1,IN2. Бывает, что отдельный вход EN отсутствует, и тогда ШИМ сигнал подается на IN1,IN2. Разобравшись с одним драйвером, мы можем с легкостью применять в своих проектах и другие модели.

Как уже было написано, L298N является достаточно мощным чтобы потянуть большинство моторов, применяемых в DIY проектах. Это и популярные пластиковые желтые моторы с редуктором и более мощные металлические JGA25 и JGA37.

Отдельно следует отметить и ещё одно распространенное применение L298N. С помощью этого драйвера можно управлять биполярными шаговыми двигателями, хотя и не настолько эффективно, как это делают специализированные драйвера типа A4988.

Управление щёточными моторами

blank

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

При помощи обычного реле можно просто включать и выключать мотор по команде digitalWrite(пин, состояние) , прямо как светодиод: blank При помощи двойного модуля реле (или просто двух реле) можно включать мотор в одну или другую сторону, а также выключать: blank Купить модуль реле можно на Али:

Мосфет

Полевой транзистор, он же мосфет, позволяет управлять скорость вращения мотора при помощи ШИМ сигнала. При использовании мосфета обязательно нужно ставить диод, иначе индуктивный выброс с мотора очень быстро убьёт транзистор. Скорость мотора можно задавать при помощи ардуиновской analogWrite(пин, скорость) . blank Вместо “голого” мосфета можно использовать готовый китайский модуль: blank Купить мосфет модуль можно на Aliexpress:

Реле и мосфет

blank

Если объединить реле и мосфет – получим весьма колхозную, но рабочую схему управления скоростью и направлением мотора:

Специальный драйвер

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

Остальные драйверы смотри у меня вот тут. Схемы подключения и таблицы управления:

blank

blank

blank

blank

blank

blank

blank

blank

Пины направления управляются при помощи digitalWrite(pin, value) , а PWM – analogWrite(pin, value) . Управление драйвером по двум пинам может быть двух вариантов:

Моторы переменного тока

Мотором переменного тока (220V от розетки) можно управлять при помощи диммера на симисторе, как в уроке про управление нагрузкой.

Библиотеки

У меня есть удобная библиотека для управления мотором – GyverMotor, документацию можно почитать вот здесь. Особенности библиотеки:

  • Контроль скорости и направления вращения
  • Работа с ШИМ любого разрешения
  • Программный deadtime
  • Отрицательные скорости
  • Поддержка всех типов драйверов
  • Плавный пуск и изменение скорости
  • Режим “минимальная скважность”
Читать:
Как подключить 12в диод к ардуино

Помехи и защита от них

Индуктивный выброс напряжения

Мотор – это индуктивная нагрузка, которая в момент отключения создаёт индуктивные выбросы. У мотора есть щетки, которые являются источником искр и помех за счёт той же самой индуктивности катушки. Сам мотор потребляет энергию не очень равномерно, что может стать причиной помех по линии питания, а пусковой ток мотора так вообще сильно больше рабочего тока, что гарантированно просадит слабое питание при запуске. Все четыре источника помех могут приводить к различным глюкам в работе устройства вплоть до срабатывания кнопок на цифровых пинах, наведения помех на аналоговых пинах, внезапного зависания и даже перезагрузки микроконтроллера или других железок в сборе устройства. Отсечь индуктивный выброс с мотора можно при помощи самого обычного диода, чем мощнее мотор, тем мощнее нужен диод, то есть на более высокое напряжение и ток. Диод ставится встречно параллельно мотору, и чем ближе к корпусу, тем лучше. Точно таким же образом рекомендуется поступать с электромагнитными клапанами, соленоидами, электромагнитами и вообще любыми другими катушками. Логично, что диод нужно ставить только в том случае, если мотор или катушка управляется в одну сторону. Важные моменты:

  • При работе с драйвером и управлением в обе стороны диод ставить не нужно и даже нельзя!
  • При управлении ШИМ сигналом рекомендуется ставить быстродействующие диоды (например серии 1N49xx ) или диоды Шоттки (например серии 1N58xx).
  • Максимальный ток диода должен быть больше или равен максимальному току мотора.
  • Защитный диод, принимающий на себя обратный выброс ЭДС самоиндукции, также называется шунтирующим диодом, снаббером, flyback диодом.
  • В природе существуют мосфеты со встроенным защитным диодом. Этот диод является отдельным элементом и такой мосфет обычно имеет нестандартный корпус, читайте документацию на конкретный транзистор.
  • Диод, который показан на схематическом изображении мосфета, не является защитным диодом: это слабый и медленный “паразитный” диод, образованный при производстве транзистора. Он не защитит мосфет от выброса, нужно обязательно ставить внешний!

Помехи от щёток

blank

Искрящиеся щетки мотора, особенно старого и разбитого, являются сильным источником электромагнитных помех, и здесь проблема решается установкой керамических конденсаторов с ёмкостью 0.1-1 мкФ на выводы мотора. Такие же конденсаторы можно поставить между каждым выводом и металлическим корпусом, это ещё сильнее погасит помехи. Для пайки к корпусу нужно использовать мощный паяльник и активный флюс, чтобы залудиться и припаяться как можно быстрее, не перегревая мотор.

Помехи по питанию, просадка

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

Разделение питания

Если описанные выше способы не помогают – остаётся только одно: разделение питания. Отдельный малошумящий хороший источник на МК и сенсоры/модули, и отдельный – для силовой части, в том числе мотора. Иногда ради стабильности работы приходится вводить отдельный БП или отдельный аккумулятор для надёжности функционирования устройства.

Экранирование

В отдельных случаях критичными являются даже наводки от питающих проводов моторов, особенно при управлении ШИМ мощными моторами и управлении мощными шаговиками в станках. Такие наводки могут создавать сильные помехи для работающих рядом чувствительных электронных компонентов, на аналоговые цепи, наводить помехи на линии измерения АЦП и конечно же на радиосвязь. Защититься от таких помех можно при помощи экранирования силовых проводов: экранированные силовые провода не всегда удаётся купить, поэтому достаточно обмотать обычные провода фольгой и подключить экран на GND питания силовой части. Этот трюк часто используют RC моделисты, летающие по FPV.

Как подключить драйвер L298N к Ардуино?

драйвер

Уроки Arduino

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

Внутреннее устройство платы L298N

Схема имеет следующие обозначения:

1-разъем питания двигателей до 35 В, питание с которого уходит на мотор(обозначается VSS), а также земля(обозначение на плате GND)(подсоединяется к аналогичному GND на Arduino)

2-линейный понижающий стабилизатор до 5 Вольт;

3-вход для питания платы(Vs), также является входом для питания стабилизатора, Возможно не подключать его, а подать напряжение только на VSS, но нужно установить джампер 4 для ограничения подаваемого напряжения на плату до 5 Вольт. Благодаря стабилизатору 2 и его входу 3 на 5 Вольт драйвер способен питать микроконтроллер или сервоприводы.

4-джампер подачи напряжения до 35 В для управления мотором, однако для этого требуется отдельно подавать 5 Вольт с платы Arduino.

1 3

5-OUT1 и OUT2 слева(разъемы для подключения первого двигателя или единственного мотора), OUT3 и OUT4 справа соответственно(разъёмы для подключения второго двигателя или единственного мотора), проще говоря-выходы на мотор или двигатель

6-Два логических входа на левые выходы(IN1, IN2) для моторов и два-для правых(IN3, IN4).

7- Джамперы, отвечающие за работу двигателей(ENA, ENB). Позволяют полностью включать и выключать канал мотора. Их можно не снимать и использовать вместо них основные логические входы. Используются в основном для изменения скорости щеточных моторов при помощи ШИМ-сигнала.

К двум боковым клеммам подключаются двигатели. На 3 пина подсоединяются питание для двигателей и самой микросхемы. Контакт в 12 В можно питать от 5 до 19 В, но стабилизатор принимает только 12В, в случае, если мы хотим подать больше-нужно убрать перемычку рядом с пинами и отдельно подать 5 В. В данном случае стабилизатор будет питаться от 5 Вольтового пина, а двигатели-от 2 пинов, на которые подано напряжение. Грубо говоря, плата питается от 5 Вольтового пина, а двигатели и мотор-от двух других.

Входы на плату управляют направлением вращения двигателей. Левые два входа относятся к левому каналу, два последних-к правому.

Если подать 5 Вольт на 1 контакт, двигатель будет крутиться в одну сторону, если на второй-то он поменяет свое направление.

Два джампера рядом с входами соединяют два контакта. Если его снять, то там окажется контакт с 5 Вольтовым входом и контакт, регулирующий скорость оборота при помощи ШИМ-сигнала. Если на контакт, регулирующий скорость, ничего не подавать, то двигатель не будет вращаться даже в случае подачи сигналов к основным входам, регулирующим направление. С одетыми джамперами можно подавать сигналы на основные входы и регулировать как скорость, так и направление.

Логика управления мотором по 2ум пинам:

  • При подаче двух низких сигналов будет холостой ход
  • При подаче двух высоких сигналов будет активное торможение
  • При подаче разных сигналов задается направление вращения.
  • Недостатки драйвера 298N
  • Микросхемы данного драйвера является очень слабым по току и нагреваются даже при токе в 1 Ампер от одного мотора.

Подключение мотора с редуктором

Для примера подключим плату к мотору с редуктором(на него одеваем колесо от машинки). Плату питаем от обычной 5 Вольтовой телефонной зарядки. Третий контакт задействовать не будем, поскольку напряжение всего 5 Вольт.

motor

Перемычка остается на месте, а стабилизатор питает плату от напряжения +5 Вольт. Подсоединяем мотор к пину, отвечающему за направление вращения. После подсоединения к розетке на плате загорается светодиод, который сигнализирует о наличии напряжения. Подаем к контакту, отвечающему за мотор напряжение в 5 Вольт. Колесо начинает крутиться. Если переставить его в соседний контакт- направление изменится.

Подключение драйвера к ардуино и управление мотором при помощи ШИМ-сигнала

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

Для следующего эксперимента нам понадобится:

  • Плата Arduino;
  • Макетная плата;
  • Потенциометр(переменный резистор);
  • Пины, работающие с ШИМ-сигналом, обозначены волнистой линией.

Для управления скоростью вращения достаточно подавать ШИМ сигнал на управляющий вход, который обозначим pinIN, т.е. можно задействовать не все 6 входов, а 4 для управления скоростью.

2 1

Для управления направлением и скоростью мотора На 1 пин подаем 0 или 1, на второй-ШИМ. Для вращения в обратную сторону нам нужно инвертировать ШИМ сигнал, чтобы скорость менялась от 0 до 100%.

Если направление инвертировано, то инвертируем скорость и подаем на пин управления значения направление и на ШИМ-пин скорость.

Код

#define MOTOR1_IN 2

#define MOTOR1_PWM 3

#define MOTOR2_IN 4

#define MOTOR2_PWM 5

void setup() <

pinMode(MOTOR1_IN, OUTPUT);

pinMode(MOTOR1_PWM, OUTPUT);

pinMode(MOTOR2_IN, OUTPUT);

pinMode(MOTOR2_PWM, OUTPUT);

>

void loop() <

motorControl(analogRead(0), MOTOR1_IN, MOTOR1_PWM);

>

// принимает знач. 0-1023, пин IN и PWM(ШИМ)

void motorControl(int val, byte pinIN, byte pinPWM) <

val = map(val, 0, 1023, -255, 255);

if (val > 0) < // вперёд

analogWrite(pinPWM, val);

digitalWrite(pinIN, 0);

> else if (val < 0) < // назад

analogWrite(pinPWM, 255 + val);

digitalWrite(pinIN, 1);

> else < // остановка

digitalWrite(pinIN, 0);

digitalWrite(pinPWM, 0);

>

>

Однако 298N несовременен, ввиду своих характеристик является устаревшим. Микросхемы этого драйвера сделаны по полупроводниковой технологии. Он слаб по току и греется даже от нагрузки в 1 Ампер от 1 мотора. К тому же, он не эргономичен. Аналогичны характеристики имеет и классический моторшилд для UNO.

Рассмотрим другие, более современные драйвера.

Драйвер MX1508

Драйвер MX1508 обладает следующими характеристиками:

  • Позволяет подать на два мотора напряжение до 10 В при максимальном токе в 2.5 А;
  • Позволяет подать на два мотора напряжение до 10 В при максимальном токе в 2.5 А;
  • Чип имеет защиту от перегрева(сам отключается в случае перегрева);
  • Управление аналогично 298N;
  • Предназначен для работы с двумя моторами.

Драйвер TA6586

Драйвер TA6586 обладает следующими характеристиками:

t

  • Предназначен для работы с двумя моторами;
  • Ток до 7 А;
  • Обладает защитой от перегрева;
  • Подключение и управление аналогично.

В данной статье мы рассмотрели различные вариации драйверов: как устаревшие, так и современные. Научились подключать драйвер к плате Arduino и управлять драйвером при помощи ШИМ-сигнала с Arduino.

Похожие публикации