Драйвер двигателя ардуино своими руками

Обновлено: 06.07.2024


Одним из самых простых и недорогх способов управления двигателями постоянного тока является модуль L298N Motor Driver с Arduino. Он может контролировать скорость и направление вращения двух двигателей постоянного тока, а так же управлять биполярным шаговым двигателем (типа NEMA 17).

Технические параметры

► Напряжение питания логики модуля: 5 В
► Потребляемый ток встроенной логики: 36 мА
► Напряжение питания драйвера: 5 В – 35 В
► Рабочий ток драйвера: 2 А (пиковый ток 3 А)
► Габариты: 43.5 мм х 43.2мм х 29.4мм

Общие сведения

Основной чип модуля это микросхема L298N, состоящая из двух H-мост (H-Bridge), один для выхода A, второй для выхода B. H-мост широко используется в электронике и служит для изменения вращения двигателем, схема H-моста содержит четыре транзистора (ключа) с двигателем в центре, образуя H-подобную компоновку. Принцип работы прост, при одновременном закрытие двух отдельных транзистора изменяется полярность напряжения, приложенного к двигателю. Это позволяет изменять направление вращения двигателя. На рисунке ниже, показана работа H-мостовой схемы.

Драйвер мотора на L298N, схема H-Моста

Для управления скоростью двигателя постоянного тока используется метод PWM (Широтно-импульсной модуляции).

Обзор драйвера мотора на L298N

Модуль L298N содержит разъем для подключения питания, ряд перемычек для настройки модуля, два выхода A и B и разъем управления, которые регулируют скорость и направление вращения, назначение каждого можно ознакомится ниже:

► Вывод Vss — питание двигателей, от 5 до 35 В;
► Вывод GND — общий вывод заземления;
► Вывод Vs — питание для логической схемы;
► Перемычка ENA — используются для управления скоростью двигателя A;
► Вывода IN1 и IN2 — используются для управления направлением вращения двигателя A;
► Вывода IN3 и IN4 — используются для управления направлением вращения двигателя B;
► Перемычка ENB — используются для управления скоростью двигателя B;
► Выходы OUT1 и OUT2 — разъем для двигателя A;
► Выходы OUT3 и OUT4 — разъем для двигателя B;

Принципиальная схема модуля L298N

Принципиальная схема модуля L298N

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

Обзор драйвера мотора на L298N

Падение напряжения L298N
Падение напряжения драйвера L298N составляет около 2 В, это связано с внутренним падением напряжения в транзисторах в цепи H-мосте. Таким образом, если мы подключим 12 В к источнику питания двигателя, то двигатели получат напряжение около 10 В. Это означает, что двигатель на 12 В не будет работать с максимальной скоростью, для получения максимальной скорости, напряжение поданное на двигателя должен быть выше напряжения (2 В), чем потребность в фактическом напряжении двигателя. Учитывая падение напряжения на 2 В, если вы используете двигатели 5 В, вам необходимо обеспечить питание 7 В. Если у вас 12-ваттные двигатели, то напряжение питания вашего двигателя должно составлять 14 В.

Управления скоростью
Разъемы управления скоростью ENA и ENB используются для включения и выключения управления скоростью двигателей. Когда перемычка установлена, двигатель вращается с максимальной скоростью. Если необходимо управлять скоростью двигателей, необходимо убрать перемычку и подключить выводы к контактам с поддержкой PWM на Arduino.

Подключение L298N к Arduino (коллекторный двигатель)

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Драйвер мотора на L298N (5-35V, 2A) x 1 шт.
► Коллекторный двигатель x 2 шт.
► Комплект проводов DuPont 2.54 мм, 20 см x 1 шт.

