Dùng transistor làm công tắc: tính điện trở base, bật tải 5 V, 12 V từ ESP32

Mạch transistor NPN đóng cắt phía thấp, bốn bước tính điện trở base, diode dập cho relay và động cơ, cách biết transistor bão hòa, thí nghiệm ESP32 so sánh đủ và thiếu dòng base.

Chân GPIO của ESP32 chỉ cho ra 3,3 V và khoảng 10–20 mA: đủ cho một LED báo, nhưng không đủ cho cuộn relay, quạt mini, dải LED 12 V hay còi. Cách đơn giản nhất để "khuếch đại" chân GPIO là dùng một transistor NPN làm công tắc. Bài viết hướng dẫn mạch NPN đóng cắt phía thấp, bốn bước tính điện trở base, diode dập cho tải cuộn dây, cách biết transistor đã bão hòa hay chưa, rồi làm thí nghiệm với ESP32 so sánh ba trạng thái: tắt, đủ dòng base và thiếu dòng base, đo điện áp UCE để thấy sự khác nhau.

1. Vì sao cần transistor giữa GPIO và tải

TảiĐiện áp, dòng điển hìnhCắm thẳng vào GPIO được không
LED báo qua điện trở3,3 V, 2–10 mAĐược
Cuộn relay 5 V5 V, 70–90 mAKhông: sai điện áp, quá dòng, có điện áp cảm ứng
Quạt mini, động cơ nhỏ 5 V5 V, 100–300 mAKhông
Dải LED 12 V12 V, vài trăm mA trở lênKhông: chân chỉ chịu 3,3 V

Transistor cho phép dòng nhỏ từ chân GPIO (vài mA) điều khiển dòng lớn hơn nhiều ở mạch tải, và mạch tải có thể dùng nguồn riêng, điện áp cao hơn (5 V, 12 V), miễn là chung GND với ESP32.

2. Mạch NPN đóng cắt phía thấp

Sơ đồ: nguồn tải 5 đến 24 V qua tải tới collector transistor NPN Q1, emitter xuống đất; chân GPIO qua điện trở RB 1 kΩ vào base, điện trở 10 kΩ từ base xuống đất; đường GND chung giữa ESP32 và nguồn tải; bốn chú thích đánh số
Mạch transistor NPN đóng cắt phía thấp (hình tự vẽ).
  1. Tải nối giữa nguồn dương và collector; transistor nằm ở phía GND ("phía thấp"). Khi transistor dẫn, collector bị kéo gần xuống 0 V và tải có gần đủ điện áp nguồn.
  2. RB giới hạn dòng base, đồng thời giới hạn dòng ra của chân GPIO. Không có RB, tiếp giáp B–E như một diode nối thẳng vào chân GPIO, dòng sẽ quá lớn.
  3. Điện trở 10 kΩ từ base xuống GND giữ transistor tắt chắc chắn khi chân GPIO chưa được cấu hình (lúc ESP32 khởi động, đang nạp chương trình).
  4. Emitter nối thẳng GND, và GND của nguồn tải phải nối chung với GND của ESP32; thiếu dây GND chung thì dòng base không có đường về.

3. Tính điện trở base

Bốn bước tính điện trở base: dòng tải IC, dòng base tối thiểu IC chia beta min, nhân 2 đến 5 lần để chắc bão hòa, RB bằng 3,3 V trừ 0,7 V chia IB rồi chọn E12 nhỏ hơn; bảng ví dụ: relay 5 V 70 mA với S8050 chọn 1,2 kΩ, quạt mini 150 mA với 2N2222A chọn 560 Ω, dải LED 12 V 300 mA chọn 120 Ω, còi chip 30 mA với BC547 chọn 2,7 kΩ
Bốn bước tính điện trở base và các ví dụ (hình tự vẽ, hệ số dư ×3).
  1. Dòng tải IC: lấy theo thông số tải hoặc tính U / R; tốt nhất đo bằng đồng hồ vạn năng.
  2. Dòng base tối thiểu: IB = IC / βmin. Lấy β nhỏ nhất trong datasheet ở dòng tương ứng (β giảm khi dòng lớn).
  3. Nhân thêm 2–5 lần để transistor chắc chắn bão hòa dù β thật thấp hơn hay tải lấy nhiều dòng hơn.
  4. RB = (UGPIO − UBE) / IB = (3,3 − 0,7) / IB, chọn giá trị E12 nhỏ hơn gần nhất.

