MOSFET: logic-level, điện trở gate, đóng cắt tải dòng lớn bằng PWM của ESP32
MOSFET kênh N, kênh P là gì, vì sao chọn MOSFET logic-level cho ESP32 3,3 V, VGS(th) và RDS(on), mạch đóng cắt phía thấp có điện trở gate, PWM và thí nghiệm chỉnh độ sáng dải LED 12 V.
Transistor BJT làm công tắc tốt cho tải vài chục đến khoảng 150 mA. Với dải LED 12 V vài ampe, quạt, bơm, động cơ, lựa chọn tốt hơn là MOSFET: được điều khiển bằng điện áp nên gần như không lấy dòng từ chân GPIO, khi dẫn chỉ có điện trở vài phần trăm ôm nên ít nóng, và đóng cắt rất nhanh, hợp với PWM. Bài viết giải thích ký hiệu MOSFET kênh N, kênh P, vì sao phải chọn loại logic-level khi dùng với ESP32 3,3 V, các thông số VGS(th), RDS(on), mạch đóng cắt phía thấp với điện trở gate và điện trở kéo xuống, PWM và công suất trung bình, rồi làm thí nghiệm chỉnh độ sáng dải LED 12 V bằng PWM 20 kHz.
1. MOSFET là gì

- MOSFET (transistor hiệu ứng trường) có ba chân: G (gate, cổng), D (drain, máng) và S (source, nguồn). Gate cách điện với kênh dẫn bằng một lớp oxit rất mỏng; điện áp giữa G và S tạo điện trường "mở" kênh giữa D và S.
- Vì gate cách điện, ở trạng thái đứng yên gate không lấy dòng một chiều (khác BJT cần dòng base liên tục). Gate chỉ như một tụ điện nhỏ, cần một xung dòng ngắn để nạp xả mỗi lần đổi trạng thái.
- Kênh N dẫn khi gate cao hơn source quá một ngưỡng; dùng ở phía thấp (source nối GND), giống NPN. Kênh P dẫn khi gate thấp hơn source; dùng ở phía cao, và rất hay dùng làm mạch chống cắm ngược nguồn ít tổn hao.
- MOSFET công suất luôn có một diode thân giữa S và D (theo chiều ngược). Diode này có ích (cho dòng cảm ứng chạy về) nhưng cũng có nghĩa là MOSFET không chặn được dòng ngược chiều.
2. Logic-level: chọn đúng MOSFET cho 3,3 V

- VGS(th) (điện áp ngưỡng) là mức gate tại đó MOSFET bắt đầu dẫn một dòng rất nhỏ (thường 250 µA), chưa phải dẫn hoàn toàn. Thấy VGS(th) = 2 V không có nghĩa 3,3 V là đủ.
- Thông số quyết định là RDS(on) ghi ở mức UGS bao nhiêu. MOSFET logic-level ghi RDS(on) ở 4,5 V và tốt hơn nữa là ở 2,5 V (AO3400: khoảng 0,05 Ω ở 2,5 V). Loại thường như IRF540, IRFZ44N chỉ ghi ở 10 V: gate 3,3 V mở rất ít, MOSFET nóng hoặc gần như không dẫn.
- Các thông số khác: VDS tối đa (chọn lớn hơn điện áp tải ít nhất 1,5–2 lần), ID tối đa (thực tế bị giới hạn bởi tản nhiệt), điện tích gate Qg (càng nhỏ càng dễ đóng cắt nhanh bằng chân vi điều khiển).
| Mã | Kiểu | VDS | Dùng với ESP32 3,3 V |
|---|---|---|---|
| AO3400 | N, dán SOT-23 | 30 V | Tốt, tải tới khoảng 2–3 A trên mạch in |
| IRLZ44N, IRLB8721 | N, TO-220 | 55 V, 30 V | Được (logic-level), tải vài ampe, dòng lớn cần tản nhiệt |
| IRF540N, IRFZ44N | N, TO-220 | 100 V, 55 V | Không nên nối thẳng: cần gate 10 V qua mạch kích |
| AO3401 | P, dán SOT-23 | −30 V | Dùng phía cao, chống ngược nguồn |
Thông số trong bảng là giá trị thường gặp; luôn kiểm tra datasheet của đúng mã và hãng sản xuất.
3. Mạch đóng cắt phía thấp với MOSFET kênh N

