Atlas Robotics
Điều khiển động cơTrung bình

Stepper Motor là gì? Quay theo từng bước rời rạc, không cần feedback

Atlasbot · 16/8/2026 · 11 phút đọc

Stepper Motor là gì? Quay theo từng bước rời rạc, không cần feedback
Trình tự cấp điện 4 cuộn dây tạo từng bước quay

DC motor quay liên tục, muốn biết vị trí chính xác phải gắn thêm encoder. Stepper motor (động cơ bước) đi theo hướng ngược lại: động cơ chỉ quay theo từng bước rời rạc cố định mỗi khi nhận một xung điều khiển — nếu đếm đúng số xung đã gửi, về lý thuyết luôn biết chính xác vị trí trục mà không cần cảm biến phản hồi nào.

Khái niệm chính

Bên trong stepper có nhiều cặp cuộn dây (coil) bố trí quanh trục, mỗi cặp khi được cấp điện tạo ra một từ trường kéo rotor dừng ở đúng một vị trí góc cố định. Bằng cách cấp điện tuần tự cho các cặp cuộn dây theo đúng trình tự, rotor bị "kéo" quay từng bước nhỏ — một động cơ bước phổ biến có thể có 200 bước cho mỗi vòng quay (tức mỗi bước = 1.8°).

Full step, half step, và microstepping

  • Full step — cấp điện đúng trình tự cơ bản, mỗi lần chuyển bước là một bước đầy đủ (VD: 1.8°)
  • Half step — xen kẽ cấp điện 1 cuộn và 2 cuộn cùng lúc, tăng gấp đôi số bước, chuyển động mượt hơn
  • Microstepping — điều chỉnh dòng điện qua từng cuộn theo dạng sóng sin thay vì bật/tắt hoàn toàn, chia mỗi bước cơ khí thành hàng chục "vi bước" ảo, chuyển động cực mượt và êm, nhưng cần driver chuyên dụng hỗ trợ (VD: TMC2209)

Tóm lại: Stepper cho phép định vị chính xác theo kiểu open-loop (không cần cảm biến phản hồi) — miễn là không yêu cầu momen xoắn vượt quá khả năng động cơ ở tốc độ đang chạy, nếu không rotor sẽ "trượt" khỏi từ trường đang kéo nó, gọi là mất bước (step loss), và vị trí đếm được trên MCU sẽ sai lệch so với vị trí thật mà không có cách nào tự phát hiện nếu không có encoder bổ sung.

Nguyên lý hoạt động

Trình tự cấp điện cơ bản cho stepper 4 cuộn dây (bipolar, full step):

Bước 1:  Coil A ON,  Coil B OFF  → rotor dừng ở 0°
Bước 2:  Coil A OFF, Coil B ON   → rotor dừng ở 90°
Bước 3:  Coil A ON (đảo cực),   Coil B OFF → rotor dừng ở 180°
Bước 4:  Coil A OFF, Coil B ON (đảo cực)  → rotor dừng ở 270°

Trong thực tế, MCU không tự tạo trình tự này thủ công cho từng cuộn dây — luôn đi qua một driver chuyên dụng (A4988, DRV8825, TMC2209...), MCU chỉ cần gửi 2 tín hiệu đơn giản: STEP (mỗi xung = 1 bước) và DIR (chiều quay):

HAL_GPIO_WritePin(DIR_Port, DIR_Pin, GPIO_PIN_SET); // Chọn chiều quay

for (int i = 0; i < 200; i++) {   // 200 xung = 1 vòng quay đầy đủ (full step)
    HAL_GPIO_WritePin(STEP_Port, STEP_Pin, GPIO_PIN_SET);
    delay_us(500);
    HAL_GPIO_WritePin(STEP_Port, STEP_Pin, GPIO_PIN_RESET);
    delay_us(500);
}

Kiến thức kỹ thuật

Công thức

Tốc độ quay tính trực tiếp từ tần số xung STEP và số bước mỗi vòng (đã nhân thêm hệ số microstepping nếu có dùng):

Số bước hiệu dụng/vòng = Số bước cơ bản × hệ số microstepping
RPM = (Tần số xung STEP × 60) / Số bước hiệu dụng/vòng

VD: động cơ 200 bước/vòng (full step), microstepping 1/8, xung STEP ở tần số 1000Hz
Số bước hiệu dụng/vòng = 200 × 8 = 1600
RPM = (1000 × 60) / 1600 = 37.5 vòng/phút

Thông số

Thông số điển hình của stepper phổ biến trong máy in 3D/CNC/robot:

LoạiBước/vòng (full step)Torque giữ (holding torque)
NEMA17 (phổ biến nhất)200 (1.8°/bước)~40-60 N·cm
NEMA23 (công suất lớn hơn)200 (1.8°/bước)~100-300 N·cm

Driver A4988 chịu dòng tối đa ~1-2A/cuộn (thực tế nên dùng dưới mức này); TMC2209 hỗ trợ dòng tương tự nhưng hoạt động êm hơn nhiều nhờ thuật toán điều khiển dòng tinh vi hơn.

Register / Bit / Byte

