LỰA CHỌN ĐỘNG CƠ BƯỚC

Lựa chọn hộp động cơ bước, bộ động cơ servo, bộ động cơ hybrid và một trong những số phụ khiếu nại đi kèm: Driver điều khiển, phanh từ tốt hộp tụt giảm cho bộ động cơ bước ⇒XEM CÁC LOẠI ĐỘNG CƠ

Trong gợi ý này, bọn họ sẽ mày mò cách thức hoạt động của động cơ servo và cách điều khiển động cơ servo bởi trình điều khiển và tinh chỉnh PWM Arduino và PCA9685. Bạn có thể xem đoạn clip sau hoặc đọc trả lời dưới đây.

Bạn đang xem: Lập trình điều khiển servo motor với board mạch arduino

Giới thiệu tổng quan về động cơ servo

Có những loại bộ động cơ servo và tác dụng chính của bọn chúng là năng lực điều khiển chính xác vị trí của trục. Động cơ servo là một hệ thống vòng kín đáo sử dụng bình luận vị trí để điều khiển chuyển động và vị trí sau cuối của nó.

*

Hệ thống vòng kín

Trong công nghiệp bộ động cơ servo là loại cảm biến phản hồi vị trí, thường là một bộ code hóa tất cả độ đúng chuẩn cao, trong khi trong các động cơ RC hoặc bé dại hơn, cảm biến vị trí thường là một chiết áp 1-1 giản. Vị trí thực tế được search thấy bởi những thiết bị này được đưa quay trở lại bộ phát hiện lỗi nơi nó được so sánh với địa chỉ đích. Sau đó, theo lỗi, bộ tinh chỉnh và điều khiển sửa vị trí thực tế của bộ động cơ để khớp với địa điểm đích.

*

Hệ thống vòng kín Servo

Trong gợi ý này, cửa hàng chúng tôi sẽ xem xét cụ thể về các động cơ servo thường gặp. Công ty chúng tôi sẽ giải thích cách các servo này vận động và biện pháp điểu khiển chúng bởi Arduino.

*

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

*

Ứng dụng hộp động cơ Servo Robot cánh tay Hexapod Robot hình người

⇒Robot vẽ Axidraw Việt Machine thực hiện động cơ servo:Xem trên đây

Cách thức hoạt động vui chơi của Servo RC / cổ điển

Bên vào một servo cổ diển có bốn nhân tố chính, bộ động cơ DC, hộp số, biến hóa trở và mạch điều khiển. Động cơ DC có vận tốc cao cùng mô-men xoắn thấp nhưng hộp số giảm tốc độ xuống khoảng 60 vòng / phút, mặt khác tăng mô-men xoắn.

*

Cách thức buổi giao lưu của Servo phía bên trong các thành phần Mạch tinh chỉnh chiết áp động cơ DC

Chiết áp được gắn trên bánh răng sau cuối hoặc trục đầu ra, do đó động cơ cũng quay chiết áp, tạo thành một năng lượng điện áp liên quan đến góc tuyệt đối của trục đầu ra. Trong mạch điều khiển, điện áp phân tách áp này được đối chiếu với năng lượng điện áp tới từ đường tín hiệu. Nếu cần, bộ tinh chỉnh và điều khiển kích hoạt mạch ước H tích hợp cho phép động cơ con quay 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 bộ động cơ servo được điều khiển bằng cách gửi một loạt các xung qua mặt đường tín hiệu. Tần số của tín hiệu điều khiển phải là 50Hz hoặc một chu kỳ luân hồi xung là 20ms. Độ rộng của xung xác định vị trí góc của servo và những loại servo này thường có thể xoay 180 độ (chúng có giới hạn vật lý lúc di chuyển).

*

Tín hiệu tinh chỉnh động cơ RC Servo

Nói chung các xung bao gồm tại 1ms khớp ứng với địa điểm 0 độ, 1,5ms mang lại 90 độ với 2ms cho 180 độ. Tuy vậy thời gian tối thiểu và về tối đa của các xung đôi khi có thể đổi khác theo những loại không giống nhau và chúng rất có thể là 0,5ms mang đến 0 độ cùng 2,5ms mang đến vị trí 180 độ.

