Điều khiển động cơ bước bằng L293 và L293D: sơ đồ đấu, shield Arduino, Proteus và giới hạn thực tế
Điều khiển động cơ bước bằng L293 là cách dùng IC cầu H kép L293 hoặc L293D để đảo chiều dòng điện trong hai cuộn dây của một động cơ bước lưỡng cực nhỏ, theo tín hiệu logic từ Arduino, vi điều khiển PIC/8051, ESP32 hay Raspberry Pi. Mỗi IC có bốn nửa cầu H (half-H) ghép thành hai cầu H đầy đủ, vừa đủ cho một motor 2 pha 4 dây. L293D chịu 600 mA mỗi kênh (đỉnh 1,2 A) và có sẵn diode kẹp bên trong; L293 không có chữ D chịu 1 A mỗi kênh (đỉnh 2 A) nhưng bắt buộc gắn diode ngoài.
L293D phù hợp cho bài thực hành, mô hình học tập, đồ án sinh viên, robot nhỏ và các motor bước có điện trở cuộn dây cao (khoảng 20 Ω trở lên), dòng pha dưới 0,5 A. Đây cũng là IC nằm trên tấm motor shield L293D phổ biến cho Arduino Uno. Điểm yếu cần biết ngay từ đầu: L293 không có mạch hạn dòng (chopper), sụt áp trên IC khoảng 2,6 V và tỏa nhiệt nhiều, nên không thích hợp cho motor NEMA 17 dòng lớn của máy in 3D hay máy CNC.
Nếu cần nắm trước các loại step motor và cách phân biệt chúng, xem bài tổng quan về động cơ bước.
Nội dung
- 1. L293 và L293D là gì, khác nhau ở đâu
- 2. Sơ đồ chân IC L293D và ý nghĩa từng chân
- 3. Tính dòng điện và nhiệt khi điều khiển động cơ bước bằng L293
- 4. Trình tự xung điều khiển động cơ bước bằng L293D
- 5. Motor shield L293D cho Arduino: 74HC595 và thư viện AFMotor
- 6. Cấp nguồn cho shield L293D: jumper PWR và lỗi reset Arduino
- 7. Mô phỏng điều khiển động cơ bước bằng L293D trên Proteus
- 8. Chọn động cơ bước phù hợp với L293D
- 9. SN754410 và các linh kiện thay thế L293D
- 10. Giới hạn của L293 và khi nào không nên dùng
- 11. Câu hỏi thường gặp về điều khiển động cơ bước bằng L293
1. L293 và L293D là gì, khác nhau ở đâu
L293 là IC "quadruple half-H driver" – bốn bộ kéo nửa cầu H độc lập, mỗi bộ có một ngõ vào logic (A) và một ngõ ra công suất (Y). Hai bộ kênh 1–2 dùng chung một chân cho phép (1,2EN), hai bộ kênh 3–4 dùng chung chân 3,4EN. Khi ghép hai nửa cầu vào hai đầu một cuộn dây, ta có một cầu H đầy đủ, đảo được chiều dòng qua cuộn. Một IC vì vậy điều khiển được hai cuộn, đúng bằng một động cơ bước lưỡng cực 2 pha.
Tầng ra của L293 dùng transistor lưỡng cực (BJT) kiểu Darlington, không phải MOSFET. Đây là lý do IC có sụt áp lớn và nóng, khác hẳn các driver MOSFET đời mới.
Bảng so sánh L293 và L293D
| Thông số | L293 | L293D |
| Dòng liên tục mỗi kênh | 1 A | 600 mA |
| Dòng đỉnh mỗi kênh | 2 A (không lặp lại, ≤ 5 ms) | 1,2 A (không lặp lại, ≤ 100 µs) |
| Diode kẹp chống điện áp ngược | Không có, phải gắn 8 diode ngoài | Có sẵn bên trong |
| Điện áp nguồn motor VCC2 | VCC1 đến 36 V | VCC1 đến 36 V |
| Nguồn logic VCC1 | 4,5–7 V (thường 5 V) | 4,5–7 V (thường 5 V) |
| Mức logic cao tối thiểu | 2,3 V | 2,3 V |
| Bảo vệ quá nhiệt | Có, ngõ ra chuyển trạng thái hở mạch | Có |
Dòng đỉnh chỉ là xung ngắn không lặp lại; khi chọn motor chỉ tính theo dòng liên tục và chừa thêm biên độ vì nhiệt.
Khi nào chọn L293, khi nào chọn L293D
- Mạch học tập, shield Arduino, motor dòng dưới 0,5 A: chọn L293D cho gọn, không cần diode ngoài.
- Motor cần 0,6–0,9 A mỗi pha: chọn L293 (hoặc SN754410) và gắn 8 diode nhanh bên ngoài.
2. Sơ đồ chân IC L293D và ý nghĩa từng chân
L293 và L293D có cùng sơ đồ chân trong vỏ DIP16 phổ biến. Bốn chân giữa (4, 5, 12, 13) vừa là chân mass, vừa là đường dẫn nhiệt chính của IC.
| Chân | Tên | Đấu khi điều khiển động cơ bước |
| 1 | 1,2EN | Nối 5 V hoặc chân số của vi điều khiển |
| 2 | 1A | IN1 từ vi điều khiển |
| 3 | 1Y | Đầu A+ cuộn A |
| 4, 5 | GND | Nối mass, hàn vào mảng đồng rộng |
| 6 | 2Y | Đầu A− cuộn A |
| 7 | 2A | IN2 |
| 8 | VCC2 | Nguồn motor (theo tính toán ở mục 3) |
| 9 | 3,4EN | Nối 5 V hoặc chân số |
| 10 | 3A | IN3 |
| 11 | 3Y | Đầu B+ cuộn B |
| 12, 13 | GND | Nối mass |
| 14 | 4Y | Đầu B− cuộn B |
| 15 | 4A | IN4 |
| 16 | VCC1 | 5 V của Arduino/nguồn logic |
Bảng chân lý của mỗi kênh rất đơn giản: EN mức thấp thì ngõ ra Y hở mạch (không dòng); EN mức cao thì Y đi theo A – A cao thì Y nối lên VCC2, A thấp thì Y nối xuống mass.
Đấu một động cơ bước lưỡng cực 4 dây
- Xác định hai cặp dây cùng cuộn bằng đồng hồ vạn năng (cặp nào có điện trở vài chục ôm là cùng cuộn); cách đo chi tiết có trong bài động cơ bước lưỡng cực.
- Cuộn A nối chân 3 và 6, cuộn B nối chân 11 và 14.
- Chân 2, 7, 10, 15 nối bốn chân số của vi điều khiển, ví dụ Arduino D8, D9, D10, D11.
- Chân 1 và 9 nối 5 V nếu không cần ngắt cuộn dây; nối hai chân số nếu muốn tắt dòng khi motor đứng yên.
- Mass nguồn motor, mass nguồn logic và mass vi điều khiển phải nối chung.
Tụ lọc và diode – phần hay bị bỏ qua
- Gắn tụ gốm 100 nF sát chân 16 và sát chân 8, cộng thêm tụ hóa 100–470 µF trên đường VCC2 gần IC.
- Với L293 (không D): mỗi ngõ ra cần một diode lên VCC2 và một diode xuống mass, tổng 8 diode. Nên dùng diode nhanh như Schottky 1N5819 hoặc UF4007; diode chỉnh lưu chậm 1N4007 phản ứng không kịp với xung đóng cắt.
- Không cấp nguồn motor khi chưa có nguồn logic 5 V ở chân 16; trạng thái ngõ vào lơ lửng có thể làm hai cuộn nhận dòng bất kỳ.
3. Tính dòng điện và nhiệt khi điều khiển động cơ bước bằng L293
L293 là driver điều khiển bằng điện áp: nó chỉ đóng cuộn dây vào nguồn, không đo và không giới hạn dòng. Dòng qua cuộn do điện áp nguồn, sụt áp trên IC và điện trở cuộn dây quyết định.
Sụt áp bão hòa của L293/L293D
Theo datasheet, tầng ra phía cao (high-side) thấp hơn VCC2 khoảng 1,4 V (tối đa 1,8 V), tầng ra phía thấp (low-side) cao hơn mass khoảng 1,2 V (tối đa 1,8 V). Dòng qua một cuộn luôn đi qua một transistor phía cao và một transistor phía thấp, nên tổng sụt áp khoảng 2,6 V, xấu nhất 3,6 V.
Công thức tính nhanh
- Dòng cuộn: I ≈ (VCC2 − 2,6) / R cuộn.
- Công suất IC tiêu tán cho mỗi cuộn đang có dòng: P ≈ 2,6 × I.
- Ở chế độ bước đủ hai pha (cả hai cuộn đều có dòng): P tổng ≈ 2 × 2,6 × I.
- Nhiệt độ mối nối ước tính: Tj ≈ T môi trường + P × RθJA.
Ví dụ tính cho ba loại motor thường gặp
| Motor (tem) | Điện trở cuộn | Nguồn VCC2 cần để đạt dòng tem | Công suất IC khi 2 cuộn có dòng | Đánh giá |
| 12 V – 0,4 A | 30 Ω | ≈ 14,6 V | ≈ 2,1 W | Chạy được, cần mảng đồng hoặc tản nhiệt |
| 12 V – 0,35 A (NEMA 17 dòng thấp) | 34–35 Ω | ≈ 14,6 V | ≈ 1,8 W | Chạy được, IC ấm nóng rõ |
| 2,8 V – 1,7 A (NEMA 17 phổ biến) | 1,5–1,7 Ω | Không áp dụng | Vượt khả năng IC | Không dùng L293 |
Datasheet L293 của TI cho nhiệt trở mối nối – môi trường của vỏ DIP16 khoảng 36,4 °C/W trên bo mạch thử chuẩn có lớp đồng lớn. Với 2,1 W, nhiệt độ mối nối tăng khoảng 76 °C so với môi trường, tức gần 110 °C khi phòng 32 °C – vẫn dưới giới hạn 150 °C nhưng IC nóng bỏng tay. Trên breadboard hoặc bo mạch đục lỗ không có mảng đồng, nhiệt trở thực tế cao hơn nhiều, nên mạch dễ chạm ngưỡng bảo vệ quá nhiệt: IC tự ngắt ngõ ra, motor đứng hoặc giật cục rồi chạy lại khi nguội.
Cách giảm nhiệt cho L293D
- Hàn bốn chân GND (4, 5, 12, 13) vào một mảng đồng mass càng rộng càng tốt; đây là đường thoát nhiệt hiệu quả nhất của vỏ DIP.
- Có thể dán hoặc kẹp tản nhiệt nhỏ lên lưng IC; datasheet cho ví dụ dùng tản nhiệt ngoài đưa nhiệt trở xuống khoảng 25 °C/W.
- Dùng chế độ một pha (wave) thay cho hai pha khi tải nhẹ: chỉ một cuộn có dòng, nhiệt IC giảm khoảng một nửa.
- Kéo chân EN xuống mức thấp khi motor dừng lâu và tải không cần giữ vị trí.
Vì sao không tăng điện áp để motor khỏe hơn
Với L293, tăng VCC2 chỉ làm dòng tăng theo định luật Ohm, motor và IC cùng nóng hơn, khác với driver có băm dòng. Cách cổ điển là mắc điện trở công suất nối tiếp mỗi cuộn (kiểu L/R), chỉ hợp lý với motor rất nhỏ.
Tốc độ tối đa thực tế
Vì không có hạn dòng và điện áp nguồn thường thấp, dòng trong cuộn dây tăng chậm theo hằng số thời gian L/R của cuộn. Khi tần số bước tăng, dòng không kịp đạt mức định mức trong mỗi bước, mô-men tụt nhanh. Motor bước dùng L293 vì vậy thường chỉ chạy tốt ở vài trăm bước/giây với bước đủ; muốn nhanh hơn phải giảm tải hoặc đổi driver.
4. Trình tự xung điều khiển động cơ bước bằng L293D
Với L293D, vi điều khiển trực tiếp tạo trình tự logic cho bốn ngõ vào IN1–IN4, không có tín hiệu STEP/DIR như các driver chuyên dụng. Quy ước: IN1, IN2 điều khiển cuộn A; IN3, IN4 điều khiển cuộn B. Hai ngõ vào của một cuộn bằng nhau (cùng 0 hoặc cùng 1) thì cuộn không có điện áp.
Trình tự bước đủ hai pha (mô-men lớn nhất)
| Bước | IN1 | IN2 | IN3 | IN4 |
| 1 | 1 | 0 | 1 | 0 |
| 2 | 0 | 1 | 1 | 0 |
| 3 | 0 | 1 | 0 | 1 |
| 4 | 1 | 0 | 0 | 1 |
Đây cũng chính là trình tự bốn dây mà thư viện Stepper có sẵn trong Arduino IDE tạo ra, khi khai báo các chân theo thứ tự IN1, IN2, IN3, IN4. Đảo thứ tự bước (4 → 3 → 2 → 1) thì motor quay ngược.
Trình tự nửa bước (half step) 8 trạng thái
| Bước | IN1 | IN2 | IN3 | IN4 |
| 1 | 1 | 0 | 1 | 0 |
| 2 | 0 | 0 | 1 | 0 |
| 3 | 0 | 1 | 1 | 0 |
| 4 | 0 | 1 | 0 | 0 |
| 5 | 0 | 1 | 0 | 1 |
| 6 | 0 | 0 | 0 | 1 |
| 7 | 1 | 0 | 0 | 1 |
| 8 | 1 | 0 | 0 | 0 |
Nửa bước làm số bước mỗi vòng tăng gấp đôi (400 bước với motor 1,8°) và chạy êm hơn, nhưng ở các trạng thái chỉ một cuộn có dòng, mô-men thấp hơn. Ở trạng thái "cuộn tắt", nếu đặt hai ngõ vào cùng mức thấp, hai đầu cuộn bị nối xuống mass nên dòng tắt chậm; muốn cuộn tắt nhanh, dùng chân EN tương ứng đưa ngõ ra về hở mạch.
Mã điều khiển ngắn trên Arduino
- Khai báo thư viện: #include <Stepper.h>
- Tạo đối tượng: Stepper motor(200, 8, 9, 10, 11); – 200 là số bước mỗi vòng của motor 1,8°.
- Đặt tốc độ trong setup(): motor.setSpeed(60); – đơn vị vòng/phút.
- Chạy trong loop(): motor.step(200); delay(500); motor.step(-200);
Hàm step() của thư viện Stepper chặn chương trình cho đến khi chạy xong số bước. Nếu cần gia tốc, chạy nhiều motor song song hay không chặn chương trình, dùng thư viện AccelStepper ở chế độ FULL4WIRE hoặc HALF4WIRE với cùng bốn chân. Nguyên lý tạo gia tốc và các kiểu trình tự vi bước sin–cos được trình bày riêng trong bài kỹ thuật điều khiển động cơ bước lưỡng cực.
Mức logic 3,3 V: ESP32, STM32, Raspberry Pi, Raspberry Pi Pico
- Ngưỡng mức cao tối thiểu của L293D là 2,3 V, nên chân GPIO 3,3 V điều khiển trực tiếp được.
- Chân VCC1 vẫn phải cấp 4,5–7 V (thường lấy 5 V), không cấp 3,3 V vào chân 16.
- Ngõ vào chịu tối đa 7 V: không nối thẳng ngõ ra 24 V của PLC vào IN1–IN4; phải qua cầu phân áp hoặc opto cách ly.
5. Motor shield L293D cho Arduino: 74HC595 và thư viện AFMotor
Motor shield L293D (bản gốc là Adafruit Motor Shield V1, nay đã ngừng sản xuất nhưng bản sao rất phổ biến) là tấm mạch cắm chồng lên Arduino Uno hoặc Mega, gồm hai IC L293D và một IC dịch bit 74HC595. Shield có 4 cổng motor M1–M4, mỗi cổng là một cầu H; hai cổng M1+M2 ghép thành cổng động cơ bước số 1, M3+M4 là cổng số 2. Như vậy một shield điều khiển được 2 động cơ bước, hoặc 4 motor DC, hoặc 1 động cơ bước cộng 2 motor DC, kèm 2 đầu cắm servo 5 V.