Ví dụ relay 5 V lấy 70 mA, dùng S8050 với βmin = 100: IB tối thiểu 0,7 mA, nhân 3 được 2,1 mA, RB = 2,6 V / 2,1 mA ≈ 1238 Ω, chọn 1,2 kΩ (hoặc 1 kΩ). Giá trị 1 kΩ dùng được cho phần lớn tải dưới khoảng 150 mA với transistor tín hiệu. Khi tính ra dòng base trên khoảng 10 mA (tải vài trăm mA), chân GPIO sẽ quá tải: chuyển sang MOSFET logic-level (bài 20) hoặc transistor Darlington.

4. Tải là cuộn dây: bắt buộc có diode dập

Hai sơ đồ transistor đóng cắt cuộn relay hoặc động cơ từ 12 V: bên trái có diode 1N4007 nối ngược song song với cuộn dây, dòng chạy vòng qua diode khi ngắt; bên phải thiếu diode, khi ngắt có xung vài trăm vôn ở collector
Tải cuộn dây cần diode dập (hình tự vẽ).

Cuộn relay, động cơ, van điện từ tạo ra điện áp cảm ứng rất cao khi bị ngắt dòng đột ngột (bài 13). Nối một diode ngược song song với tải, cathode về phía nguồn dương: 1N4007 cho relay, 1N5819 hoặc diode nhanh cho động cơ đóng cắt bằng PWM. Thiếu diode, transistor có thể chết sau vài lần đóng cắt, hoặc ESP32 bị khởi động lại do nhiễu.

5. Biết transistor đã bão hòa chưa

  • Đo điện áp giữa collector và emitter khi đang bật. UCE khoảng 0,1–0,3 V: transistor bão hòa, công tắc đóng tốt.
  • UCE từ vài phần mười vôn tới vài vôn: transistor đang ở vùng khuếch đại vì thiếu dòng base. Tải không đủ điện áp, còn transistor tỏa nhiệt P = UCE × IC, có thể nóng tới mức hỏng.
  • Ví dụ tải 50 mA: bão hòa với UCE = 0,1 V, transistor chỉ tỏa 5 mW; nếu thiếu dòng base để UCE = 3 V, transistor tỏa 150 mW, gấp 30 lần.

6. Thí nghiệm: tắt, đủ dòng base và thiếu dòng base

Thí nghiệm dùng hai đường vào base: GPIO26 qua 1 kΩ (dòng base khoảng 2,6 mA, đủ để bão hòa) và GPIO27 qua 47 kΩ (dòng base chỉ khoảng 55 µA, thiếu). ESP32 lần lượt chuyển qua ba trạng thái và đo UCE qua một cầu phân áp, tính dòng tải và công suất transistor tỏa ra.

Chuẩn bị

  • ESP32 DevKit V1, breadboard, dây cắm.
  • Transistor NPN 2N2222A (hoặc S8050), điện trở 1 kΩ, 47 kΩ, hai điện trở 10 kΩ, một điện trở 100 Ω loại 1/2 W làm tải (dòng khoảng 50 mA ở 5 V).
Sơ đồ: VIN của ESP32 qua điện trở tải 100 Ω tới collector transistor 2N2222A, emitter nối GND; GPIO26 qua 1 kΩ và GPIO27 qua 47 kΩ cùng nối vào base; từ collector qua hai điện trở 10 kΩ xuống GND, điểm giữa mang nhãn GPIO34 nối chân GPIO34
Sơ đồ thí nghiệm (hình tự vẽ).
Linh kiệnNối
Điện trở tải 100 ΩTừ VIN (5 V) tới collector
Transistor 2N2222AEmitter vào GND (kiểm tra thứ tự chân theo datasheet, bài 18)
Điện trở 1 kΩTừ GPIO26 tới base
Điện trở 47 kΩTừ GPIO27 tới base
Hai điện trở 10 kΩ nối tiếpTừ collector xuống GND; điểm giữa vào GPIO34

