Tải bản đầy đủ (.doc) (16 trang)

Tài liệu Hướng dẫn ROBOCON 2005 Sample Robots pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (704.45 KB, 16 trang )

Hướng dẫn
ROBOCON 2005 Sample Robots
Người dịch:

www.robocon.vn
www.skynet.com.vn
Hà nội 2006
Nội dung
Chương 1: Điều khiển DC Motor
1.1 Giới thiệu hoạt động DC motor
1.2 Điều khiển hướng chuyển động dùng mạch cầu H
1.3 Điều khiển DC motor dòng nhỏ (1A) dùng L293B
1.4 Điều khiển DC motor dòng lớn (2A) dùng L298
1.5 Điều khiển tốc độ DC Motor dùng chỉnh độ rộng xung (Pulse Width Modulation
-PWM)
1.6 Phần cứng Pulse Width Modulation (PWM)
1.7 Phần mềm Pulse Width Modulation (PWM)
Chương 2: Dò đường trắng dùng Sensor hồng ngoại (IR)
2.1 các đặc tính của IR sensor
2.2 IR Sensor điều biến
Chương 3: Lập trình Robot tự động
3.1 Chạy theo đường trắng
3.2 Dò và đếm những đường cắt
Chương 1: Điều khiển DC Motor
1.1 Giới thiệu hoạt động DC motor
Để cho motor 1 chiều hoạt động, chúng ta cần đặt 1 điện áp 1 chiều vào motor and 1
dòng điện 1 chiều sẽ chạy qua motor, motor sẽ quay theo 1 chiều nào đó.
Nếu chúng ta đổi chiều của điện áp 1 chiều này, motor sẽ quay ngược lại
Chú ý: điện áp V và dòng I không nên vượt quá giá trị được ghi trên motor, nếu
không motor sẽ bị hỏng. Tuy nhiên nếu ta đặt 1 điện áp thấp hơn V hoặc 1 dòng điện
thấp hơn I, thì tốc độ và độ chịu tải của motor sẽ giảm theo.


1.2 Điều khiển hướng chuyển động dùng mạch cầu H
Để điều khiển hướng quay của motor 1 chiều, chúng ta cần đặt điện áp lên motor. Có
1 mạch phổ biến dùng để điều khiển motor gọi là cầu H. Nó được gọi như vậy bởi vì
mạch này trông giống hình chữ ‘H’. Một trong những khả năng cực hay của mạch này
là nó cho phép điều khiển motor tiến lên hoặc lùi lại ở bất kỳ tốc độ nào, ngoài ra nó
còn có thể dùng 1 nguồn điện độc lập [1].
Khi đầu vào ‘Direction’ ở trạng thái cao thì motor sẽ chuyển sang chế độ hướng bình
thường. Nếu đầu vào ‘Direction’ ở trạng thái thấp thì motor sẽ quay ngược chiều.
Có rất nhiều loại IC dùng cho mạch cầu H. Loại phổ thông dùng cho motor dòng thấp
là L293B và motor dòng cao là L298.
1.3 Điều khiển DC motor dòng nhỏ (1A) dùng L293B
Ứng dụng điển hình của L293B được vẽ trên hình dưới [2]. Vs là điện áp đặt vào
motor và có thể lên tới 36V. Dòng lớn nhất của L293B có thể lên tới 1A mỗi kênh.
Một IC L293B có thể dùng để điều khiển 2 motor. Đầu vào 2 và 7 dùng để điều khiển
motor 1. Đầu 10 và 15 dùng để điều khiển motor 2. Diode D1 và D8 tạo 1 mạch cặp.
L293B là một IC phổ thông có thể mua ở các cửa hàng điện tử (giá khoảng 20 ngàn
đồng – tham khảo www.skynet.com.vn)
Trong các robot tự động, chúng tôi sử dụng con L293B để điều khiển motor rẽ trái và
phải. Mạch được vẽ trên hình dưới đây.
Trong sơ đồ P1.1 và P1.3 là các tín hiệu điều khiển chiều motor từ con vi sử lý
87C552. Những tín hiệu điều khiển hướng này được tổ hợp AND với các tín hiệu điều
biến độ rộng xung PWM0 và PWM1 để điều khiển tốc độ motor. Chúng tôi sẽ giải
thích việc điều khiển này trong mục sau.
Nguồn motor được cung cấp vào chân 8 của con L293B. Điện áp thực tế phụ thuộc
vào thông số của motor, thường từ 9V đến 12V. Robot mẫu này sử dụng điện áp 12V.
Chân 16 được nối vào điện áp 5V logic dùng làm nguồn IC.
L1 và L2 tách nguồn nuôi L293B ra khỏi hệ thống. Chúng hoạt động giống như
những bộ lọc các tín hiệu nhiễu được sinh ra bởi motor.
1.4 Điều khiển DC motor dòng lớn (2A) dùng L298
L298 cũng tương tự như con L293B nhưng nó cho phép dòng lớn hơn. Ứng dụng điển

