Điều khiển động cơ Servo bằng PWM Arduino
Bài viết hôm nay xin giới thiệu với các bạn bài viết điều khiển servo RC bằng pwm. Ở các bài viết trước chúng ta đã tìm hiểu về cách điều khiển động cơ DC và AC Servo. Hôm nay chúng ta cùng nhau tìm hiểu cách điều khiển một loại động cơ thông dụng nửa là RC Servo bằng pwm.
Điều khiển động cơ RC servo bằng pwm
[button color=”orange” size=”medium” link=”http://bblink.com/OMJ7Roo” icon=”” target=”false”]Download 5 mạch điều khiển Motor DC Pdf và mô phỏng[/button]
1. Tìm hiểu về động cơ servo
1.1 Động cơ RC servo là gì
Khác với các loại động cơ DC, AC servo trong công nghiệp sử dụng encoder để phản hồi vị trí. Động cơ servo là loại động cơ một chiều đơn giản có cảm biến phản hồi vị trí là một biến trở. Vị trí thực tế được so sánh với vị trí mục tiêu, bộ điều khiển sẽ dựa vào sai số này để thay đổi vị tri thực tế đúng với yêu cầu.
Động cơ RC servo được sử dụng trong định vị bánh lái của thuyền, camera, cảm biến và sử dụng thông dụng trong điều khiển góc quay các khớp của robot.
>>> Xem thêm:
Điều khiển động cơ AC servo hãng LS
Điều khiển động cơ AC servo Dorna hãng Tecorp
1.2 Cấu tạo động cơ RC servo
Động cơ servo bao gồm 4 bộ phận: động cơ một chiều, hộp số, biến trở và mạch điều khiển.
Cấu tạo động cơ rc servo
+ Động cơ DC có tốc độ cao và moment thấp nên cần hộp số để giảm tốc độ và tăng moment giúp điều khiển tốt vị trí. Tốc độ sau khi qua hộp giảm tốc khoảng 60 vòng/phút.
+ Biến trở được nối với hộp số hoặc trục của động cơ, nên khi động cơ quay thì biến trở cũng đồng thời quay theo. Biến trở quay sẽ ứng với động cơ quay theo một góc tuyệt đối so với vị trí ban đầu. Mạch điều khiển đọc điện áp từ biến trở và so sánh với điện áp của tín hiệu điều khiển. Ở một số động cơ rc servo có tích hợp thêm mạch cầu H để điều chỉnh động cơ quay theo chiều ngược lại khi động cơ quay qua vị trí mong muốn. Cho đến khi sai số giữa hai tín hiệu điện áp này bằng 0.
1.3 Nguyên lý điều khiển động cơ servo bằng pwm
+ Động cơ RC servo được điều khiển bằng cách cấp một chuỗi xung PWM. Tần số của xung điều khiển nên là 50 Hz, góc quay của động cơ phụ thuộc vào độ rộng của xung điều khiển. Loại động cơ này có giới hạn về góc quay, góc quay tối đa là 180 độ.
+ Cho ví dụ độ rộng xung 1 mS ứng với góc quay động cơ là 0 độ, độ rộng 1,5 mS ứng với góc quay là 90 độ và 2mS ứng với góc quay 180 độ. Góc quay có thể khác nhau đối với các loại động cơ của các nhãn hiệu khác nhau.
Góc quay của động cơ phụ thuộc xung điều khiển
1.4 Kết nối động cơ Rc servo
Động cơ servo thông thường sẽ có 3 chân VCC, tín hiệu và chân GND. Màu sắc dây các chân của động cơ servo sẽ thay đổi tùy theo nhà sản xuất. Tuy nhiên ta thấy hầu hết các chân của động cơ sẽ quy định theo màu sắc như sau.
+ GND – Màu đen hoặc nâu, chân MASS cho động cơ và mạch điều khiển.
+ Tín hiệu – Màu trắng hoặc vàng, chân ngỏ vào của tín hiệu điều khiển
+ VCC – Chân cấp nguồn cho động cơ và mạch điều khiển, thường là 5V.
2. Điều khiển động cơ servo bằng PWM Arduino
2.1 Tại sao lựa chọn Arduino điều khiển servo RC
+ Như đã trình bày ở trên, động cơ servo cần xung điều khiển PWM để hoạt động một cách chính xác. Có nhiều cách để tạo xung điều khiển PWM, trong đó dùng vi điều khiển sẽ có nhiều ưu điểm hơn để điều khiển servo hiệu quả. Và Arduino là một sự lựa chọn hoàn hảo. Với mã nguồn mở, giá thành rẻ, các hàm chức năng dễ sử dụng.
+ Phần mềm lập trình Arduino IDE cung cấp thư viện điều khiển Servo, có thể sử dụng các hàm điều khiển servo dễ dàng.
+ Trên mỗi board mạch Arduino có một số chân điều khiển PWM. Trên board Arduino UNO có 4 chân PWM có tần số 490 Hz và 2 chân PWM có tần số 980 Hz.
+ Lưu ý khi sử dụng thư viện Servo cần sử dụng một số bộ timer bên trong Arduino, cụ thể là timer 1. Điều này gây trở ngại cho các thư viện khác cần sử dụng bộ timer tương tự
2.2 Chọn nguồn cấp cho mạch
+ Động cơ SG90 sẽ hoạt động tốt với nguồn cung cấp với nguồn 5V cấp từ Arduino do moment yếu, dòng điện nhỏ.
Điều khiển động cơ servo G90 bằng arduino
+ Tuy nhiên đối với một số Servo có moment lớn như MG9995 hoặc khi có gắn thêm tải thì dòng điện có thể lớn hơn dòng cấp tối đa của Arduino. Giống như một số loại động cơ khác, khi hoạt động có thể sinh ra nhiễu trên đường dây cấp nguồn. Khi nhiễu trên đường dây cấp nguồn cho vi điều khiển và một số thiết bị khác sẽ dẫn đến sai số.
Vì thế nên cấp nguồn ngoài cho động cơ servo, kết nối GND và chân tín hiệu với Arduino. Có thể sử dụng tụ 100uF hoặc lớn hơn nối song song với nguồn cấp gần động cơ để giảm nhiễu.
điều khiển động cơ servo MG9995 bằng pwm
2.3 Lập trình điều khiển servo RC bằng PWM
a. Điều khiển servo quay từ 0 đến 180 độ và ngược lại
+ Kết nối mạch không thể đơn giản hơn, trong ví dụ này sử dụng chân 9 là chân tín hiệu điều khiển servo. Chân 9 là một trong 6 chân có khả năng phát xung PWM, các chân phát xung sẽ có ký hiệu là dấu “~”.
Điều khiển động cơ servo RC bằng pwm
+ Hãy xem code ví dụ trong mục File/ Examples/ Servo/ Sweep
Trong ví dụ này điều khiển động cơ servo quay một 180 độ sau đó dừng 2s và quay trở về vị trí ban đầu 0 độ. Mỗi bước quay là 1 độ, thời gian chờ để động cơ đạt đến vị trí điều khiển là 15mS. Do thời gian chờ rất bé, nên ta nhìn thấy động cơ quay liên tục.
***************************************************
/* Sweep – Điều khiển động cơ servo bằng arduino
by BARRAGAN <http://barraganstudio.com>
*/
#include <Servo.h> // Khai báo thư viện servo
Servo myservo;// Tạo đối tượng tên myservo
int pos = 0;//Tạo biến nhận giá trị góc quay
void setup() {
myservo.attach(9,500,2500); // Chân 9, Chu kỳ Min, Max
}
void loop() {
//Điều khiển servo quay một góc 180 độ
for (pos = 0; pos <= 180; pos += 1) { //Biến pos sẽ chạy từ 0-180
myservo.write(pos); //ra lệnh servo quay một góc “pos”
delay(15); // Chờ 15ms để động cơ đạt đến vị trí pos
}
delay(500); //Khi quay đến vị trí góc 180 độ dừng 2s
//Điều khiển servo quay về vị trí 0 độ
for (pos = 180; pos >= 0; pos -= 1) { //Biến pos sẽ chạy từ 180 về 0
myservo.write(pos);
delay(15);
}
delay(500); //Khi quay đến vị trí góc 0 độ dừng 2s
}
***************************************************
+ Lưu ý: chương trình định nghĩa một đối tượng tên myservo để đại diện cho động cơ servo cần điều khiển, nếu điều khiển nhiều servo thì mỗi động cơ cần định nghĩa một đối tượng riêng.
Video tham khảo mô phỏng điều khiển servo bằng pwm trên phần mềm Proteus
Video thực tế điều khiển động cơ servo bằng arduino
b. Điều khiển động cơ servo xoay theo biến trở
+ Ở ví dụ này ta sẽ dùng Arduino đọc giá trị biến trở điều khiển góc quay của động cơ servo bằng PWM. Động cơ sẽ quay theo biến trở.
Điều khiển servo bằng arduino
***************************************************
/*
Điều khiển vị trí động cơ servo bằng biến trở arduino
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
http://www.arduino.cc/en/Tutorial/Knob
*/
#include <Servo.h> // Khai báo thư viện servo
Servo myservo; // Tạo đối tượng tên myservo
int potpin = 2; // chân Analog 0 kết nối biến trở
int val; // biến đọc giá trị chân Analog
void setup() {
myservo.attach(9,500,2500); // Chân 9, Min, Max
}
void loop() {
val = analogRead(potpin); // Đọc giá trị biến trở 0 – 1023
val = map(val, 0, 1023, 0, 180); // chuyển đổi giá trị val về 0-180
myservo.write(val); //ra lệnh servo quay một góc “var”
delay(15); // chờ 15 mS để động cơ đạt đến vị trí “var”
}
***************************************************
Video mô phỏng trên chương trình phần mềm Proteus
Video thực tế điều khiển động cơ quay theo biến trở
>>> Xem thêm:
Nơi mua Arduino, mạch cầu H giá rẻ mà chất lượng?
Với giá bán cạnh tranh trên các sàn thương mại điện tử được nhiều người sử dụng đánh giá cao. Giao hàng tận nơi, với chính sách hoàn trả tiền nếu sản phẩm bị lỗi nên khách hàng có thể yên tâm đặt sử dụng các sản phẩm của chúng tôi.
Xem giá bán Arduino giá cạnh tranh:
+ Giao hàng nhanh
+ Đổi hàng hoặc hoàn tiền trong vong 3 ngày.
+ Sản phẩm được nhiều khác hàng yêu thích
+ Giá rẻ bất ngờ chỉ từ 55.000 với arduino chíp dán
Xem giá bán động cơ RC Servo giá chỉ từ 16.00 VNĐ:
Tài liệu tham khảo
Điều khiển Servo Motor Dorna hãng Tecorp
Điều khiển động cơ Servo của hãng LS
Điều khiển động cơ DC Servo bằng driver Acccelnet
5 Mạch điều khiển tốc độ động cơ một chiều
Điều khiển động cơ một chiều bằng L298
Mạch điều khiển tốc độ Motor DC 220V
Mạch cầu H sử dụng Mosfet – CHI TIẾT NHẤT