Chân Arduino mà shield L293D chiếm dụng
| Chân Arduino | Chức năng trên shield | Khi nào bị chiếm |
| D4, D7, D8, D12 | Điều khiển 74HC595 (chốt hướng cho cả 4 cầu H) | Luôn bị chiếm khi dùng motor DC hoặc động cơ bước |
| D11, D3 | PWM/Enable cổng M1, M2 (động cơ bước số 1) | Khi dùng cổng M1–M2 |
| D5, D6 | PWM/Enable cổng M3, M4 (động cơ bước số 2) | Khi dùng cổng M3–M4 |
| D9, D10 | Tín hiệu hai servo | Khi cắm servo |
| D2, D13, A0–A5 | Không dùng | Còn trống cho cảm biến, công tắc hành trình |
Vì các ngõ vào của L293D trên shield được nối qua 74HC595, Arduino không điều khiển được trực tiếp từng chân IN như mạch rời. Bắt buộc phải dùng thư viện AFMotor (hoặc thư viện tương thích) để ghi dữ liệu vào thanh ghi dịch.
Cách dùng thư viện AFMotor cho động cơ bước
- Khai báo: #include <AFMotor.h>
- Tạo đối tượng: AF_Stepper motor(200, 2); – 200 bước/vòng, cổng số 2 (M3–M4). Cổng số 1 là M1–M2.
- Đặt tốc độ: motor.setSpeed(30); – vòng/phút, tính đúng chỉ khi số bước/vòng khai báo khớp với motor.
- Chạy: motor.step(100, FORWARD, DOUBLE); – kiểu bước là SINGLE, DOUBLE, INTERLEAVE hoặc MICROSTEP.
- Tắt dòng khi dừng: motor.release(); – motor hết mô-men giữ nhưng hết nóng.
Ý nghĩa bốn kiểu bước: SINGLE là kích một cuộn mỗi lần, DOUBLE kích hai cuộn cho mô-men lớn nhất, INTERLEAVE là nửa bước (mịn hơn, số bước gấp đôi), MICROSTEP là vi bước bằng PWM trên chân Enable (mặc định 16 vi bước mỗi bước đủ, chỉnh trong file AFMotor.h). Do L293D không có vòng hạn dòng, vi bước của shield chỉ là điều chế điện áp, dòng thực trong cuộn không bám đúng dạng sin, mô-men giảm đáng kể; chế độ này chủ yếu giúp motor chạy êm ở tốc độ chậm.
Chạy hai động cơ bước cùng lúc trên shield
Hàm step() chặn chương trình đến khi chạy xong, nên gọi lần lượt cho hai motor thì chúng chạy nối tiếp nhau chứ không đồng thời. Cách đúng là dùng hàm onestep() xen kẽ trong vòng lặp, hoặc dùng AccelStepper với hai hàm bọc gọi onestep(FORWARD, …) và onestep(BACKWARD, …) cho từng motor. Không thể cắm chồng hai shield L293D để chạy 4 động cơ bước vì chúng dùng chung các chân điều khiển 74HC595.
Giới hạn của AFMotor với các board mới
Thư viện AFMotor viết cho vi điều khiển AVR (Uno, Mega đời cũ) và truy cập trực tiếp thanh ghi timer của AVR. Với ESP32, Uno R4 hay các board không dùng chip AVR, thư viện không biên dịch được hoặc chạy sai. Khi đó phải tự viết hàm đẩy 8 bit hướng vào 74HC595 qua bốn chân D4, D7, D8, D12 và tạo PWM trên chân Enable, hoặc chọn shield khác hợp với board.
6. Cấp nguồn cho shield L293D: jumper PWR và lỗi reset Arduino
Phần lớn sự cố "motor chạy lạ" trên shield L293D xuất phát từ nguồn. Shield có khối domino EXT_PWR (+M, GND) để cấp nguồn motor riêng và một jumper PWR quyết định nguồn motor có nối chung với nguồn Arduino hay không.