hình được miêu tả như sau [3]. (Giá con này khoảng 40 ngàn đồng – tham khảo
www.skynet.com.vn)
Cho ứng dụng dòng lớn hơn, chúng ta dùng 2 kênh như hình vẽ trên. Vs là nguồn
motor và Vss là nguồn logic. Điện trở Rs được dùng để hạn chế.
Trong robot mẫu điều khiển bằng tay, chúng tôi dùng con L298 để điều khiển 2 motor
dòng lớn (2A). Mạch được vẽ như hình dưới đây.
1.5 Điều khiển tốc độ DC Motor dùng chỉnh độ rộng xung (Pulse Width Modulation
-PWM)
Điều khiển độ rộng của xung được làm bằng cách tắt bật nhanh nguồn điện lên
motor. Nguồn áp 1 chiều DC sẽ chuyển thành tín hiệu xung vuông, thay đổi từ
12V xuống 0V, tạo cho motor một loạt các cú sốc điện.
Nếu tần số bật tắt mà đủ cao, motor sẽ chạy ở một tốc độ ổn định nhờ mômen quay
của bánh xe.
Bằng cách thay đổi chu kỳ hoạt động của tín hiệu (thay đổi độ rộng xung – PWM),
tức là khoảng thời gian “Bật”, nguồn điện trung bình đặt lên motor sẽ thay đổi và
dẫn đến thay đổi tốc độ. [4][5]
1.6 Phần cứng Pulse Width Modulation (PWM)
Điều khiển độ rộng xung (PMW) có thể dùng IC thời gian NE555. Mạch dùng con
này được thể hiện trên hình vẽ dưới đây. [6]
Trong mạch này độ rộng “Bật” của xung phụ thuộc vào điện áp đặt lên đầu vào chân 5
(R
A
và C giữ nguyên). Và chu kỳ của xung vuông phụ thuộc vào tín hiệu Trigger.
Trong robot mẫu điều khiển tay, 2 con NE555 tạo thành phần cứng để điều khiển độ
rộng xung như trên hình vẽ. Tín hiệu điều biến MOD được truyền từ biến trở điều
khiển tốc độ trên bàn điều khiển. VR1 và VR2 có thể được điều chỉnh để thay đổi chu
kỳ của xung vuông. VR3 dùng để chỉnh chu kỳ của sóng.
1.7 Phần mềm Pulse Width Modulation (PWM)
Sử dụng con vi sử lý có sẵ các tín hiệu PWM, như 87C552 như chúng tôi dùng cho
robot mẫu, chúng tôi có thể lập trình để tạo các sóng PWM.

