0968140191Miền Nam
0975897066Miền Bắc

Điều khiển động cơ bước lưỡng cực: STEP/DIR, vi bước, băm dòng và cấu hình driver TMC

Viết bởi: Vũ Hồng Phúc
Vũ Hồng Phúc
Vũ Hồng Phúc, sinh năm 1985, sau khi tốt nghiệp cử nhân tại Đại Học Bách Khoa Hà Nội, Vũ Hồng Phúc đã tự mình khám phá thế giới qua việc du học tại EF Language School London và nhiều trường đại học khác. Tích lũy kinh nghiệm trong nhiều năm, anh quyết định trở về đất nước. Vũ Hồng Phúc đã hướng đến mục tiêu phát triển Dongco3pha.com là thương hiệu "Động cơ điện" hàng đầu Việt Nam. Trong nhiều năm liền danh liên tục mang lại nhiều thành tựu cho doanh nghiệp và đóng góp nhiều giải pháp tối ưu về chế tạo máy, chế tạo động cơ giảm tốc, động cơ điện.
14 thg 10 2026 14:51

Điều khiển động cơ bước lưỡng cực là việc tạo ra dòng điện đảo chiều có kiểm soát trong hai cuộn pha A và B, theo đúng trình tự và đúng biên độ, để rôto đi từng bước hoặc từng vi bước tới vị trí mong muốn. Trong thực tế, phần lớn hệ thống hiện nay không tự đóng cắt cầu H bằng vi điều khiển nữa mà giao việc đó cho một IC driver chuyên dụng (A4988, DRV8825, TMC2209, TMC5160…); bộ điều khiển phía trên chỉ cần phát hai tín hiệu STEP (mỗi xung là một bước) và DIR (chiều quay), đồng thời tính toán tốc độ, gia tốc cho đúng.

Chất lượng chuyển động – êm hay rung, khỏe hay mất bước, chính xác hay trôi vị trí – phụ thuộc phần lớn vào cách điều khiển chứ không chỉ vào motor: bảng dòng vi bước, chế độ băm dòng (decay), tần số xung, profile gia tốc và cấu hình thanh ghi của driver. Các mục dưới đây đi theo đúng thứ tự một người lắp máy CNC mini, máy in 3D, bàn trượt hay thiết bị tự động hóa nhỏ sẽ gặp: từ tín hiệu, trình tự dòng, chọn IC, đến lập trình và về gốc không cần công tắc.

Phần nguyên lý cuộn dây, cầu H, cách đấu motor 8 dây, chọn điện áp nguồn theo điện cảm và cộng hưởng cơ học đã có trong bài động cơ bước lưỡng cực; bài này chỉ tập trung vào kỹ thuật điều khiển.

1. Sơ đồ khối một hệ điều khiển động cơ bước lưỡng cực

Một hệ điều khiển động cơ bước lưỡng cực luôn gồm bốn tầng: bộ tạo quỹ đạo (vi điều khiển, firmware GRBL/Marlin/Klipper, PLC ngõ ra xung hoặc card Mach3) tính vị trí, tốc độ, gia tốc và xuất chuỗi xung; driver nhận STEP/DIR, tra bảng vi bước và băm dòng; tầng công suất gồm hai cầu H, điện trở đo dòng, tụ lọc; cuối cùng là motor cùng cơ khí truyền động. Tổng quan các loại motor dùng trong hệ này có ở trang động cơ bước.

Phân tầng giúp tìm lỗi nhanh: motor rung đều ở mọi tốc độ thường do tầng driver (dòng, decay, dây pha); chạy đúng ở tốc thấp nhưng mất bước khi tăng tốc thường do bộ tạo quỹ đạo (gia tốc quá gắt, xung không đều) hoặc motor hết mô-men; vị trí lệch dần mà không nghe tiếng mất bước thường do nhiễu trên dây STEP. Khi cần phản hồi vị trí thật, có thể thay cụm driver và motor bằng motor servo nhận cùng kiểu tín hiệu xung.

2. Giao tiếp STEP/DIR/ENABLE và yêu cầu thời gian

Giao tiếp STEP/DIR là chuẩn trên thực tế cho mọi driver động cơ bước lưỡng cực: mỗi cạnh lên của chân STEP làm driver tiến thêm một vi bước trong bảng dòng, mức logic chân DIR quyết định tiến hay lùi trong bảng, còn chân ENABLE bật hoặc tắt tầng công suất.

Thông số thời gian của các IC phổ biến

Thông sốA4988DRV8825TMC2208/2209
Độ rộng xung STEP mức cao tối thiểu1 µs1,9 µskhoảng 100 ns
Độ rộng mức thấp tối thiểu1 µs1,9 µskhoảng 100 ns
DIR phải ổn định trước cạnh STEP200 ns650 nskhoảng 20 ns
Tần số STEP tối đa theo datasheetkhoảng 500 kHz250 kHzvài MHz (bị giới hạn bởi vi điều khiển)
Chân ENABLEtích cực mức thấptích cực mức thấptích cực mức thấp

