Để đ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].
16 trang |
Chia sẻ: maiphuongtt | Lượt xem: 1792 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Hướng dẫn ROBOCON 2005 Sample Robots, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Hướng dẫn
ROBOCON 2005 Sample Robots
Người dịch:
roboconaz@gmail.com
www.robocon.vn
www.skynet.com.vn
Hà nội 2006
Nội dung
Chương 1: Điều khiển DC Motor
Giới thiệu hoạt động DC motor
Điều khiển hướng chuyển động dùng mạch cầu H
Điều khiển DC motor dòng nhỏ (1A) dùng L293B
Điều khiển DC motor dòng lớn (2A) dùng L298
Điều khiển tốc độ DC Motor dùng chỉnh độ rộng xung (Pulse Width Modulation -PWM)
Phần cứng Pulse Width Modulation (PWM)
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
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.
Đ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.
Đ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.
Đ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.
Đ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]
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 (RA 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.
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ố fPWM, với các tín hiệu ra PWMn được xác định bởi:
Nó cho ta tần số lặp lại từ 84.7Hz to 21.7kHz (fOSC=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:
khả năng lần theo vạch trắng
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) movet(TURN_LEFT,1,80);
else if (read_sensor(2) 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