- Điện trở gate 100 Ω: gate là tụ điện, lúc chuyển trạng thái chân GPIO phải nạp xả nó; điện trở nhỏ hạn dòng tức thời và giảm dao động. 47–220 Ω là phổ biến.
- Điện trở 10 kΩ từ gate xuống GND: khi chân GPIO chưa được cấu hình (khởi động, nạp chương trình) gate không bị bỏ lửng; thiếu nó, tải có thể tự bật hoặc MOSFET dẫn một nửa và nóng.
- Diode dập song song với tải cuộn dây (động cơ, bơm, van). Với PWM tần số cao dùng diode Schottky như 1N5819. Dải LED không cần diode.
- Tỏa nhiệt: P = ID² × RDS(on). Tải 3 A qua MOSFET 0,02 Ω chỉ tỏa 0,18 W; dùng BJT với UCE(sat) 0,3 V sẽ tỏa 0,9 W cộng thêm dòng base lớn.
- GND của nguồn tải phải nối chung với GND của ESP32.
4. PWM: chỉnh công suất bằng độ rộng xung

- MOSFET bật tắt tải rất nhanh; phần trăm thời gian bật trong mỗi chu kỳ (độ rộng xung, duty) quyết định công suất trung bình: 50 % ở 12 V tương đương khoảng 6 V trung bình. LED trông sáng một nửa, động cơ quay chậm lại.
- Chọn tần số: dải LED 1–5 kHz là đủ, mắt và máy ảnh không thấy nhấp nháy; động cơ, quạt nên dùng khoảng 20 kHz để không nghe tiếng rít. Tần số càng cao, mỗi lần chuyển trạng thái càng tốn năng lượng (tổn hao đóng cắt) và chân GPIO càng khó nạp xả gate kịp.
- Bộ LEDC của ESP32 tạo PWM 20 kHz với độ phân giải 10 bit (0–1023) dễ dàng.
5. Thí nghiệm: chỉnh độ sáng dải LED 12 V bằng ESP32
Chuẩn bị
- ESP32 DevKit V1, breadboard, dây cắm.
- MOSFET kênh N logic-level (IRLZ44N, IRLB8721 vỏ TO-220 cắm được breadboard; hoặc module MOSFET bán sẵn), điện trở 100 Ω và 10 kΩ.
- Một đoạn dải LED 12 V ngắn (dưới khoảng 1 A để dây cắm breadboard không nóng) và adapter 12 V; có thể nối qua jack nguồn DC.

