Компонент · Драйвер

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

L298N — двойной H-мост для управления двумя двигателями постоянного тока. Как он работает, подключается и какие имеет ограничения.

Что это такое

L298N — двойной H-мост для двигателей, силовая часть между чувствительными логическими выводами микроконтроллера и двигателем, которому требуется значительно больший ток. Вывод микроконтроллера может обеспечить лишь несколько десятков миллиампер, даже небольшой редукторный двигатель постоянного тока потребляет сотни. L298N принимает маломощные сигналы направления и скорости и переключает отдельный источник питания двигателей с большим током. Он независимо управляет двумя двигателями — именно это и нужно двухколёсному роботу.

Это устаревшая микросхема: эффективный MOSFET-драйвер вроде TB6612FNG или DRV8833 работает холоднее и теряет меньше напряжения, — но L298N есть везде, он дешёв, прочен и входит в большинство робототехнических наборов, поэтому его стоит хорошо понимать.

Схема H-моста: четыре переключателя расположены вокруг двигателя постоянного тока между положительной шиной питания и землёй. Замыкание верхнего левого и нижнего правого переключателей направляет ток через двигатель в одну сторону для движения вперёд; противоположная пара меняет направление.
H-мост — это четыре переключателя вокруг двигателя. Замкните S1 и S4 для движения вперёд, S2 и S3 для движения назад; L298N делает это сразу для двух двигателей. Скачать SVG

Как работает 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.

Сравнение

Альтернативы

Вопросы

Драйвер двигателей 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.

Дополнительные материалы

Источники