Подключение:
Первым делом необходимо подключить источник питания 12B к двигателям, в примере используется распространенные двигатель постоянного тока, рассчитанные на 3B . . . 12B (применяемые в робототехнике). Учитывая внутреннее падение напряжения на микросхеме L298N, двигатели получат 10 В и будут вращаться не в полную силу.
Далее, нужно подключить 5 вольт на логическую схему L298N, для этого воспользуемся встроенным стабилизатором напряжения, который работает от источника питания двигателя, поэтому, перемычка EN должна быть установлена.
Теперь осталось подключить управляющие провода ENA, IN1, IN2, IN3, IN4 и ENB к шести цифровым выводам Arduino 9, 8, 7, 5, 4 и 3. Обратите внимание, что выводы Arduino 9 и 3 поддерживают ШИМ. Теперь, подключаем двигатели, один к клемме A (OUT1 & OUT2), а другой к клемме B (OUT3 & OUT4). Принципиальная схема подключения приведена ниже.

Для этого воспользуемся самым популярным драйвером, используемым для управления моторчиками – микросхемой L293D.

L293D содержит два драйвера для управления электродвигателями небольшой мощности. Имеет две пары входов для управляющих сигналов и две пары выходов для подключения электромоторов. Кроме того, у L293D есть два входа для включения каждого из драйверов. Эти входы используются для управления скоростью вращения электромоторов с помощью ШИМ (PWM).

блок-схема L293D

Рассмотрим блок-схему L293D, приведённую в datasheet-е (нумерация для SO-корпуса):

К выходам OUTPUT1 и OUTPUT2 подключается электромотор MOTOR1 (для микросхемы в DIP-корпусе – ножки 3 и 6).
Соответственно MOTOR2 подключается к выходам OUTPUT3 и OUTPUT4 (ножки 11 и 14).

Сигналы, подаваемые на ENABLE1(2) управляют соответствующим драйвером (ножки 1 и 9 соответственно).

Подавая на вход ENABLE1 сигнал HIGH ( или просто соединив с плюсом источника питания +5V) – включаем драйвер 1-го моторчика.
Если при этом на входы INPUT1 и INPUT2 сигналы не подавать, то моторчик вращаться не будет.
Подавая HIGH на INPUT1 и LOW на INPUT2 мы заставим моторчик вращаться. А если теперь поменять сигналы местами и подавать на INPUT1 сигнал LOW, а на INPUT2 сигнал HIGH – мы заставим моторчик вращаться в другую сторону.


Аналогично для второго драйвера.

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

Четыре контакта GND (ножки 4, 5, 12,13) нужно соединить с землёй. Так же эти контакты обеспечивают теплоотвод от микросхемы.

Характеристики L293D

Если использовать микросхему L293E, то допустимый ток нагрузки на каждый канал уже будет 1А (а пиковый ток – 2А), но придётся использовать внешние защитные диоды, которые у L293D встроены в саму микросхему.

Попробуем смоделировать как Arduino справляется с управлением моторчиками :)

Запускаем Proteus и открываем проект с Arduino :)
Добавим на схему наш драйвер – L293D


Соединим выводы Vss и Vs с положительным полюсом батареи, выводы GND соединим с землёй, а к выводам 3,6 и 11,14 подсоединим моторчики – соответственно MOTOR1 и MOTOR2.

А как же соединить входы драйверов? Для начала, посмотрим – как вообще это работает на практике :)
Загрузим в МК скетч Blink или Blink_HL, а далее, как показано на рисунке, соединим INPUT1 и ENABLE1 с digital pin 13, к которому подключен светодиод, а INPUT2 соединим с землёй. Запустим симуляцию и увидим, что моторчик одну секунду вращается в одну сторону, а потом останавливается на секунду. Т.е. получили моторчиковый Blink :)

Итак, получается, что для управления одним моторчиком требуется три порта(один из них — PWM).
Если скоростью вращения моторчика управлять не требуется, то можно сэкономить на PWM-портах (ENABLE1 и ENABLE2). Тогда, для управления одним моторчиком нужно будет задействовать два порта.

Итак, определимся с портами (в скобках – соответствующий номер ножки МК из pin mapping ):


Изменим наш проект в Proteus-е:

А теперь напишем скетч.

Для удобства – будем хранить номера портов не в обычных переменных типа int, а объединим их структурой:


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


То при попытке скомпилировать — получим ошибку:

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