Chương trình

/*
  PYWORLD.VN - Transistor NPN làm công tắc với ESP32: so sánh tắt, đủ dòng base (bão hòa) và thiếu dòng base
  Tải 100 Ω nối từ VIN (5 V) xuống collector; emitter xuống GND. GPIO26 qua 1 kΩ và GPIO27 qua 47 kΩ cùng vào base
  Đo UCE qua cầu phân áp 10 kΩ / 10 kΩ từ collector vào GPIO34
*/

#define CHAN_RB_NHO 26     // qua 1 kΩ: dòng base đủ lớn
#define CHAN_RB_LON 27     // qua 47 kΩ: dòng base quá nhỏ
#define CHAN_DO_UCE 34

const float U_NGUON_MV = 5000.0;   // Điện áp chân VIN; đo bằng đồng hồ vạn năng rồi sửa (thường 4,7–5,0 V)
const float R_TAI = 100.0;         // Ôm, điện trở tải
const float HE_SO_CAU = 2.0;       // Cầu 10 kΩ / 10 kΩ chia đôi điện áp collector
const int SO_LAN_DOC = 32;

int trangThai = 0;                 // 0: tắt, 1: đủ dòng base, 2: thiếu dòng base

float docUceMv() {
  uint32_t tong = 0;
  for (int i = 0; i < SO_LAN_DOC; i++) {
    tong += analogReadMilliVolts(CHAN_DO_UCE);
  }
  return (float)tong / SO_LAN_DOC * HE_SO_CAU;
}

void datTrangThai(int tt) {
  if (tt == 0) {                       // Cả hai chân ở mức thấp: không có dòng base, transistor tắt
    pinMode(CHAN_RB_NHO, OUTPUT);
    digitalWrite(CHAN_RB_NHO, LOW);
    digitalWrite(CHAN_RB_LON, LOW);
  } else if (tt == 1) {                // Base qua 1 kΩ: IB ≈ (3,3 − 0,7) / 1000 ≈ 2,6 mA
    pinMode(CHAN_RB_NHO, OUTPUT);
    digitalWrite(CHAN_RB_NHO, HIGH);
    digitalWrite(CHAN_RB_LON, LOW);
  } else {                             // Chỉ qua 47 kΩ: IB ≈ 55 µA; GPIO26 để hở để không kéo base xuống
    pinMode(CHAN_RB_NHO, INPUT);
    digitalWrite(CHAN_RB_LON, HIGH);
  }
}

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  pinMode(CHAN_RB_LON, OUTPUT);
  datTrangThai(0);
  delay(300);
  Serial.println("Transistor lam cong tac: tat / du dong base / thieu dong base");
}

void loop() {
  datTrangThai(trangThai);
  delay(300);                          // Chờ ổn định rồi mới đo
  float uce = docUceMv();
  float dongTaiMa = (U_NGUON_MV - uce) / R_TAI;   // Dòng qua tải = điện áp trên tải / R tải
  float congSuatMw = uce * dongTaiMa / 1000.0;    // Công suất transistor tỏa ra = UCE × IC
  const char *ten[] = {"TAT          ", "DU DONG BASE ", "THIEU DONG B."};
  Serial.printf("%s | UCE = %5.2f V | IC ~ %5.1f mA | P transistor ~ %5.1f mW\n", ten[trangThai], uce / 1000.0,
                dongTaiMa < 0 ? 0.0 : dongTaiMa, congSuatMw < 0 ? 0.0 : congSuatMw);
  trangThai = (trangThai + 1) % 3;
  delay(1700);
}
  • Trạng thái tắt: cả hai chân ở mức thấp, không có dòng base.
  • Trạng thái đủ dòng base: GPIO26 lên 3,3 V, dòng qua 1 kΩ khoảng (3,3 − 0,7) / 1000 ≈ 2,6 mA, gấp khoảng 5 lần mức cần cho tải 50 mA.
  • Trạng thái thiếu dòng base: chỉ GPIO27 lên 3,3 V, dòng qua 47 kΩ khoảng 55 µA. GPIO26 được chuyển sang chế độ đầu vào (hở) để không kéo base xuống qua 1 kΩ.
  • Chương trình đo UCE (nhân đôi số đọc của cầu phân áp), tính dòng tải IC = (U nguồn − UCE) / R tải và công suất transistor P = UCE × IC.

