Điều khiển động cơ bước ULN2003: chân IC, giới hạn dòng, đấu nối vi điều khiển và PLC
Điều khiển động cơ bước ULN2003 là cách kéo motor bước đơn cực (5 dây hoặc 6 dây) bằng IC ULN2003 – một mảng 7 transistor Darlington đóng xuống mass, mỗi kênh chịu tới 500 mA và 50 V, có sẵn diode dập xung ngược. Vi điều khiển chỉ cần xuất 4 tín hiệu logic theo trình tự, IC làm nhiệm vụ đóng ngắt dòng lớn qua từng nửa cuộn dây. Cách này dùng khi motor nhỏ, dòng dưới khoảng 0,3–0,35 A mỗi pha, tốc độ thấp và cần mạch thật rẻ, thật đơn giản: rèm cuốn, van xoay, kim đồng hồ, cơ cấu lật bảng, mô hình học tập.
Khi dùng thật – kéo motor 12 V, 24 V, ghép với PLC, Raspberry Pi, STM32 hay chạy liên tục trong tủ điện – các câu hỏi quan trọng là chân COM nối đi đâu, IC nóng tới mức nào thì chết, ghép kênh để tăng dòng có được không và khi nào nên chuyển sang mảng MOSFET hay driver băm dòng.
Thông số riêng của motor 28BYJ-48 (tỉ số hộp số thật, số bước mỗi vòng, tốc độ, mô-men) đã có đầy đủ ở bài động cơ bước 5 dây 28BYJ-48. Dưới đây tập trung vào bản thân IC ULN2003 và mạch điều khiển xoay quanh nó.
Nội dung
- 1. ULN2003 là gì và vì sao dùng được cho động cơ bước?
- 2. Sơ đồ chân và thông số điện của IC ULN2003
- 3. Chân COM và diode dập: nối sai là IC chết
- 4. Sụt áp, nhiệt độ và công suất tối đa của ULN2003
- 5. Ghép song song kênh ULN2003 để tăng dòng
- 6. Module ULN2003 và trình tự xung điều khiển
- 7. Đấu ULN2003 với Arduino, ESP32, STM32 và Raspberry Pi
- 8. Nối ULN2003 với đầu ra transistor của PLC
- 9. Điều khiển các motor đơn cực khác ngoài 28BYJ-48
- 10. ULN2803, ULN2004 và các IC thay thế ULN2003
- 11. Lỗi thường gặp khi điều khiển động cơ bước ULN2003
- 12. Câu hỏi thường gặp về điều khiển động cơ bước ULN2003
1. ULN2003 là gì và vì sao dùng được cho động cơ bước?
ULN2003 (thường gặp mã ULN2003A, ULN2003AN bản DIP16, ULN2003AD hoặc ULN2003D bản dán SO16) là IC đệm dòng phía thấp (low-side sink driver) gồm 7 kênh Darlington độc lập. Mỗi kênh có:
- Một điện trở nền 2,7 kΩ ở đầu vào, cho phép nối thẳng chân vi điều khiển 5 V hoặc 3,3 V mà không cần điện trở ngoài.
- Một cặp transistor Darlington, cực phát nối chung vào chân GND (chân 8).
- Một diode dập nối từ đầu ra lên chân COM (chân 9) để triệt điện áp cảm ứng khi cuộn dây bị ngắt.
Đầu vào ở mức cao thì đầu ra bị kéo xuống gần mass; đầu vào ở mức thấp hoặc để hở thì đầu ra hở mạch. IC không có khả năng đẩy dòng ra (không xuất được điện áp dương), chỉ "hút" dòng từ tải xuống mass.
Đặc điểm này khớp hoàn hảo với động cơ bước đơn cực: dây chung (điểm giữa cuộn) nối thẳng vào cực dương nguồn, bốn đầu pha nối vào bốn đầu ra của ULN2003. Bật kênh nào thì nửa cuộn tương ứng có dòng. Không cần cầu H, không lo hai khóa cùng nhánh dẫn đồng thời gây chập nguồn, không cần mạch kích cổng phía cao. Đổi lại, mạch chỉ đóng ngắt hoàn toàn, không điều chỉnh được dòng, nên chỉ chạy bước đủ và nửa bước.
Nếu motor là loại 4 dây lưỡng cực, ULN2003 không dùng được vì không đảo chiều dòng qua cuộn; khi đó tham khảo cách điều khiển động cơ bước dùng L298 hoặc các driver băm dòng. Tổng quan về cấu tạo và cách phân loại motor bước có ở trang động cơ bước.
2. Sơ đồ chân và thông số điện của IC ULN2003
Sơ đồ chân ULN2003 (DIP16 và SO16 giống nhau)
| Chân | Ký hiệu | Chức năng | Ghi chú khi điều khiển động cơ bước |
| 1–7 | IN1–IN7 | Đầu vào logic kênh 1–7 | Dùng IN1–IN4 cho 4 pha, các kênh dư nối mass |
| 8 | GND (E) | Cực phát chung | Nối mass nguồn motor và mass vi điều khiển |
| 9 | COM | Cực âm chung của 7 diode dập | Nối cực dương nguồn motor |
| 10–16 | OUT7–OUT1 | Đầu ra kênh 7 về 1 | OUT1 là chân 16, nằm đối diện IN1 |
Đầu ra được đánh số ngược: chân 16 là OUT1 đối diện chân 1 (IN1), chân 10 là OUT7 đối diện chân 7. Cách bố trí này giúp đi dây thẳng hàng trên mạch in, nhưng hay làm người lắp mạch thủ công trên test board nhầm thứ tự pha.
Thông số chính theo datasheet ULN2003A
| Thông số | Giá trị | Ý nghĩa thực tế |
| Điện áp đầu ra tối đa | 50 V | Gồm cả gai cảm ứng khi ngắt cuộn dây |
| Dòng mỗi kênh | 500 mA liên tục, 600 mA đỉnh | Giới hạn của một kênh đơn lẻ, chưa tính nhiệt |
| Điện áp đầu vào tối đa | 30 V | Quan trọng khi nối tín hiệu 24 V của PLC |
| Dòng nền liên tục tối đa | 25 mA | Không vượt khi đầu vào có điện áp cao |
| Sụt áp Vce(sat) ở 100 mA | 0,9 V điển hình, 1,1 V tối đa | Motor 5 V chỉ còn khoảng 4 V |
| Sụt áp Vce(sat) ở 200 mA | 1,1 V điển hình, 1,3 V tối đa | Nhiệt tăng nhanh theo dòng |
| Sụt áp Vce(sat) ở 350 mA | 1,3 V điển hình, 1,6 V tối đa | Vùng IC nóng rõ rệt |
| Thời gian đóng/ngắt | Khoảng 0,25 µs điển hình | Thừa nhanh cho motor bước |
| Nhiệt trở môi trường DIP16 | Khoảng 70 °C/W | Bản SO16 dán bề mặt khoảng 120 °C/W |
| Nhiệt độ mối nối tối đa | 150 °C | Thiết kế nên giữ dưới 125 °C |
Hai con số cần thuộc lòng là sụt áp khoảng 1 V và nhiệt trở khoảng 70 °C/W. Gần như mọi sự cố "IC nóng", "motor yếu", "IC chết sau một thời gian" đều quy về hai con số này.
3. Chân COM và diode dập: nối sai là IC chết
Khi một kênh ngắt, nửa cuộn dây đang có dòng sinh ra điện áp cảm ứng ngược chiều, có thể lên tới hàng chục, hàng trăm volt nếu không có đường thoát. Diode bên trong ULN2003 đưa dòng này về chân COM. Vì vậy chân COM phải nối vào cực dương của chính nguồn cấp cho motor, tức cùng điểm với dây chung của motor.
Các lỗi nối chân COM hay gặp
- Bỏ trống chân COM: motor vẫn chạy được một lúc, nhưng mỗi lần ngắt kênh, gai điện áp đánh thủng mối nối Darlington. IC thường chết dần sau vài phút đến vài giờ, có khi chết ngay với motor điện cảm lớn.
- Nối COM vào 5 V của vi điều khiển trong khi motor dùng nguồn 12 V: dòng từ nguồn 12 V chạy qua cuộn dây, qua diode dập về đường 5 V ngay cả khi kênh đang tắt, motor bị kích liên tục và đường 5 V bị đẩy áp, có thể làm hỏng bo vi điều khiển.
- Nối COM xuống mass: diode dập thành đường ngắn mạch mỗi khi đầu ra có điện áp, IC nóng ngay khi cấp nguồn.
Tăng tốc độ tắt dòng bằng zener nối tiếp chân COM
Với diode dập nối thẳng về nguồn, điện áp kẹp chỉ cao hơn nguồn khoảng 1–2 V nên dòng trong cuộn tắt chậm, hạn chế tốc độ quay. Có thể mắc một diode zener giữa chân COM và cực dương nguồn (cực âm zener về phía nguồn), lúc này điện áp kẹp tăng lên khoảng nguồn + Vz. Điều kiện bắt buộc là tổng đó cộng thêm điện áp cảm ứng chéo của motor đơn cực vẫn phải dưới 50 V; với nguồn 12 V chỉ nên dùng zener 12–15 V. Phân tích chi tiết hiện tượng điện áp gấp đôi nguồn ở motor đơn cực nằm trong bài động cơ bước đơn cực đã nhắc ở trên.
4. Sụt áp, nhiệt độ và công suất tối đa của ULN2003
Darlington không bão hòa sâu như transistor đơn hay MOSFET, nên mỗi kênh đang dẫn luôn "ăn" khoảng 0,9–1,6 V. Công suất tỏa ra trong IC gần đúng bằng tổng (Vce(sat) × dòng) của các kênh đang dẫn cùng lúc.
Cách tính nhanh nhiệt độ IC
- Công suất P = Σ (Vce × I) các kênh dẫn đồng thời. Ở chế độ hai pha (full step) luôn có 2 kênh dẫn; ở nửa bước có lúc 1, có lúc 2 kênh, lấy trường hợp 2 kênh để tính.
- Nhiệt độ mối nối Tj ≈ Ta + P × 70 (bản DIP16) hoặc Ta + P × 120 (bản SO16 trên module dán).
- Giữ Tj dưới khoảng 125 °C. Trong tủ điện mùa nóng, Ta có thể 40–50 °C.
| Dòng mỗi pha | 2 kênh dẫn, công suất IC | Tj với DIP16, Ta = 40 °C | Đánh giá |
| 100 mA | Khoảng 0,2 W | Khoảng 54 °C | Rất mát |
| 200 mA | Khoảng 0,45 W | Khoảng 72 °C | Ổn định lâu dài |
| 300 mA | Khoảng 0,8 W | Khoảng 96 °C | Ấm, vẫn trong giới hạn |
| 400 mA | Khoảng 1,2 W | Khoảng 124 °C | Sát ngưỡng, không nên |
| 500 mA | Khoảng 1,6 W | Trên 150 °C | IC quá nhiệt |
Bảng cho thấy con số "500 mA mỗi kênh" chỉ đúng cho một kênh đơn lẻ trong điều kiện lý tưởng. Với motor bước luôn có 2 kênh dẫn đồng thời, giới hạn thực tế của bản DIP16 khoảng 300–350 mA mỗi pha; bản SO16 trên các module nhỏ còn thấp hơn, khoảng 200–250 mA. Nếu IC nóng đến mức không đặt tay được quá 2 giây (vỏ khoảng 60 °C trở lên), mối nối bên trong đã nóng hơn nhiều.
Giảm nhiệt không cần đổi IC
- Ngắt cả 4 đầu ra khi motor đứng yên lâu (với motor có hộp số tự giữ được tải), vừa mát IC vừa mát motor.
- Dùng chế độ kích một pha (wave) thay vì hai pha khi tải nhẹ: chỉ một kênh dẫn, công suất giảm khoảng một nửa.
- Tăng diện tích đồng quanh chân 8 (GND) trên mạch in: phần lớn nhiệt thoát ra qua khung chân.
- Ghép song song kênh (mục 5) để chia dòng, giảm sụt áp mỗi kênh.
Sụt áp làm motor 5 V yếu hơn tem
Motor định mức 5 V cấp qua ULN2003 chỉ nhận khoảng 4 V, dòng và mô-men giảm theo. Nếu cần đủ lực, có thể nâng nguồn motor lên khoảng 6 V (vẫn trong giới hạn nhiệt của motor) hoặc thay IC sụt áp thấp. Các vấn đề riêng khi cả hệ thống chỉ có nguồn 5 V, như cấp từ cổng USB hay sạc dự phòng, được phân tích ở bài điều khiển động cơ bước 5V.
5. Ghép song song kênh ULN2003 để tăng dòng
Datasheet cho phép nối song song đầu ra các kênh để tăng dòng. Cách làm: chập hai chân IN với nhau và hai chân OUT tương ứng với nhau, ví dụ IN1 + IN2 cùng nối một chân vi điều khiển, OUT1 + OUT2 cùng nối một đầu pha motor. Hai kênh nằm trên cùng một đế silicon, nhiệt độ gần như bằng nhau nên dòng chia tương đối đều.
Lợi ích và giới hạn khi ghép kênh
- Dòng mỗi kênh giảm một nửa, sụt áp Vce giảm từ khoảng 1,3 V xuống khoảng 1 V, tổng nhiệt giảm khoảng 20–30%.
- Tổng công suất vẫn bị giới hạn bởi một vỏ IC; ghép kênh không biến ULN2003 thành IC 1 A cho motor bước.
- Một ULN2003 có 7 kênh nên chỉ ghép được 3 cặp, không đủ cho 4 pha. Muốn ghép đôi cả 4 pha cần ULN2803 (8 kênh) hoặc hai ULN2003.
- Hai kênh ghép phải cùng một IC; không ghép kênh của hai IC khác nhau vì nhiệt độ và sụt áp không giống nhau.
Phương án với motor dòng 0,4–0,6 A mỗi pha
| Phương án | Số IC | Dòng mỗi kênh | Nhận xét |
| ULN2803 ghép đôi 8 kênh | 1 | 0,2–0,3 A | Gọn nhất, vẫn cần đồng tản nhiệt tốt |
| Hai ULN2003, mỗi IC ghép 2 cặp | 2 | 0,2–0,3 A | Chia nhiệt ra hai vỏ, mát hơn |
| Mảng MOSFET TPL7407L hoặc TBD62003A | 1 | Tới khoảng 0,3 A khi nhiều kênh dẫn | Sụt áp thấp, ít nóng hơn hẳn |
| MOSFET rời logic-level | 4 | Vài A | Nên dùng khi motor trên 0,6 A |
Motor 6 dây size 42 dòng 1 A mỗi pha trở lên đã vượt khả năng của mọi phương án ghép ULN; khi đó nên đấu motor 6 dây kiểu lưỡng cực vào driver băm dòng như hướng dẫn ở bài mạch điều khiển động cơ bước TB6600.
6. Module ULN2003 và trình tự xung điều khiển
Module xanh bán kèm motor 28BYJ-48 gồm IC ULN2003 bản DIP16 cắm đế, jack trắng 5 chân cắm thẳng motor, 4 LED báo trạng thái pha A–D, hàng chân IN1–IN4 (một số bản đưa ra đủ IN1–IN7) và cặp chân nguồn có ghi 5–12V kèm jumper. Jumper này nối hoặc ngắt nguồn cấp cho motor, tiện để tắt motor khi nạp chương trình.