Ba cách cấp nguồn
| Cách cấp | Jumper PWR | Ưu điểm | Nhược điểm |
| Một nguồn chung qua jack DC Arduino hoặc EXT_PWR | Cắm | Gọn, chỉ một nguồn | Motor gây sụt áp, Arduino dễ reset |
| USB cho Arduino, nguồn riêng vào EXT_PWR | Rút | Logic ổn định, nên dùng khi thử nghiệm | Phải nối mass chung (đã nối sẵn trên shield) |
| Jack DC cho Arduino, nguồn riêng vào EXT_PWR | Rút | Ổn định nhất khi chạy độc lập | Cần hai nguồn |
Các lưu ý khi cấp nguồn cho shield
- Khối EXT_PWR không có diode chống ngược cực; đấu ngược cực có thể làm hỏng cả shield lẫn Arduino.
- Điện áp motor nằm trong khoảng 4,5–25 V theo thiết kế gốc, nhưng bản sao thường dùng tụ lọc điện áp thấp hơn: đọc số vôn ghi trên tụ hóa của shield và giữ nguồn motor dưới mức đó.
- Pin vuông 9 V không đủ dòng cho động cơ bước; dùng adapter, pin Li-ion ghép hoặc ắc quy.
- Đèn LED nguồn motor trên shield phải sáng thì cổng M1–M4 mới có điện; servo vẫn chạy được dù LED tắt vì servo lấy 5 V từ Arduino.
7. Mô phỏng điều khiển động cơ bước bằng L293D trên Proteus
Thư viện Proteus có sẵn linh kiện L293D, các mẫu động cơ bước động (hiển thị góc quay khi mô phỏng) như MOTOR-STEPPER và MOTOR-BISTEPPER, cùng vi điều khiển AVR, PIC, 8051 để nạp file .hex.
Trình tự dựng mạch mô phỏng
- Đặt vi điều khiển (ATmega328P, PIC16F877A hoặc AT89C51), L293D, động cơ bước lưỡng cực và nguồn DC.
- Nối bốn chân ngõ ra vi điều khiển vào IN1–IN4, chân EN1, EN2 lên mức cao.
- Cấp nguồn cho cả chân logic (VSS/VCC1) và chân nguồn motor (VS/VCC2); quên một trong hai là lỗi phổ biến nhất khiến motor đứng im.
- Trong Edit Properties của motor, đặt góc bước và điện trở cuộn gần với motor thật.
- Nạp file .hex vào vi điều khiển, chỉnh tần số thạch anh trong phần mô phỏng khớp với giá trị khai báo trong code.
- Dùng Virtual Oscilloscope hoặc Logic Analyzer để xem dạng xung IN1–IN4 và kiểm tra trình tự.
Lỗi hay gặp khi mô phỏng
- Motor quay một bước rồi quay lui, lắc qua lại: trình tự xung sai hoặc nối nhầm hai đầu một cuộn sang cuộn kia; đối chiếu với bảng bước đủ ở mục 4.
- Motor quay nhưng giật, hiển thị góc nhảy lung tung: tần số bước quá cao so với khả năng mô phỏng thời gian thực; tăng thời gian trễ giữa các bước khi chạy thử.
Mô phỏng chạy được không có nghĩa là mạch thật chạy được
Mẫu L293D trong Proteus không mô phỏng nhiệt, giới hạn dòng hay sụt áp đầy đủ như IC thật. Một đồ án mô phỏng motor 1,5 Ω với nguồn 12 V vẫn quay đẹp trên màn hình, nhưng ngoài thực tế IC sẽ quá nhiệt ngay. Khi chuyển từ mô phỏng sang làm mạch, luôn tính lại dòng và nhiệt theo mục 3, và chọn motor có điện trở cuộn phù hợp.
8. Chọn động cơ bước phù hợp với L293D
Quy tắc chọn đơn giản nhất: L293D hợp với motor có điện trở cuộn từ khoảng 20 Ω trở lên và dòng định mức dưới 0,5 A; motor dưới 5 Ω mỗi cuộn gần như chắc chắn cần driver có băm dòng.
| Nhóm motor | Đặc điểm cuộn dây | Dùng với L293D |
| Motor bước nhỏ 20–35 mm (máy in, ổ đĩa, đồ chơi) | 10–50 Ω, dòng 0,1–0,4 A | Phù hợp nhất |
| NEMA 17 bản 12 V dòng thấp | 30–35 Ω, khoảng 0,3–0,4 A | Chạy được, cần tản nhiệt |
| Motor 28BYJ-48 đấu lưỡng cực | Điện trở cao, dòng thấp (bản 5 V) | Chạy được nhưng phải tính sụt áp |
| NEMA 17 máy in 3D (1–2 A) | 1–3 Ω | Không phù hợp |
| NEMA 23 trở lên | Dưới 2 Ω, dòng 2–4 A | Không phù hợp |
Bẫy sụt áp với motor 5 V
Motor ghi 5 V nhưng cấp VCC2 = 5 V qua L293D thì cuộn dây chỉ nhận khoảng 2,4 V, motor yếu hẳn hoặc không quay. Muốn motor nhận đúng 5 V, VCC2 phải khoảng 7,5 V. Với các ứng dụng chạy pin hoặc cổng USB 5 V, nên dùng driver MOSFET sụt áp thấp; các lựa chọn cụ thể có trong bài điều khiển động cơ bước 5V. Thông số chi tiết của 28BYJ-48 xem tại bài động cơ bước 5 dây.
9. SN754410 và các linh kiện thay thế L293D
SN754410 – thay cùng chân, dòng 1 A
SN754410 là IC bốn nửa cầu H được mô tả là bản thay thế chức năng cải tiến của L293, cùng bố trí chân trong vỏ DIP16, chịu 1 A liên tục và 2 A đỉnh mỗi kênh, nguồn motor 4,5–36 V. Điểm khác cần lưu ý: nguồn logic VCC1 chỉ cho phép 4,5–5,5 V (hẹp hơn L293), và sụt áp ở 1 A tối đa khoảng 2 V mỗi phía. Datasheet có ghi diode kẹp ở ngõ ra, nhưng khi chạy gần 1 A với motor có điện cảm lớn, nhiều người thiết kế vẫn gắn thêm diode Schottky bên ngoài cho chắc chắn. Vì sụt áp tương đương L293, SN754410 không giải quyết được vấn đề nóng – nó chỉ cho phép dòng cao hơn.
Ghép chồng hai L293D (piggyback)
Trên shield L293D, cách tăng dòng thường gặp là hàn chồng một IC L293D lên đúng IC có sẵn, chân nào hàn vào chân đó, để hai IC chia dòng. Cách này làm tăng dòng chịu được và chia nhiệt, nhưng hai IC không bao giờ chia dòng hoàn toàn đều; chồng thêm từ IC thứ ba trở đi gần như không có lợi.
Bảng so sánh L293D với các driver khác cho motor nhỏ
| Driver | Kiểu tầng ra | Dòng mỗi cầu | Hạn dòng (chopper) | Ghi chú |
| L293D | BJT, sụt áp ~2,6 V | 0,6 A | Không | Dễ học, nóng |
| SN754410 | BJT | 1 A | Không | Thay cùng chân L293 |
| L298N | BJT, sụt áp 2–4 V | 2 A | Không (cần L297 bên ngoài) | Dòng lớn hơn nhưng vẫn nóng |
| TB6612FNG | MOSFET | 1,2 A | Không | Sụt áp thấp, nguồn motor tối đa 13,5 V |
| DRV8833 | MOSFET | 1,5 A | Có | Nguồn 2,7–10,8 V, hợp chạy pin |
| A4988, DRV8825, TMC2209 | MOSFET | 1–2 A | Có, vi bước | Giao tiếp STEP/DIR, dùng cho NEMA 17 |
Với motor dòng cao hơn 600 mA mà vẫn muốn dùng IC cầu H kiểu cổ điển, xem bài điều khiển động cơ bước dùng L298. Với motor đơn cực nhỏ chỉ cần kéo xuống mass, mảng Darlington ULN2003 cho sụt áp thấp hơn và đơn giản hơn; chi tiết trong bài điều khiển động cơ bước ULN2003.
10. Giới hạn của L293 và khi nào không nên dùng
Không nên dùng L293/L293D khi
- Motor có điện trở cuộn dưới 5 Ω hoặc dòng tem trên 0,6 A (L293D) hay 1 A (L293), điển hình là NEMA 17 của máy in 3D và mọi motor NEMA 23 trở lên.
- Cần tốc độ cao, gia tốc mạnh: thiếu hạn dòng nên không tận dụng được nguồn điện áp cao.
- Thiết bị chạy liên tục trong tủ kín, nhiệt độ môi trường cao: dải nhiệt hoạt động khuyến nghị của bản thương mại chỉ 0–70 °C.
Dấu hiệu IC L293D đã hỏng hoặc kém chất lượng
- IC nóng ngay cả khi không nối motor: tầng ra bị chập, thay IC.
- Một cuộn có điện áp, cuộn kia không: một nửa cầu đã chết; đo điện áp từng chân ngõ ra so với mass khi đặt mức logic cố định.
- Motor chạy được vài chục giây rồi đứng, nguội lại chạy: IC đang vào chế độ bảo vệ nhiệt; giảm dòng hoặc tăng tản nhiệt.
Trong hệ thống cần kéo tải thật như băng tải nhỏ, cơ cấu nâng hạ hay cửa tự động, động cơ bước nhỏ chạy L293 thường không đủ lực và độ bền. Những ứng dụng này phù hợp hơn với động cơ giảm tốc mini hoặc motor 12V DC có hộp số.
11. Câu hỏi thường gặp về điều khiển động cơ bước bằng L293
- L293 và L293D khác nhau thế nào, có thay trực tiếp cho nhau được không? Hai IC cùng sơ đồ chân. L293 chịu 1 A liên tục mỗi kênh nhưng không có diode kẹp, phải gắn 8 diode nhanh bên ngoài; L293D chỉ chịu 600 mA nhưng có sẵn diode. Thay L293D bằng L293 phải thêm diode; thay L293 bằng L293D chỉ an toàn khi dòng motor dưới 600 mA.
- L293D có điều khiển được động cơ bước NEMA 17 không? Chỉ được với loại NEMA 17 điện áp cao, dòng thấp, điện trở cuộn khoảng 30 Ω trở lên (ví dụ bản 12 V – 0,35 A). Loại NEMA 17 phổ biến trên máy in 3D có dòng 1,5–2 A và điện trở dưới 3 Ω sẽ làm IC quá nhiệt và tự ngắt; loại này cần driver có hạn dòng như A4988, DRV8825 hay TMC2209.
- Vì sao IC L293D nóng bỏng tay trong khi motor vẫn chạy bình thường? Tầng ra BJT sụt khoảng 2,6 V trên mỗi cuộn đang có dòng, nên IC tiêu tán khoảng 2,6 W cho mỗi ampe dòng cuộn. Ở chế độ hai cuộn cùng kích với 0,4 A, IC tỏa khoảng 2 W, đủ để nóng 90–110 °C nếu không có mảng đồng tản nhiệt. Hàn kỹ bốn chân GND vào mảng đồng lớn, dùng kiểu kích một pha khi tải nhẹ và tắt chân EN khi dừng.
- Cấp 5 V vào chân VCC2 thì motor 5 V có chạy được không? Chạy rất yếu hoặc không chạy, vì sau sụt áp trên IC cuộn dây chỉ còn khoảng 2,4 V. Muốn cuộn nhận đủ 5 V, cần cấp VCC2 khoảng 7,5 V; nếu chỉ có nguồn 5 V thì nên dùng driver MOSFET sụt áp thấp.
- Motor shield L293D chạy được mấy động cơ bước cùng lúc? Tối đa 2 động cơ bước (cổng M1–M2 và M3–M4), hoặc 1 động cơ bước cộng 2 motor DC, kèm 2 servo 5 V. Không cắm chồng hai shield để chạy 4 động cơ bước được, vì hai shield dùng chung các chân điều khiển 74HC595.
- Vì sao Arduino bị reset mỗi khi động cơ bước trên shield bắt đầu chạy? Nguồn motor và nguồn Arduino đang dùng chung (jumper PWR cắm), khi cuộn dây đóng cắt nguồn bị sụt áp làm vi điều khiển khởi động lại. Rút jumper PWR, cấp Arduino bằng USB hoặc jack DC riêng và cấp motor qua cọc EXT_PWR; đồng thời kiểm tra nguồn motor có đủ dòng.
- Báo lỗi "AFMotor.h: No such file or directory" hoặc biên dịch lỗi trên ESP32 là do đâu? Lỗi thứ nhất do chưa cài thư viện AFMotor vào Arduino IDE. Lỗi trên ESP32, Uno R4 là do thư viện chỉ viết cho chip AVR (xem mục 5).
- Chế độ MICROSTEP của thư viện AFMotor có mịn như driver vi bước chuyên dụng không? Không. L293D không đo dòng, nên vi bước của AFMotor chỉ là điều chế độ rộng xung trên chân Enable, dòng trong cuộn không bám đúng dạng sin. Motor chạy êm hơn ở tốc độ chậm nhưng mô-men giảm và vị trí giữa các bước không đều; cần vi bước thật thì dùng driver có băm dòng.
- Mô phỏng Proteus motor không quay hoặc chỉ lắc qua lại dù code đúng, xử lý thế nào? Kiểm tra trước hết đã cấp nguồn cho cả chân logic và chân nguồn motor của L293D chưa, chân EN đã lên mức cao chưa. Motor lắc qua lại thường do nối nhầm cặp dây cuộn hoặc trình tự IN1–IN4 sai; motor giật cục thường do tần số bước quá cao so với khả năng mô phỏng thời gian thực, hoặc tần số thạch anh trong Proteus khác giá trị trong code.
- L293D có điều khiển được động cơ bước đơn cực 5 dây hoặc 6 dây không? Được. Có thể nối dây chung vào mass và để bốn ngõ ra kéo từng nửa cuộn lên nguồn, hoặc với motor 6 dây thì bỏ dây chung và đấu cả cuộn như motor lưỡng cực để lấy mô-men lớn hơn (so sánh hai cách đấu xem bài động cơ bước đơn cực). Trên shield, dây chung nối vào cọc GND giữa khối domino của cổng. Motor 5 dây có dây chung nối liền bên trong nên chỉ dùng được kiểu thứ nhất, trừ khi cắt mạch dây chung.






