Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
2,71 MB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHOA ĐIỆN BỘ MÔN KĨ THUẬT ĐO VÀ TIN HỌC CÔNG NGHIỆP ====o0o==== ĐỒ ÁN I ĐỀ TÀI: THIẾT KẾ THIẾT BỊ ĐO KHOẢNG CÁCH SỬ DỤNG VI ĐIỀU KHIỂN PIC 16F877A Giáo viên hướng dẫn :TS Cung Thành Long Sinh viên thực : Bùi Thị Mai Lớp : CNĐK & TĐH - K56 MSSV : 20115651 Hà nội, 01-2015 MỤC LỤC MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG I: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN PIC 16F877A .4 I.Giới thiệu chung 1.Sơ đồ khối vi điều khiển PIC 16F877A 2.Đặc điểm vi điều khiển PIC 16F877A II.TỔ CHỨC BỘ NHỚ 11 1.Bộ nhớ chương trình 11 2.Bộ nhớ liệu .12 III.CÁC CỔNG XUẤT NHẬP CỦA PIC 16F877A 16 1.PORT A 17 2.PORT B 17 3.PORT C 18 4.PORD D 18 5.PORT E .18 IV.TIMER 19 1.TIMER .19 2.TIMER .20 3.TIMER .22 V.ADC, COMPARATOR, VÀ CCP (CAPTURE/COMPARE/PWM) .24 1.ADC 24 2.COMPARATOR 26 3.CCP (CAPTURE/COMPARE/PWM) 30 CHƯƠNG II PHƯƠNG PHÁP ĐO KHOẢNG CÁCH BẰNG CẢM BIẾN SIÊU ÂM VÀ TÌM HIỂU VỀ CẢM BIẾN SIÊU ÂM SRF05 .35 I.PHƯƠNG PHÁP ĐO KHOẢNG CÁCH BẰNG SÓNG SIÊU ÂM 35 II.CẢM BIẾN SRF05 35 1.Đặc tính kĩ thuật 35 2.Các chế độ SRF05 36 III.HOẠT ĐỘNG PHÁT VÀ NHẬN PHẢN HỒI SÓNG ÂM CƠ BẢN CỦA SRF05 40 CHƯƠNG III ỨNG DỤNG NGƠN NGỮ LẬP TRÌNH ASSEMBLER,C ĐIỀU KHIỂN 43 I.NGÔN NGỮ ASSEMBLER 43 II.NGƠN NGỮ LẬP TRÌNH C 43 CHƯƠNG IV: THIẾT KẾ PHẦN CỨNG 45 I.CÁC LINH KIỆN TRONG ĐỀ TÀI 45 1.Điện trở .45 2.Biến trở 46 3.Tụ điện 46 4.Thạch anh 47 5.LCD 1602 47 CHƯƠNG V: THIẾT KẾ PHẦN MỀM .52 KẾT LUẬN 62 Hà Nội, ngày tháng 01 năm 2015 62 Sinh viên thực .62 Bùi Thị Mai 62 LỜI NÓI ĐẦU Ngày kĩ thuật vi điều khiển trở lên quen thuộc ngành kí thuật dân dụng Các vi điều khiển có khả xử lí nhiều hoạt động phức tạp mà cần chip vi mạch nhỏ, thay tủ điều khiển lớn phức tạp thành mạch điện gọn nhẹ dễ dàng thao tác sử dung Vi điều khiển khơng góp phần vào kĩ thuật điều khiển mà cịn góp phần to lớn vào việc phát triển thơng tin Chính lí việc tìm hiểu khảo sát vi điều khiển điều mà sinh viên ngành điện phải quan tâm Đó nhu cầu cần thiết thiết cấp bách sinh viên Các điều khiển sử dụng đơn giản để sử dụng vận hành điều phức tạp Phần cơng việc sử lí phụ thuộc vào người, chương trình hay phần mềm Nếu khơng có tham gia người hệ thống vi điều khiển vật vô tri Do nói đến vi điều khiển giống máy tính bao gồm hai phần: phần cứng phần mềm Từ yêu cầu em nhận thấy đề tài thiết thực.Dưới chúng em xin trình bày tồn nội dung đồ án chúng em thực “Thiết kế thiết bị đo khoảng cách sử dụng vi điều khiển PIC 16F877A” hướng dẫn TS Cung Thành Long giảng viên trường Đại học Bách Khoa Hà Nội hướng dẫn Trong q trình chúng em thực đề tài cịn có nhiều sai sót,em mong nhận nhiều ý kiến đóng góp từ thầy bạn Hà Nội, ngày 07 tháng 01 năm 2014 Sinh viên thực Bùi Thị Mai CHƯƠNG I: GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN PIC 16F877A I Giới thiệu chung Các dạng sơ đồ chân Sơ đồ khối vi điều khiển PIC 16F877A Hình 1.1: Sơ đồ khối PIC 16F877A Sơ đồ khối PIC 16F877A, gồm khối: - Khối ALU – Arithmetic Logic Unit - Khối nhớ chứa chương trình – Flash Program Memory - Khối nhớ chứa liệu EPROM – Data EPROM - Khối nhớ file ghi RAM – RAM file Register - Khối giải mã lệnh điều khiển – Instruction Decode Control - Khối ghi đặc biệt - Khối ngoại vi timer - Khối giao tiếp nối tiếp - Khối chuyển đổi tín hiệu tương tự sang số - ADC - Khối port xuất nhập Chức chân PIC 16F877A Hình 1.2: Sơ đồ chân PIC 16F877A • Chân OSC1/CLK1(13): ngõ vào kết nối với dao động thạch anh ngõ vào nhận xung clock từ bên ngồi • Chân OSC2/CLK2(14): ngõ dao động thạch anh ngõ cấp xung clock • Chân (1) có chức • • : ngõ vào reset tích cực mức thấp Vpp: ngõ vào nhận điện áp lập trình lập trình cho PIC Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(3): có chức - RA0,1,2: xuất/ nhập số - AN 0,1,2: ngõ vào tương tự kênh thứ 0,1,2 Chân RA2/AN2/VREF-/CVREF+(4): xuất nhập số/ ngõ vào tương tự kênh thứ 2/ nhõ vào điện áp chuẩn thấp AD/ ngõ vào điện áp chẩn cao AD • Chân RA3/AN3/VREF+(5): xuất nhập số/ ngõ vào tương tự kênh 3/ ngõ vào điện áp chuẩn (cao) AD • Chân RA4/TOCK1/C1OUT(6): xuất nhập số/ ngõ vào xung clock bên cho Timer 0/ ngõ so sánh • Chân RA5/AN4/ / C2OUT(7): xuất nhập số/ ngõ vào tương tự kênh 4/ ngõ vào chọn lựa SPI phụ/ ngõ so sánh • Chân RB0/INT (33): xuất nhập số/ ngõ vào tín hiệu ngắt ngồi • Chân RB1(34), RB2(35): xuất nhập số • Chân RB3/PGM(36): xuất nhập số/ cho phép lập trình điện áp thấp ICSP • Chân RB4(37), RB5(38): xuất nhập số • Chân RB6/PGC(39): xuất nhấp số/ mạch gỡ rối xung clock lập trình ICSP • Chân RB7/PGD(40): xuất nhập số/ mạch gỡ rối liệu lập trình ICSP • Chân RC0/T1OCO/T1CKI(15): xuất nhập số/ ngõ vào giao động Timer1/ ngõ vào xung clock bên ngồi Timer • Chân RC1/T1OSI/CCP2(16) : xuất nhập số/ ngõ vào dao động Timer 1/ ngõ vào Capture2, ngõ compare2, ngõ PWM2 • Chân RC2/CCP1(17): xuất nhập số/ ngõ vào Capture1 ,ngõ compare1, ngõ PWM1 • Chân RC3/SCK/SCL(18): xuất nhập số/ ngõ vào xung clock nối tiếp đồng bộ, ngõ chế độ SPI./ ngõ vào xung clock nối tiếp đồng bộ, ngõ chế độ I2C • Chân RC4/SDI/SDA(23): xuất nhập số/ liệu vào SPI/ xuất nhập liệu I2C • Chân RC5/SDO(24): xuất nhập số/ liệu SPI • Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng USART/ xung đồng USART • Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng USART • Chân RD0-7/PSP0-7(19-30): xuất nhập số/ liệu port song song • Chân RE0/ /AN5(8): xuất nhập số/ điều khiển port song song/ ngõ vào tương tự • Chân RE1/ /AN6(9): xuất nhập số/ điều khiển ghi port song song/ ngõ vào tương tự kênh thứ • Chân RE2/ /AN7(10): xuất nhấp số/ Chân chọn lụa điều khiển port song song/ ngõ vào tương tự kênh thứ • Chân VDD(11, 32) VSS(12, 31): chân nguồn PIC Đặc điểm vi điều khiển PIC 16F877A Đây vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit Mỗi lệnh thực thi chu kì xung clock Tốc độ hoạt động tối đa cho phép 20 MHz với chu kì lệnh 200ns Bộ nhớ chương trình 8Kx14 bit, nhớ liệu 368x8 byte RAM nhớ liệu EEPROM với dung lượng 256x8 byte Số PORT I/O với 33 pin I/O Có kênh chuyển đổi A/D Các đặc tính ngoại vi bao gồmcác khối chức sau: - Timer0: đếm bit với chia tần số bit - Timer1: đếm 16 bit với chia tần số, thực chức đếm dựa vào xung clock ngoại vi vi điều khiển hoạt động chế độ sleep - Timer2: đếm bit với chia tần số, postcaler - Hai Capture/so sánh/điều chế độ rông xung - Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI I2C - Chuẩn giao tiếp nối tiếp USART với bit địa - Cổng giao tiếp song song PSP (Parallel Slave Port) với chân điều khiển LCD RW Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic “0” để LCD hoạt động chế độ ghi, nối với logic “1” để LCD chế độ đọc E Chân cho phép (Enable) Sau tín hiệu đặt lên bus DB0DB7, lệnh chấp nhận có xung cho phép chân E + Ở chế độ ghi: Dữ liệu bus LCD chuyển vào(chấp nhận) ghi bên phát xung (high-to-low transition) tín hiệu chân E + Ở chế độ đọc: Dữ liệu LCD xuất DB0-DB7 phát cạnh lên (low-to-high transition) chân E LCD giữ bus đến chân E xuống mức thấp 7-14 D0-D7 Tám đường bus liệu dùng để trao đổi thơng tin với MPU Có chế độ sử dụng đường bus : + Chế độ bit : Dữ liệu truyền đường, với bit MSB bit DB7 + Chế độ bit : Dữ liệu truyền đường từ DB4 tới DB7, bit MSB DB7 CHÚ Ý: Ở chế độ “đọc”, nghĩa MPU đọc thông tin từ LCD thơng qua chân Dx Cịn chế độ “ghi”, nghĩa MPU xuất thông tin điều khiển cho chân Dx 49 LCD thông qua Chân 15 chân 16: ghi A K Nó anot katot led dùng để sang LCD bóng tối, khơng nối, sử dụng nối chân 15 với trở 220 330 Ω lên VCC, chân 16 nối đất Tập lệnh LCD a Một số ý: Trước tìm hiểu tập lệnh LCD, sau vài ý giao tiếp với LCD: Tuy sơ đồ khối LCD có nhiều khối khác nhau, lập trình điều khiển LCD ta tác động trực tiếp vào ghi DR IR thông qua chân DBx, ta phải thiết lập chân RS, R/W phù hợp để chuyển qua lại giữ hai ghi Với lệnh, LCD cần khoảng thời gian để hoàn tất, thời gian lâu tốc độ MPU, nên ta cần kiểm tra cờ BF đợi (delay) cho LCD thực thi xong lệnh hành lệnh Địa RAM (AC) tự động tăng giảm đơn vị, có lệnh ghi vào RAM (điều giúp chương trình gọn hơn) Các lệnh LCD chia thành nhóm sau: + Các lệnh kiểu hiển thị VD: Kiểu hiển thị (1 hàng / hàng), chiều dài liệu (8 bit / bit) +Chỉ định địa RAM nội +Nhóm lệnh truyền liệu RAM nội b Tập lệnh Tập lệnh LCD tương đối đơn giản Khi lập trình cho mạch có LCD ta cần gọi hàm có sẵn trình biên dịch mà khơng cần LCD phải đánh lệnh phức tạp Sơ đồ mạch nguyên lý 50 51 CHƯƠNG V: THIẾT KẾ PHẦN MỀM Phần mềm sử dụng phần mềm C Nội dung chương trình: /**********************************************************************/ /* /* DO AN I */ PROJECT: DO KHOAN CACH SU DUNG SRF05 */ /**********************************************************************/ #include #include #include "lcd.c" #define SRF05_TRIGGER PIN_B1 #define SRF05_ECHO PIN_B0 #define NO_OBJECT #INT_EXT void Ngat_Ngoai(void) 52 { // Ngat ngoai theo suon xuong disable_interrupts(GLOBAL); num_pulse+=get_timer1(); range_ok=1; enable_interrupts(GLOBAL); } void SRF05_StartRange() { while(!range_ok) { output_high(SRF05_TRIGGER); // Tao xung len vao cha TRIGGER co lon it nhat 10ms delay_ms(15); // Tao xung vao chan TRIGGER rong 15ms (>10ms) output_low(SRF05_TRIGGER); // Bat dau phep while(!(input(SRF05_ECHO)));// Doi cho den chan ECHO duoc keo len cao set_timer1(0); // Reset lai gia tri Timer1 enable_interrupts(GLOBAL); // Cho phep ngat toan cuc delay_ms(50); // SRF05 chi co the kich hoat lai nhanh nhat sau moi 50ms } } float32 SRF05_GetDistance() { 53 float32 time_us=0,distance=0; SRF05_StartRange(); disable_interrupts(GLOBAL); if(num_pulse>37500) // So sanh neu thoi gian ve >30ms { num_pulse=0; range_ok=0; return NO_OBJECT; } else { time_us=num_pulse/1.25; distance=time_us/58; // Datasheet SRF05: dis(cm)=timer(us)/58 num_pulse=0; range_ok=0; return distance; } } void main() { unsigned char str[20]; unsigned char mode=1; int count=0; unsigned char first=0; 54 float32 range; output_float(SRF05_ECHO); output_drive(SRF05_TRIGGER); set_tris_b(0b11000001); // Cau hinh I/O cua PORTB: 11000001 LCD_Init(); sprintf(str," DO AN I "); delay_ms(10); LCD_Puts(str); delay_ms(1000); LCD_Clear(); sprintf(str,"DO K/C SRF05: M1"); LCD_Gotoxy(0,0); LCD_Puts(str); output_low(PIN_B4); delay_ms(100); port_b_pullups(TRUE); // PORTB su dung dien tro keo len (pullups) ext_int_edge(H_TO_L); // Su dung ngat ngoai theo suon xuong setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);// F_TIMER1=F_OSC/4/4=20MHz/4/4=1.25MHz (T=0.8us tuc cu 0.8us thi Timer1 tang vi) enable_interrupts(INT_EXT); // Kich hoat ngat ngoai 55 disable_interrupts(GLOBAL); // Khong cho phep ngat while(TRUE) { // PIN_B7: Change Mode // PIN_B6: Get Distance in Mode // Begin with Mode1 // To Change Mode2: Hold PIN_B7 > 3s // To change Mode1: Press PIN_B6 < 0.5s if(!input(PIN_B7)) { output_low(PIN_B2); count++; delay_ms(15); if(count30) { 56 mode=2; // Mode lan LCD_Gotoxy(0,0); sprintf(str,"DO K/C SRF05: M2"); LCD_Puts(str); first=0; output_high(PIN_B4); // Alarm MODE2 } } else count=0; if(mode==1) { range=SRF05_GetDistance(); if(range==NO_OBJECT) { LCD_Gotoxy(0,1); sprintf(str,"Khong Co Vat Can"); LCD_Puts(str); output_high(PIN_B2); // Alarm No object was detected output_low(PIN_B3); // Alarm Object was detected delay_ms(500); } else 57 { output_low(PIN_B2); // Alarm No object was detected output_high(PIN_B3); // Alarm Object was detected LCD_Gotoxy(0,1); sprintf(str," DIS : %3.2f Cm ",range); LCD_Puts(str); } } if(mode==2) { if(input(PIN_B6)) { delay_ms(50); first=0; } if(first==0&&!input(PIN_B6)) { first=1; range=SRF05_GetDistance(); if(range==NO_OBJECT) { LCD_Gotoxy(0,1); sprintf(str,"Khong Co Vat Can"); LCD_Puts(str); 58 output_high(PIN_B2); // Alarm No object was detected output_low(PIN_B3); // Alarm Object was detected delay_ms(500); } else { output_low(PIN_B2); // Alarm No object was detected output_high(PIN_B3); // Alarm Object was detected LCD_Gotoxy(0,1); sprintf(str," DIS : %3.2f Cm ",range); LCD_Puts(str); } } } } } Sản phẩm thực tế 59 Hình 5.1: Đo khoảng cách chế độ mode1-đo lần 60 Hình 5.2: Đo khoảng chế độ mode2-đo liên tục 61 KẾT LUẬN Trong đề tài chúng em tìm hiểu nghiên cứu thiết kế mạch đo khoảng cách dùng vi điều khiển PIC 16F877A Đây ứng dụng nhỏ PIC điều khiển để đo khoảng cách + Hệ thống điều khiển tương đối ổn định đáp ứng điều kiện đề tài + Cảm biến đọc thơng số khoảng cách tương đối xác hiển thị qua LCD + Phần mềm code đơn giản Qua đề tài giúp chúng em thêm kiến thức bổ ích vào chun ngành học tập mình, hiểu biết nhiều môn vi xử lý, kết hợp lý thuyết với thực hành hoàn thành tốt đề tài Em xin chân thành cảm ơn Hà Nội, ngày tháng 01 năm 2015 Sinh viên thực Bùi Thị Mai 62 63 ... NG? ?N NG? ?? LẬP TR? ?NH C Ng? ?n ng? ?? lập tr? ?nh C ng? ?n ng? ?? lập tr? ?nh tư? ?ng đ? ?i nhỏ g? ?n v? ?n h? ?nh g? ?n v? ?i ph? ?n c? ? ?ng gi? ?ng ng? ?n ng? ?? Assembler C c? ?n đánh c? ? khả di đ? ?ng cho thấy kh? ?c quan tr? ? ?ng v? ?i ng? ?n ng? ??... ? ?i? ? ?n linh ki? ?n thụ đ? ?ng, c? ??u tạo tụ ? ?i? ? ?n hai c? ? ?c kim lo? ?i ghép c? ?ch kho? ?ng d hai tụ dung d? ??ch hay chất ? ?i? ? ?n m? ?i c? ?ch ? ?i? ? ?n c? ? ? ?i? ? ?n dung Đ? ?c ? ?i? ??m tụ cho d? ?ng xoay chiều qua, ng? ?n c? ? ?n d? ?ng ? ?i? ? ?n chiều... Ch? ?n ng? ? vào analog, ch? ?n ? ?i? ? ?n áp mẫu (d? ??a th? ?ng số ghi ADCON1) Chọnh kênh chuy? ?n đ? ?i AD (thanh ghi ADCON0) Chọnh xung clock cho kênh chuy? ?n đ? ?i AD (thanh ghi ADCON0) Cho phép chuy? ?n đ? ?i AD hoạt