Điều khiển hộp động cơ Arduino Servo

Chúng ta hãy bình chọn những tin tức trên và có tác dụng một ví dụ thực tiễn về tinh chỉnh và điều khiển một servo cổ điển bằng Arduino. Tôi sẽ áp dụng MG996R, một độ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 có dòng định hình của servo là 2.5A. Dòng điện chạy từ 500mA cho 900mA và điện áp hoạt động từ 4,8 mang đến 7,2V.

*

Điều khiển bộ động cơ Arduino Servo MG996R

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

*

Sơ thứ mạch tinh chỉnh và điều khiển Arduino

Chúng ta chỉ việc kết nối chân tinh chỉnh và điều khiển của servo với ngẫu nhiên chân tiên tiến nhất nào của board Arduino, liên kết Ground và dây dương với nguồn tích điện 5V mặt ngoài, đồng thời liên kết ground của Arduino cùng với chân GND của servo.

Code điều khiển động cơ Servo tự Arduino

Bây giờ họ hãy xem code Arduino để tinh chỉnh động cơ servo. Code rất solo giản. Chúng ta chỉ cần xác định chân nhưng mà servo được kết nối, xác định chân đó là cổng đầu ra và vào phần vòng lặp tạo thành các xung với chu kỳ và tần số ví dụ như chúng ta đã 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 chuyển động với servo. Các xung gồm thời lượng 0,6ms tương xứng với địa chỉ 0 độ, 1,45ms đến 90 độ cùng 2,3ms mang lại 180 độ.

Xem thêm: Trị Mụn Bằng Rau Diếp Cá Trị Mụn Webtretho, Trị Mụn Bằng Rau Diếp Cá Liệu Có Tốt

Tôi đã liên kết một sản phẩm công nghệ đo vạn năng nối liền với servo để đánh giá dòng điện. Mức mẫu điện buổi tối đa nhưng mà tôi nhận ra là lên tới mức 0,63A. Vâng, cũng chính vì đây chưa phải là bạn dạng gốc TowerPro MG996R, nhưng là bản sao phải chăng hơn, rõ ràng có hiệu suất kém hơn.

*

Động cơ Servo MG996R

Tuy nhiên, họ hãy coi một cách thuận tiện hơn để điều khiển các servo bằng Arduino. Đó là sử 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 khổng lồ go lớn a particular angle delay(1000); myservo.write(90); delay(500); myservo.write(135); delay(500); myservo.write(180); delay(1500); Ở đây bọn họ chỉ 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() xác minh chân cơ mà servo được kết nối cũng tương tự xác định vị trị tối thiểu và buổi 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ỉ bắt buộc đặt vị trí của servo tự 0 cho 180 độ. Với thư viện này, chúng ta có thể điều khiển tới 12 servo cùng lúc hoặc 48 servo bằng phương pháp sử dụng board Arduino Mega.

Trình tinh chỉnh PWM / Servo Arduino và PCA9685

Ngoài ra còn có một biện pháp khác để tinh chỉnh servo bằng Arduino với đó là áp dụng trình tinh chỉnh servo PCA9685. Đây là trình tinh chỉnh và điều khiển servo và servo 16 kênh 12 bit, giao tiếp với Arduino bằng bus I2C. Nó bao gồm một đồng hồ tích đúng theo để hoàn toàn có thể chạy 16 động cơ cùng lúc, hoặc chủ quyền với Arduino.

*

Trình điều khiển Servo Arduino với PCA9685

Chúng ta hoàn toàn có thể xâu chuỗi lên tới 62 trình tinh chỉnh này trên và một bus I2C. Bởi vì vậy, về mặt lý thuyết, chúng ta cũng có thể điều khiển tới 992 hộp động cơ chỉ bởi hai chân I2C từ board Arduino. 6 chân chọn add được áp dụng để đặt địa chỉ I2C không giống nhau cho từng trình tinh chỉnh và điều khiển bổ sung. Bọn họ chỉ đề nghị kết nối các miếng hàn theo bảng này.

