Động cơ bước với driver A4988/DRV8825 - điều khiển vị trí chính xác

Hướng dẫn động cơ bước NEMA17 và 28BYJ-48 - nguyên lý bước, vi bước, chỉnh dòng Vref trên A4988/DRV8825, đấu nối ESP32 và code tăng tốc mượt. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
Động cơ bước hoạt động thế nào?
Động cơ bước (stepper motor) quay theo từng bước rời rạc thay vì quay trơn: mỗi xung điện vào driver đẩy trục quay đúng một góc cố định, phổ biến 1.8 độ (200 bước/vòng). Ra lệnh 400 xung — trục quay đúng 2 vòng, không cần cảm biến kiểm tra lại. Khả năng định vị vòng hở này khiến stepper thống trị máy in 3D, CNC, máy vẽ và mọi cơ cấu cần vị trí lặp lại chính xác.
Bên trong, stator có nhiều cuộn dây bố trí lệch pha; cấp điện lần lượt theo thứ tự khiến rotor nam châm "nhảy" theo từng vị trí khóa từ. Driver đảm nhận việc cấp điện đúng thứ tự — bạn chỉ cần gửi xung STEP và mức DIR.
Hai bộ stepper phổ biến trong giáo dục
| Tiêu chí | 28BYJ-48 + ULN2003 | NEMA17 + A4988 |
|---|---|---|
| Điện áp | 5V | 12-24V (nguồn motor) |
| Góc bước hiệu dụng | ~0.088 độ (4096 nửa bước/vòng do hộp số 1:64) | 1.8 độ (200 bước/vòng) |
| Mô-men | ~0.3 kg.cm | 4-5 kg.cm (loại 42x40) |
| Tốc độ tối đa | ~15 vòng/phút | vài trăm vòng/phút |
| Giá cả bộ | ~35.000 đ | ~200.000-320.000 đ |
| Phù hợp | Học nguyên lý, cơ cấu quay nhẹ | Máy in 3D, CNC, máy vẽ, robot arm |
28BYJ-48 là bộ học tập hoàn hảo với giá một bữa ăn; NEMA17 là chuẩn công nghiệp nhẹ mà mọi máy in 3D đều dùng.
Driver A4988 và DRV8825
Hai driver dạng module cắm (StepStick) thay được cho nhau về sơ đồ chân:
| Thông số | A4988 | DRV8825 |
|---|---|---|
| Dòng tối đa (có tản nhiệt) | 2 A | 2.5 A |
| Vi bước tối đa | 1/16 | 1/32 |
| Áp motor | 8-35V | 8.2-45V |
| Giá | 25.000-40.000 đ | 35.000-55.000 đ |
Vi bước (microstepping)
Thay vì bật/tắt cuộn dây dứt khoát, driver cấp dòng theo mức trung gian khiến rotor dừng ở vị trí giữa hai bước — chia mỗi bước 1.8 độ thành 2, 4, 8, 16 phần. Lợi ích: quay mượt hơn hẳn, êm hơn, ít cộng hưởng. Đánh đổi: mô-men giữ mỗi vi bước giảm. Cấu hình bằng 3 chân MS1-MS3 (bảng trong datasheet; nối cả 3 lên HIGH = 1/16 với A4988).
Chỉnh dòng Vref - bước bắt buộc, bỏ qua là cháy
Driver giới hạn dòng qua cuộn dây theo biến trở trên module. Chỉnh sai: dòng quá cao làm motor và driver nóng rát, dòng quá thấp làm mất bước. Quy trình với A4988 (điện trở sense 0.1Ω phổ biến):
- Tính Vref = dòng mong muốn x 8 x 0.1. Ví dụ motor 1.2 A/pha, chạy 80%: Vref = 0.96 x 0.8 ≈ 0.77V
- Cấp nguồn logic (chưa cần nguồn motor), que đen đồng hồ vào GND, que đỏ chạm đầu biến trở
- Xoay biến trở từ từ đến giá trị tính được
Lưu ý mỗi phiên bản module có điện trở sense khác nhau (0.05/0.1/0.2Ω) — công thức đổi theo; tra đúng phiên bản đang cầm.
Đấu nối NEMA17 + A4988 + ESP32
| Chân A4988 | Nối với | Ghi chú |
|---|---|---|
| VMOT, GND | Nguồn 12V + tụ 100 µF | Tụ sát chân — bảo vệ driver khỏi xung áp |
| VDD, GND | 3V3 ESP32 | Nguồn logic |
| STEP | GPIO 26 | Mỗi xung = 1 (vi) bước |
| DIR | GPIO 27 | HIGH/LOW = hai chiều |
| EN | GPIO 25 (hoặc nối GND) | LOW = bật driver |
| MS1-MS3 | 3V3 hoặc GND | Chọn vi bước |
| SLEEP + RESET | Nối với nhau | Bắt buộc nếu không điều khiển riêng |
| 1A 1B 2A 2B | 4 dây motor | Mỗi cặp một cuộn — đo thông mạch để tìm cặp |
Cảnh báo quan trọng nhất: KHÔNG BAO GIỜ rút/cắm dây động cơ khi driver đang có điện — xung cảm ứng giết driver ngay lập tức. Đây là nguyên nhân hỏng A4988 số một.
Code mẫu ESP32 - quay có tăng tốc
Stepper không thể nhảy ngay lên tốc độ cao — phải tăng tốc dần, nếu không sẽ mất bước ngay từ xung đầu:
const int STEP_PIN = 26, DIR_PIN = 27, EN_PIN = 25;
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // bật driver
}
// quay 'steps' bước với tăng tốc/giảm tốc tuyến tính
void moveSteps(long steps, bool clockwise) {
digitalWrite(DIR_PIN, clockwise);
long accel = min(steps / 4, 400L); // 1/4 quãng đường để tăng tốc
for (long i = 0; i < steps; i++) {
long remain = steps - i - 1;
long ramp = min(i, remain); // vị trí trong đoạn tăng/giảm tốc
ramp = min(ramp, accel);
// chu kỳ xung từ 1200 us (chậm) xuống 400 us (nhanh)
int halfPeriod = 1200 - (800 * ramp) / accel;
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(halfPeriod / 2);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(halfPeriod / 2);
}
}
void loop() {
moveSteps(3200, true); // 1 vòng ở vi bước 1/16
delay(1000);
moveSteps(3200, false);
delay(1000);
}Dự án thực tế nên dùng thư viện AccelStepper: quản lý tăng tốc, nhiều motor đồng thời, chạy không chặn vòng loop.
Mất bước - căn bệnh đặc trưng và cách trị
Stepper điều khiển vòng hở: nếu tải vượt mô-men, rotor trượt khỏi vị trí khóa từ mà driver không hề biết — máy vẽ lệch hình từ đó về sau. Nguyên nhân và cách trị:
- Tăng tốc quá gắt → dùng ramp như code trên, hoặc AccelStepper
- Vref chỉnh thấp → chỉnh lại đúng thông số motor
- Tốc độ vượt khả năng → mô-men stepper giảm mạnh theo tốc độ; giảm tốc độ đỉnh
- Cộng hưởng cơ khí ở tốc độ nhất định → tăng vi bước, tránh dải tốc độ cộng hưởng
- Nguồn motor yếu → 12V đủ dòng (NEMA17 x2 cần nguồn 3A trở lên)
Câu hỏi thường gặp
Stepper có thay được servo trong cánh tay robot không?
Được về độ chính xác (thậm chí tốt hơn), nhưng cần thêm: công tắc gốc (homing switch) để biết vị trí ban đầu sau mỗi lần bật nguồn, và stepper ăn dòng liên tục kể cả đứng yên. Cánh tay giáo dục nhẹ dùng servo đơn giản hơn nhiều; máy chính xác (máy vẽ, CNC) mới đáng dùng stepper.
Vì sao motor nóng dù đứng yên?
Bình thường với stepper — dòng giữ chạy liên tục để khóa vị trí. Nóng dưới 60 độ chấp nhận được; rát tay là Vref chỉnh cao quá. Tiết kiệm điện bằng chân EN: tắt driver khi không cần giữ lực.
28BYJ-48 dùng driver A4988 được không?
Mặc định không — 28BYJ-48 xuất xưởng là unipolar 5 dây, A4988 điều khiển bipolar 4 dây. Có mod cắt mạch trên motor để chuyển thành bipolar, nhưng người mới cứ dùng đúng bộ ULN2003 đi kèm cho lành.
Làm sao biết 4 dây NEMA17 dây nào với dây nào?
Đo thông mạch (hoặc điện trở ~1-5Ω) từng cặp: hai dây thông nhau là một cuộn. Cặp 1 vào 1A-1B, cặp 2 vào 2A-2B. Quay ngược chiều mong muốn? Đảo hai dây của MỘT cuộn là xong.
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.



