LỜI NÓI ĐẦU Vi điều khiển viết tắt Micro-controller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống. Theo các tập lệnh của người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó.
Vi điều khiển có thể được coi là một máy tính được tích hợp trên một chip, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất là một hệ thống bao gồm một vi xử lí có hiệt suất đủ dùng và giá thành thấp (khác với các bộ vi xử lí đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các module vào ra, ADC, DAC, timer, ngắt… Ở máy tính thì các module thường được xây dựng bởi các chip và mạch ngoài. Hầu hết các vi điều khiển ngày nay được xây dựng dựa trên kiến trúc Harvard, kiến trúc này định nghĩa bốn thành phần cần thiết của một hệ thống nhúng. Những thành phần này là lõi CPU, bộ nhớ chương trình (thông thường là ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu RAM, một hoặc vài bộ nhớ định thời và các cổng vào/ra để giao tiếp với các thiết bị ngoại vi và các môi trường bên ngoài- tất cả các khối này được thiết kế trong một vi mạch tích hợp. Vi điều khiển khác với các vi xử lí đa năng ở chỗ là nó có thể hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài. Đề tài thiết kế xe chạy theo đường vẽ sẵn được chúng em thực hiện dựa trên nền kiến thức về mạch điện tử, vi xử lý nói chung và vi điều khiển họ 8051 nói riêng. Thực hiện đề tài này là tiền đề để chúng em nắm được kiến thức các môn học trong các kì học, củng cố và bổ sung những kinh nghiệm còn thiếu.
Hà Nội, ngày 14 tháng 4 năm 2013 Nhóm sinh viên thực hiện
MÔ TẢ KĨ THUẬT Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 2
Đề tài: Thiết kế robot dò đường
1. Phần mạch Hai mạch chính sử dụng trong bài tập này là mạch SENSOR để dò đường và mạch VI XỬ LÍ VÀ ĐỘNG CƠ để thu tín hiệu, xử lí và đưa ra tín hiệu điều khiển hai động cơ để dẫn hướng. Ngoài ra, để nạp chương trình cho vi điều khiển, chúng em sử dụng mạch nạp ISP và nạp trực tiếp cho vi điều khiển. a. Mạch Sensor Đường đi của xe được vẽ bằng vạch đen nằm trên nền trắng. Để xe nhận ra được đường đi, chúng em sử dụng các cặp led thu phát hồng ngoại đặt gần nhau. Các led phát phát ra ánh sáng màu đỏ đục, các led thu có điện trở phụ thuộc vào có nhận được ánh sáng phản xạ từ đường đi hay không. Khi cặp thu phát ở vị trí nền trắng, ánh sáng từ led phát phát ra phản xạ trên nền trắng và tới led thu. Led thu thu được ánh sáng này thì điện trở giảm xuống, điện áp ở cực Anot (+) của led thu gần về 5V. Ngược lại, ở vị trí vạch đen, ánh sáng từ led phát phát ra không phản xạ lại được do bị vạch đen hấp thụ. Led thu không nhận được ánh sáng này nên điện áp ở cực Anot của nó gần bằng 0 V. Điện áp ra từ led thu được đem so sánh với điện áp chuẩn đã được tinh chỉnh hợp lý qua IC LM393 để cho ra mức logic 0-1, đưa vào vi điều khiển xử lý. Hình ảnh minh họa như sau:
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 3
Đề tài: Thiết kế robot dò đường
IC LM393 gồm 2 bộ so sánh:
Khi led ở ngoài nền trắng, mức điện áp trên led thu đo được là cao hơn so với mức so sánh điện áp ngưỡng, ngược lại, mức điện áp thu đo được khi bắt vào vạch đen là thấp hơn so với mức so sánh điện áp. Điện áp so sánh (Vref) được đặt qua biến trở 20k Khi ở ngoài nền trắng: Vled thu >Vref nên Output=0 Khi bắt vạch đen: Vled thu Để bắt đường được tốt, chúng em sử dụng 4 cặp led thu phát được bố trí như sau (LT: Led thu; LP: Led phát) LT1
LT2
LT3
LT4
LP1
LP2
LP3
LP4
Chiều rộng của 2 Led giữa là 28mm ( ôm 2 bên vạch )
Sơ đồ nguyên lí: Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 4
Đề tài: Thiết kế robot dò đường
b. Khối nguồn Trong khối nguồn chúng ta sử dụng 1 bình ắc quy khô 12V.Mặt khác hệ thống điều khiển cần phải có nguồn 5V để cung cấp cho khối VI ĐIỀU KHIỂN và khối SENSORS. Để tạo nguồn 5V DC chúng ta sử dụng IC ổn áp 7805, với đầu vào gồm đất chung của toàn hệ thống và nguồn 12 V DC lấy trực tiếp từ nguồn ắc quy.2 IC ổn áp LM7805 được lắp một tản nhiệt loại nhỏ để tản bớt nhiệt khi hoạt động giúp khối nguồn cũng như toàn bộ mạch hoạt động ổn định. Cùng với hệ thống các tụ điện tạo ổn áp cho nguồn.
Mạch nguồn như sau: Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 5
Đề tài: Thiết kế robot dò đường
1 con IC 7805 cung cấp nguồn cho mạch chính và chip. 1 con cung cấp cho sensor, cung cấp riêng để chống nhiễu cho sensor Trong mạch nguồn có sử dụng một cầu chì kí hiệu là SW3 phòng xảy ra sự cố chập mạch, nhằm bảo vệ cho mạch nguồn cũng như các khối liên quan khác. c. Khối vi điều khiển Khối này gồm có Vi điều khiển AT89S52, mạch RESET, mạch tạo dao động, các led báo vạch về từ mạch SENSORS, Jumpers đầu vào dùng để nạp ISP.
+ Vi điều khiển AT89S52 được chúng ta sử dụng vì nó có đầy đủ những chức năng của vi điều khiển AT89C51. Ngoài ra còn có thêm một timer (timer2) và có bộ nhớ Flash, công nghệ nạp ISP (In System Programming) tức là nạp mà không cần tháo chip ra khỏi mạch, giúp việc lập trình và test rất thuận tiện. Giá thành thậm chí còn rẻ hơn AT89C51.
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 6
Đề tài: Thiết kế robot dò đường + Mach RESET có chức năng reset lại hoạt động của vi điều khiển, được nối vào chân số 9 của vi điều khiển là chân tích cực cao. Khi chân số 9 được set lên 1 thì vi điều khiển được reset lại. Để chống rung khi ấn nút, chúng ta dùng một tụ hóa nối song song với nút ấn. + Mạch DAO ĐỘNG sử dụng thạch anh 12Mhz, như vậy một chu kì máy là 1us, rất thuận tiện cho việc tính toán và lập trình. Tuy nhiên có hạn chế là không thể truyền thông với máy tính qua cổng COM (đòi hỏi thạch anh 11.0592Mhz). Thạch anh này được nối đất với tụ gốm 33p để lọc nhiễu. + Các Jumpers dùng để nạp ISP sử dụng mạch nạp ISP loại đơn giản, chỉ cần dùng 5 chân: GND, MOSI, MISO, SCK, RESET nối với cổng LPT của máy tính thông qua jack DB25. Sử dụng kiểu nạp ISP này rất thuận tiện khi lập trình và test xe vì không phải tháo chip (hạn chế hỏng, gẫy chân chip), tốc độ nạp chấp nhận được, ít khi bị lỗi, chi phí thấp. + Các led báo vạch về dùng để phản ánh tình trạng của các led thu phát ở mạch SENSORS. Khi một cặp thu-phát bắt vào vạch đen thì led báo tương ứng sẽ tắt và ngược lại. Nói cách khác, các led báo này phản ánh vị trí lệch của xe so với vạch đen, từ đó giúp debug chương trình thuận tiện hơn rất nhiều.
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 7
Đề tài: Thiết kế robot dò đường
d. Khối điều khiển động cơ Để điều khiển động cơ quay thuận ngược nhanh chậm, chúng ta không thể dùng trực tiếp các chân của vi điều khiển được vì dòng ra của chân vi điều khiển nhỏ. Do vậy chúng ta sử dụng IC L293D gồm hai mạch cầu H bên trong, mỗi mạch cầu H dùng điều khiển một động cơ có sơ đồ khối như hình vẽ:
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 8
Đề tài: Thiết kế robot dò đường
Trong khối này còn sử dụng một công tắc nguồn, có tác dụng bật tắt động cơ khi điều chỉnh vị trí của xe trước khi chạy. Bảng chân lý mô tả hoạt động của L293D trên một kênh như sau
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 9
Đề tài: Thiết kế robot dò đường Giả sử ta cần điều khiển động cơ bên trái. Ba chân cần điều khiển là IN1, IN2, EN1 và đầu ra OUT1 OUT2 của L293D được nối với hai dây của động cơ một chiều. TRẠNG THÁI
IN1
IN2
EN1
DỪNG
X
X
0
QUAY THUẬN
1
0
1
QUAY NGƯỢC
0
1
1
Sơ đồ nguyên lí chung:
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 10
Đề tài: Thiết kế robot dò đường
2. Mô tả thiết kế Cơ Khí cho xe Thân xe được làm từ một thanh nhôm hình hộp chữ nhật :12x25,,đằng trước có gắn bánh lái có thể quay 360o, do vậy chuyển động của xe phần lớn do hai bánh sau quyết định. Hai bánh đằng sau được lắp vào hai trục của động cơ một chiều để lái chiều chuyển động của xe. Hai động cơ sử dụng là động cơ một chiều loại 12V được gắn chặt vào thân xe bằng các đai và ốc vít Mạch SENSORS kết nối với mạch vi điều khiển qua sợi cáp 8 sợi trong đó có hai sợi cấp nguồn 5V và 6 sợi truyền tín hiệu của mạch SENSORS về cho vi điều khiển.
Phần cơ khí của xe:
3.Thiết Kế Phần Mềm Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 11
Đề tài: Thiết kế robot dò đường Chương trình viết cho vi điều khiển sử dụng ngôn ngữ Assembler với trình dịch là phần mềm Keil C. Ưu điểm của ngôn ngữ Assembler là mã nguồn chạy nhanh và gọn, giúp sinh viên nắm chắc cấu trúc phần cứng của vi điều khiển cũng như các bước lập trình phần mềm. Tuy nhiên nhược điểm của ngôn ngữ này là khó hiểu và rắc rối. Sơ đồ khối điều khiển được tóm tắt như sau: MẠCH
MẠCH
SENSORS
VI ĐIỀU KHIỂN
ĐIỀU KHIỂN ĐỘNG CƠ
XE CHUYỂN ĐỘNG
Lưu đồ thuật toán điều khiển:
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 12
Đề tài: Thiết kế robot dò đường KHỞI TẠO GIỚI THIỆU
DÒ ĐƯỜNG
NO
YES LỆCH
Đi thẳng
Cua trái Or Cua phải
NO
VẠCH
YES
Chương trình con khi bắt vạch đích
CODE cho vi điều khiển #include <REGX51.H>
Nhóm 1_D09XLTH1
Đồ án thiết kế hệ thống nhúng
Page 13
Đề tài: Thiết kế robot dò đường #include <string.h> /*********Cac ham define********************/ //#define menu P3_0 #define ok P3_0 #define down P3_1 #define up P3_2 #define PWM1 P1_6 #define PWM2 P1_7 #define div1_1 P2_3 #define div1_2 P2_1 #define div2_1 P2_2 #define div2_2 P2_0 #define s1 P1_0 #define s2 P1_1 #define s3 P1_2 #define s4 P1_3
#define tien 1 #define lui 0 #define dc_trai_dung P2_3=0;P2_1=0; #define dc_phai_dung P2_2=0;P2_0=0; /*********Khai bao bien toan cuc************/ unsigned char xung2=50,dem_t0=0,xung1=50,dem_t1=0,so_vong=1; /*********Cac ham con***********************/ //Ham tre void tre(long time) { long i; for(i=0;i{} } //Khoi timer void init_ngat() { ET0=1; //Cho phep ngat timer 0 ET1=1; //Cho phep ngat timer 1 TMOD=0x22; //Dat che do 8 bit tu nap lai cho timer 0 va timer 1 TH0=156; //Gia tri quay vong TL0=156; //Gia tri dua vao TH1=156; //Gia tri quay vong TL1=156; //Gia tri dua vao
Đề tài: Thiết kế robot dò đường {P1_4=1;P1_5=1;} else if(so_vong==1) {P1_4=1;P1_5=0;} else if(so_vong==2) {P1_4=0;P1_5=1;} else if(so_vong==3) {P1_4=0;P1_5=0;} }
Đề tài: Thiết kế robot dò đường dong_co_trai(tien,50); dong_co_phai(tien,100); i=2; } else if(i!=3&&!s1&&!s2&&s3&&!s4) //lech trai 1 { dong_co_trai(tien,100);