*

Địa chỉ PCA9685 chọn Chân Board I2CAddress

Đây là sơ vật dụng mạch và chúng ta có thể nhận thấy rằng bọn họ cần một nguồn hỗ trợ điện riêng cho các servo.

*

Sơ vật dụng mạch Arduino cùng PCA9685

Các linh phụ kiện cần thiếtĐộng cơ Servo MG996RTrình tinh chỉnh và điều khiển Servo PCA9685 PWMBoard ArduinoNguồn cung cấp điện 5V- 6A DC

=> vị trí bán linh phụ kiện điện tử hóa học lượng:Xem trên đây

Bây giờ hãy xem code Arduino. Để điều khiển trình điều khiển servo này, chúng ta sẽ thực hiện thư viện PCA9685 rất 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, và 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); // mix 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 hàm các thư viện và xác định đối tượng người sử dụng PCA9685. Sau đó, sử dụng đối tượng người tiêu dùng Servo_Evaluator xác minh chu kỳ xung hoặc cổng đầu ra PWM của trình điều khiển. Chú ý rằng các đầu ra là 12 bit, độ sắc nét 4096 bước. Do vậy, thời gian xung tối thiểu là 0,5ms hoặc 0 độ sẽ khớp ứng với 102 bước và thời lượng xung buổi tối đa là 2,5ms hoặc 180 độ tại vị trí 512 bước. Mà lại như đã giải thích trước đó, các giá trị này đã được điều chỉnh theo động cơ servo của bạn. Trong trường phù hợp của tôi, giá trị từ 102 mang đến 470 khớp ứng với vị trí 0 đến 180 độ.

Trong phần thiết lập, chúng ta cần khẳng định tốc độ xung I2C, đặt địa chỉ cửa hàng trình tinh chỉnh và đặt tần số thành 50Hz.

Trong phần vòng lặp, sử dụng những hàm setChannelPWM () với pwmForAngle (), bọn họ chỉ buộc phải đặt servo theo góc ao ước muốn.

Tôi đã liên kết một servo vật dụng hai cùng với trình điều khiển và tinh chỉnh và như tôi dự đoán, nó không ở vị trí giống như ban đầu, và chính là vì các động tuy nhiên tôi đang sử dụng là phiên bản sao tốt tiền và chúng không xứng đáng tin cậy. Tuy nhiên, đây chưa phải là sự việc lớn vì sử dụng phiên bản Servo_Evaluator, chúng ta cũng có thể đặt các thiết đặt đầu ra khác nhau cho từng servo. Bọn họ cũng có thể điều chỉnh địa điểm 90 độ trong trường vừa lòng nó không bước đầu ở giữa. Theo cách đó, tất cả các servo sẽ hoạt động như nhau với vị trí góc chính xác.

Điều khiển những servo cùng với trình điều khiển PCA9685

Chúng ta đã tới một ví dụ như nữa điều khiển nhiều servo với rất nhiều trình điều khiển PCA9685.

*

Điều khiển 22 hộp động cơ Servo cùng với Arduino cùng PCA9685

Với mục đích đó, họ cần kết nối những trình tinh chỉnh với nhau cùng kết nối add phù hợp lựa chọn miếng hàn. Đây là sơ vật dụng mạch:

*

Bây giờ bọn họ hãy coi code Arduino

#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, và 1000kHz driver.resetDevices(); // Software resets all PCA9685 devices on Wire line driver.init(B000000); // Address pins A5-A0 set to lớn B000000 driver.setPWMFrequency(50); // mix 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 đến từng trình điều khiển, xác định add cho từng trình điều khiển cũng như đặt tần số thành 50Hz. Hiện thời chỉ yêu cầu sử dụng những hàm setChannelPWM () với pwmForAngle (), bạn có thể đặt bất kỳ servo như thế nào ở bất kỳ trình điều khiển và tinh chỉnh nào để định vị bất kỳ góc nào họ muốn.

Dịch từ:https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/