Điều khiển động cơ

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

7 phút đọc05/07/2026HocLapTrinhRobot
Độ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 + ULN2003NEMA17 + A4988
Điện áp5V12-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.cm4-5 kg.cm (loại 42x40)
Tốc độ tối đa~15 vòng/phútvài trăm vòng/phút
Giá cả bộ~35.000 đ~200.000-320.000 đ
Phù hợpHọ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ốA4988DRV8825
Dòng tối đa (có tản nhiệt)2 A2.5 A
Vi bước tối đa1/161/32
Áp motor8-35V8.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):

  1. 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
  2. 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ở
  3. 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 A4988Nối vớiGhi chú
VMOT, GNDNguồn 12V + tụ 100 µFTụ sát chân — bảo vệ driver khỏi xung áp
VDD, GND3V3 ESP32Nguồn logic
STEPGPIO 26Mỗi xung = 1 (vi) bước
DIRGPIO 27HIGH/LOW = hai chiều
ENGPIO 25 (hoặc nối GND)LOW = bật driver
MS1-MS33V3 hoặc GNDChọn vi bước
SLEEP + RESETNối với nhauBắt buộc nếu không điều khiển riêng
1A 1B 2A 2B4 dây motorMỗ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:

cpp
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.

Tải PDF
Chia sẻ bài viết