Lựa chọn bộ động cơ bước, động cơ servo, hộp động cơ hybrid và một vài số phụ kiện đi kèm: Driver điều khiển, phanh từ tuyệt hộp tụt giảm cho bộ động cơ bước ⇒ XEM CÁC LOẠI ĐỘNG CƠ
Trong hướng dẫn này, bọn họ sẽ mày mò cách thức hoạt động của động cơ servo và cách tinh chỉnh động cơ servo bởi trình tinh chỉnh PWM Arduino với PCA9685. Bạn có thể xem video clip sau hoặc đọc khuyên bảo dưới đây.
Bạn đang xem: Bài 10: điều khiển động cơ rc servo sử dụng arduino
Giới thiệu tổng quan về bộ động cơ servo
Có nhiều loại hộp động cơ servo và tác dụng chính của chúng là tài năng điều khiển đúng đắn vị trí của trục. Động cơ servo là một khối hệ thống vòng kín đáo sử dụng phản hồi vị trí nhằm điều khiển vận động và vị trí sau cuối của nó.

Hệ thống vòng kín
Trong công nghiệp động cơ servo là loại cảm biến phản hồi vị trí, thường là một trong bộ code hóa có độ chính xác cao, trong khi trong các động cơ RC hoặc nhỏ hơn, cảm biến vị trí thường là một trong những chiết áp solo giản. Vị trí thực tiễn được tìm kiếm thấy bởi những thiết bị này được đưa quay trở lại bộ phát hiện lỗi chỗ nó được đối chiếu với địa điểm đích. Sau đó, theo lỗi, bộ tinh chỉnh và điều khiển sửa vị trí thực tiễn của động cơ để khớp với địa chỉ đích.

Hệ thống vòng kín đáo Servo
Trong khuyên bảo này, shop chúng tôi sẽ coi xét chi tiết về các động cơ servo thường xuyên gặp. Chúng tôi sẽ lý giải cách các servo này vận động và biện pháp điểu khiển chúng bằng Arduino.

Động cơ thường dùng là cỗ truyền cồn kích thước bé dại được thực hiện để điều khiển xe ô tô, thuyền, trang bị bay, v.v. Chúng cũng được sử dụng bởi những sinh viên chuyên môn để chế tạo robot, tạo ra cánh tay robot, robot lấy cảm xúc sinh học, robot hình người, v.v.

Ứng dụng động cơ Servo Robot cánh tay Hexapod Robot hình người
⇒ Robot vẽ Axidraw Việt Machine sử dụng động cơ servo: Xem trên đây
Cách thức buổi giao lưu của Servo RC / cổ điển
Bên trong một servo cổ diển tất cả bốn yếu tố chính, hộp động cơ DC, vỏ hộp số, đổi thay trở với mạch điều khiển. Động cơ DC có vận tốc cao và mô-men xoắn thấp tuy thế hộp số giảm tốc độ xuống khoảng tầm 60 vòng / phút, đôi khi tăng mô-men xoắn.

Cách thức hoạt động của Servo bên phía trong các yếu tắc Mạch điều khiển chiết áp động cơ DC
Chiết áp được thêm trên bánh răng sau cuối hoặc trục đầu ra, vì thế động cơ cũng quay phân tách áp, tạo ra một năng lượng điện áp tương quan đến góc hoàn hảo của trục đầu ra. Trong mạch điều khiển, điện áp tách áp này được so sánh với điện áp đến từ đường tín hiệu. Ví như cần, bộ điều khiển và tinh chỉnh kích hoạt mạch cầu H tích hợp được cho phép động cơ cù theo hai hướng cho tới khi nhì tín hiệu đạt tới chênh lệch bằng không.
Một hộp động cơ servo được điều khiển bằng cách gửi một loạt những xung qua con đường tín hiệu. Tần số của tín hiệu điều khiển và tinh chỉnh phải là 50Hz hoặc một chu kỳ luân hồi xung là 20ms. Độ rộng lớn của xung xác định vị trí góc của servo và các loại servo này thường hoàn toàn có thể xoay 180 độ (chúng có số lượng giới hạn vật lý lúc di chuyển).

Tín hiệu điều khiển và tinh chỉnh động cơ RC Servo
Nói chung các xung có tại 1ms tương ứng với địa điểm 0 độ, 1,5ms đến 90 độ và 2ms mang đến 180 độ. Mặc dù thời gian tối thiểu và buổi tối đa của những xung nhiều lúc có thể biến hóa theo các loại khác nhau và chúng có thể là 0,5ms mang lại 0 độ cùng 2,5ms cho vị trí 180 độ.
Điều khiển bộ động cơ Arduino Servo
Chúng ta hãy đánh giá những thông tin trên và làm một ví dụ thực tiễn về tinh chỉnh một servo truyền thống bằng Arduino. Tôi sẽ áp dụng MG996R, một bộ động cơ servo mô-men xoắn cao tất cả bánh răng kim loại với mô-men xoắn 10 kg-cm. Mô-men xoắn cao tất cả dòng ổn định của servo là 2.5A. Dòng điện chạy từ 500mA mang lại 900mA với điện áp chuyển động từ 4,8 cho 7,2V.

