Khối điều khiển trung tâm có nhiệm vụ lấy dữ liệu từ khối sensor để có được trạng thái hiện tại của hệ thống và xử lí tín hiệu thu được, từ đó đưa ra các tín hiệu
điều khiển cho khối động cơ, đồng thời đưa tín hiệu thông báo ra khối hiển thị cho người quan sát thấy trạng thái đang hoạt động của hệ thống. Việc hệ thống hoạt động có nhịp nhàng hay không, phụ thuộc rất nhiều vào khối điều khiển này.
Để xây dựng khối điều khiển, ta chọn vi điều khiển.
Có rất nhiều phương án lựa chọn vi điều khiển. do yêu cầu chế tạo robot phải nhỏ gọn, do đó lựa chọn PIC18F4550 làm vi điều khiển trung tâm do có nhiều ưu điểm.
Vi điều khiển này sẽ giao tiếp với các khối khác thông qua các cổng vào ra cơ bản.
Mạch sử dụng PIC18F4550 làm mạch điều khiển trung tâm, sơ đồ nguyên lí được vẽ và mô phỏng bằng phần mềm proteus như hình sau:
Hình 4. 5: mạch nguyên lí vi điều khiển PIC
Để mạch có thể hoạt động được thì ta cần phải cấp nguồn cho vi điều khiển. Ngoài ra tâ cần phải nối thêm bộ tạo dao động ngoài để tạo dao động cho vi điều khiển. mạch tạo dao động ở đây ta sử dụng là mạch tạo dao động thạch anh 20MHz cùng với các tụ lọc, và có sơ đồ như hình dưới:
Hình 4. 6: mạch dao động thạch anh
Hai đầu ra của mạch tạo dao động được nối với 2 PIN 13 (CLKI) và PIN 14 (CLKO) của vi điều khiển.
PIN số 1 (RE3/MCLR/VPP) là chân reset và được đặt ở mức cao để reset lại mạch khi cần thiết.
Hình 4. 8: mạch in vi điều khiển PIC bằng proteus
Hình 4. 9: mạch in vi điều khiển PIC.
4.2.3 Khối sensor
Hình 4. 10: cảm biến led thu phát hồng ngoại
Mạch sử dụng cặp led thu phát, trong đó gồm 1 led phát và 1 led thu. Lượng tín hiệu thu được phụ thuộc rất nhiều vào độ bong, màu sắc của bề mặt phản xạ. độ bóng càng lớn, màu càng sang thì độ phản xạ càng nhiều, tín hiệu thu được càng lớn và ngược lại.
Tín hiệu thu được ở đầu ra của cảm biến chỉ là tín hiệu tương tự. để vi điều khiển có thể xử lí được tín hiệu này thì tín hiệu thu được cần qua một mạch so sánh mức. Ở đây sử dụng một mạch khuếch đại thuật toán, được tích hợp trong IC LM393 với điện áp cung cấp là 5V. Khi đó đầu ra của mạch khuếch đại thuật toán sẽ là mức 0V hoặc 5V, tương thích với tín hiệu đầu vào.
Dưới đây là sơ đồ chân IC so sánh LM393 và cách mắc mạch với led thu phát.
Hình 4. 12: chức năng các chân
Hình 4. 13: mạch ghép nối cảm biến
Vấn đề đặt ra là quét các led, có 2 phương pháp chính là quét song song và quét tuần tự.
Quét song song: quét đồng thời tất cả các led và so sánh mức tín hiệu thu được. phương pháp này có ưu điểm là tốc độ nhanh, tuy nhiên do quét các led đồng thời nên khả năng xuất hiện nhiễu cao, dẫn đến xe chạy không chính xác.
Quét tuần tự: quét lần lượt từng led, quét tuần tự chậm nhưng đảm bảo ít nhiễu. Do yêu cầu tốc độ không nhanh và đọ chính xác cao nên chọn quét tuần tự.
4.2.4 Khối điều khiển động cơ (step motor)
Khối điều khiển động cơ sử dụng IC L297 và L298N
IC L297 có chức năng tạo ra các tín hiệu logic để đóng mở các chuyển mạch để điều khiển động cơ bước, cần nối các cuộn dây của động cơ vào các chuyển mạch, việc đóng mở các chuyển mạch này theo một tuần tự nào đó sẽ làm cho động cơ chạy theo mong muốn. Như vậy, L297 chỉ tạo ra các mức tín hiệu logic để đóng mở các chuyển mạch.
IC L298 là IC mạch cầu H dùng để điều khiển cực tính ở 2 đầu cuộn dây động cơ.
Hình 4. 14: IC L297
Chức năng các chân của L297:
Chân 1 (SYNC): chân ngõ ra mạch dao động chopper bên trong chip.
Chân 2 (GND): chân nguồn 0V.
Chân 3 (HOME): chân ngõ ra cực thu để hở báo L297 đang ở trạng thái khởi tạo.
Chân 4 (A): tín hiệu pha A của motor.
Chân 5 (INH1): chân này tích cực mức thấp điều khiển 2 phare A, B để bảo vệ dòng xả ngược cuộn dây. Còn khi chân control mức thấp, chân này được sử dụng để ổn định dòng tải động cơ.
Chân 6 (B): tín hiệu pha B của motor.
Chân 7 (C): tín hiệu pha C của motor.
Chân 8 (INH2): chân này tích cực mức thấp điều khiển 2 phare C, D để bảo vệ dòng xả ngược cuộn dây. Còn khi chân control mức thấp, chân này được sử dụng để ổn định dòng tải động cơ.
Chân 9 (D): tín hiệu pha C của motor.
Chân 10 (ENABLE): chân cho phep hoạt động, nối với 5V để kích hoạt cho IC chạy.
Chân 11 (CONTROL): chân điều khiển hoạt động chopper. Khi chân này ở mức thấp, hoạt động chopper thông qua 2 chân INH1, INH2. Khi chân này ở mức cao, hoạt động chopper thông qua phase A,B, C, D.
Chân 12 (VS): chân nguồn 5V.
Chân 13 (SEN2): chân ngõ vào cầu phân áp để hồi tiếp độ lớn dòng tải ở tầng công suất của phase C, D.
Chân 14 (SEN1): chân ngõ vào cầu phân áp để hồi tiếp độ lớn dòng tải ở tầng công suất của phase A, B.
Chân 15 (VREF): điện áp tham chiếu cho mạch chopper. Điều chỉnh điện áp đặt vào chân này để điều chỉnh dòng tải đỉnh.
Chân 16 (OSC): chân ngõ vào dao động RC.
Chân 18 (CLOCK): chân cấp xung cho động cơ.
Chân 19 (HALF/FULL): chân chọn chế độ đủ bước, nửa bước.
Chân 20 (RESET): làm cho trạng thái của động cơ trở về vị trí home.
Hình 4. 15: IC L298 thực tế
Hình 4. 17: sơ đồ khối IC L298
Hình 4. 18: mạch công suất điều khiển động cơ bước Trong mạch trên:
Các chân 2 (out1), 3 (out2), 13 (out3), 14 (out4) của IC L298 được nối với các đầu dây của động cơ.
động bởi mạch dao động RC và được đưa vào chân 16 (OSC). Chân so sánh 15 (Vref) được cấp nguồn 2.5 V. Chân 1 (SYNC) dùng để đồng bộ hóa xung nhịp trong mạch có nhiều L297 với nhau.
Từ sơ đồ nguyên lí, sử dụng phần mềm Proteus, ta vẽ được mạch in như sau:
kết quả đạt được và hướng phát triển đề tài
Sau khi hoàn thành đồ án đạt được kết quả sau:
- Tìm hiểu về vi điều khiển và cách lập trình cho vi điều khiển, các loại cảm biến, mạch điện tử. thiết kế và chế tạo mô hình thật chạy ổn định.
- Chế tạo robot bám đường đi theo vạch.
Sau đây là hình ảnh của robot dò đường được chế tạo thực tế:
Hình 4. 20: mô hình sau khi được chế tạo
Hình 4. 21: sân hoạt động của robot đơn giản
- Chưa tính toán sai số chế tạo khi gia công và các yếu tố ảnh hưởng. - Thuật toán điều khiển đơn giản.
Hướng phát triển của đề tài
- Chế tạo mô hình robot gọn hơn và có độ chính xác hơn,tối ưu về giá thành chế tạo.
- Hướng phát triển phải là thuật toán, trang bị thêm cảm biến, để robot có thể dò đường trong mê cung...
Code lập trình:
#include <18F4550.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale #FUSES PLL12 //Divide By 12(48MHz oscillator input) #FUSES CPUDIV4 //System Clock by 4
#FUSES USBDIV //USB clock source comes from PLL divide by 2 #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES IESO //Internal External Switch Over mode enabled #FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset #FUSES BORV20 //Brownout reset at 2.0V
#FUSES VREGEN //USB voltage regulator enabled
#FUSES PBADEN //PORTB pins are configured as analog input channels on RESET
#FUSES LPT1OSC //Timer1 configured for low-power operation #FUSES MCLR //Master Clear pin enabled
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES ICPRT //ICPRT enabled
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading #FUSES NOCPB //No Boot Block code protection #FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected #FUSES NOWRTC //configuration not registers write protected #FUSES NOWRTB //Boot block not write protected
#FUSES NOWRTD //Data EEPROM not write protected #FUSES NOEBTR //Memory not protected from table reads #FUSES NOEBTRB //Boot block not protected from table reads
#use delay(crystal=20000000, clock=5000000) #include <18F4550.h>
#FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay (clock=20000000) //su dung thach anh 20Mhz //dinh nghia cac chan va port
#define step1 pin_B0 #define direction1 pin_B1 #define hf1 pin_B2
#define en1 pin_B3 #define ctrol1 pin_B4 #define step2 pin_D7 #define direction2 pin_D6 #define hf2 pin_D5
#define en2 pin_D4 #define ctrol2 pin_D3 #define sensort pin_A0 #define sensorp pin_A1
void motor_left_reverse(); void motor_left_stop(); void motor_right_forward(); void motor_right_reverse(); void motor_right_stop(); void forward(); void reverse(); void stop(); void turn_left(); void turn_right();
//cac chuong trinh con //dong co trai quay thuan void motor_left_forward() { output_bit(en1,1); output_bit(ctrol1,1); output_bit(hf1,1); output_bit(direction1,1); while(true)
{ output_bit(step1,1); delay_ms(100); output_bit(step1,0); delay_ms(100); } }
//dong co trai quay nguoc void motor_left_reverse() { output_bit(en1,1); output_bit(ctrol1,1); output_bit(hf1,1); output_bit(direction1,0); while(true) { output_bit(step1,1); delay_ms(100); output_bit(step1,0); delay_ms(100); }
}
//dong co trai dung void motor_left_stop() {
output_bit(en1,0); }
//dong co phai quay thuan void motor_left_forward() { output_bit(en2,1); output_bit(ctrol2,1); output_bit(hf2,1); output_bit(direction2,1); while(true) { output_bit(step2,1); delay_ms(100); output_bit(step2,0); delay_ms(100); }
}
//dong co phai quay nguoc void motor_left_reverse() { output_bit(en2,1); output_bit(ctrol2,1); output_bit(hf2,1); output_bit(direction2,0); while(true) { output_bit(step2,1); delay_ms(100); output_bit(step2,0); delay_ms(100); } }
//dong co phai dung void motor_left_stop() {
} void forward() { motor_left_forward(); motor_right_forward(); } void reverse() { motor_right_reverse(); motor_left_reverse(); } void stop() { void motor_right_stop(); void motor_left_stop(); } void turn_left() { motor_left_stop();
} void turn_right() { motor_right_stop(); } void main() { set_tris_D(0xFF); set_tris_B(0xFF); WHILE(TRUE) { if(sensort=0) { turn_left(); } if(sensorp=0) {
turn_right(); }
if(sensort=1 && sensorp=1) { forward() } } }
TÀI LIỆU THAM KHẢO
.
1. Giáo trình kỹ thuật vi xử lí, Nguyễn Trường Giang, 2012, Trường Đại Học Giao Thông Vận Tải.
2. Tài liệu sử dụng CCS, Trần Xuân Phương, Trường Đại Học Bách Khoa Hồ Chí Minh
3. Ngoài ra các kiến thức liên quan được lấy từ các diễn đàn vi điều khiển