Trong thực tế giới hạn nằm ở bộ phát xung: Arduino Uno dùng thư viện phổ thông chỉ phát ổn định vài nghìn xung/giây, PLC ngõ ra transistor phổ biến ở mức 100 kHz. Khi dùng ngõ ra PLC hoặc card cách ly, cách đấu tín hiệu chung dương hay chung âm và điện trở hạn dòng được trình bày riêng ở bài điều khiển động cơ bước bằng PLC và bài mạch điều khiển TB6600.

Tính tần số xung cần thiết

Tần số xung (Hz) = tốc độ (vòng/phút) × số bước gốc/vòng × hệ số vi bước ÷ 60. Ví dụ motor 1,8° (200 bước/vòng) chạy 300 vòng/phút ở vi bước 1/32 cần 300 × 200 × 32 ÷ 60 = 32.000 xung/giây. Nếu bộ điều khiển chỉ phát được 10 kHz thì ở 1/32 tốc độ tối đa chỉ còn khoảng 94 vòng/phút; muốn nhanh hơn phải giảm vi bước hoặc dùng driver có nội suy (mục 4).

Thứ tự thao tác đúng

  • Đổi mức DIR, chờ ít nhất vài micro giây rồi mới phát xung STEP tiếp theo; đổi DIR giữa lúc đang phát xung làm sai một bước mỗi lần đảo chiều, sai số cộng dồn sau nhiều chu kỳ đi về.
  • Bật ENABLE trước khi phát xung khoảng 1–5 ms để dòng kịp xác lập; với TMC chạy StealthChop, lần bật đầu tiên cần motor đứng yên để driver tự dò thông số.
  • Đặt ENABLE ở mức tắt khi khởi động vi điều khiển (điện trở kéo lên), tránh motor giật khi chân GPIO còn trôi.

Điều khiển động cơ bước lưỡng cực size 57 ra 8 dây màu, đấu thành hai cuộn A và B vào driver STEP/DIR

Mức logic 3,3 V và 5 V

A4988 và DRV8825 chấp nhận logic 3,3 V nên ESP32, STM32, Raspberry Pi Pico nối trực tiếp được; TMC2208/2209 lấy mức logic theo chân VIO, cấp 3,3 V hay 5 V tùy vi điều khiển. Module công nghiệp có opto thường thiết kế cho 5 V; với tín hiệu 3,3 V cần kiểm tra dòng kích LED opto (thường cần 7–16 mA) hoặc thêm tầng đệm 74HCT245. Các trường hợp cấp nguồn motor và logic chỉ bằng 5 V nằm ở bài điều khiển động cơ bước 5 V.

3. Trình tự dòng full step, half step và vi bước sin-cos

Muốn điều khiển động cơ bước lưỡng cực tốt cần hiểu driver đang làm gì sau mỗi xung STEP: nó nhảy sang một hàng trong bảng dòng và đặt dòng cuộn A, cuộn B theo hàng đó. Chiều dòng (dấu + hoặc −) do cầu H quyết định, độ lớn do bộ băm dòng quyết định.

Full step hai pha cùng kích (4 trạng thái/chu kỳ điện)

BướcDòng cuộn ADòng cuộn BGóc vector từ trường
1+70,7 %+70,7 %45°
2−70,7 %+70,7 %135°
3−70,7 %−70,7 %225°
4+70,7 %−70,7 %315°

Lưu ý: driver vi bước khi đặt chế độ full step thường cấp 70,7 % dòng đặt cho mỗi cuộn để tổng vector bằng 100 %. Mạch cầu H trần như L298N lại cấp đủ 100 % cho cả hai cuộn nên mô-men full step lớn hơn khoảng 1,4 lần nhưng motor nóng gấp đôi – chi tiết ở bài điều khiển động cơ bước dùng L298.

Half step (8 trạng thái/chu kỳ điện)

BướcDòng cuộn ADòng cuộn BGóc vector
1+100 %00°
2+70,7 %+70,7 %45°
30+100 %90°
4−70,7 %+70,7 %135°
5−100 %0180°
6−70,7 %−70,7 %225°
70−100 %270°
8+70,7 %−70,7 %315°

Vi bước sin-cos

Ở vi bước, dòng hai cuộn được đặt theo IA = Imax × cos θ và IB = Imax × sin θ, trong đó θ tăng đều 90°/n mỗi vi bước (n là hệ số chia: 4, 8, 16, 32…). Ví dụ vi bước 1/4 trong một phần tư chu kỳ:

Vi bướcGóc θDòng cuộn A (cos θ)Dòng cuộn B (sin θ)
00°100 %0 %
122,5°92,4 %38,3 %
245°70,7 %70,7 %
367,5°38,3 %92,4 %
490°0 %100 %

Driver lưu sẵn bảng này trong ROM: A4988 có 16 mức cho một phần tư chu kỳ, DRV8825 có 32 mức, dòng TMC có 256 mức và cho phép nạp bảng tùy chỉnh (thanh ghi MSLUT) để bù méo của từng loại motor. Vi bước làm chuyển động mịn và giảm tiếng ồn, nhưng mô-men tăng thêm cho mỗi vi bước rất nhỏ, nên vị trí vi bước dưới tải không chính xác như con số độ phân giải – vấn đề này phân tích kỹ ở bài động cơ bước độ chính xác cao.

4. Băm dòng (chopper) và các chế độ decay

Motor lưỡng cực thường có điện trở cuộn chỉ 1–3 Ω nhưng được cấp nguồn 12–48 V, cao hơn nhiều lần điện áp định mức. Để không cháy cuộn, driver dùng phương pháp băm dòng (chopper): đóng cầu H cho dòng tăng, đo dòng qua điện trở sense, khi chạm ngưỡng đặt thì ngắt hoặc đảo cầu một khoảng thời gian ngắn (off-time) cho dòng giảm, rồi lặp lại ở tần số khoảng 20–50 kHz. Cách dòng giảm trong pha "off" chính là chế độ decay.

Chế độ decayCầu H trong pha offDòng giảmƯu điểmNhược điểm
Slow decayHai khóa phía dưới (hoặc trên) cùng dẫn, cuộn tự ngắn mạchChậmGợn dòng nhỏ, motor êm, ít tổn haoKhông bám kịp khi dòng đặt cần giảm nhanh, méo sin ở tốc cao
Fast decayĐảo cầu, đẩy năng lượng về nguồnNhanhBám dòng đặt tốt khi giảmGợn dòng lớn, ồn, nóng
Mixed decayĐầu pha off chạy fast, phần sau chạy slowTrung bìnhDung hòa, dùng cho đa số motorTỉ lệ fast/slow chưa hợp motor thì vẫn rung
Thích nghi (auto/smart)Driver tự đo và chỉnh tỉ lệTùy tình huốngÍt phải chỉnh tayChỉ có ở IC đời mới

Dấu hiệu decay chưa phù hợp

  • Motor kêu "rè" hoặc rít đều ở tốc độ thấp, dòng đo được méo phẳng ở gần điểm qua 0: thiếu fast decay, thường gặp với motor điện cảm cao.
  • Motor ồn, nóng hơn bình thường dù dòng đặt đúng: quá nhiều fast decay, gợn dòng lớn.
  • Rung tăng mạnh ở một dải tốc độ trung bình dù cơ khí chắc chắn: thử đổi chế độ decay trước khi đổi motor.

Trên DRV8825, chân DECAY để hở là mixed decay, nối mức thấp là slow, mức cao là fast; nhiều module bán sẵn để chân này hở. A4988 tự chọn mixed decay khi dòng đặt đang giảm và slow decay khi dòng đặt đang tăng. Dòng TMC dùng thuật toán SpreadCycle với các tham số TOFF, HSTRT, HEND, TBL chỉnh qua UART/SPI; giá trị mặc định của thư viện chạy ổn với đa số motor NEMA 17, cách đặt dòng Vref cho từng module cũng nằm ở bài đó.

5. Chọn IC driver cho động cơ bước lưỡng cực

Việc chọn IC quyết định gần như toàn bộ chất lượng điều khiển động cơ bước lưỡng cực. Bảng dưới so sánh các IC thông dụng nhất ở mức module (giá trị đỉnh theo datasheet; mức dùng thực tế không tản nhiệt chủ động thấp hơn).

ICDải nguồn motorDòng thực dùngVi bướcGiao tiếp cấu hình
A49888–35 Vkhoảng 1 A/pha (2 A đỉnh)đến 1/16Chân MS1–MS3
DRV88258,2–45 Vkhoảng 1,5 A/pha (2,5 A đỉnh)đến 1/32Chân MODE0–2, DECAY
TMC22084,75–36 Vkhoảng 1,2 A RMS1/2–1/256, nội suy 256Chân hoặc UART
TMC22094,75–29 Vkhoảng 2 A RMS (module thực tế 1,2–1,7 A)1/2–1/256, nội suy 256UART địa chỉ, có StallGuard4
TMC51608–60 Vđến 3 A RMS trở lên, tùy MOSFET ngoài1/256SPI, có bộ tạo profile tích hợp

