Đ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 Đọc thêm

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ơ servo rc 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ơ 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 rc servo

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 phụ thuộc độ rộng xung

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

Động cơ rc g90

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

Động cơ rc MG9995

đ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 bằng PWM

Đ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 động cơ servo bằng pwm 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:

Động cơ servo là gì?

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

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: giá bán trên shopee

+ 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

arduino shopee giá rẻ

Xem giá bán động cơ RC Servo giá chỉ từ 16.00 VNĐ:giá bán trên shopee

xem giá bán động cơ rc servo

Tài liệu tham khảo

Servo motor with Arduino – DroneBot WorkShop

How to control servos using Arduino – How It Work

Hãy bình luận đầu tiên

Để lại một phản hồi

Thư điện tử của bạn sẽ không được hiện thị công khai.


*