Ngôn ngữ lập trình2 bình luận ở Lập trình điều khiển Servo motor với board mạch Arduino2.615 lượt xem

1. Giới thiệu Servo motor

Servo motor là một dạng động cơ điện đặc biệt với góc quay nằm trong khoảng từ 0 – 180°. Servo motor thường dùng để đóng ngắt các hệ thống một cách tự động.

Bạn đang xem: Điều khiển dc servo bằng arduino


*

*

2. Thiết kế mạch điều khiển Servo motor với board Arduino

Mạch điều khiển Servo motor với Arduino gồm 1 board Arduino, 1 Servo motor, có thể thêm 1 biến trở để điều khiển góc quay của Servo motor.Để Servo motor hoạt động, cần cấp nguồn cho Servo motor. Một chân của motor phải kết nối với một chân của Arduino có khả năng xuất xung PWM (~3, ~ 5, ~ 6, ~ 9, ~ 10, ~ 11) để chịu sự điều khiển của Arduino.
*

Có thể dùng thêm biến trở để điều khiển góc quay của Servo motor.

3. Chương trình điều khiển Servo motor

Điều khiển góc quay của Servo motor từ 0-180° và ngược lạiĐể lập trình điều khiển Servo motor, chúng ta sử dụng thư viện . Thư viện này đã được tích hợp sẵn trong Arduino IDE nên không cần cài đặt. Cần khai báo một đối tượng Servo để đại diện cho Servo motor kết nối với Arduino. Dùng hàm write() để gán góc quay cho Servo motor. Góc quay của Servo motor có giá trị trong khoảng từ 0 – 180.#include //Khai báo thư viện điều khiển Servo
Servo myservo;//Khai báo đối tượng Servoint servo
Pin = 9;//Chân kết nối Servo với Arduinovoid setup(){ myservo.attach(servo
Pin);//Khai báo chân kết nối Servo với Arduino}void loop(){ for(int pos = 0; pos =1; pos-=1){ myservo.write(pos);//Gán góc quay cho Servo delay(15); } }Kết quả
Điều khiển góc quay của Servo motor bằng biến trởXem lại cách lập trình sử dụng biến trở trong bài Lập trình điều khiển DC motor với board mạch Arduino. Khi giá trị điện áp lấy ra từ biến trở thay đổi thì góc quay của Servo motor thay đổi.
#include //Khai báo thư viện điều khiển Servo
Servo myservo;//Khai báo đối tượng Servoint servo
Pin = 9;//Chân kết nối Servo với Arduinoint rv = A0;//Chân kết nối biến trở với Arduinovoid setup(){ myservo.attach(servo
Pin);//Khai báo chân kết nối Servo với Arduino}void loop(){ int value = analog
Read(rv);//Đọc giá trị điện áp từ biến trở int pos = map(value,0,1023,0,180);//chuyển thang đo của value từ 0-1023 sang 0-180 myservo.write(pos);//Gán góc quay cho Servo}Kết quả

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


Content Summary

1 1. Tìm hiểu về động cơ servo2 2. Điều khiển động cơ servo bằng PWM Arduino2.3 2.3 Lập trình điều khiển servo RC bằng PWM

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.

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

Đ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 m
S ứng với góc quay động cơ là 0 độ, độ rộng 1,5 m
S ứng với góc quay là 90 độ và 2m
S ứ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ụ 100u
F 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à 15m
S. 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

*/

#include // 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

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.

Xem thêm: Cách Làm Bánh Tay Yến Giòn Rụm, Ngọt Ngào Hương Vị Miền Tây, Cách Làm Bánh Tai Yến Bột Gạo Cực Ngon Tại Nhà

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