Зачем 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.