Добавить в избранное

Управление мощной нагрузкой с Arduino: ШИМ и MOSFET-транзистор

Чтение ≈ 4 мин

Как управлять мотором, лентой или нагревателем с Arduino через MOSFET: выбор транзистора с логическим уровнем, схема подключения, обратный диод, analogWrite и безопасное управление большими токами.

Зачем MOSFET

Пин Arduino отдаёт максимум 20 мА — светодиоду хватит, но мотор, LED-лента или нагреватель требуют амперы. MOSFET-транзистор решает эту задачу: маленький сигнал от пина управляет большим током нагрузки — как реле, только быстрый, бесшумный и с возможностью ШИМ для плавной регулировки.

Выбор транзистора: логический уровень

Не всякий MOSFET откроется от 5 В. Нужен logic-level — у него пороговое Vgs(th) низкое и полный открытие при 5 В. Популярные:

  • IRLZ44N — классика, полностью открывается от 5 В.
  • IRL540N, IRL3705N, IRF3205 (последний откроется неполностью — греется, но для малых токов сойдёт).
  • Готовые модули на базе IRF520 — распространены, но IRF520 НЕ logic-level! Греется при токах больше ~1 А. Лучше IRL-модуль.

Проверка по даташиту: смотрите Rds(on) при Vgs=4.5В или 5В — если указано, транзистор logic-level.

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

Нагрузка (+) ── +12V БП
Нагрузка (−) ── DRAIN MOSFET
SOURCE MOSFET ── GND ── GND Arduino (общий!)
GATE MOSFET ── резистор 100 Ом ── пин Arduino (ШИМ ~9)
GATE ── резистор 10 кОм ── GND   (подтяжка на закрытие)
Диод (например 1N4007/1N5822) параллельно нагрузке, катодом к +12V

Роль элементов:

  • Резистор 100 Ом на затворе — ограничивает пиковый ток перезарядки затвора (ёмкость ~нФ) — защищает пин.
  • 10 кОм pull-down — держит затвор закрытым, пока Arduino в ресете или без прошивки.
  • Диод — обязателен для индуктивной нагрузки (мотор, катушка реле): при выключении ЭДС самоиндукции пробьёт транзистор. Катод к плюсу питания.

Управление: analogWrite

ШИМ на затворе MOSFET — плавная регулировка мощности:

const int GATE = 9;   // ШИМ-пин

void setup() {
    pinMode(GATE, OUTPUT);
}

void loop() {
    // плавный разгон мотора
    for (int i = 0; i <= 255; i += 5) {
        analogWrite(GATE, i);
        delay(50);
    }
    delay(1000);
    // плавное торможение
    for (int i = 255; i >= 0; i -= 5) {
        analogWrite(GATE, i);
        delay(50);
    }
    delay(1000);
}

Скважность 0–255 = мощность 0–100 %. Для мотора — скорость, для ленты — яркость, для нагревателя — температура.

Частота ШИМ и нагрев транзистора

Базовая частота ШИМ на Uno — ~490 Гц (пины 5, 6 — ~980 Гц). На этой частоте MOSFET работает хорошо. При высоких частотах (десятки кГц) затвор успевает не полностью открываться — транзистор греется в линейном режиме. Для больших токов или высоких частот нужен драйвер затвора (TC4420 и т.п.).

Проверка нагрева: приложите палец через 30 секунд работы — если не удержать, нужен радиатор или транзистор помощнее.

Высокое vs низкое плечо

Схема выше — низкое плечо (low-side): нагрузка всегда на плюсе, MOSFET размыкает минус. Это стандарт и просто.

Высокое плечо (high-side) — MOSFET между +12V и нагрузкой — требует P-канальный транзистор или драйвер с бустрепом, сложнее. Низкое плечо покрывает 95 % задач: LED-лента, мотор, нагреватель.

Практический пример: регулятор ленты 12 В

const int GATE = 9;
const int POT = A0;

void setup() {
    pinMode(GATE, OUTPUT);
}

void loop() {
    int raw = analogRead(POT);            // потенциометр 0..1023
    int pwm = map(raw, 0, 1023, 0, 255);  // -> ШИМ
    analogWrite(GATE, pwm);
    delay(10);
}

Лента 12 В, потенциометр на A0 — крутишь ручку, меняется яркость. Для питания берите БП 12 В с запасом по току (см. калькулятор LED-ленты на сайте).

