← До всіх проєктів
Автоматизація Середній

Двигун на драйвері L298N: швидкість, напрямок і пастки модуля

H-міст L298N крутить двигун в обидва боки, а ШІМ на ENA задає швидкість. Розбираємо перемички ENA і 5V-EN, чому L298N «з'їдає» 2 В, як правильно реверсувати та коли краще взяти TB6612FNG.

Складність
Середній
Час
45 min
Категорія
Автоматизація
Оновлено

Про проєкт

Одним MOSFET двигун крутиться лише в один бік. Щоб змінювати напрямок, потрібен H-міст: чотири ключі, які подають живлення на двигун то в одній, то в протилежній полярності. Червоний модуль L298N містить два такі мости (два двигуни до 2 А), стабілізатор 5 В і захисні діоди. Керуємо швидкістю потенціометром, напрямком — кнопкою.

Що знадобиться

  • ESP32 DevKit
  • Модуль L298N
  • Двигун постійного струму 6–12 В
  • Блок живлення 12 В (або батарейний відсік 7–12 В)
  • Потенціометр 10 кОм і кнопка

Схема

L298N Підключення
+12V «+» блока живлення
GND «−» блока живлення і GND ESP32
OUT1 / OUT2 двигун
ENA GPIO4 (ШІМ, швидкість)
IN1 / IN2 GPIO16 / GPIO17 (напрямок)
  • Потенціометр: крайні виводи на 3V3 і GND, повзунок на GPIO34.
  • Кнопка: між GPIO32 і GND.

Дві перемички, про які забувають

  1. Перемичка на ENA (стоїть із заводу) тримає двигун A завжди ввімкненим на повну. Щоб керувати швидкістю, її треба зняти. Інакше вихід GPIO буде замкнено на 5 В, і симулятор покаже помилку.
  2. Перемичка 5V-EN вмикає вбудований стабілізатор, що живить логіку L298N від +12V. Якщо живлення понад 12 В, зніміть її і подайте 5 В на вхід +5V окремо, інакше стабілізатор перегріється.

Як керувати

IN1 IN2 Двигун
HIGH LOW вперед
LOW HIGH назад
однакові однакові гальмування (обмотка закорочена)
— ENA = LOW вільний вибіг

Швидкість — це заповнення ШІМ на ENA: analogWrite(ENA, 0…255).

Код

// Двигун на L298N: потенціометр = швидкість (ШІМ на ENA), кнопка = напрямок.
// Зніміть перемичку ENA на платі, інакше GPIO замкнеться на 5 В.
const int ENA = 4, IN1 = 16, IN2 = 17;
const int POT = 34, BTN = 32;

bool forward = true;
int lastBtn = HIGH;

void setup() {
  Serial.begin(115200);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(BTN, INPUT_PULLUP);
}

void loop() {
  int b = digitalRead(BTN);
  if (b == LOW && lastBtn == HIGH) {
    analogWrite(ENA, 0);   // зупиняємо перед реверсом: бережемо редуктор і драйвер
    delay(300);
    forward = !forward;
    Serial.println(forward ? "Вперед" : "Назад");
  }
  lastBtn = b;

  digitalWrite(IN1, forward ? HIGH : LOW);
  digitalWrite(IN2, forward ? LOW : HIGH);
  int speed = map(analogRead(POT), 0, 4095, 0, 255);
  analogWrite(ENA, speed);
  delay(20);
}

Чесно про L298N

  • Падіння напруги ~2 В. L298 зроблено на біполярних транзисторах: кожен ключ «з'їдає» близько 1 В. З 12 В на двигун доходить ~10 В, а з 6 В — лише ~4. Для низьковольтних двигунів це катастрофа.
  • Нагрів. При 1 А мікросхема розсіює ~2 Вт, тому на ній такий великий радіатор.
  • Сучасна заміна — TB6612FNG на MOSFET: падіння 0.1–0.3 В, до 1.2 А на канал (3.2 А піково), логіка 3.3 В і компактна плата. Для роботів на акумуляторах — однозначно він.

Корисно знати

  • Реверс «на ходу» дає кидок струму вдвічі більший за пусковий. Пауза 200–300 мс із вимкненим ENA рятує і драйвер, і шестерні.
  • Земля блока живлення двигуна і земля ESP32 мають бути з'єднані, інакше сигнали IN/ENA «висять» у повітрі.
  • ШІМ на ENA за замовчуванням має частоту ~1 кГц, і двигун тихо пищить. analogWriteFrequency(ENA, 20000) прибирає писк.