Điều khiển động cơ Arduino Servo MG996R
Xếp hạng hiện nay tại cho biết thêm rằng chúng tôi không thể kết nối trực tiếp servo này cùng với Arduino, nên cửa hàng chúng tôi phải sử dụng nguồn năng lượng điện riêng đến nó. Đây là sơ vật dụng mạch mang đến ví dụ này.

Sơ trang bị mạch điều khiển Arduino
Chúng ta chỉ việc kết nối chân tinh chỉnh của servo với ngẫu nhiên chân tiên tiến nhất nào của board Arduino, kết nối Ground với dây dương với điện áp nguồn 5V mặt ngoài, đồng thời liên kết ground của Arduino với chân GND của servo.
Code tinh chỉnh động cơ Servo từ bỏ Arduino
Bây giờ chúng ta hãy coi code Arduino để tinh chỉnh và điều khiển động cơ servo. Code rất đơn giản. Họ chỉ cần xác định chân mà servo được kết nối, xác định chân đó là áp ra output và trong phần vòng lặp tạo thành các xung với chu kỳ và tần số ví dụ như bọn họ đã giải thích ở trên.
#define servoPin 9void setup() pinMode(servoPin, OUTPUT);void loop() // A pulse each 20ms digitalWrite(servoPin, HIGH); delayMicroseconds(1450); // Duration of the pusle in microseconds digitalWrite(servoPin, LOW); delayMicroseconds(18550); // 20ms - duration of the pusle // Pulses duration: 600 - 0deg; 1450 - 90deg; 2300 - 180degSau một số trong những thử nghiệm, tôi đã gửi ra những giá trị sau trong khoảng thời gian các xung vận động với servo. Những xung có thời lượng 0,6ms khớp ứng với địa điểm 0 độ, 1,45ms cho 90 độ với 2,3ms mang đến 180 độ.
Xem thêm: Đắp Mặt Nạ Làm Trắng Da Tự Nhiên Làm Được Ngay Tại Nhà, Cách Đắp Mặt Nạ Làm Trắng Da Đúng Cách
Tôi đã liên kết một máy đo vạn năng nối tiếp với servo để khám nghiệm dòng điện. Mức dòng điện buổi tối đa cơ mà tôi nhận biết là lên tới mức 0,63A. Vâng, cũng chính vì đây chưa phải là phiên bản gốc TowerPro MG996R, mà là phiên bản sao rẻ hơn, cụ thể có hiệu suất kém hơn.

Động cơ Servo MG996R
Tuy nhiên, chúng ta hãy xem một cách dễ ợt hơn để tinh chỉnh các servo bởi Arduino. Đó là áp dụng thư viện Arduino Arduino.
#include Servo myservo; // create servo object to control a servovoid setup() myservo.attach(9,600,2300); // (pin, min, max)void loop() myservo.write(0); // tell servo lớn go khổng lồ a particular angle delay(1000); myservo.write(90); delay(500); myservo.write(135); delay(500); myservo.write(180); delay(1500); Ở đây chúng ta chỉ buộc phải nạp thư viện, xác định đối tượng người sử dụng servo và áp dụng hàm attach() khẳng định chân cơ mà servo được kết nối tương tự như xác định vị trị tối thiểu và về tối đa của thời lượng xung. Sau đó, bằng phương pháp sử dụng hàm write (), bọn họ chỉ nên đặt vị trí của servo từ 0 mang đến 180 độ. Với thư viện này, chúng ta cũng có thể điều khiển tới 12 servo đồng thời hoặc 48 servo bằng phương pháp sử dụng board Arduino Mega.
Trình điều khiển và tinh chỉnh PWM / Servo Arduino và PCA9685
Ngoài ra còn tồn tại một cách khác để tinh chỉnh servo bằng Arduino và đó là áp dụng trình điều khiển và tinh chỉnh servo PCA9685. Đây là trình tinh chỉnh và điều khiển servo cùng servo 16 kênh 12 bit, giao tiếp với Arduino bởi bus I2C. Nó có một đồng hồ tích phù hợp để rất có thể chạy 16 hộp động cơ cùng lúc, hoặc tự do với Arduino.

Trình tinh chỉnh Servo Arduino cùng PCA9685
Chúng ta có thể xâu chuỗi lên đến 62 trình điều khiển này trên cùng một bus I2C. Do vậy, về phương diện lý thuyết, chúng ta có thể điều khiển cho tới 992 bộ động cơ chỉ bởi hai chân I2C từ board Arduino. 6 chân chọn showroom được sử dụng để đặt showroom I2C không giống nhau cho mỗi trình điều khiển bổ sung. Họ chỉ bắt buộc kết nối những miếng hàn theo bảng này.

Địa chỉ PCA9685 chọn Chân Board I2CAddress
Đây là sơ thiết bị mạch và bạn có thể nhận thấy rằng họ cần một nguồn cung ứng điện riêng cho những servo.