Kết quả mong đợi

Hình minh họa Serial Monitor lặp lại ba trạng thái: TAT với UCE 4,97 V, IC khoảng 0,3 mA là dòng qua cầu đo, công suất 1,4 mW; DU DONG BASE với UCE 0,11 V, IC 48,9 mA, công suất 5,4 mW; THIEU DONG B. với UCE 3,87 V, IC 11,3 mA, công suất 43,7 mW
Kết quả mong đợi trên Serial Monitor (hình minh họa theo công thức của chương trình; giả định β = 200, UCE bão hòa khoảng 0,1 V).
  • Khi đủ dòng base, UCE chỉ khoảng 0,1 V: gần như toàn bộ 5 V đặt lên tải, transistor gần như không nóng. ADC của ESP32 đọc kém ở vùng gần 0 V nên số này chỉ gần đúng; đo bằng đồng hồ vạn năng để so.
  • Khi thiếu dòng base, dòng tải chỉ khoảng β × 55 µA (với β khoảng 200 là 11 mA), UCE lên gần 4 V, transistor tỏa nhiệt gấp nhiều lần dù tải nhận ít điện hơn. Con số này đổi theo β thật của từng con transistor: đó chính là lý do khi làm công tắc phải dư dòng base, không dựa vào β.

7. PNP, Darlington, MOSFET: khi nào dùng

  • PNP phía cao (giữa nguồn và tải) khi tải phải nối GND cố định. Với nguồn tải cao hơn 3,3 V, base PNP cần một transistor NPN điều khiển thêm, vì chân 3,3 V không kéo base lên tới nguồn tải được.
  • Darlington (TIP120, mảng ULN2003) có β hàng nghìn nên dòng base rất nhỏ; đổi lại UCE bão hòa khoảng 0,8–1 V, tỏa nhiệt nhiều hơn.
  • MOSFET logic-level điều khiển bằng điện áp, gần như không lấy dòng ở cổng, điện trở dẫn rất nhỏ: lựa chọn tốt nhất cho tải vài trăm mA tới vài ampe và cho PWM (bài 20).
  • Muốn bật tắt tải 220 V thì dùng relay hoặc module relay (bài 14), không dùng transistor trực tiếp.

8. Xử lý lỗi thường gặp

Hiện tượngNguyên nhân thường gặpCách xử lý
Tải không chạy, UCE luôn gần 5 VSai thứ tự chân transistor; thiếu dây GND chungTra datasheet đúng mã; nối GND chung
Tải chạy yếu, transistor nóngThiếu dòng base (RB quá lớn) hoặc tải vượt khả năng transistorGiảm RB; dùng transistor lớn hơn hoặc MOSFET
Tải luôn chạy, không tắtTransistor bị chập; nhầm C và EĐo transistor bằng thang diode (bài 18)
ESP32 khởi động lại khi tải bậtSụt nguồn USB, nhiễu từ tải cuộn dây, thiếu diode dậpThêm diode dập, tụ 100–470 µF ở nguồn tải; dùng nguồn tải riêng

9. Xem thêm


Tin tức liên quan

Chọn bo mạch lập trình đầu tiên cho học sinh: ESP32, Arduino Nano hay micro:bit
Chọn bo mạch lập trình đầu tiên cho học sinh: ESP32, Arduino Nano hay micro:bit