Những điểm trên module cần để ý
- Chân "−" của nguồn module chính là chân 8 (GND) của IC; phải nối chung với GND vi điều khiển, nếu không tín hiệu IN không có mốc và motor chạy loạn.
- Chân "+" vừa cấp cho dây chung motor qua jack, vừa nối vào chân 9 (COM). Vì vậy module tự lo phần COM; chỉ cần cấp đúng điện áp motor.
- Các chân IN5–IN7 bỏ trống có thể dùng để đóng ngắt một relay nhỏ, còi hoặc LED công suất, nhưng tải này chia chung ngân sách nhiệt của IC.
Trình tự xung nửa bước (8 trạng thái)
Bảng dưới là trình tự nửa bước chuẩn cho motor đơn cực 4 pha nối vào OUT1–OUT4. Giá trị 1 nghĩa là chân IN ở mức cao, nửa cuộn tương ứng có dòng. Đi từ trên xuống thì motor quay một chiều, đi ngược từ dưới lên thì đảo chiều.
| Bước | IN1 (A) | IN2 (B) | IN3 (C) | IN4 (D) |
| 1 | 1 | 0 | 0 | 0 |
| 2 | 1 | 1 | 0 | 0 |
| 3 | 0 | 1 | 0 | 0 |
| 4 | 0 | 1 | 1 | 0 |
| 5 | 0 | 0 | 1 | 0 |
| 6 | 0 | 0 | 1 | 1 |
| 7 | 0 | 0 | 0 | 1 |
| 8 | 1 | 0 | 0 | 1 |
Chế độ hai pha (full step) dùng các bước chẵn 2, 4, 6, 8; chế độ một pha dùng các bước lẻ 1, 3, 5, 7. So sánh mô-men và độ êm giữa ba chế độ kích từ có trong bài động cơ bước 4 pha 5 dây.
Tốc độ đổi bước
Mạch ULN2003 không hạn dòng, dòng trong cuộn tăng theo hằng số thời gian L/R. Nếu thời gian mỗi bước ngắn hơn khoảng 3 lần L/R, dòng chưa kịp lên đủ và motor mất lực, rung rồi đứng. Với motor nhỏ 5–12 V, khoảng cách tối thiểu giữa hai bước thường 1–2 ms; motor điện cảm lớn cần lâu hơn. Nên tăng tốc dần từ chậm lên nhanh thay vì đặt ngay tốc độ tối đa.
7. Đấu ULN2003 với Arduino, ESP32, STM32 và Raspberry Pi
Đầu vào ULN2003 có điện trở 2,7 kΩ và ngưỡng dẫn khoảng 1,4–2 V tùy dòng tải, nên mức logic 5 V và 3,3 V đều kích được. Dòng mỗi chân vi điều khiển phải cấp chỉ khoảng 0,7 mA ở 3,3 V và 1,3 mA ở 5 V, an toàn với mọi GPIO.