Con 87C552 chứa 2 kênh điều biến PWM. Những kênh này tạo các xung theo độ rộng
và khoảng cách được lập trình. Tần số lặp lại được định nghĩa bởi thanh ghi 8-bit
trong tên là bộ chia PWMP, tạo nhịp đồng hồ cho bộ đếm. Bộ chia và bộ đếm dùng
chung cho cả 2 kênh PWM. Bộ đếm 8-bit dùng đếm 255, tức là từ 0 đến 254. Giá trị
của bộ đếm 8-bit được so sánh với nội dung của 2 thanh ghi: PWM0 và PWM1. Giả
sử nội dung của những thanh ghi này lớn hơn giá trị bộ đếm, thì đầu ra tương ứng
/PWM0 hay /PWM1 sẽ là THẤP. Nếu nội dung những thanh ghi này mà bằng hoặc
nhỏ hơn giá trị bộ đếm, tín hiệu ra sẽ là CAO. Chu kỳ làm việc do đó được xác định
bởi nội dung của 2 thanh ghi PWM0 và PWM1. Chu kỳ làm việc nằm trong khoảng
từ 0% đến 100% và có thể được lập trình tịnh tiến 1/255/
Độ lặp lại của tần số f
PWM
, với các tín hiệu ra PWMn được xác định bởi:
255)1(2 ×+×
=
PWMP
f
f
OSC
PWM
Nó cho ta tần số lặp lại từ 84.7Hz to 21.7kHz (f
OSC
=11.0592MHz) trong trường hợp
của chúng tôi. Bằng cách đưa vào các thanh ghi PWM giá trị là 00H hoặc FFH, các
kênh PWM sẽ cho tín hiệu ra mức CAO hoặc THẤP tương ứng. Vì bộ đếm 8-bit đếm
modul 255, nó có thể không bao giờ đạt tới giá trị của các thanh PWM khi chúng ta
đặt FFH.
Khi thanh ghi so sánh (PWM0 và PWM1) được nạp giá trị mới, thì đầu ra tương ứng
sẽ được cập nhật ngay lập tức. Việc này không cần phải đợi đến hết chu kỳ đếm. [7]
Mã nguồn C sau đây được lập cho các đầu ra PWM:

……
/* PWM for Philips 87c552 */
sfr at 0xFC PWM0 ; //Define the registers addresses
sfr at 0xFD PWM1 ;
sfr at 0xFE PWMP ;
……
……
……
PWMP=53; //The period of the pulse (set to around 400Hz)
PWM0=127; //Set 50% duty cycle for /PWM0
PWM1=63; //Set 25% duty cycle for /PWM1
……
[8][9]
Chương 2: Dùng Sensor hồng ngoại (IR) để dò vạch trắng
2.1 Các đặc tính của IR sensor
Trong con robot mẫu tự động này, chúng tôi sử dụng 2 linh kiện hồng ngoại (IR): một
linh kiện phát hồng ngoại (IR emitter) và một linh kiện nhận (IR receiver) tạo thành 1
cặp cảm biến sensor. Linh kiện phát sẽ tạo tia hồng ngoại và sau khi phản xạ sẽ truyền
tới linh kiện nhận.

Dòng điện đi qua linh kiện nhận sẽ tỉ lệ với cường độ năng lượng của tia hồng ngoại
mà nó nhận được.
Trong robot mẫu của chúng tôi, linh kiện phát và nhận được nối mạch theo sơ đồ hình
dưới đây. Khi TX ở trạng thái thấp, dòng sẽ đi qua linh kiện phát và nó sẽ phát ra tia
hồng ngoại. Nếu có 1 vật phản xạ mầu trắng thì năng lượng hồng ngoại sẽ phản hồi lại
và tạo một dòng cao hơn đi qua linh kiện nhận, do đó điện áp trên IRS0 sẽ hạ xuống.
Nếu vật phản xạ có mầu đen, hoặc mầu sẫm hơn thì điện áp trên IRS0 sẽ nâng lên.
Đọc giá trị điện áp này chúng ta có thể phân biệt được vạch dẫn đường màu trắng trên
nền nhà màu xanh.
2.2 IR Sensor điều biến

Độ chính xác của sensor hồng ngoại được miêu tả trên phần trước bị ảnh hưởng rất
nhiều bởi ánh sáng môi trường. Mức điện áp trên đầu ra của sensor IR không chỉ phụ
thuộc vào cường độ ánh sáng phản xạ mà còn bị thay đổi bởi điều kiện ánh sáng môi
trường.
Để giảm bớt sự ảnh hưởng của ánh sáng môi trường, chúng tôi dùng 1 sensor hồng
ngoại điều biến thay vì sensor IR thông thường.
Trong hệ thống sensor IR điều biến của chúng tôi, linh kiện phát được bật và tắt bởi 1
đồng hồ. Tín hiệu nhận được sau đó đi qua 1 mạch khuếch đại 1 chiều DC như trên
hình vẽ dưới đây. Tụ C2 trong mạch sẽ chặn dòng DC ra khỏi tín hiệu đi qua bộ
khuếch đại này. Chỉ có phần xoay chiều của tín hiệu thay đổi tương ứng với tia hồng
ngoại phản xạ phát ra từ bộ phát là được khuếch đại và tích hợp vào mức 1 chiều ở
đầu ra của mạch. Như vậy mức ra của mạch chỉ phụ thuộc vào tia hồng ngoại mà
không phụ thuộc vào ánh sáng môi trường. [10]
Chương 3: Lập trình một Robot tự động
Để hoàn thành các công việc của 1 robot tự động trong cuộc thi Robocon 2005, robot
phải có các tính năng sau:
1. khả năng lần theo vạch trắng
2. khả năng nhận biết và đếm các điểm giao nhau khi nó đi qua
3.1 Lần theo vạch trắng
Trong con robot tự động mẫu của chúng tôi, chúng tôi đặt 2 cặp sensor IR: bên trái
(Left) và bên phải (Right) ở phần đầu của robot. Khi sensor trái cắt đường trắng, giá
trị của sensor sẽ hạ xuống dưới mức điện áp ngưỡng đặt trước và chúng ta buộc phải
để cho robot chạy sang trái một vài bước để điều chỉnh hướng đi của nó. Hoặc khi
sensor phải cắt vào vạch trắng, giá trị của sensor phải sẽ thấp hơn giá trị ngưỡng đặt
sẵn, chúng ta phải cho robot chạy sang phải một vài bước để điều chính hướng chạy
chính xác. Nếu cả hai sensor đều không cắt vạch trắng thì chúng ta giả định là đã đi
đúng hướng và để nó chạy thẳng.
Thuật toán lần theo vạch trắng được miêu tả trong biểu đồ sau:
3.2 Dò và đếm những đường cắt

Để dò được những điểm giao nhau của các vach khi robot chạy qua, chúng tôi kiểm
tra cả sensor trái và phải. Nếu cả hai sensor đều cắt vạch trắng cùng lúc thì chúng ta
có thể cho rằng robot đã đi qua 1 điểm giao nhau. Trong trường hợp này, chúng ta
phải để cho robot đi tiếp vài bước để tránh đếm 2 lần điểm giao nhau này.
Thuật toán nhận biết và đếm điểm giao nhau được vẽ dưới đây:
Hàm C dưới đây là ví dụ cho 1 robot lần theo đường trắng và đếm vạch giao nhau khi
nó đi qua:
……
void move_robot(unsigned char step) {
int cnt;
cnt=0;
while(cnt<step) {
if (read_sensor(1)>ALIGN_THRESHOLD && read_sensor(2)>ALIGN_THRESHOLD) movet(FORWARD,1,0);
else if (read_sensor(1) <=ALIGN_THRESHOLD && read_sensor(2) >ALIGN_THRESHOLD) movet(TURN_LEFT,1,80);
else if (read_sensor(2) <=ALIGN_THRESHOLD && read_sensor(1) >ALIGN_THRESHOLD) movet(TURN_RIGHT,1,80);
else if (read_sensor(2) <=ALIGN_THRESHOLD && read_sensor(1) <=ALIGN_THRESHOLD) {
cnt++;
movet(FORWARD,8,0);
}
}
stop();
}
……
……
move_robot(3); // move the robot for 3 cross line
……
[11]
References
[1] />[2] />[3] />[4] />[5] />[6] />[7] />[8] />[9] />[10] bottom.pdf
[11] RoboconDemo05.c

×