ELECTRONICS

Драйвер двигателя L298N и Arduino: схема подключения, управление скоростью и направлением, скетч

Драйверы моторовСкетч проверен компиляцией

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

У него есть цена: два вольта теряются на ключах. Мотор на 12 В получит десять — незаметно. Мотор на 6 В получит четыре — заметно. Для маленьких моторов от батареек лучше взять TB6612 или DRV8833; L298N хорош там, где моторы на 9–12 В и ток до двух ампер.

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

RVT35V220RVT35V220OUT1OUT2OUT4OUT3+12VGND+5V+5V+5VENAIN1IN2IN3IN4ENB
Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
IN1, IN2Направление мотора A: 1-0 вперёд, 0-1 назад, 0-0 выбег, 1-1 тормоз.
IN3, IN4То же для мотора B.
ENA, ENBРазрешение и скорость канала. С перемычкой — всегда включён на полную; без перемычки — ШИМ с вывода Arduino.
12VВход питания моторов, 7–35 В. Название условное: сюда подают то, на что рассчитаны моторы.
GNDЗемля силовой части. Соединяется с землёй Arduino.
5VВыход встроенного стабилизатора при перемычке 5V-EN: отсюда можно питать Arduino через VIN. Если питание моторов выше 12 В, перемычку снимают и сюда подают 5 В снаружи.
OUT1, OUT2Клемма мотора A.
OUT3, OUT4Клемма мотора B.

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

Микросхема
L298N, двойной H-мост
Питание моторов
7–35 В
Ток
до 2 А на канал, 3 А пиковый
Падение на ключах
около 2 В
Логика
5 В, совместима с 3,3 В по входам
Стабилизатор 5 В
до 0,5 А при питании до 12 В
Размер
43 × 43 мм

Перемычка 5V-EN и питание Arduino

При установленной перемычке встроенный стабилизатор делает из напряжения моторов 5 В и выдаёт их на клемму 5V. Их хватает, чтобы питать Arduino через вывод VIN или 5V: одна батарея на всё. Правило — так делают только при питании до 12 В, выше стабилизатор перегревается.

Если моторы питаются от 24 В, перемычку снимают, а на клемму 5V подают 5 В от Arduino: без них логика драйвера не работает. Это единственный случай, когда ток идёт в клемму 5V, а не из неё.

Библиотека

не нужнаТри digitalWrite и один analogWrite на канал. Библиотеки вроде L298N упрощают код, но ничего не добавляют.

Готовый скетч

// Один мотор на канале A драйвера L298N
const int ENA = 9;   // ШИМ — скорость
const int IN1 = 8;
const int IN2 = 7;

void forward(int speed) {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, speed);     // 0..255
}

void backward(int speed) {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, speed);
}

void stop() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 0);
}

void setup() {
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  stop();
}

void loop() {
  forward(200);   delay(2000);
  stop();         delay(500);
  backward(120);  delay(2000);
  stop();         delay(500);
}

Скетч собирается arduino-cli под Arduino UNO

Скорость ниже 60–80 из 255 мотор обычно не тянет: ключи съедают напряжение, и он гудит на месте.

Частые ошибки

Мотор крутится только на полной скорости

Перемычка на ENA не снята: канал всегда включён, ШИМ на него не влияет. Снимите перемычку и подключите ENA к выводу с ШИМ.

Мотор вялый, хотя питание 6 В

Два вольта уходят на ключи L298N — мотору достаётся четыре. Либо поднимите питание, либо возьмите драйвер с меньшим падением: TB6612 или DRV8833.

Arduino перезагружается при старте мотора

Плата питается от того же аккумулятора, и пусковой ток мотора просаживает напряжение. Электролит 1000 мкФ на клемме 12V, а лучше — отдельное питание платы.

Радиатор обжигает пальцы

При двух амперах на канал микросхема рассеивает до 8 Вт — это норма для L298N. Если нагрев мешает, ток меньше или драйвер современнее.

Работает канал A, молчит канал B

Питание логики не подано: перемычка 5V-EN снята, а на клемму 5V ничего не пришло. Верните перемычку или подайте 5 В.

Что понадобится