I. PHƯƠNG THỨC ĐIỀU KHIỂN

Sử dụng TIMER1 bên trên arduino, việc áp dụng nó để xuất ra xung điều khiển và tinh chỉnh servo với độ đúng đắn cao là vô cùng khả thi. Nó cho phép servo tảo với góc rất nhỏ, nhỏ dại đến kích cỡ nào Xung điều khiển xuất ra chất nhận được ta điều khiển và tinh chỉnh servo cùng với góc lệch bé dại nhất là 0.006 độ.

Bạn đang xem: Điều khiển động cơ servo với arduino với biên độ góc cực nhỏ


II.Tìm hiểu xung tinh chỉnh SERVO.

Là xung PPM (Cũng là một xung PWM ). Với phạm vi xung cao tỷ lệ thuận cùng với góc lệch của SERVO.

*

Với phạm vi xung tự 1ms (1000us) => 2ms (2000us) thì servo được đặt với góc lệch tương ứng trong khoảng 0 =>180 (độ). Xung tất cả chu kì 20ms, mang đến phép đặt trên 10 kênh servo khác nhau.

III.Tạo xung tinh chỉnh và điều khiển có độ chính xác cao hơn

Ta vẫn biết ưu điểm của bộ TIMER 1 là có thể chấp nhận được đếm cùng với độ phân giải 16bit. Cùng với chính là khả năng tùy chỉnh thiết lập ngắt tràn (TOP_value).

3.1.Đề bài

Tạo xung chu kì 5ms, với phạm vi xung cao thay đổi được trong tầm 1000us => 2000 us.

3.2.Code tạo thành xung trên pin ~9 theo đề bài

unsigned int Gia_tri_moi;void setup(){ TCCR1A = 0; TCCR1B = 0; // RESET lại 2 thanh ghi DDRB |= (1

*

3.3.Test servo

Giữ nguyên code trên, sửa hàm loop thành:

void loop() set(2000); // 0 độ delay(1000); set(4000); // 180 độ delay(1000);Kết quả

*

Servo chỉ lệch góc trong tầm 0 cho 90 độ !!!!!!!!!!!!!!!!!!!

Code sai ??!!!

Đến đây, bản thân đã hồi hộp khi làm cho đúng triết lý mà nó lại không như định hướng tí như thế nào .

Lý thuyết nói: Xung gồm độ rộng lớn 1ms => lệch 0, xung rộng lớn 2ms => lệch 180. Xung bao gồm tần số 50 hz. (xung PPM buộc phải độ dài buổi tối thiểu 20ms để (có thể) ghép tối đa 10 servo).

Xem thêm: Cách Chọn Chào Mào Non Từ Lúc Còn Trong Tổ, Cách Chọn Chào Mào Đực

Tất nhiên bản thân đã đáp ứng đúng tiêu chuẩn trên.

Sự thật đằng sau!

Đã vậy thì mình sẽ đánh giá xung của thư viện điều khiển Servo (servo.h) xem gồm sự sai khác gì không.

#include Servo s9, s10; // chế tạo ra 2 Objectvoid setup() // sạc ra ~9, ~10 s9.attach(9); s10.attach(10); // xuất xung s9.write(0); // 0 độ s10.write(180); //180 độ void loop()

*

Kết quảF_pwm=50hz.Độ rộng lớn xung: 530us (0.53ms) khớp ứng góc lệch 0.Độ rộng lớn xung : 2410us (2.41ms) tương ứng góc lệc 180.

Đó, thực tiễn đó.!

Sửa lại độ rộng xung

unsigned int Gia_tri_moi;void setup(){ TCCR1A = 0; TCCR1B = 0; // RESET lại 2 thanh ghi DDRB |= (1

*

OK, thành công!

IV.TỐI ƯU HÓA

Sử dụng P_clock=16mhz nâng tối đa độ sắc nét của Timer 16bit. Khi đó độ phân giải nhỏ dại nhất là 0.0625us trên 1 xung P_clock.

unsigned int Gia_tri_moi;void setup()= (1 180 độ void loop() set(8480); // 0 độ delay(2000); set(38550); // 180 độ delay(2000);

*

V.Nén thư viện và sử dụng.

1. Mua về thư viện

Chú ý:

Thư viện này chỉ thực hiện cho 2 sạc là ~9 (PB1) và ~10 (PB2)(Ở phiên phiên bản này) bạn sẽ không thể thực hiện thư viện để tinh chỉnh Servo ở những pin còn lại. (Tranh chấp timer1)

Link:

https://drive.google.com/file/d/0BzM… (mirror)

2. Giới thiệu thư viện

Thực chất vấn đề cài thư viện chỉ cần Inlude các hàm .

— void port_attach(select_port);

Gọi hàm này 1 lần để thiết đặt đầu ra đến chân PORT.

select_port” chỉ được phép với 2 quý hiếm là “PB1” khớp ứng pin ~9, với “PB2” khớp ứng pin ~10.