Три секунды оба моторчика вращаются вперёд, затем пол-секунды второй моторчик вращается назад, а потом снова вперёд.

Перенесём структуру и функции в нашу библиотеку RoboCraft.


А скетч тогда будет таким:

Функции вращения принимают два параметра – номер моторчика(1-2) и скорость вращения (0-255). Если номер отличается от 1-2, то вращение задаётся сразу обоим моторчикам.


У меня под рукой оказалась микросхема L293E – поэтому необходимо использовать защитные диоды (1N4007), которых для двух моторчиков нужно аж 8 штук :)


Так же у L293E не 16, а целых 20 ножек:


Впрочем, для тестирования можно собрать схему только для одного моторчика ;)

Соответственно нужно внести изменения в скетч:



— крутим наш моторчик 3 секунды вперёд, а затем одну секунду назад.

Крутится :)


Модуль драйвера L298N является двуканальным драйвером двигателей постоянного тока и основан на двух H-мостовых драйверах. Через этот модуль вы можете управлять двумя двигателями постоянного тока, либо одним четырехпроводным двухфазным шаговым двигателем. При управлении двумя двигателями постоянного тока имеется возможность одновременно с направлением их вращения управлять и скоростью с помощью подачи ШИМ-сигнала на соответствующие выводы. Если управление скоростью не требуется, то выводы ENA и ENB можно замкнуть перемычкой на соответствующие выводы +5V.

Модуль драйвера имеет 6 выводов:

Устройство драйвера двигателей на L298N


Обратите внимание на данный клеммник на драйвере:

Клеммник +12 GND на драйвере L298N

Драйвер двигателей на L298N

Описание:

В данном примере с помощью Arduino и драйвера на L298N будем управлять двумя двигателями постоянного тока. Установим скорость и направление вращения, поменяем их. В теле функции demoOne() (см. скетч ниже) будем включать двигатели и начинаем с ними работать при ШИМ-значении 100. Через некоторое время двигатели начинают вращаться в противоположном направлении (благодаря смене HIGH и LOW в теле функции digitalWrite()). Для демонстрации возможностей изменения скорости вращения, используем доступный ШИМ-диапазон в теле функции demoTwo(). Сигнал на пине меняется от 0 до 255 и вновь до нуля.

Хотите подключить мотор к Arduino или Iskra JS?! К сожалению микроконтроллер установленный на управляющих платформах не сможет без посторонней помощи управлять большой нагрузкой. Motor Shield поможет микроконтроллеру управлять коллекторными моторами и шаговыми двигателями.


Motor Shield — это плата расширения, предназначенная для двухканального управления скоростью и направлением вращения коллекторных двигателей постоянного тока, напряжением 5–24 В и максимальным током до двух ампер на канал.

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

Видеообзор

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


Установите Motor Shield сверху на управляющую платформу, например Arduino Uno или Iskra JS.


H2 с 7 пином.

Примеры работы для Arduino

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

Подключите два коллекторных мотора к клеммникам M1 и M2 соответственно.

Схема устройства


Код программы

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

Код программы

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

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

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

Схема устройства


Управление без библиотек

Motor Shield поддерживает три режима управления биполярным шаговым двигателем:

Код программы

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

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

Обратите внимание, что двигатель в однофазном полношаговом режиме позволяет развить гораздо меньший момент, чем в двухфазном полношаговом режиме.

Управление через готовую библиотеку

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

Пример работы в различных режимах

Пример работы для Espruino

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

Подключите два коллекторных мотора к клеммникам M1 и M2 соответственно.

Схема устройства


Код программы

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

Код программы

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

Элементы платы


Драйвер двигателей

Сердце и мускулы платы — микросхема двухканального H-моста L298P.

S1 S2 S3 S4 Результат
1 0 0 1 Мотор крутится вправо
0 1 1 0 Мотор крутится влево
0 0 0 0 Свободное вращение мотора
0 1 0 1 Мотор тормозит
1 0 1 0 Мотор тормозит
1 1 0 0 Короткое замыкание источника питания
0 0 1 1 Короткое замыкание источника питания