Kiểm tra thứ tự chân MOSFET theo datasheet: với phần lớn MOSFET TO-220 (nhìn mặt có chữ, chân hướng xuống) là G – D – S. Dòng tải đi qua dây cắm và breadboard: chỉ thử với dòng nhỏ; tải lớn phải hàn dây đủ tiết diện, có cầu chì.
Chương trình
/*
PYWORLD.VN - Điều khiển tải 12 V (dải LED, quạt) bằng MOSFET kênh N logic-level và PWM của ESP32
GPIO25 -> 100 Ω -> gate; gate -> 10 kΩ -> GND; source -> GND; tải nối từ +12 V tới drain (động cơ thêm diode dập)
Gõ một số 0-100 vào Serial Monitor để đặt phần trăm công suất; chương trình tăng giảm dần tới mức mới
*/
#define CHAN_GATE 25
const uint32_t TAN_SO_PWM = 20000; // 20 kHz: ngoài tai người nghe, quạt không rít
const uint8_t DO_PHAN_GIAI = 10; // 10 bit: 0 đến 1023
const uint32_t DUTY_TOI_DA = (1 << DO_PHAN_GIAI) - 1;
const float U_TAI = 12.0; // Điện áp nguồn tải, chỉ dùng để in điện áp trung bình ước tính
int phanTramDich = 0; // Mức người dùng yêu cầu
int phanTramHienTai = 0; // Mức đang xuất ra, đổi dần từng 1 %
String dongNhan = "";
void xuatPhanTram(int pt) {
uint32_t duty = (uint32_t)pt * DUTY_TOI_DA / 100;
ledcWrite(CHAN_GATE, duty);
}
void setup() {
Serial.begin(115200);
ledcAttach(CHAN_GATE, TAN_SO_PWM, DO_PHAN_GIAI);
xuatPhanTram(0);
delay(300);
Serial.println("MOSFET + PWM 20 kHz. Go 0-100 de dat phan tram cong suat");
}
void loop() {
// Đọc một dòng số từ Serial Monitor
while (Serial.available()) {
char c = Serial.read();
if (c == '\n' || c == '\r') {
if (dongNhan.length() > 0) {
int pt = dongNhan.toInt();
phanTramDich = constrain(pt, 0, 100);
Serial.printf("Dat muc moi: %d %%\n", phanTramDich);
dongNhan = "";
}
} else if (isDigit(c)) {
dongNhan += c;
}
}
// Tăng giảm dần 1 % mỗi 15 ms để dải LED, động cơ không bị giật và nguồn không bị sụt đột ngột
static uint32_t lanDoiCuoi = 0;
if (phanTramHienTai != phanTramDich && millis() - lanDoiCuoi > 15) {
lanDoiCuoi = millis();
phanTramHienTai += (phanTramDich > phanTramHienTai) ? 1 : -1;
xuatPhanTram(phanTramHienTai);
if (phanTramHienTai == phanTramDich) {
uint32_t duty = (uint32_t)phanTramHienTai * DUTY_TOI_DA / 100;
Serial.printf("Da toi %3d %% | duty %4u/%u | U trung binh tren tai ~ %4.1f V\n", phanTramHienTai,
(unsigned)duty, (unsigned)DUTY_TOI_DA, U_TAI * phanTramHienTai / 100.0);
}
}
}
ledcAttach(CHAN_GATE, 20000, 10): PWM 20 kHz, 10 bit.ledcWritenhận độ rộng xung 0–1023.- Gõ một số từ 0 đến 100 rồi Enter: chương trình tăng giảm dần 1 % mỗi 15 ms tới mức mới, tránh làm giật động cơ hay sụt nguồn đột ngột khi bật mạnh.
- Khi tới mức mới, chương trình in độ rộng xung và điện áp trung bình ước tính trên tải.
Kết quả mong đợi

Dải LED sáng dần tới mức đặt. Độ sáng mắt cảm nhận không tỉ lệ thẳng với phần trăm (mắt nhạy hơn ở vùng tối), nên 10–20 % đã khá sáng. Sờ thử MOSFET khi chạy 100 %: với dải LED dưới 1 A, MOSFET logic-level gần như không ấm. Nếu MOSFET nóng nhanh, rất có thể đó là loại không phải logic-level.
6. Xử lý lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Dải LED sáng yếu, MOSFET nóng | MOSFET không phải logic-level (IRFZ44N, IRF540) | Đổi sang IRLZ44N, IRLB8721, AO3400 hoặc dùng mạch kích gate |
| Dải LED luôn sáng | Nhầm chân D và S, MOSFET chập, hoặc diode thân dẫn do nối ngược | Kiểm tra thứ tự chân; đo MOSFET |
| Dải LED nhấp nháy khi ESP32 khởi động | Thiếu điện trở 10 kΩ kéo gate xuống | Thêm điện trở kéo xuống |
| Không sáng | Thiếu GND chung giữa adapter và ESP32 | Nối cực âm adapter với GND ESP32 |
| Động cơ kêu rít | Tần số PWM trong vùng nghe được | Giữ 20 kHz trở lên |
7. Xem thêm
- PWM trên ESP32: analogWrite và LEDC.
- ESP32 điều khiển động cơ DC với L298N: khi cần đảo chiều động cơ.
- Giữ tốc độ động cơ bằng PID: PWM điều khiển theo phản hồi.
- Bài tiếp theo của loạt điện tử căn bản: transistor khuếch đại, mạch E chung.
Xem thêm