Типичные проблемы

  • Транзистор кипяток: IRF520/не logic-level при большом токе — переходите на IRLZ44N или радиатор.
  • Нагрузка не выключается полностью: MOSFET не закрывается — проверьте pull-down 10к и общий GND.
  • Сгорает при включении: пиковый ток заряда затвора — резистор 100 Ом обязателен.
  • Шум/писк в моторе: низкая частота ШИМ слышна — увеличьте частоту через таймер.
  • Плата перезагружается: ЭДС от мотора через питание — диод на нагрузке, конденсатор по питанию.

Итог

MOSFET с logic-level — стандартный способ управлять мощной нагрузкой с Arduino: резистор 100 Ом на затворе, pull-down 10 кОм, обратный диод для индуктивности, analogWrite для мощности. Схема низкого плеча покрывает почти всё — от LED-ленты до самодельного обогревателя.

Полный пример: плавный светодиод на MOSFET

const int GATE = 9;    // ШИМ-пин

void setup() {
    pinMode(GATE, OUTPUT);
}

void loop() {
    // плавно вверх
    for (int i = 0; i <= 255; ++i) { analogWrite(GATE, i); delay(10); }
    // плавно вниз
    for (int i = 255; i >= 0; --i) { analogWrite(GATE, i); delay(10); }
}

На затворе — импульсы 490 Гц (стандартный ШИМ Uno), на ленте — средняя яркость плавно меняется.

Частота ШИМ

Стандартная частота analogWrite на Uno — ~490 Гц (пины 5,6 — 980 Гц). Для светодиодной ленты хватает, но на больших моторах может пищать. Повышение частоты через регистры таймера (быстрый ШИМ 31 кГц) убирает писк:

// пины 9 и 10 — Timer1, быстрый ШИМ на 31.25 кГц
TCCR1B = TCCR1B & 0b11111000 | 0x01;

Обратная ЭДС и диод

Катушка реле, мотора, соленоида при выключении выбрасывает обратный импульс — без диода он сжигает транзистор. Ставьте быстрый диод (1N4007, UF4007) параллельно индуктивной нагрузке — он гасит выброс. На модуле реле диод обычно уже есть — на голом MOSFET с катушкой нет.

Выбор MOSFET для ШИМ

Для быстрого переключения важен ещё и заряд затвора (Qg): большой заряд = дольше переключается = греется на фронтах. Для ШИМ выбирайте транзисторы с малым Qg или драйвер затвора на высоких частотах (>20 кГц).

Пример: управление скоростью вентилятора

// 12В вентилятор через IRLZ44N, плавная регулировка
int speed = map(analogRead(A0), 0, 1023, 0, 255);
analogWrite(GATE, speed);

Потенциометр → ШИМ → MOSFET → вентилятор. То же для LED-ленты, нагревателя, мотора.

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

  • IRF вместо IRL — от 5 В не откроется, греется.
  • Нет общего GND — сигнал не доходит до затвора.
  • Нет диода на катушке — транзистор умирает от выброса.
  • Длинные провода на затворе — наводки, самопроизвольное включение.
  • Превышен ток без радиатора — Rds(on) × I² греет корпус.

Проекты

  • Диммер для LED-ленты.
  • Регулятор оборотов кулера.
  • Управление нагревателем/паяльником.
  • Привод соленоидного клапана.
  • Сигнализация с сиреной.

Полный пример: диммер для ленты

const int GATE = 9, POT = A0;

void setup() {
    pinMode(GATE, OUTPUT);
    // повышаем частоту ШИМ до ~31 кГц — без писка
    TCCR1B = TCCR1B & 0b11111000 | 0x01;
}

void loop() {
    int val = map(analogRead(POT), 0, 1023, 0, 255);
    analogWrite(GATE, val);
}

Драйвер затвора для высоких частот

На частотах >20 кГц ёмкость затвора мешает — транзистор греется на фронтах. Драйвер (TC4420, IR2104) заряжает затвор быстрее и снимает нагрузку с пина. Для ШИМ до ~1 кГц на мощной нагрузке драйвер не обязателен.

Тепло и радиатор

P = I² × Rds(on)
IRLZ44N: 0.022 Ом × 100 Вт лента (8.3А) = 1.5 Вт — маленький радиатор
IRLZ44N при 20 А: 8.8 Вт — нормальный радиатор

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

  • IRF вместо IRL — не откроется от 5В, греется.
  • Без диода на катушке — ЭДС убивает транзистор.
  • Длинные провода на затворе — наводки, самопроизвольное включение.
  • На пределе тока без радиатора — считайте I²R.
Поделиться
Понравился материал?

Комментарии

Добавить комментарий