Bảng đấu nối theo từng nền tảng
| Nền tảng | Mức logic | Chân gợi ý cho IN1–IN4 | Lưu ý |
| Arduino Uno/Nano | 5 V | D8, D9, D10, D11 | Không lấy nguồn motor từ chân 5V khi chạy từ 2 motor trở lên |
| ESP32 | 3,3 V | GPIO 16, 17, 18, 19 | Tránh chân strapping và nhóm chỉ vào |
| STM32 (Blue Pill, Nucleo) | 3,3 V | PB12–PB15 hoặc PA0–PA3 | Chân ra đặt push-pull, không dùng open-drain |
| Raspberry Pi | 3,3 V | GPIO 17, 18, 27, 22 | Không kéo motor từ đường 5 V của Pi |
| PLC đầu ra transistor | 24 V | Q0.0–Q0.3 | Xem mục 8 trước khi nối |
Arduino: lưu ý thứ tự chân trong thư viện
Thư viện Stepper có sẵn trong Arduino IDE gửi trình tự theo thứ tự tham số riêng của nó. Khi IN1–IN4 nối D8–D11, phải khai báo theo thứ tự 8, 10, 9, 11, ví dụ:
- Stepper dongCo(2048, 8, 10, 9, 11);
- dongCo.setSpeed(10); dongCo.step(2048);
Khai báo 8, 9, 10, 11 theo đúng thứ tự dây là lỗi phổ biến nhất: motor chỉ rung tại chỗ hoặc chỉ quay một chiều dù đổi dấu số bước. Với thư viện AccelStepper, dùng chế độ nửa bước HALF4WIRE với cùng thứ tự 8, 10, 9, 11, rồi đặt setMaxSpeed và setAcceleration để có tăng tốc mềm.
STM32 và Raspberry Pi
Trên STM32, chỉ cần cấu hình 4 chân ra push-pull và xuất trình tự từ bảng ở mục 6 bằng một bộ định thời; ngắt timer giúp tốc độ đều hơn so với dùng lệnh delay trong vòng lặp. Trên Raspberry Pi, Linux không phải hệ điều hành thời gian thực nên xung bằng Python có thể bị giật khi CPU bận; với motor tốc độ thấp như rèm cuốn thì chấp nhận được, còn cần chuyển động đều nên dùng thư viện tạo xung bằng DMA (như pigpio) hoặc giao việc phát xung cho một vi điều khiển phụ. Mass của Pi, mass nguồn motor và chân GND của ULN2003 phải nối chung; với dây tín hiệu dài trong môi trường nhiễu, thêm điện trở 10–47 kΩ kéo mỗi chân IN xuống mass để motor không giật khi bật máy.
8. Nối ULN2003 với đầu ra transistor của PLC
ULN2003 đôi khi được dùng làm tầng đệm giữa PLC mini và motor bước đơn cực nhỏ, ví dụ cơ cấu xoay van, con lăn định lượng. Cách điều khiển xung và lập trình trên PLC nằm ở bài cách điều khiển động cơ bước bằng PLC; phần dưới chỉ xử lý giao tiếp điện giữa đầu ra PLC và chân IN.
PLC đầu ra PNP (sourcing, xuất +24 V)
Điện áp đầu vào tối đa của ULN2003 là 30 V, nên 24 V nối thẳng vào chân IN vẫn trong giới hạn. Tuy nhiên dòng nền khi đó khoảng (24 − 1,4) / 2,7 kΩ ≈ 8,4 mA, và điện trở 2,7 kΩ bên trong tỏa khoảng 0,19 W mỗi kênh. Bốn kênh cùng ở mức cao thêm gần 0,8 W nhiệt vào IC – xấp xỉ bằng nhiệt của chính motor. Cách xử lý:
- Mắc thêm điện trở 10 kΩ nối tiếp mỗi chân IN: dòng nền giảm còn khoảng 1,8 mA, vẫn đủ kích kênh với tải vài trăm mA.
- Hoặc dùng ULN2004 (điện trở nền 10,5 kΩ, thiết kế cho tín hiệu 6–15 V) kèm điện trở ngoài khoảng 4,7 kΩ.
- Hoặc chia áp 24 V xuống khoảng 5 V bằng cặp điện trở trước khi vào IN.
PLC đầu ra NPN (sinking, kéo xuống mass)
Đầu ra NPN không xuất được điện áp nên không kích được ULN2003 trực tiếp. Cần một điện trở kéo lên (ví dụ 4,7 kΩ lên 5 V hoặc 10 kΩ lên 24 V) tại chân IN: khi đầu ra PLC tắt, IN được kéo lên mức cao và kênh dẫn; khi đầu ra PLC bật, IN bị kéo xuống và kênh tắt. Logic bị đảo, chỉ cần đảo lại trong chương trình. Nếu muốn cách ly hoàn toàn nhiễu tủ điện, dùng optocoupler 4 kênh giữa PLC và ULN2003.
9. Điều khiển các motor đơn cực khác ngoài 28BYJ-48
ULN2003 kéo được bất kỳ motor bước đơn cực nào có dòng mỗi pha nằm trong ngân sách nhiệt ở mục 4 và điện áp nguồn dưới khoảng 24 V. Điều kiện duy nhất về điện áp là điện áp nguồn motor cộng gai cảm ứng không vượt 50 V.
| Nhóm motor | Điện áp thường gặp | Dòng mỗi pha | Dùng ULN2003 |
| Motor đảo gió điều hòa 24BYJ48, 35BYJ46 | 12 V | 50–150 mA | Rất phù hợp, IC mát |
| Motor PM can-stack 35–42 mm tháo máy in, máy fax | 12–24 V | 100–400 mA | Phù hợp nếu dưới ~300 mA |
| Motor hybrid 6 dây size 35–42 dòng thấp | 6–12 V | 0,3–0,6 A | Chỉ được khi ghép kênh hoặc chạy một pha |
| Motor hybrid 6 dây size 42–57 dòng cao | 2–5 V | 1–3 A | Không, cần MOSFET hoặc driver băm dòng |
| Motor 4 dây lưỡng cực, motor 5 pha | Mọi mức | Mọi mức | Không dùng được |
Cách xác định motor có hợp với ULN2003 không
- Đọc điện áp và điện trở mỗi pha trên tem, tính dòng I = U / R. Ví dụ 12 V, 75 Ω → 160 mA: dùng tốt.
- Tem chỉ có điện trở: đo điện trở từ dây chung tới một đầu pha, chọn điện áp nguồn sao cho dòng không quá 250–300 mA và motor không nóng quá tay sau 15 phút chạy.
Với các ứng dụng cần lực lớn hơn nhưng không đòi định vị theo bước, motor DC có hộp số như động cơ giảm tốc mini kết hợp công tắc hành trình thường bền và khỏe hơn nhiều so với motor bước nhỏ kéo qua ULN2003.
10. ULN2803, ULN2004 và các IC thay thế ULN2003
Họ ULN200x và các IC tương thích chân được thiết kế cho những nhu cầu khác nhau. Chọn sai mã thường không cháy ngay mà biểu hiện bằng motor yếu, kênh không dẫn hoặc IC nóng bất thường.
Họ IC Darlington cùng dòng
| Mã IC | Số kênh / vỏ | Điện trở nền | Tín hiệu vào phù hợp |
| ULN2003A | 7 / DIP16, SO16 | 2,7 kΩ | Logic 5 V và 3,3 V |
| ULN2004A | 7 / DIP16, SO16 | 10,5 kΩ | CMOS 6–15 V, tín hiệu 12 V |
| ULN2001A | 7 / DIP16 | Không có điện trở nền | Dùng với điện trở ngoài, mục đích chung |
| ULN2803A | 8 / DIP18, SO18 | 2,7 kΩ | Logic 5 V và 3,3 V |
| ULN2804A | 8 / DIP18 | 10,5 kΩ | CMOS 6–15 V |
ULN2803 có thêm một kênh nên chân GND là chân 9, COM là chân 10 (khác ULN2003 là chân 8 và 9); không cắm lẫn vào đế 16 chân. ULN2004 dùng với vi điều khiển 3,3 V sẽ dẫn không đủ sâu, sụt áp tăng và IC nóng; với 5 V chỉ ổn ở dòng nhỏ. Khi cần chạy êm, vi bước hoặc dòng lớn hơn, nên chuyển motor sang lưỡng cực với driver băm dòng; mạch giá rẻ cho sinh viên có thể tham khảo cách điều khiển động cơ bước bằng L293.
Mảng MOSFET sụt áp thấp tương thích chân
- TPL7407L: 7 kênh MOSFET, chịu 40 V, tới 600 mA một kênh đơn lẻ, tổng khoảng 2 A cả vỏ. Sụt áp khoảng 0,2 V ở 100 mA và 0,42 V ở 200 mA (ULN2003A khoảng 0,9 V và 1,1 V). Chân COM vừa là cực âm diode vừa nuôi mạch kích cổng bên trong, nên nguồn COM nên từ khoảng 8,5 V trở lên để MOSFET dẫn hoàn toàn; với motor 5 V, IC vẫn chạy nhưng điện trở dẫn tăng.
- TBD62003A (và bản 8 kênh TBD62083A): mảng DMOS 7 kênh, 50 V, 500 mA, tương thích chân ULN2003, có diode dập; mát hơn đáng kể ở cùng dòng.
- ULN2003LV: phiên bản điện áp thấp, đầu ra tối đa 8 V, khoảng 100–140 mA mỗi kênh với logic 3,3–5 V, sụt áp khoảng 0,4 V; hợp với motor 5 V nhỏ chạy pin, không dùng cho motor 12 V.
11. Lỗi thường gặp khi điều khiển động cơ bước ULN2003
Bảng chẩn đoán nhanh
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
| LED sáng đúng trình tự nhưng motor không quay | Thiếu nguồn motor, jumper nguồn tháo, nguồn yếu | Đo điện áp tại chân + của module khi đang chạy |
| Motor rung tại chỗ, kêu tạch tạch | Sai thứ tự pha hoặc sai thứ tự chân trong thư viện | Khai báo 8, 10, 9, 11 hoặc đổi hai dây pha giữa |
| Motor giật, lệch bước khi tăng tốc | Thời gian mỗi bước ngắn hơn khả năng tăng dòng | Giảm tốc độ, dùng tăng tốc dần, nâng nguồn trong giới hạn |
| IC nóng ngay khi cấp điện dù motor đứng yên | Chân IN thả nổi bị kích, COM nối sai, kênh chập | Đặt các IN về 0, kiểm tra chân COM, đo từng kênh |
| IC chết sau vài phút, vài giờ | Bỏ trống chân COM, dòng quá lớn, nhiệt cao | Nối COM lên nguồn motor, tính lại nhiệt ở mục 4 |
| Vi điều khiển tự khởi động lại khi motor chạy | Motor lấy nguồn chung với vi điều khiển, sụt áp | Tách nguồn motor, thêm tụ 100–470 µF gần module |
| Một LED không sáng, motor chạy giật nhịp | Kênh ULN2003 hỏng hoặc dây tín hiệu lỏng | Đổi kênh dự phòng IN5–IN7 hoặc thay IC |
Kiểm tra IC bằng đồng hồ vạn năng (thang đo diode, đã tháo khỏi mạch hoặc ngắt nguồn)
- Que đỏ ở đầu ra (chân 10–16), que đen ở COM (chân 9): đọc khoảng 0,5–0,8 V (diode dập dẫn). Đảo que phải hở mạch.
- Que đỏ ở GND (chân 8), que đen ở đầu ra: đọc khoảng 0,5–0,8 V (diode đế). Đảo que phải hở mạch.
- Kênh nào đọc gần 0 V theo cả hai chiều giữa đầu ra và GND là kênh đã chập, không dùng tiếp.
- Kiểm tra khi chạy: đưa IN lên mức cao với tải motor, đo đầu ra so với GND phải còn khoảng 0,8–1,3 V. Đo được vài volt nghĩa là kênh dẫn yếu hoặc tín hiệu vào không đủ.
12. Câu hỏi thường gặp về điều khiển động cơ bước ULN2003
- ULN2003 kéo được động cơ bước dòng bao nhiêu? Mỗi kênh định mức 500 mA, nhưng vì động cơ bước luôn có 2 kênh dẫn cùng lúc nên giới hạn nhiệt thực tế của bản DIP16 khoảng 300–350 mA mỗi pha, bản dán SO16 khoảng 200–250 mA. Muốn vượt mức này phải ghép kênh, chia ra hai IC hoặc đổi sang mảng MOSFET.
- Chân COM của ULN2003 nối vào đâu? Chân 9 (COM) nối vào cực dương của nguồn cấp cho motor, cùng điểm với dây chung của motor. Không bỏ trống, không nối vào nguồn logic khác điện áp và không nối xuống mass. Trên module bán sẵn, chân COM đã được nối với chân + nguồn motor.
- Có ghép song song hai kênh ULN2003 để tăng dòng được không? Được, datasheet cho phép chập hai IN và hai OUT tương ứng trên cùng một IC. Sụt áp mỗi kênh giảm và nhiệt giảm khoảng 20–30%, nhưng tổng công suất vẫn bị giới hạn bởi một vỏ IC. Một ULN2003 chỉ ghép được 3 cặp, nên muốn ghép đôi cả 4 pha cần ULN2803 hoặc hai ULN2003.
- Một ULN2003 điều khiển được mấy động cơ bước? Mỗi motor đơn cực cần 4 kênh, ULN2003 có 7 kênh nên chỉ điều khiển trọn được 1 motor; 3 kênh dư dùng cho relay, LED hay còi. Muốn chạy 2 motor trên một IC phải dùng ULN2803 (8 kênh), khi đó nhiệt của cả hai motor dồn vào một vỏ, cần tính lại công suất.
- ULN2003 và ULN2803 có thay thế cho nhau được không? Chức năng giống nhau nhưng ULN2803 có 8 kênh, vỏ 18 chân, GND ở chân 9 và COM ở chân 10, nên không cắm lẫn vào đế 16 chân của ULN2003. ULN2803 tiện hơn khi cần ghép đôi đủ 4 pha.
- Đầu ra transistor 24 V của PLC nối thẳng vào ULN2003 được không? Với PLC đầu ra PNP thì được về điện áp vì chân IN chịu tới 30 V, nhưng mỗi kênh tốn khoảng 8 mA và tỏa thêm nhiệt trong IC; nên mắc thêm điện trở 10 kΩ nối tiếp mỗi chân. PLC đầu ra NPN cần điện trở kéo lên và đảo logic trong chương trình, hoặc dùng optocoupler để cách ly.
- Raspberry Pi điều khiển module ULN2003 cần lưu ý gì? GPIO 3,3 V kích ULN2003 bình thường. Cần nối chung mass Pi với mass nguồn motor, không lấy nguồn motor từ đường 5 V của Pi khi chạy nhiều motor, và chấp nhận xung bằng Python có thể giật khi CPU bận; cần chuyển động đều thì dùng thư viện tạo xung bằng DMA hoặc vi điều khiển phụ.
- ULN2003 cấp nguồn motor 24 V được không? Được với motor đơn cực định mức 24 V và dòng nhỏ, vì IC chịu 50 V. Cần chắc chắn chân COM nối đúng nguồn 24 V và không mắc thêm zener vào đường COM, vì điện áp cảm ứng chéo ở motor đơn cực có thể lên gần gấp đôi nguồn, tổng cộng dễ vượt 50 V.
- Có IC nào thay ULN2003 mà ít sụt áp và ít nóng hơn không? Có các mảng MOSFET tương thích chân như TPL7407L (40 V, sụt áp khoảng 0,2 V ở 100 mA) và TBD62003A (50 V, 500 mA), hoặc ULN2003LV cho tải tới 8 V. TPL7407L cần nguồn COM khoảng 8,5 V trở lên để dẫn tốt nhất, nên hợp với motor 12 V hơn motor 5 V.
- ULN2003 có làm motor chạy nhanh hơn khi tăng điện áp không? Tăng điện áp làm dòng lên nhanh hơn nên motor giữ lực ở tốc độ cao hơn, nhưng vì ULN2003 không hạn dòng, dòng ổn định cũng tăng theo và motor, IC đều nóng thêm. Cách an toàn là tăng nguồn đồng thời mắc điện trở công suất nối tiếp dây chung để giữ dòng ở định mức, hoặc chuyển sang driver băm dòng.






