Robot phải...cử động, di chuyển..."Chân lý" đó quá rõ ràng và đơn giản. Nếu muốn "động đậy" thì cần các động cơ. Bạn muốn làm một cánh tay robot có thể gắp đồ vật. Bạn cũng muốn làm một chiếc máy có thể quay trục chính xác từng bước, hoặc một cơ cấu tự động di chuyển đến đúng vị trí.
Cả hai đều cần động cơ. Nhưng nên chọn loại nào?
Bạn tới cửa hàng linh kiện điện tử và thấy đủ thứ tên: Servo Motor, Stepper Motor, DC Motor... Nhìn hình thì đều là động cơ, đều có thể quay. Thế là bạn nghĩ: "Chắc mua đại một cái về thử, quay được là sẽ...động đậy được!"
Nhưng...Khoan đã.
Chọn sai động cơ không có nghĩa là bạn không thể làm dự án, nhưng có thể khiến việc điều khiển khó hơn, tốn thêm linh kiện và mất nhiều thời gian sửa lỗi.
Hôm nay, chúng ta sẽ tìm hiểu hai loại động cơ rất phổ biến trong Robotics: Servo và Stepper. Không cần học công thức phức tạp ngay từ đầu. Chỉ cần hiểu chúng hoạt động ra sao, mạnh ở điểm nào và nên dùng trong trường hợp nào.
Servo Motor là gì?
Servo Motor, thường gọi ngắn gọn là Servo, là động cơ được dùng trong hệ thống điều khiển vị trí hoặc chuyển động theo yêu cầu.
Trong các dự án Arduino dành cho người mới học, loại thường gặp là RC Servo, chẳng hạn servo nhỏ SG90.
Với loại servo này, bạn có thể yêu cầu trục quay đến một góc nhất định, ví dụ khoảng 30°, 90° hoặc 150°, trong phạm vi mà servo hỗ trợ.
Hãy tưởng tượng bạn có một cánh tay robot nhỏ. Bạn muốn nó nâng lên, hạ xuống hoặc quay đến một góc để gắp một vật nhẹ. Servo là lựa chọn thường được cân nhắc cho những chuyển động như vậy.
Servo hoạt động thế nào?
Một RC Servo thông dụng thường có:
- Động cơ điện bên trong.
- Bộ truyền động bánh răng.
- Mạch điều khiển.
- Cơ chế phản hồi vị trí.
Arduino gửi tín hiệu điều khiển. Servo sử dụng mạch bên trong để điều chỉnh trục đến vị trí mong muốn.
Bạn không cần tự viết toàn bộ thuật toán điều khiển động cơ từ đầu. Với các servo tương thích, thư viện Arduino Servo có thể giúp bạn điều khiển đơn giản hơn.
Ví dụ:
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9);
}
void loop() {
myServo.write(30);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(150);
delay(1000);
}
Trong ví dụ này, Arduino gửi các lệnh yêu cầu servo đến những góc khác nhau.
Tuy nhiên, các giá trị góc trong thư viện không đảm bảo mọi servo đều đạt chính xác cùng một góc cơ khí. Phạm vi chuyển động thực tế còn phụ thuộc vào loại servo và cách cấu hình.
Chua thêm: Servo giống như bạn nói với cánh tay robot: "Quay đến vị trí này nhé!" Còn việc nó có đến đúng vị trí cơ khí tuyệt đối hay không vẫn phụ thuộc vào thiết bị, tải và cách điều khiển. Máy móc cũng có giới hạn, không phải cứ ra lệnh là nó nghe lời như nhân viên chăm chỉ trong quảng cáo!
Servo có những loại nào?
Servo không phải chỉ có một loại.
- RC Servo góc giới hạn: thường dùng trong mô hình robot, cánh tay gắp và cơ cấu điều khiển góc.
- Servo quay liên tục: được điều khiển theo hướng và tốc độ tương đối, không hoạt động giống servo góc giới hạn thông thường.
- Servo công nghiệp: có thể có bộ điều khiển, cảm biến phản hồi và đặc tính hoàn toàn khác với loại servo nhỏ dùng cho Arduino.
Vì vậy, khi đọc hướng dẫn, hãy chú ý tác giả đang nói về loại Servo nào.
Một chiếc SG90 nhỏ không thể mặc nhiên thay thế servo công nghiệp, cũng như servo quay liên tục không thể được điều khiển theo cách hiểu "đặt trục đến góc 90°" như servo góc giới hạn thông thường.
Stepper Motor là gì?
Stepper Motor, hay động cơ bước, là loại động cơ quay theo từng bước góc khi được điều khiển bằng các tín hiệu phù hợp.
Thay vì chỉ yêu cầu động cơ quay liên tục, bạn có thể điều khiển nó thực hiện một số bước nhất định.
Hãy tưởng tượng bạn đang xoay núm chỉnh âm lượng. Mỗi lần xoay một nấc, núm chuyển sang vị trí kế tiếp. Stepper cũng có thể được điều khiển theo kiểu từng bước như vậy.
Stepper thường được dùng trong những ứng dụng cần điều khiển chuyển động theo từng bước, chẳng hạn:
- Máy in 3D.
- Máy CNC.
- Cơ cấu kéo dây hoặc di chuyển bàn trượt.
- Bàn xoay định vị.
- Một số robot và hệ thống tự động hóa.
Stepper hoạt động thế nào?
Stepper có nhiều cuộn dây bên trong. Bộ điều khiển cấp điện cho các cuộn theo trình tự thích hợp, tạo ra chuyển động từng bước.
Để sử dụng Stepper với Arduino, bạn thường cần một driver phù hợp. Driver điều khiển dòng điện qua các cuộn dây và nhận tín hiệu từ bộ điều khiển.
Một số hệ thống sử dụng hai tín hiệu phổ biến:
- STEP: mỗi xung yêu cầu động cơ thực hiện một bước hoặc một vi bước, tùy cấu hình driver.
- DIR: chọn hướng quay.
Tuy nhiên, không phải mọi Stepper đều dùng cùng loại driver hay giao thức điều khiển. Bạn cần kiểm tra thông số của động cơ và driver tương ứng.
Stepper có chính xác tuyệt đối không?
Không. Stepper có thể điều khiển vị trí dựa trên số bước đã ra lệnh. Nhưng nếu tải quá nặng, gia tốc quá cao hoặc mô-men xoắn không đủ, động cơ có thể mất bước.
Trong hệ thống Stepper thông thường không có phản hồi vị trí, Arduino có thể không biết động cơ đã mất bước. Bộ điều khiển tưởng rằng động cơ đã đến vị trí mong muốn, trong khi thực tế nó chưa đến.
Một số hệ thống Stepper có thêm cảm biến phản hồi hoặc cơ chế xác định vị trí ban đầu để cải thiện khả năng kiểm soát.
Chua thêm: Stepper giống như người được giao nhiệm vụ đi 100 bước. Bạn đếm rất kỹ, nhưng nếu giữa đường người đó bị vấp và đứng lại, tờ giấy ghi "đã đi 100 bước" cũng không giúp họ tự động xuất hiện ở đích!
So sánh Servo và Stepper
| Tiêu chí | RC Servo góc giới hạn | Stepper Motor |
|---|---|---|
| Cách điều khiển thường gặp | Ra lệnh đến góc mong muốn | Ra lệnh số bước và hướng |
| Điểm mạnh | Dễ điều khiển vị trí góc trong nhiều dự án nhỏ | Phù hợp chuyển động từng bước |
| Phần cứng đi kèm | Thường cần tín hiệu điều khiển và nguồn phù hợp | Thường cần driver phù hợp |
| Phản hồi vị trí | Servo thông dụng có cơ chế phản hồi bên trong | Nhiều loại phổ biến không có phản hồi vị trí |
| Ví dụ ứng dụng | Cánh tay robot nhỏ, cơ cấu gạt | Máy in 3D, CNC, bàn trượt |
| Điều cần chú ý | Giới hạn góc, lực, nguồn và tải | Mất bước, driver, dòng điện và mô-men xoắn |
Bảng này mô tả những loại phổ biến trong dự án học tập. Servo và Stepper đều có nhiều biến thể nên không nên xem đây là quy tắc tuyệt đối cho mọi động cơ mang tên đó.
Vậy nên chọn Servo hay Stepper?
Cách đơn giản nhất là bắt đầu từ chuyển động mà dự án cần.
Trường hợp 1: Cánh tay robot cần nâng và hạ một bộ phận nhẹ
Bạn có thể bắt đầu với một RC Servo góc giới hạn.
Ví dụ, một cánh tay robot nhỏ cần quay một khớp đến góc định trước để đưa đầu gắp lên hoặc xuống.
Servo nhỏ thường dễ thử nghiệm và có thể điều khiển bằng thư viện có sẵn. Tuy nhiên, cần chọn loại đủ mô-men xoắn cho tải thực tế.
Đừng chỉ nhìn thấy một chiếc servo nhỏ có thể xoay được rồi mặc định nó nâng được mọi vật. Cánh tay càng dài, tải càng nặng thì yêu cầu mô-men xoắn càng lớn.
Trường hợp 2: Một bàn trượt cần di chuyển theo từng bước
Stepper thường là lựa chọn đáng cân nhắc.
Ví dụ, bạn muốn một bàn trượt di chuyển từng đoạn nhỏ theo lệnh điều khiển. Stepper kết hợp với driver phù hợp có thể giúp bạn ra lệnh số bước tương ứng với chuyển động cần thiết.
Nhưng để biết bàn trượt đã đến đúng vị trí hay chưa, hệ thống có thể cần căn chỉnh điểm gốc, công tắc giới hạn hoặc cảm biến phản hồi tùy yêu cầu.
Trường hợp 3: Bánh xe robot cần quay liên tục
Đừng vội chọn Servo góc giới hạn chỉ vì bạn muốn điều khiển vị trí.
Nếu robot cần chạy liên tục, động cơ DC có hộp số thường là lựa chọn đơn giản và phù hợp. Stepper hoặc servo quay liên tục cũng có thể được sử dụng trong những thiết kế nhất định.
Đây là lý do cần xác định mục tiêu chuyển động trước khi chọn động cơ.
Có thể dùng Servo hoặc Stepper với Arduino không?
Có. Nhưng mỗi loại cần cách điều khiển và phần cứng phù hợp.
Với RC Servo, bạn có thể bắt đầu bằng thư viện Servo trên Arduino. Với Stepper, bạn có thể sử dụng driver tương thích và thư viện điều khiển phù hợp, chẳng hạn thư viện Stepper cho một số cấu hình cơ bản.
Điều quan trọng là không cấp nguồn cho động cơ một cách tùy tiện từ chân GPIO. Chân điều khiển của Arduino không được thiết kế để trực tiếp cung cấp dòng điện lớn cho động cơ.
Servo và Stepper có thể tiêu thụ dòng đáng kể, đặc biệt khi khởi động, chịu tải hoặc giữ vị trí. Hãy chọn nguồn theo yêu cầu của động cơ và driver, đồng thời nối GND theo sơ đồ của hệ thống nếu thiết kế yêu cầu chung GND.
Nếu driver hoặc hệ thống được thiết kế để cách ly điện, hãy tuân theo hướng dẫn của nhà sản xuất thay vì tự ý nối chung các điểm điện.
Thực hành tiết kiệm: chưa cần mua cả hai loại
Nếu bạn đang bắt đầu từ Arduino, Breadboard và LED, bạn không cần mua Servo lẫn Stepper ngay trong cùng một lần.
Hãy đi từng bước.
Bước 1: Dùng LED để xác nhận Arduino có thể thực hiện lệnh bật và tắt.
Bước 2: Tìm hiểu cách cấp nguồn riêng phù hợp cho động cơ và cách nối dây điều khiển.
Bước 3: Khi có Servo tương thích, thử điều khiển nó đến vài vị trí khác nhau mà không gắn tải nặng.
Bước 4: Khi muốn làm cơ cấu di chuyển theo bước, tìm hiểu Stepper và driver tương thích trước khi mua.
Bước 5: Đọc thông số mô-men xoắn, điện áp và dòng điện trước khi gắn động cơ vào cơ cấu thực tế.
Nếu mua một linh kiện mới, hãy chọn theo dự án cụ thể. Một servo nhỏ có thể đủ cho một khớp robot nhẹ, nhưng không phù hợp với cánh tay dài mang tải nặng. Tương tự, một Stepper có thể hoạt động tốt trong cơ cấu nhỏ nhưng không đáp ứng được tốc độ hoặc tải của hệ thống lớn hơn.
Những lỗi thường gặp khi dùng động cơ
Servo rung hoặc giật
Có thể nguồn điện không đủ ổn định, dây nối chưa tốt, tải quá nặng hoặc tín hiệu điều khiển chưa phù hợp.
Hãy kiểm tra yêu cầu nguồn và dòng điện của servo trước. Đừng mặc định rằng chân 5V trên mọi board đều đủ khả năng cấp nguồn cho động cơ.
Servo không quay đến góc mong muốn
Giá trị trong code không nhất thiết tương ứng chính xác với góc cơ khí trên mọi loại servo. Phạm vi chuyển động cũng có thể bị giới hạn bởi cơ cấu lắp đặt.
Hãy kiểm tra thông số của servo, tránh ép trục vượt quá giới hạn cơ khí và không gắn tải khi đang thử nghiệm ban đầu.
Stepper phát tiếng nhưng không quay đúng
Nguyên nhân có thể là thứ tự dây cuộn không đúng, driver không phù hợp, nguồn không đủ hoặc tốc độ khởi động quá cao.
Hãy kiểm tra sơ đồ dây của động cơ và driver. Nếu driver cần giới hạn dòng, hãy cài đặt theo thông số động cơ và hướng dẫn nhà sản xuất.
Động cơ nóng bất thường
Động cơ và driver có thể ấm lên trong khi hoạt động, nhưng nóng quá mức có thể là dấu hiệu của dòng điện cài đặt không đúng, tải quá lớn hoặc tản nhiệt không đủ.
Ngắt nguồn nếu phát hiện nhiệt độ bất thường, mùi khét hoặc hoạt động không ổn định. Kiểm tra thông số trước khi thử lại.
Những hiểu lầm người mới học thường gặp
"Servo luôn chính xác hơn Stepper."
Không thể kết luận chung như vậy. Servo RC thông dụng có phản hồi vị trí bên trong, còn Stepper phổ biến thường được điều khiển theo số bước. Độ chính xác thực tế phụ thuộc vào thiết bị, tải và cách điều khiển.
"Stepper luôn biết chính xác vị trí của nó."
Không đúng với hệ thống Stepper thông thường không có phản hồi. Nếu mất bước, bộ điều khiển có thể không biết vị trí thực tế đã lệch khỏi vị trí dự kiến.
"Động cơ nào cũng nối thẳng vào Arduino được."
Không đúng. Chân GPIO chủ yếu dùng để gửi tín hiệu điều khiển. Động cơ thường cần nguồn và mạch driver phù hợp.
"Servo chỉ quay được 90 độ."
Không phải mọi servo đều có cùng phạm vi góc. Một số loại có thể quay trong khoảng lớn hơn hoặc nhỏ hơn, còn servo quay liên tục hoạt động theo cách khác.
Checklist "chuẩn không cần chỉnh"
- Xác định chuyển động cần thực hiện: quay theo góc, quay liên tục hay di chuyển từng bước.
- Kiểm tra tải trọng và mô-men xoắn cần thiết.
- Kiểm tra điện áp và dòng điện của động cơ.
- Xác định có cần driver hay bộ điều khiển riêng không.
- Kiểm tra khả năng cấp nguồn phù hợp.
- Xem xét có cần cảm biến hoặc công tắc xác định vị trí hay không.
- Đọc tài liệu trước khi nối dây và cấp nguồn.
Câu hỏi thường gặp
Servo có thể quay liên tục không?
Một số Servo được thiết kế để quay liên tục. Nhưng với loại này, tín hiệu điều khiển thường dùng để điều chỉnh hướng và tốc độ tương đối chứ không phải đặt trục đến một góc cố định như RC Servo góc giới hạn.
Stepper có cần driver không?
Trong phần lớn dự án thực hành với Arduino, bạn cần một driver phù hợp để cấp và điều khiển dòng điện qua các cuộn dây của Stepper. Hãy chọn driver theo loại động cơ và yêu cầu dòng điện.
Có thể cấp nguồn Servo từ chân 5V của Arduino không?
Điều đó phụ thuộc vào servo, nguồn USB hoặc nguồn cấp cho board và mức dòng điện thực tế. Servo có thể hút dòng lớn khi khởi động hoặc chịu tải. Hãy kiểm tra thông số và dùng nguồn phù hợp thay vì mặc định chân 5V luôn đủ.
Muốn làm robot chạy bằng bánh xe thì nên chọn loại nào?
Đối với robot di chuyển cơ bản, động cơ DC có hộp số thường là lựa chọn dễ bắt đầu. Stepper hoặc các loại động cơ khác có thể phù hợp hơn khi dự án cần đặc tính điều khiển riêng.
Bạn có thể cũng đang gặp những vấn đề này
Vì sao LED không sáng dù code Arduino không báo lỗi?
Sensor là gì?
