Компонент · Драйвер
Драйвер двигателей L298N
L298N — двойной H-мост для управления двумя двигателями постоянного тока. Как он работает, подключается и какие имеет ограничения.
Что это такое
L298N — двойной H-мост для двигателей, силовая часть между чувствительными логическими выводами микроконтроллера и двигателем, которому требуется значительно больший ток. Вывод микроконтроллера может обеспечить лишь несколько десятков миллиампер, даже небольшой редукторный двигатель постоянного тока потребляет сотни. L298N принимает маломощные сигналы направления и скорости и переключает отдельный источник питания двигателей с большим током. Он независимо управляет двумя двигателями — именно это и нужно двухколёсному роботу.
Это устаревшая микросхема: эффективный MOSFET-драйвер вроде TB6612FNG или DRV8833 работает холоднее и теряет меньше напряжения, — но L298N есть везде, он дешёв, прочен и входит в большинство робототехнических наборов, поэтому его стоит хорошо понимать.
Как работает H-мост
H-мост состоит из четырёх переключателей, расположенных вокруг двигателя в форме «H». Замыкание верхнего левого и нижнего правого переключателей направляет ток одним способом — двигатель вращается вперёд. Замыкание противоположной пары меняет ток — двигатель вращается назад. В этом и состоит весь приём: H-мост позволяет менять направление двигателя без перепайки проводов.
Каждым двигателем управляют три сигнала:
- Два вывода направления (IN1/IN2) выбирают движение вперёд, назад или торможение.
- Один вывод разрешения ENA, на который подаётся сигнал PWM, задаёт скорость быстрым переключением моста. PWM с полным заполнением даёт полную скорость; скважность 50% — примерно половину.
Если подать на вывод разрешения выход контура регулирования, можно удерживать заданную скорость или плавно управлять роботом вместо рывков между остановом и полной мощностью.
Когда его следует использовать
Выбирайте L298N или любой H-мост всякий раз, когда микроконтроллер должен управлять коллекторным двигателем постоянного тока (DC), то есть практически в каждом колёсном роботе. Его 2 A на канал с запасом покрывают небольшие жёлтые редукторные двигатели, применяемые в роботах, следующих по линии, и колёсных платформах.
Выбирайте MOSFET-драйвер, когда важны эффективность и ресурс батареи, когда двигатели небольшие, поскольку падение L298N съедает много питания на двигателе 6 V, или когда драйвер должен работать без нагрева и радиатора.
Подключение и важные нюансы
- Два источника питания, одна земля. Батарея двигателей питает соответствующий вход; логика 5 V питает логическую сторону. Их земли должны быть соединены, иначе у сигналов управления нет общей опорной земли — классический отказ без сообщения.
- Он съедает ~2 V. Старый выходной каскад BJT теряет примерно 2 V до того, как двигатель увидит что-либо. Для полной скорости двигателя 6 V подавайте около 8 V.
- Он нагревается. При длительном токе микросхеме нужен радиатор. Если двигатели во время работы слабеют, проверяйте температуру.
- Учитывайте перемычку встроенного регулятора 5 V. Многие модули позволяют питать логику от источника двигателей, что удобно, но допустимо только примерно до 12 V. Выше этого нужно снять перемычку и подать 5 V отдельно, иначе регулятор перегреется.
Расположение выводов
Распространённый красный модуль L298N имеет три клеммных блока и два ряда выводов.
| Группа | Обозначение | Назначение |
|---|---|---|
| Питание | +12V |
Питание двигателей 5–35 V. Название вводит в заблуждение — это любое нужное двигателям напряжение |
| Питание | GND |
Земля. Должна быть общей с микроконтроллером |
| Питание | +5V |
Выход при установленной перемычке регулятора; вход при снятой |
| Двигатель A | OUT1, OUT2 |
Две клеммы двигателя канала A |
| Двигатель B | OUT3, OUT4 |
Две клеммы двигателя канала B |
| Управление | ENA |
Разрешение канала A. По умолчанию перемычкой соединён вверх — снимите её для PWM |
| Управление | IN1, IN2 |
Направление канала A |
| Управление | IN3, IN4 |
Направление канала B |
| Управление | ENB |
Разрешение канала B. Та же перемычка |
Две маленькие перемычки на ENA и ENB объясняют, почему во многих первых попытках работает направление, но не скорость: пока они установлены, канал постоянно разрешён, и PWM ничего не делает. Снимите их и подключите выводы к выходам с поддержкой PWM.
Третья перемычка рядом с силовым блоком включает встроенный регулятор 5 V.
Таблица истинности
На каждый двигатель приходятся три сигнала и шесть значимых комбинаций. Эта таблица полностью описывает интерфейс управления.
| ENA | IN1 | IN2 | Что делает двигатель A | Примечание |
|---|---|---|---|---|
| LOW | × | × | Вращается по инерции | Выходы имеют высокое сопротивление; двигатель вращается свободно |
| PWM | HIGH | LOW | Вперёд с заданной скважностью | Обычное состояние движения |
| PWM | LOW | HIGH | Назад с заданной скважностью | |
| HIGH | HIGH | HIGH | Тормозит | Обе клеммы соединены вверх — оба вывода замыкаются друг на друга |
| HIGH | LOW | LOW | Тормозит | Обе вниз — тот же эффект |
| HIGH | HIGH | LOW | Полная скорость вперёд | Это обеспечивает установленная перемычка ENA |
Торможение и вращение по инерции действительно различаются, и различие важнее, чем кажется. При вращении по инерции робот продолжает катиться; торможение замыкает собственную противоЭДС (EMF) двигателя через мост, преобразуя энергию вращения в тепло и останавливая его гораздо резче. Робот, следующий по линии и каждый раз проезжающий развилку, часто движется по инерции там, где должен тормозить.
Подключение к Arduino
| L298N | Arduino Uno | Примечание |
|---|---|---|
ENA |
Вывод 9 | Должен поддерживать PWM (3, 5, 6, 9, 10, 11 на Uno) |
IN1 |
Вывод 8 | Любой цифровой вывод |
IN2 |
Вывод 7 | Любой цифровой вывод |
IN3 |
Вывод 5 | Любой цифровой вывод |
IN4 |
Вывод 4 | Любой цифровой вывод |
ENB |
Вывод 3 | Должен поддерживать PWM |
GND |
GND | Соединение, от которого зависит всё |
+12V |
Плюс батареи двигателей | Не Vin Arduino |
+5V |
— | Только если Arduino питается от L298N |
Правильное решение для перемычки регулятора 5 V
| Перемычка | Вывод +5V |
Когда использовать |
|---|---|---|
| Установлена | Выход — встроенный регулятор получает 5 V из питания двигателей | Питание двигателей 7–12 V и одна батарея для всего |
| Снята | Вход — необходимо подать 5 V | Питание двигателей выше 12 V или ниже примерно 7 V |
Выше примерно 12 V линейный регулятор должен преобразовывать разницу в тепло и перегреется. Ниже примерно 7 V он не может поддерживать 5 V, и при нагрузке двигателями логика уходит в состояние просадки. Оба отказа выглядят как случайные перезагрузки.
Минимальный рабочий код
const int ENA = 9, IN1 = 8, IN2 = 7;
const int ENB = 3, IN3 = 5, IN4 = 4;
void setup() {
for (int p : {ENA, IN1, IN2, ENB, IN3, IN4}) pinMode(p, OUTPUT);
}
// speed: -255..255. Negative is reverse, 0 coasts.
void driveA(int speed) {
digitalWrite(IN1, speed > 0);
digitalWrite(IN2, speed < 0);
analogWrite(ENA, abs(constrain(speed, -255, 255)));
}
void brakeA() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
}
void loop() {
driveA(180); delay(1500); // forward
brakeA(); delay(500); // stop hard
driveA(-180); delay(1500); // reverse
driveA(0); delay(500); // coast
}
Обратите внимание: driveA(0) не тормозит, а оставляет двигатель вращаться по инерции, поскольку нулевая скважность отключает мост. Для резкой остановки необходимо запросить её явно.
Проблема 2 V в числах
Выходной каскад L298N построен на биполярных транзисторах, и каждая проводящая пара теряет напряжение. По техническому описанию суммарное падение при насыщении составляет примерно 1.8 V при 1 A и до 2.7 V при 2 A. Это напряжение не достигает двигателя, а превращается в тепло в микросхеме.
Последствия нагляднее в числах:
| Питание двигателей | Двигатель фактически получает | Доля потерь |
|---|---|---|
| 6 V | ~4 V | 33% |
| 7.4 V (2S Li-ion) | ~5.4 V | 27% |
| 9 V | ~7 V | 22% |
| 12 V | ~10 V | 17% |
При двигателе 6 V, питаемом от 6 V, целая треть батареи греет микросхему. Именно поэтому L298N кажется слабым на небольших роботах и почему двигателю 6 V нужен источник около 8 V.
Это также тепловая проблема. При 1 A на канал и двух работающих двигателях микросхема рассеивает около 4 W. Маленький радиатор справляется лишь при воздушном потоке, а останов двигателя с ограничением тока переводит драйвер в тепловую защиту, что проявляется как замедление двигателей посреди работы и восстановление после паузы.
Диагностика
| Симптом | Вероятная причина | Исправление |
|---|---|---|
| Ничего не движется, хотя подключение выглядит правильным | Нет общей земли | Соединить L298N GND с Arduino GND — это классический отказ без сообщения |
| Направление работает, скорость нет | Перемычки ENA/ENB установлены |
Снять их и подключить выводы к выходам PWM |
| Скорость только включается и выключается | Вывод разрешения не поддерживает PWM | Использовать 3, 5, 6, 9, 10 или 11 на Uno |
| Двигатели слабые, драйвер горячий | Падение ~2 V и тепловая нагрузка | Повысить напряжение или перейти на MOSFET-драйвер |
| Двигатели замедляются во время работы | Тепловая защита | Радиатор и воздушный поток; снизить непрерывный ток |
| Arduino перезагружается при запуске двигателей | Просадка общего источника питания | Отдельная батарея двигателей; общей остаётся только земля |
| Регулятор сильно нагревается | Питание двигателей выше ~12 V при установленной перемычке | Снять перемычку и подать 5 V отдельно |
| Один двигатель вращается назад | Перепутаны провода двигателя | Поменять OUT1/OUT2 или исправить программно, что аккуратнее |
| Оба двигателя одновременно прерывисто вращаются | Источник двигателей не обеспечивает ток останова | Более ёмкий блок; проверить внутреннее сопротивление |
L298N или TB6612FNG?
| L298N | TB6612FNG | |
|---|---|---|
| Выходной каскад | Биполярный | MOSFET |
| Падение напряжения | ~1.8–2.7 V | ~0.5 V суммарно |
| Непрерывный ток | 2 A на канал (с радиатором) | 1.2 A на канал |
| Пиковый ток | 3 A | 3.2 A |
| Питание двигателей | 5–35 V | 2.5–13.5 V |
| Нагрев | Нужен радиатор | Работает холодно |
| Размер и масса | Большой модуль | Размер с почтовую марку |
| Управляющие выводы | По 2 направления и 1 PWM на двигатель | То же и один общий вывод ожидания |
Выбирайте TB6612FNG практически для любого небольшого робота: двух жёлтых редукторных двигателей, робота, следующего по линии, решателя лабиринта. Разница в эффективности существенна: в системе 6 V это целая треть батареи.
Выбирайте L298N, когда питание двигателей выше 13.5 V, требуется более 1.2 A непрерывно на канал или деталь просто была в комплекте. Она прочна, терпима к небрежной эксплуатации, а её изучение даёт полноценное понимание H-моста.
Для новых конструкций стоит знать также DRV8833, похожий на TB6612FNG, но с ограничением тока, и BTS7960 на 43 A для действительно крупных двигателей.
Исследуйте граф
Используется в этих сборках
Проекты, учебные пути и симуляторы, в которых используется Драйвер двигателей L298N.
- ПроектМашинка-робот под управлением смартфона: Bluetooth или Wi-Fi
- ПроектРобот обхода препятствий: датчик, сканирование и поворот
- ПроектРобот, следующий по линии: от симулятора к реальной трассе
- ПроектСоберите робота, следующего по линии, на микроконтроллере 8051
- Учебный путьУправление двигателями роботов: дорожная карта обучения
Сравнение
Альтернативы
Вопросы
Драйвер двигателей L298N: частые вопросы
Что такое драйвер двигателей L298N?
L298N — модуль драйвера на двух H-мостах. Он располагается между микроконтроллером и двигателями, принимает маломощные сигналы направления и скорости и переключает отдельный источник питания с большим током, независимо управляя двумя двигателями постоянного тока или одним шаговым.
Для чего используют L298N?
Он позволяет микроконтроллеру вроде Arduino управлять двигателями, которые тот никогда не смог бы питать напрямую. Вывод микроконтроллера обеспечивает лишь десятки миллиампер, а даже небольшому редукторному двигателю нужны сотни, поэтому L298N предоставляет мощность для движения вперёд, назад и регулирования скорости колёсного робота.
Как подключить L298N к Arduino?
Подключите батарею двигателей к соответствующему входу питания L298N, соедините землю L298N с землёй Arduino — общая земля обязательна, — подключите каждый двигатель к клеммам OUT и подведите выводы направления IN1/IN2 и разрешения ENA/ENB к цифровым выводам и выводам PWM Arduino.
Как регулировать скорость двигателя с L298N?
Подавайте сигнал PWM на вывод разрешения ENA или ENB, а не удерживайте его в состоянии HIGH. Скважность PWM быстро включает и выключает H-мост, и двигатель реагирует на среднее значение, поэтому скважность 50% даёт примерно половину скорости. Выводы направления задают движение вперёд или назад.
Почему мой двигатель медленно работает от L298N?
Старый транзисторный выходной каскад L298N теряет примерно 2 V до того, как двигатель их увидит. Двигатель 6 V от источника 6 V будет работать вяло; подавайте около 8 V или для небольших двигателей перейдите на эффективный MOSFET-драйвер вроде TB6612FNG.
Дополнительные материалы