Gợi ý chọn theo tình huống

  • Học tập, thử nghiệm, máy nhỏ dùng Arduino: A4988 hoặc DRV8825 đủ dùng, rẻ, dễ thay. Nhược điểm chính là ồn và rung ở tốc thấp.
  • Máy in 3D, máy khắc laser, camera slider cần êm: TMC2209 chạy StealthChop gần như im lặng, cấu hình được bằng UART, có về gốc không công tắc.
  • Máy CNC mini nguồn 36–48 V, motor NEMA 23 dòng 2,5–4 A: TMC5160 (module SPI) hoặc driver hộp rời. Khi motor lớn hơn hoặc cần cách ly hoàn toàn, dùng driver công nghiệp dạng hộp như TB6600 hay dòng DM, xem bài động cơ bước 2 pha để ghép bộ motor – driver – nguồn.
  • Thiết bị chạy pin, nguồn 5 V: loại trừ A4988 và DRV8825 vì cần tối thiểu khoảng 8 V; chọn TMC2208/2209 hoặc DRV8833.

Cảnh báo khi dùng module driver

  • Không cắm hoặc rút dây motor khi driver đang có nguồn: điện áp cảm ứng có thể phá cầu H ngay lập tức.
  • Gắn tụ điện phân 47–100 µF sát chân nguồn motor của module, nhất là khi dây nguồn dài; xung điện áp lúc cấp nguồn là nguyên nhân hỏng module rất phổ biến.
  • Cắm module ngược chiều trên board máy in 3D gần như chắc chắn cháy cả module và có thể hỏng vi điều khiển; đối chiếu chân EN/GND trước khi cấp điện.

6. StealthChop và SpreadCycle trên driver TMC

Hai chế độ này là lý do driver TMC phổ biến khi điều khiển động cơ bước lưỡng cực cần êm. Hiểu đúng khi nào dùng chế độ nào giúp tránh hiện tượng motor đang chạy êm thì mất bước khi tải nặng.

Tiêu chíStealthChopSpreadCycle
Nguyên lýĐiều chế điện áp PWM, dòng điều khiển gián tiếpBăm dòng theo chu kỳ, đo dòng trực tiếp
Độ ồnGần như im lặng ở tốc thấp và trung bìnhCó tiếng rít nhẹ
Mô-men ở tốc caoGiảm sớm hơn, dễ mất bước khi tải đổi đột ngộtGiữ mô-men tốt, phản ứng tải nhanh
Về gốc không công tắc (TMC2209)Có (StallGuard4 chỉ hoạt động ở chế độ này)Không

Chuyển chế độ tự động theo tốc độ

Thanh ghi TPWMTHRS đặt ngưỡng tốc độ: dưới ngưỡng driver chạy StealthChop, trên ngưỡng chuyển sang SpreadCycle. Giá trị so sánh là TSTEP – khoảng thời gian giữa hai vi bước đo bằng chu kỳ xung nhịp 12 MHz – nên tốc độ càng cao thì TSTEP càng nhỏ. Cách dùng phổ biến: chạy êm khi in hoặc di chuyển chậm, chuyển SpreadCycle khi chạy không tải tốc độ cao.