Trên driver A4988, độ phân giải microstepping được chọn bằng 3 chân logic MS1/MS2/MS3 — tổ hợp 3 bit này (mỗi chân HIGH/LOW) chọn 1 trong 5 mức từ full step (1/1) tới 1/16 microstep, theo đúng bảng tra trong datasheet (VD: MS1=0, MS2=0, MS3=0 → full step; MS1=1, MS2=1, MS3=1 → 1/16 step). Một số driver hiện đại hơn như TMC2209 còn có thể cấu hình chi tiết hơn (dòng giới hạn, độ phân giải, chế độ êm) qua giao diện UART cấu hình 1 dây riêng biệt với tín hiệu STEP/DIR chính, cho phép tinh chỉnh không cần đổi cầu nối vật lý trên board.

Ứng dụng thực tế

Stepper phù hợp cho các trục định vị cần độ chính xác cao và tải trọng dự đoán được trước — VD: cơ cấu nâng hạ (lift mechanism) trên robot AMR chở hàng dạng băng chuyền, nơi cần dừng chính xác ở nhiều mức độ cao cố định mà không cần cảm biến vị trí liên tục, hoặc trục xoay gắn cảm biến/camera cần quét theo góc chính xác định trước. Với bánh xe di chuyển của một AMR (tải trọng thay đổi liên tục tuỳ địa hình, cần phản hồi tốc độ thực), DC motor kết hợp encoder và PID vẫn là lựa chọn phù hợp hơn — đây là ranh giới quyết định chọn stepper hay DC motor cho từng khớp cụ thể trên robot.

Ví dụ thực tế

#include <stdio.h>

int main() {
    int base_steps = 200;
    int microstep[] = {1, 2, 4, 8, 16};
    float step_freq = 1000.0;   // Hz

    for (int i = 0; i < 5; i++) {
        int steps_per_rev = base_steps * microstep[i];
        float rpm = (step_freq * 60) / steps_per_rev;
        printf("1/%2d step: %d buoc/vong -> %.2f RPM (cung tan so xung)\n",
               microstep[i], steps_per_rev, rpm);
    }
    return 0;
}
Output:
1/ 1 step: 200 buoc/vong -> 300.00 RPM (cung tan so xung)
1/ 2 step: 400 buoc/vong -> 150.00 RPM (cung tan so xung)
1/ 4 step: 800 buoc/vong -> 75.00 RPM (cung tan so xung)
1/ 8 step: 1600 buoc/vong -> 37.50 RPM (cung tan so xung)
1/16 step: 3200 buoc/vong -> 18.75 RPM (cung tan so xung)

Cùng một tần số xung STEP (1000Hz), RPM thực tế giảm dần khi tăng hệ số microstepping — vì cần nhiều xung hơn để hoàn thành 1 vòng quay đầy đủ. Đây là đánh đổi cần nhớ: microstepping cho chuyển động mượt hơn nhưng để đạt cùng tốc độ quay, cần tần số xung STEP cao hơn tương ứng.

Lỗi thường gặp

  • Mất bước (step loss) do gia tốc quá nhanh hoặc tải vượt khả năng động cơ — như đã nói ở phần Khái niệm chính, khi rotor không theo kịp từ trường đang kéo, vị trí đếm được trên MCU sẽ sai lệch vĩnh viễn so với vị trí thật cho tới khi được "reset" lại (VD: homing về công tắc giới hạn) — cần tăng tốc/giảm tốc dần (ramp up/down) thay vì đổi tốc độ đột ngột.
  • Không giới hạn dòng điện trên driver đúng mức — hầu hết driver có biến trở/thanh ghi để giới hạn dòng tối đa cấp cho cuộn dây; đặt quá cao gây nóng động cơ/driver, đặt quá thấp khiến động cơ thiếu lực và dễ mất bước hơn.
  • Driver không có tản nhiệt khi chạy dòng cao liên tục — các IC driver như A4988 tự giảm dòng hoặc tắt hoàn toàn (thermal shutdown) khi quá nhiệt, biểu hiện thành động cơ đột ngột yếu đi hoặc dừng hẳn giữa chừng.
  • Cấu hình sai chân MS1/MS2/MS3 — chọn nhầm tổ hợp mức logic dẫn tới hệ số microstepping khác với dự tính trong code, khiến tốc độ/quãng đường thực tế sai lệch so với tính toán dù code hoàn toàn đúng logic.

Kết luận

Stepper motor cho phép định vị chính xác kiểu open-loop mà không cần cảm biến phản hồi — phù hợp cho trục định vị tải trọng dự đoán được, đổi lại rủi ro mất bước nếu vượt quá khả năng động cơ. Luôn tính đúng RPM theo tần số xung và hệ số microstepping, và giới hạn dòng điện driver đúng mức trước khi vận hành lâu dài. Bài tiếp theo trong chuyên mục nói về PID — thuật toán điều khiển phản hồi dùng để giữ tốc độ DC motor ổn định, điều mà stepper không cần nhưng DC motor bắt buộc phải có.

Stepper Motor là gì? Quay theo từng bước rời rạc, không cần feedback — Atlasbot