Ключи меняем на транзисторы для регулировки скорости мотора с помощью ШИМ-сигнала.

H-мост с силовыми ключами — основная начинка микросхемы L298P для управления скоростью и направлением двигателей.

Питание

На плате расширения Motor Shield два контура питания.

Силовой контур — напряжение для питания моторов от силовой части микросхемы H-моста L298P. При отсутствии питания на силовом контуре, светодиод PWR не горит.

Цифровой контур — для питания вспомогательной цифровой логики управления микросхемой L298P и светодиодов индикации. Цифровое питание поступает на плату расширения от пина 5V управляющей платы. Если по какой-то причине напряжения на этом пине не оказалось, светодиоды индикации гореть не будут.

Если отсутствует хотя бы один из контуров питания — Motor Shield работать не будет.

Силовое питание подключается через клеммник PWR . Диапазон входного напряжения:

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

Джампер объединения питания

Motor Shield использует два контура питания: силовое и цифровое. По умолчанию для питания всей конструкции необходимо два источника напряжения:

При установки джампера в положение PWR JOIN , происходит объединение контакта Vin управляющей платформы и положительного контакта клеммника PWR . Режим объединённого питания позволяет запитывать управляющую платформу и силовую часть драйвера от одного источника питания.

При объединённом режиме напряжение может быть подано двумя способами:

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

В режиме совместного питания управляющей платформы и Motor Shield, используйте входное напряжение в диапазоне 7–12 вольт. Напряжение более 12 вольт убьёт управляющую платформу. Если вы хотите работать с Motor Shield в диапазоне 5–24 вольта, используйте два отдельных источника питания.

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

При объединённом питании используйте литий-ионные и никель-металлгидридные аккумуляторы. Если вы используете другие источники питания, лучше воспользуйтесь раздельной схемой питания управляющей платформы и Motor Shield.

Нагрузка

Нагрузка разделена на два независимых канала. К каждому каналу можно подключить один коллекторный мотор. Первый канал на плате обозначен шёлком M1 , второй канал — M2 .

Светодиодная индикация

Имя светодиода Назначение
PWR Индикация состояния силового питания. Есть питание — светодиод горит, нет питания — не горит.
H1 Индикация состояния направления первого канала M1 . При высоком логическом уровне светится зелёным светом, при низком — красным.
H2 Индикация состояния направления второго канала M2 . При высоком логическом уровне светится зелёным светом, при низком — красным.
E1 Индикация скорости первого канала M1 . Яркость светодиода пропорциональна скорости вращения двигателя.
E2 Индикация скорости второго канала M2 . Яркость светодиода пропорциональна скорости вращения двигателя.

Пины управления скоростью вращения двигателей

Для запуска двигателя на первом или втором канале установите высокий уровень на пинах скорости E1 или E2 соответственно. Для остановки моторов установите на соответствующих пинах низкий уровень.

Управление скоростью происходит при помощи ШИМ, за счёт быстрого включения и выключения нагрузки.

Пины управления направлением вращения двигателей

Пины направления H1 или H2 отвечают за направление вращения двигателей. Смена направления вращения коллекторных двигателей достигается за счёт изменения полярности приложенного к ним напряжения.

Контакты выбора управляющих пинов

По умолчанию Motor Shield для управления скоростью и направлением вращения моторов использует пины управляющей платы:

Назначение Канал 1 Канал 2
Скорость 5 6
Направление 4 7

Если в вашем устройстве эти пины уже заняты, например используются для управления Relay Shield), вы можете использовать другой свободный пин.

Контакты отвечающие за направления — H1 и H2 можно заменять на любые другие. А вот контакты управляющие скоростью моторов — E1 и E2 , можно перебрасывать только на пины с поддержкой ШИМ.


Для переброски пинов снимите джампер напротив занятого пина и припаяйте проводок между луженым отверстием рядом со снятым джампером и луженым отверстием напротив нужного пина. На этой картинке мы перекинули:

Читайте также: