← До всіх проєктів
Автоматизація Початковий

Швидкість двигуна: ШІМ + MOSFET IRLZ44N і захисний діод

GPIO не потягне навіть маленький двигун, але MOSFET рівня логіки перемикає амперні струми від 3.3 В. Керуємо швидкістю потенціометром, розбираємося з logic-level транзисторами, резистором на затворі та діодом проти викидів напруги.

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

Про проєкт

Вивід ESP32 віддає до 20–40 мА, а навіть іграшковий двигун на старті бере сотні міліампер. Потрібен ключ, і найпростіший — N-канальний MOSFET між двигуном і землею. ESP32 подає на затвор ШІМ, а транзистор вмикає й вимикає двигун з тим самим коефіцієнтом заповнення.

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

  • ESP32 DevKit
  • MOSFET IRLZ44N (або AO3400 на платі-перехіднику)
  • Двигун постійного струму 3–6 В
  • Діод 1N4007 (або швидший 1N5819)
  • Резистор 10 кОм
  • Потенціометр 10 кОм
  • Окреме живлення 5 В для двигуна

Схема

 +5V (БЖ) ──┬──────────── (+) двигун (−) ──┬── D (сток)
            └──|◀── 1N4007 ────────────────┘   IRLZ44N
               (смужка діода до +)       GPIO25 ── G (затвор)
                                          10 кОм: G → S
 GND (БЖ) ── GND ESP32 ─────────────────────── S (витік)
  • Потенціометр: крайні виводи на 3V3 і GND, повзунок на GPIO34.
  • Земля блока живлення і ESP32 — спільна.

Три правила ключа на MOSFET

  1. Logic level. Затвор IRLZ44N повністю відкривається вже від ~3 В. Популярний IRF540N при 3.3 В відкривається лише частково: він гріється, а двигун ледь крутиться. Симулятор про це попереджає.
  2. Резистор 10 кОм між затвором і витоком. Поки ESP32 завантажується, GPIO «висить», і транзистор може відкритися від наводок. Резистор тримає його закритим.
  3. Захисний діод паралельно двигуну. Обмотка — це індуктивність: коли транзистор різко розриває струм, на ній виникає викид у десятки вольтів, що пробиває транзистор. Діод, увімкнений у зворотному напрямку, дає цьому струму замкнутися.

Код

// Швидкість двигуна: потенціометр → ШІМ → logic-level MOSFET (IRLZ44N)
const int POT = 34;
const int GATE = 25;

void setup() {
  Serial.begin(115200);
  ledcAttach(GATE, 20000, 8);   // 20 кГц: вище межі чутності, двигун не пищить
}

void loop() {
  int duty = map(analogRead(POT), 0, 4095, 0, 255);
  ledcWrite(GATE, duty);
  Serial.printf("заповнення %3d%%\n", duty * 100 / 255);
  delay(300);
}

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

  • Частота ШІМ. На 1–5 кГц двигун неприємно пищить, а на 20 кГц тихий. Дуже висока частота (понад 50 кГц) без драйвера затвора гріє транзистор.
  • Малий оборот. При заповненні нижче ~20 % двигун може не рушити з місця: моменту не вистачає, щоб подолати тертя. Стартуйте з більшого значення.
  • Напрямок. Один MOSFET крутить двигун тільки в один бік. Для реверсу потрібен H-міст, наприклад L298N (є окрема стаття).

Що в симуляторі

Амперметр у розриві кола показує струм двигуна. Спробуйте прибрати діод, поставити IRF540N замість IRLZ44N або підключити двигун прямо до GPIO: симулятор пояснить, чому так не можна.