Lưu ý khi dùng StealthChop

  • Sau khi bật nguồn, motor phải đứng yên ít nhất khoảng 130 ms có dòng giữ để driver tự đo điện trở cuộn (bước dò tự động AT#1), sau đó chạy vài vòng ở tốc độ vừa phải để hoàn tất bước AT#2.
  • Đổi điện áp nguồn hoặc đổi motor thì nên khởi động lại để driver dò lại, nếu không dòng có thể sai và motor yếu.
  • Tải có quán tính lớn, tăng tốc gắt (trục X/Y máy CNC) dễ mất bước ở StealthChop: đặt ngưỡng TPWMTHRS thấp hoặc dùng hẳn SpreadCycle.

7. Cấu hình driver TMC2208/TMC2209 qua UART

Không có UART, TMC2209 chỉ chạy được vài chế độ cài cứng bằng chân MS1/MS2 (1/8, 1/16, 1/32, 1/64, tất cả có nội suy lên 1/256) và dòng đặt bằng biến trở Vref. Có UART, gần như mọi thông số đều chỉnh được bằng phần mềm, kể cả lúc máy đang chạy.

Đấu UART một dây

Chân TMC2209Nối tớiGhi chú
PDN_UARTRX của vi điều khiển, và qua điện trở 1 kΩ tới TXUART bán song công một dây
MS1, MS2GND hoặc VIOChọn địa chỉ 0–3, cho phép 4 driver chung một đường UART
DIAGNgõ vào ngắt của vi điều khiểnBáo kẹt trục khi dùng StallGuard
VIO3,3 V hoặc 5 VPhải cùng mức logic với vi điều khiển
ENGPIO, kéo lên khi khởi độngMức thấp là chạy

TMC2208 không có địa chỉ, mỗi driver cần một đường UART riêng (hoặc dùng UART mềm). Tốc độ truyền phổ biến 115.200 baud; driver tự nhận tốc độ baud.

Các thông số thường chỉnh qua thư viện TMCStepper

  • rms_current(dòng mA): đặt dòng hiệu dụng bằng phần mềm thay cho xoay biến trở, thường đặt 70–85 % dòng định mức motor.
  • en_spreadCycle(false/true): chọn StealthChop hay SpreadCycle.
  • TPWMTHRS: ngưỡng chuyển chế độ theo tốc độ như mục 6.
  • ihold, iholddelay: dòng giữ khi đứng yên và thời gian chuyển từ dòng chạy sang dòng giữ.

Kiểm tra UART đã thông chưa

Cách nhanh nhất là đọc thanh ghi trạng thái (ví dụ test_connection hoặc đọc phiên bản IC). Nếu đọc về 0 hoặc 0xFF: kiểm tra điện trở 1 kΩ, mức VIO, chân PDN trên module đã được nối jumper chưa (một số module mặc định chân này không ra ngoài) và địa chỉ MS1/MS2 có khớp với khai báo trong code.

8. StallGuard: về gốc không cần công tắc hành trình

StallGuard là tính năng của driver TMC đo tải trên motor thông qua back-EMF; khi trục bị chặn cứng (chạm cữ cơ khí), giá trị đo giảm mạnh và driver kéo chân DIAG lên để báo. Nhờ vậy có thể điều khiển động cơ bước lưỡng cực về gốc (homing) mà không cần công tắc hành trình – giảm dây, giảm linh kiện trên máy in 3D, máy khắc laser, rèm tự động, cơ cấu kẹp.

Các thanh ghi chính trên TMC2209

Thanh ghiÝ nghĩaCách đặt thực tế
SGTHRS (0–255)Ngưỡng nhạy; báo kẹt khi SG_RESULT ≤ 2 × SGTHRSBắt đầu khoảng 50–100, tăng dần nếu không nhận kẹt
SG_RESULTGiá trị tải đo được, càng nhỏ càng nặng tảiĐọc trong lúc chạy không tải để biết mức nền
TCOOLTHRSTốc độ thấp nhất mà StallGuard được phép hoạt độngĐặt lớn hơn TSTEP ở tốc độ về gốc
TPWMTHRSNgưỡng chuyển sang SpreadCyclePhải để tốc độ về gốc nằm trong vùng StealthChop

Trình tự chỉnh StallGuard

  • Cho motor chạy ở tốc độ về gốc dự kiến (thường 20–60 mm/s trên máy in 3D, tương đương vài vòng/giây), đọc SG_RESULT khi chạy tự do để có mức nền.
  • Đặt SGTHRS sao cho 2 × SGTHRS thấp hơn mức nền một khoảng an toàn; chặn trục bằng tay để thử, chân DIAG phải lên mức cao ngay.
  • Nếu motor dừng giữa chừng khi chưa chạm cữ: giảm SGTHRS. Nếu đâm vào cữ và kêu lạch cạch mà không dừng: tăng SGTHRS hoặc tăng tốc độ về gốc.

Giới hạn cần biết

  • StallGuard không hoạt động ở tốc độ quá thấp (back-EMF quá nhỏ) và kém tin cậy ở tốc độ quá cao; về gốc chậm như công tắc cơ khí là không dùng được.
  • Độ lặp lại điểm gốc thường kém công tắc quang hoặc công tắc cơ chất lượng tốt; với máy cần gốc chính xác cỡ 0,01 mm, vẫn nên dùng cảm biến.
  • Trục có hộp số tỉ số lớn, vít me trục vít tự hãm hoặc tải nặng theo phương đứng làm StallGuard khó phân biệt kẹt và tải thường.

Trên TMC5160 và TMC2130, StallGuard2 hoạt động ở chế độ SpreadCycle với thanh ghi SGT (giá trị có dấu từ −64 đến +63) thay cho SGTHRS; nguyên tắc chỉnh tương tự nhưng chiều ngược lại: giá trị càng thấp càng nhạy.

9. Gia tốc hình thang và S-curve khi điều khiển động cơ bước lưỡng cực

Động cơ bước không thể nhảy tức thời từ đứng yên lên tốc độ cao: nếu tần số xung đầu tiên đã vượt tần số kéo vào (pull-in) của motor và tải, rôto không theo kịp, motor rung và đứng tại chỗ. Vì vậy bộ điều khiển phải tăng tần số xung dần theo một profile vận tốc.

Profile hình thang

Vận tốc tăng tuyến tính với gia tốc a không đổi, chạy đều, rồi giảm tuyến tính. Các công thức hay dùng:

  • Số bước cần để tăng tốc từ 0 lên v: n = v² ÷ (2 × a), với v tính bằng bước/giây, a bằng bước/giây².
  • Ví dụ: v = 8.000 bước/s, a = 40.000 bước/s² thì n = 64.000.000 ÷ 80.000 = 800 bước, mất 0,2 giây.
  • Nếu quãng đường ngắn hơn 2n, motor không kịp đạt tốc độ đặt: profile thành hình tam giác, điểm đổi chiều gia tốc nằm ở giữa quãng đường.
  • Khoảng cách giữa hai xung trong pha tăng tốc giảm dần; các thư viện dùng công thức gần đúng truy hồi để tính nhanh mà không cần khai căn ở mỗi bước.

Profile S-curve (giới hạn jerk)

S-curve làm gia tốc tăng giảm dần thay vì nhảy bậc. Ưu điểm: giảm rung khi dừng, giảm dao động đầu công cụ, giảm vết gợn trên chi tiết in 3D hoặc cắt laser, giảm tải sốc lên đai và hộp giảm tốc. Nhược điểm: với cùng gia tốc tối đa, thời gian di chuyển dài hơn hình thang khoảng 10–30 %, và tính toán nặng hơn cho vi điều khiển 8 bit.

Chọn gia tốc ban đầu

  • Bắt đầu với gia tốc thấp, tăng dần 20 % mỗi lần cho tới khi motor mất bước, rồi lùi lại còn khoảng 60–70 % giá trị đó để có dự phòng.
  • Tải quán tính lớn (đĩa xoay, bàn trượt nặng) cần gia tốc nhỏ hơn hẳn tải nhẹ dù cùng motor; nếu vẫn thiếu, cân nhắc thêm tỉ số truyền bằng động cơ bước có hộp số.
  • Tốc độ khởi động (không cần tăng tốc) nên giữ dưới khoảng 1–2 vòng/giây với motor NEMA 17, NEMA 23 thông dụng.

10. Thư viện lập trình: AccelStepper, FastAccelStepper, TMCStepper

Với Arduino và ESP32, ba thư viện dưới đây đủ cho hầu hết dự án điều khiển động cơ bước lưỡng cực bằng driver STEP/DIR.

Thư việnVai tròTốc độ xung thực tếĐiểm cần lưu ý
AccelStepperPhát xung có gia tốc hình thang, điều khiển nhiều motorKhoảng 4.000 bước/s trên Arduino 16 MHzPhải gọi run() liên tục trong loop, không được dùng delay()
FastAccelStepperPhát xung bằng timer/ngắt phần cứngKhoảng 50 kHz trên AVR, cao hơn nhiều trên ESP32Chỉ dùng được các chân hỗ trợ timer; giới hạn số motor theo chip
TMCStepperCấu hình thanh ghi TMC qua UART/SPIKhông phát xungKết hợp với một trong hai thư viện trên

Các bước tối thiểu với AccelStepper

  • Khai báo kiểu driver STEP/DIR: AccelStepper motor(AccelStepper::DRIVER, chân STEP, chân DIR).
  • Đặt tốc độ tối đa và gia tốc: setMaxSpeed(2000), setAcceleration(4000) – đơn vị là bước/giây và bước/giây².
  • Ra lệnh vị trí bằng moveTo() hoặc move(), rồi gọi run() mỗi vòng loop; hàm này tự phát xung khi đến lúc.
  • Chân EN dùng setEnablePin() và setPinsInverted() vì đa số driver tích cực mức thấp.

Lỗi lập trình hay gặp

  • Dùng delay() hoặc Serial.print dài trong loop khiến run() không được gọi đúng lúc: motor giật, chạy chậm hơn đặt, phát tiếng lạch cạch.
  • Dùng setSpeed() và runSpeed() khi muốn có gia tốc: hai hàm này chạy tốc độ không đổi, không tăng tốc, nên motor đứng nếu tốc độ đặt cao.
  • Quên khai báo hệ số vi bước khi đổi từ đầu vào jumper: số bước/mm trong firmware phải nhân theo, nếu không trục đi sai tỉ lệ đúng bằng hệ số đó.

Với máy CNC, máy in 3D, nên dùng firmware sẵn có (GRBL cho Arduino Uno, FluidNC cho ESP32, Marlin hoặc Klipper cho máy in) thay vì tự viết, vì chúng đã có lập kế hoạch chuyển động nhiều trục, look-ahead và cấu hình TMC đầy đủ.

11. Chống trôi vị trí, nhiễu và xử lý sự cố khi vận hành

Điều khiển động cơ bước lưỡng cực ổn định trong máy thật còn cần chống trôi vị trí và chống nhiễu.

Đếm vị trí và chống trôi

Vòng hở nghĩa là bộ điều khiển chỉ biết vị trí theo số xung đã phát. Nên có ít nhất một điểm gốc mỗi lần khởi động; với chu kỳ dài (máy đóng gói chạy liên tục nhiều giờ), có thể đặt thêm cảm biến kiểm tra định kỳ ở một vị trí cố định để phát hiện mất bước sớm. Khi không chấp nhận mất bước, dùng driver vòng kín có encoder hoặc chuyển hẳn sang motor servo 400 W cho các trục tải lớn.

Nhiễu tín hiệu STEP

  • Dùng cáp xoắn đôi hoặc cáp có lưới chống nhiễu cho STEP/DIR khi dây dài trên khoảng 1 m, đi tách xa dây pha motor và dây nguồn biến tần, dây motor 3 pha trong tủ điện.
  • Xung nhiễu tạo thêm vi bước giả làm vị trí trôi dần mà không nghe tiếng mất bước; dấu hiệu là sai số luôn lệch về một phía.
  • Tách mass logic và mass công suất, nối chung tại một điểm gần nguồn để tránh dòng motor chạy qua mass tín hiệu.

Họ động cơ bước lưỡng cực nhiều size và bản có hộp số dùng chung driver STEP/DIR trong điều khiển chuyển động

Bảng xử lý nhanh sự cố khi điều khiển

Hiện tượngNguyên nhân thường gặpCách xử lý
Motor có giữ lực nhưng không quay khi phát xungChân SLEEP/RESET để hở (A4988), ENABLE sai mức, xung quá ngắnNối SLEEP với RESET, kiểm tra mức EN, kéo dài xung STEP
Motor quay đúng chiều nhưng quãng đường gấp đôi hoặc một nửaHệ số vi bước trên driver khác khai báo trong codeĐồng bộ jumper/thanh ghi vi bước với số bước/mm
Đảo chiều thì lệch dần sau nhiều chu kỳDIR đổi quá sát cạnh STEPThêm thời gian chờ sau khi đổi DIR
Chạy êm, tăng tốc là đứngGia tốc quá cao, tần số khởi động quá lớnGiảm gia tốc, thêm pha tăng tốc
Motor rít ở tốc thấp, êm ở tốc caoDecay chưa phù hợp, dòng quá caoĐổi chế độ decay, giảm dòng 10–20 %

12. Câu hỏi thường gặp về điều khiển động cơ bước lưỡng cực

  • Có thể điều khiển động cơ bước lưỡng cực trực tiếp bằng chân Arduino không? Không. Chân GPIO chỉ cấp được khoảng 20–40 mA và không đảo chiều dòng được; cuộn motor cần hàng trăm mA đến vài ampe, dòng đảo chiều qua cầu H. Luôn cần ít nhất một driver cầu H kép, tốt nhất là IC có băm dòng như A4988, DRV8825 hay TMC2209.
  • Xung STEP có cần đúng tỉ lệ 50 % mức cao, 50 % mức thấp không? Không cần. Driver chỉ đếm cạnh lên, miễn là độ rộng mức cao và mức thấp đều lớn hơn giá trị tối thiểu (1 µs với A4988, 1,9 µs với DRV8825). Nhiều bộ điều khiển phát xung cao vài micro giây cố định, phần thấp thay đổi theo tốc độ.
  • Vì sao đặt vi bước 1/256 mà motor vẫn không chạy mượt hơn 1/16 trên TMC2209? Khi bật nội suy, TMC2209 đã tự chia mỗi vi bước 1/16 thành 1/256 bên trong, nên chuyển động gần như giống nhau. Đặt 1/256 thật chỉ làm tần số xung cần phát tăng 16 lần, dễ vượt khả năng vi điều khiển.
  • StealthChop hay SpreadCycle tốt hơn cho máy CNC mini? Trục X/Y của CNC phay chịu lực cắt thay đổi nên SpreadCycle an toàn hơn vì giữ mô-men và phản ứng tải tốt. StealthChop hợp khi cần im lặng và tải nhẹ, đều; có thể kết hợp bằng ngưỡng TPWMTHRS để chạy êm ở tốc thấp và chuyển SpreadCycle khi chạy nhanh.
  • TMC2209 về gốc bằng StallGuard có thay hoàn toàn công tắc hành trình được không? Với máy in 3D, máy khắc laser, rèm tự động, cơ cấu không cần gốc quá chính xác thì được. Với máy cần lặp lại gốc cỡ 0,01 mm, trục đứng nặng hoặc trục qua hộp số lớn, nên giữ công tắc quang hoặc công tắc cơ.
  • Có thể nối nhiều driver TMC2209 chung một đường UART không? Được tối đa 4 driver, mỗi driver đặt một địa chỉ khác nhau bằng chân MS1/MS2 (0–3). TMC2208 không có địa chỉ nên mỗi driver cần đường UART riêng.
  • Vì sao motor kêu rít khi đứng yên dù không có xung STEP? Driver vẫn băm dòng giữ, và khi tần số băm rơi vào dải nghe được hoặc dòng giữ đặt quá cao, cuộn dây phát tiếng. Thử giảm dòng giữ (ihold trên TMC), đổi chế độ decay hoặc bật StealthChop, vốn gần như im lặng khi đứng yên.
  • Hai motor lưỡng cực chạy song song cho một trục (như trục Z hai vít me) có dùng chung một driver được không? Được nếu đấu nối tiếp hai motor và driver đủ điện áp, hoặc đấu song song khi driver đủ dòng gấp đôi. Cách an toàn hơn là mỗi motor một driver nhận chung tín hiệu STEP/DIR, giúp cân dòng chính xác và có thể tự cân trục bằng về gốc riêng.
  • Thư viện Stepper mặc định của Arduino có dùng được với A4988 không? Không phù hợp, vì thư viện Stepper đóng cắt trực tiếp bốn dây pha cho mạch cầu H trần, không phát tín hiệu STEP/DIR và không có gia tốc. Với A4988, DRV8825, TMC, dùng AccelStepper ở chế độ DRIVER hoặc FastAccelStepper.
  • Driver TMC5160 có cần vi điều khiển phát xung STEP không? Không bắt buộc. Ở chế độ motion controller, TMC5160 tự tạo profile và phát chuyển động theo lệnh vị trí ghi qua SPI; vi điều khiển chỉ cần gửi đích và đọc trạng thái. Nếu muốn, vẫn có thể dùng TMC5160 như một driver STEP/DIR thông thường.
2.270 reviews

Tin tức liên quan

Mô Tơ Điện 1 Pha, 3 Pha 220V/380V: Bảng Giá Theo kW

Mô Tơ Điện 1 Pha, 3 Pha 220V/380V: Bảng Giá Theo kW

06 thg 11 2026 13:03

Mô tơ điện 3 pha 380V 4 cực giá 920.000 – 17.440.000 đ (0.37 – 30kW); mô tơ 1 pha 220V YL, YC giá 1.070.000 – 5.840.000 đ (0.37 – 3.7kW). Kèm cách chọn 1 pha hay 3 pha, số cực theo máy.
Đọc tiếp
Hộp giảm tốc harmonic: thông số, model CSF, SHF và cách chọn

Hộp giảm tốc harmonic: thông số, model CSF, SHF và cách chọn

14 thg 10 2026 15:12

Hộp giảm tốc harmonic (strain wave) size 14 – 32, tỉ số 1/50 – 1/120, mô men 5,4 – 137 Nm. Cách đọc tem, phân loại CSF, CSG, SHF-2UH, SHF-2UJ, SHF-2SO, SHD-2SH và cách chọn theo servo.
Đọc tiếp
Khám phá Bí Quyết Điều Khiển Động Cơ RC Servo Chính Xác Bằng STM32F4

Khám phá Bí Quyết Điều Khiển Động Cơ RC Servo Chính Xác Bằng STM32F4

15 thg 4 2025 20:44

Điều khiển động cơ RC Servo bằng STM32F4 mang đến độ chính xác cao và khả năng tùy chỉnh tín hiệu PWM tối ưu. Bài viết này hướng dẫn từ cấu hình bộ định thời, lập trình tín hiệu PWM, đến tối ưu hóa hiệu suất động cơ. Đây là giải pháp lý tưởng cho kỹ sư điện, kỹ sư cơ khí và các doanh nghiệp công nghiệp.
Đọc tiếp
Điều khiển động cơ RC servo bằng PWM: chu kỳ, độ rộng xung và cách tạo xung bằng timer

Điều khiển động cơ RC servo bằng PWM: chu kỳ, độ rộng xung và cách tạo xung bằng timer

10 thg 10 2026 17:36

Điều khiển động cơ RC servo bằng PWM: chu kỳ 20 ms, độ rộng xung 500–2500 µs, tính prescaler cho AVR, STM32, ESP32, PCA9685, mạch 555 và cách đo kiểm.
Đọc tiếp
Cách Điều Khiển Động Cơ DC Servo Chính Xác Bằng Giải Thuật PID

Cách Điều Khiển Động Cơ DC Servo Chính Xác Bằng Giải Thuật PID

12 thg 10 2026 08:32

Điều khiển động cơ DC Servo bằng giải thuật PID mang lại sự ổn định và hiệu suất cao cho hệ thống công nghiệp. Tìm hiểu cách áp dụng Proportional-Integral-Derivative, vi điều khiển và encoder để tối ưu hóa tốc độ và vị trí của động cơ. Phương pháp này được sử dụng rộng rãi trong robot, dây chuyền sản xuất và các hệ thống tự động hóa.
Đọc tiếp