Sơ đồ vật mạch Arduino cùng PCA9685
Các linh phụ kiện cần thiếtĐộng cơ Servo MG996RTrình điều khiển Servo PCA9685 PWMBoard ArduinoNguồn hỗ trợ điện 5V- 6A DC=> vị trí bán linh phụ kiện điện tử chất lượng: Xem trên đây
Bây giờ hãy xem code Arduino. Để điều khiển trình điều khiển và tinh chỉnh servo này, họ sẽ thực hiện thư viện PCA9685 hoàn toàn có thể tải xuống từ GitHub .
Code Arduino PCA9685#include #include "PCA9685.h"PCA9685 driver;// PCA9685 outputs = 12-bit = 4096 steps// 2.5% of 20ms = 0.5ms ; 12.5% of 20ms = 2.5ms// 2.5% of 4096 = 102 steps; 12.5% of 4096 = 512 stepsPCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg)// Second Servo// PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg)void setup() Wire.begin(); // Wire must be started first Wire.setClock(400000); // Supported baud rates are 100kHz, 400kHz, and 1000kHz driver.resetDevices(); // Software resets all PCA9685 devices on Wire line driver.init(B000000); // Address pins A5-A0 set khổng lồ B000000 driver.setPWMFrequency(50); // set frequency to 50Hzvoid loop() driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(0)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(90)); delay(1000);Trước tiên chúng ta cần bao gồm các thư viện với xác định đối tượng người dùng PCA9685. Sau đó, sử dụng đối tượng người dùng Servo_Evaluator khẳng định chu kỳ xung hoặc cổng output PWM của trình điều khiển. để ý rằng những đầu ra là 12 bit, độ phân giải 4096 bước. Vị vậy, thời gian xung về tối thiểu là 0,5ms hoặc 0 độ sẽ tương ứng với 102 bước và thời lượng xung tối đa là 2,5ms hoặc 180 độ tại đoạn 512 bước. Tuy nhiên như đã phân tích và lý giải trước đó, những giá trị này đã được kiểm soát và điều chỉnh theo hộp động cơ servo của bạn. Trong trường hòa hợp của tôi, giá trị từ 102 mang đến 470 khớp ứng với địa điểm 0 đến 180 độ.
Trong phần thiết lập, họ cần xác định tốc độ xung I2C, đặt địa chỉ trình điều khiển và tinh chỉnh và đặt tần số thành 50Hz.
Trong phần vòng lặp, sử dụng các hàm setChannelPWM () với pwmForAngle (), bọn họ chỉ đề nghị đặt servo theo góc ao ước muốn.
Tôi đã kết nối một servo lắp thêm hai cùng với trình điều khiển và tinh chỉnh và như tôi dự đoán, nó ko ở vị trí y như ban đầu, và đó là vì những động cơ mà tôi đang thực hiện là bản sao phải chăng tiền và chúng không xứng đáng tin cậy. Tuy nhiên, đây không hẳn là vấn đề lớn vì sử dụng phiên bạn dạng Servo_Evaluator, chúng ta cũng có thể đặt các cài đặt đầu ra không giống nhau cho mỗi servo. Bọn họ cũng có thể điều chỉnh địa điểm 90 độ trong trường phù hợp nó không bước đầu ở giữa. Theo cách đó, tất cả các servo sẽ chuyển động như nhau cùng vị trí góc chính xác.
Điều khiển các servo với trình điều khiển và tinh chỉnh PCA9685
Chúng ta đã tới một ví dụ nữa tinh chỉnh và điều khiển nhiều servo với tương đối nhiều trình tinh chỉnh và điều khiển PCA9685.

Điều khiển 22 động cơ Servo với Arduino cùng PCA9685
Với mục tiêu đó, họ cần kết nối các trình tinh chỉnh với nhau và kết nối showroom phù hợp lựa chọn miếng hàn. Đây là sơ đồ dùng mạch:

#include #include "PCA9685.h"PCA9685 driver;// PCA9685 outputs = 12-bit = 4096 steps// 2.5% of 20ms = 0.5ms ; 12.5% of 20ms = 2.5ms// 2.5% of 4096 = 102 steps; 12.5% of 4096 = 512 stepsPCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg)// Second ServoPCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg)void setup() Wire.begin(); // Wire must be started first Wire.setClock(400000); // Supported baud rates are 100kHz, 400kHz, and 1000kHz driver.resetDevices(); // Software resets all PCA9685 devices on Wire line driver.init(B000000); // Address pins A5-A0 set to B000000 driver.setPWMFrequency(50); // set frequency to 50Hzvoid loop() driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(0)); delay(1000); driver.setChannelPWM(0, pwmServo.pwmForAngle(90)); delay(1000);Vì vậy, họ nên tạo đối tượng PCA9685 riêng mang lại từng trình điều khiển, xác định địa chỉ cửa hàng cho từng trình điều khiển cũng như đặt tần số thành 50Hz. Bây chừ chỉ bắt buộc sử dụng các hàm setChannelPWM () với pwmForAngle (), chúng ta cũng có thể đặt ngẫu nhiên servo làm sao ở ngẫu nhiên trình điều khiển nào để định vị bất kỳ góc nào chúng ta muốn.
Dịch từ: https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/