Автоматизація
Середній
Двигун на драйвері L298N: швидкість, напрямок і пастки модуля
H-міст L298N крутить двигун в обидва боки, а ШІМ на ENA задає швидкість. Розбираємо перемички ENA і 5V-EN, чому L298N «з'їдає» 2 В, як правильно реверсувати та коли краще взяти TB6612FNG.
Про проєкт
Одним 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.
Дві перемички, про які забувають
- Перемичка на ENA (стоїть із заводу) тримає двигун A завжди ввімкненим на повну. Щоб керувати швидкістю, її треба зняти. Інакше вихід GPIO буде замкнено на 5 В, і симулятор покаже помилку.
- Перемичка 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)прибирає писк.