So sánh ESP32 DevKit V1, Arduino Nano và micro:bit cho học sinh: có sẵn gì trên mạch, lập trình bằng gì, làm được dự án gì, chọn theo mục tiêu và những thứ cần mua kèm.

Cảm biến quang: thu phát, phản xạ gương, khuếch tán, triệt nền – cấu tạo, nguyên lý và chế tạo
Cảm biến quang: thu phát, phản xạ gương, khuếch tán, triệt nền – cấu tạo, nguyên lý và chế tạo

Cảm biến quang hoạt động thế nào: bốn kiểu thu phát, phản xạ gương, khuếch tán, triệt nền; điều chế ánh sáng chống nhiễu, cấu tạo, cách chế tạo và làm cảm biến phản xạ có điều chế với ESP32.

Cuộn cảm và biến áp: cảm kháng, điện áp cảm ứng, tỉ số vòng dây
Cuộn cảm và biến áp: cảm kháng, điện áp cảm ứng, tỉ số vòng dây

Cuộn cảm là gì, điện cảm, cảm kháng so với dung kháng, điện áp cảm ứng khi ngắt dòng và diode dập, ứng dụng trong nguồn xung, lọc nhiễu, nguyên lý biến áp và tỉ số vòng dây.

Các nguồn sai số khi đo lực bằng load cell: lệch tâm, rão, trễ, nhiệt độ và ngân sách sai số
Các nguồn sai số khi đo lực bằng load cell: lệch tâm, rão, trễ, nhiệt độ và ngân sách sai số

Vì sao đo lực thực tế sai hơn phiếu thông số load cell: lệch tâm và gá lắp, rão, trễ, phi tuyến, nhiệt độ, cáp và bộ đọc; ví dụ ngân sách sai số và danh sách kiểm tra nhanh.

Mạch điều khiển bay của flycam: IMU, vòng PID, bộ lọc rung, chế độ bay, Betaflight, ArduPilot
Mạch điều khiển bay của flycam: IMU, vòng PID, bộ lọc rung, chế độ bay, Betaflight, ArduPilot

Mạch điều khiển bay của flycam: MCU, IMU, cảm biến, vòng điều khiển nhiều tầng, bộ trộn động cơ, PID, bộ lọc rung, các chế độ bay, Betaflight, INAV, ArduPilot, PX4 và khả năng dùng ESP32.

Thí nghiệm STEM về điện an toàn cho trẻ: mạch kín, mạch hở, máy dò vật dẫn điện
Thí nghiệm STEM về điện an toàn cho trẻ: mạch kín, mạch hở, máy dò vật dẫn điện

Hai thí nghiệm STEM về điện an toàn cho học sinh tiểu học: mạch pin và bóng đèn để hiểu mạch kín, mạch hở; máy dò vật dẫn điện bằng ESP32 cắm USB, phiếu thử 10 đồ vật.

RS-485 là gì: cặp dây vi sai, điện trở đầu cuối và cách dùng module MAX485 với ESP32
RS-485 là gì: cặp dây vi sai, điện trở đầu cuối và cách dùng module MAX485 với ESP32

Giải thích chuẩn RS-485: tín hiệu vi sai trên hai dây A, B, điện trở đầu cuối 120 Ω, truyền bán song công với chân DE, RE. Kèm sơ đồ nối module MAX485 và chương trình hỏi đáp giữa hai mạch ESP32.

Cách đọc sơ đồ nguyên lý: ký hiệu linh kiện, nút, đất và tên chân
Cách đọc sơ đồ nguyên lý: ký hiệu linh kiện, nút, đất và tên chân

Cách đọc sơ đồ nguyên lý cho người mới: bảng ký hiệu linh kiện, chữ đặt tên R, C, Q, U, cách ghi giá trị 4k7, 104, nút nối, dây chéo, nhãn tên, nguồn và đất, đọc thử sơ đồ module relay.


Bình luận
Đã thêm vào giỏ hàng