Bãi Giữ Xe Tự Động Sử Dụng PIC 16F877A

74 399 1
Bãi Giữ Xe Tự Động Sử Dụng  PIC 16F877A

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC  NỘI DUNG TRANG CHƯƠNG I: GIỚI THIỆU LINH KIỆN 1 Pic 16F877A IC ổn áp 7805 27 Diode .27 Điện trở 32 Tụ điện 33 Transistor .38 Mạch cầu H 50 CHƯƠNG II: SƠ ĐỒ KHỐI .59 Sơ đồ khối 59 Chức khối 60 Nguyên lý hoạt động mạch 60 CHƯƠNG III: THIẾT KẾ VÀ TÍNH TỐN MẠCH 63 Khối nguồn 63 Khối vi điều khiển 64 Khối hiển thị 65 Khối quang led 66 Khối điều khiển động .67 Khối cảm biến .68 CHƯƠNG IV: LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG TRÌNH .70 Chương trình .70 Lưu đồ giải thuật 79 Sơ đồ nguyên lý 79 CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .80 Kết luận 80 Hướng phát triển 80 CHƯƠNG I GIỚI THIỆU LINH KIỆN 1 PIC 16F877A 1.1 PIC LÀ GÌ ? - PIC viết tắt “Programable Intelligent Computer”, tạm dịch “máy tính thơng minh khả trình” hãng Genenral Instrument đặt tên cho vi điều khiển họ - PIC1650 thiết kế để dùng làm thiết bị ngoại vi cho vi điều khiển CP1600 Vi điều khiển sau nghiên cứu phát triển thêm từ hình thành nên dòng vi điều khiển PIC ngày 1.2 TẠI SAO LÀ PIC MÀ KHÔNG LÀ CÁC HỌ VI ĐIỀU KHIỂN KHÁC? - Hiện thị trường có nhiều họ vi điều khiển 8051, Motorola 68HC, AVR, ARM, Ngoài họ 8051 hướng dẫn cách môi trường đại học, thân người viết chọn họ vi điều khiển PIC để mở rộng vốn kiến thức phát triển ứng dụng cơng cụ ngun nhân sau:  Họ vi điều khiển tìm mua dễ dàng thị trường Việt Nam  Giá thành không q đắt  Có đầy đủ tính vi điều khiển hoạt động độc lập  Là bổ sung tốt kiến thức ứng dụng cho họ vi điều khiển mang tính truyền thống: họ vi điều khiển 8051 - Số lượng người sử dụng họ vi điều khiển PIC Hiện Việt Nam giới, họ vi điều khiển sử dụng rộng rãi Điều tạo nhiều thuận lợi trình tìm hiểu phát triển ứng dụng như: số lượng tài liệu, số lượng ứng dụng mở phát triển thành công, dễ dàng trao đổi, học tập, dễ dàng tìm dẫn gặp khó khăn,… - Sự hỗ trợ nhà sản xuất trình biên dịch, cơng cụ lập trình, nạp chương trình từ đơn giản đến phức tạp,… - Các tính đa dạng vi điều khiển PIC, tính khơng ngừng phát triển 1.3 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC - Các kí hiệu vi điều khiển PIC:  PIC12xxxx: độ dài lệnh 12 bit  PIC16xxxx: độ dài lệnh 14 bit  PIC18xxxx: độ dài lệnh 16 bit  C: PIC có nhớ EPROM (chỉ có 16C84 EEPROM)  F: PIC có nhớ flash  LF: PIC có nhớ flash hoạt động điện áp thấp  LV: tương tự LF, kí hiệu cũ - Bên cạnh số vi điệu khiển có kí hiệu xxFxxx EEPROM, có thêm chữ A cuối flash (ví dụ PIC16F877 EEPROM, PIC16F877A flash) - Ngồi có thêm dòng vi điều khiển PIC dsPIC Ở Việt Nam phổ biến họ vi điều khiển PIC hãng Microchip sản xuất Cách lựa chọn vi điều khiển PIC phù hợp: - Trước hết cần ý đến số chân vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số lượng chân khác nhau, chí có vi điều khiển có chân, ngồi có vi điều khiển 28, 40, 44, … chân Cần chọn vi điều khiển PIC có nhớ flash để nạp xóa chương trình nhiều lần - Tiếp theo cần ý đến khối chức tích hợp sẵn vi điều khiển, chuẩn giao tiếp bên - Sau cần ý đến nhớ chương trình mà vi điều khiển cho phép - Ngoài thông tin cách lựa chọn vi điều khiển PIC tìm thấy sách “Select PIC guide” nhà sản xuất Microchip cung cấp 1.4 NGÔN NGỮ LẬP TRÌNH CHO PIC Ngơn ngữ lập trình cho PIC đa dạng Ngơn ngữ lập trình cấp thấp có MPLAB (được cung cấp miễn phí nhà sản xuất Microchip), ngơn ngữ lập trình cấp cao bao gồm C, Basic, Pascal, … Ngồi có số ngơn ngữ lập trình phát triển dành riêng cho PIC PICBasic, MikroBasic,… 1.5 MẠCH NẠP PIC - Đây dòng sản phẩm đa dạng dành cho vi điều khiển PIC Có thể sử dụng mạch nạp cung cấp nhà sản xuất hãng Microchip như: PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II Có thể dùng sản phẩm để nạp cho vi điều khiển khác thơng qua chương trình MPLAB Dòng sản phẩm thống có ưu nạp cho tất vi điều khiển PIC, nhiên giá thành cao thường gặp nhiều khó khăn trình mua sản phẩm - Ngồi tính cho phép nhiều chế độ nạp khác nhau, có nhiều mạch nạp thiết kế dành cho vi điều khiển PIC Có thể sơ lược số mạch nạp cho PIC sau: - JDM programmer: mạch nạp dùng chương trình nạp Icprog cho phép nạp vi điều khiển PIC có hỗ trợ tính nạp chương trình điện áp thấp ICSP (In Circuit Serial Programming) Hầu hết mạch nạp hỗ trợ tính nạp chương trình - WARP-13A MCP-USB: hai mạch nạp giống với mạch nạp PICSTART PLUS nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch MPLAB, nghĩa ta trực tiếp dùng chương trình MPLAB để nạp cho vi điều khiển PIC mà khơng cần sử dụng chương trình nạp khác, chẳng hạn ICprog P16PRO40: mạch nạp Nigel thiết kế tiếng Ơng thiết kế chương trình nạp, nhiên ta sử dụng chương trình nạp Icprog - Mạch nạp Universal Williem: mạch nạp chuyên dụng dành cho PIC P16PRO40 - Các mạch nạp kể có ưu điểm lớn đơn giản, rẻ tiền, hồn tồn tự lắp ráp cách dễ dàng, thông tin sơ đồ mạch nạp, cách thiết kế, thi công, kiểm tra chương trình nạp dễ dàng tìm download miễn phí thơng qua mạng Internet Tuy nhiên mạch nạp có nhược điểm hạn chế số vi điều khiển hỗ trợ, bên cạnh mạch nạp cần sử dụng với chương trình nạp thích hợp 1.6 SƠ ĐỒ CHÂN VI ĐIỀU KHIỂN PIC16F877A 1.7 MỘT VÀI THÔNG SỐ VỀ VI ĐIỀU KHIỂN PIC16F877A Đâ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ác đặc tính ngoại vi bao gồm 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 RD, WR,  CS bên ngồi  Các đặc tính Analog:  kênh chuyển đổi ADC 10 bit  Hai so sánh  Bên cạnh vài đặc tính khác vi điều khiển như:  Bộ nhớ flash với khả ghi xóa 100.000 lần  Bộ nhớ EEPROM với khả ghi xóa 1.000.000 lần  Dữ liệu nhớ EEPROM lưu trữ 40 năm  Khả tự nạp chương trình với điều khiển phần mềm Nạp chương trình mạch điện ICSP (In Circuit Serial Programming) thông qua chân Watchdog Timer với dao động  Chức bảo mật mã chương trình  Chế độ Sleep  Có thể hoạt động với nhiều dạng Oscillator khác 1.8 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F877A Sơ đồ khối vi điều khiển PIC16F877A 1.9 TỔ CHỨC BỘ NHỚ Cấu trúc nhớ vi điều khiển PIC16F877A bao gồm nhớ chương trình (Program memory) nhớ liệu (Data Memory) a BỘ NHỚ CHƯƠNG TRÌNH - Bộ nhớ chương trình vi điều khiển PIC16F877A nhớ flash, dung lượng nhớ 8K word (1 word = 14 bit) phân thành nhiều trang (từ page0 đến page 3) - Như nhớ chương trình có khả chứa 8*1024 = 8192 lệnh (vì lệnh sau mã hóa có dung lượng word (14 bit) - Để mã hóa địa 8K word nhớ chương trình, đếm chương trình có dung lượng 13 bit (PC) - Khi vi điều khiển reset, đếm chương trình đến địa 0000h (Reset vector) Khi có ngắt xảy ra, đếm chương trình đến địa 0004h (Interrupt vector) - Bộ nhớ chương trình khơng bao gồm: Bộ nhớ stack khơng địa hóa đếm chương trình Bộ nhớ stack đề cập cụ thể phần sau b BỘ NHỚ DỮ LIỆU Bộ nhớ liệu PIC nhớ EEPROM chia làm nhiều bank Đối với PIC16F877A nhớ liệu chia làm bank Mỗi bank có dung lượng 128 byte, bao gồm ghi có chức đặc biệt SFG (Special Function Register) nằm vùng địa thấp ghi mục đích chung GPR (General Purpose Register) nằm vùng địa lại bank Các ghi SFR thường xuyên sử dụng (ví dụ ghi STATUS) đặt tất cà bank nhớ liệu giúp thuận tiện trình truy xuất làm giảm bớt lệnh chương trình Sơ đồ cụ thể nhớ liệu PIC16 Bộ nhớ liệu 1.10 CÁC CỔNG XUẤT NHẬP CỦA PIC16F877A - Cổng xuất nhập (I/O port) phương tiện mà vi điều khiển dùng để tương tác với giới bên Sự tương tác đa dạng thơng qua q trình tương tác đó, chức vi điều khiển thể cách rõ ràng - Một cổng xuất nhập vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách bố trí chức vi điều khiển mà số lượng cổng xuất nhập số lượng chân cổng khác Bên cạnh đó, vi điều khiển tích hợp sẵn bên đặc tính giao tiếp ngoại vi nên bên cạnh chức cổng xuất nhập thông thường, số chân xuất nhập có thêm chức khác để thể tác động đặc tính ngoại vi nêu giới bên Chức chân xuất nhập cổng hồn tồn xác lập điều khiển thông qua ghi SFR liên quan đến chân xuất nhập - Vi điều khiển PIC16F877A có cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD PORTE Cấu trúc chức cổng xuất nhập đề cập cụ thể phần sau a PORTA - PORTA (RPA) bao gồm I/O pin Đây chân “hai chiều” (bidirectional pin), nghĩa xuất nhập Chức I/O điều khiển ghi TRISA (địa 85h) Muốn xác lập chức chân PORTA input, ta “set” bit điều khiển tương ứng với chân ghi TRISA ngược lại, muốn xác lập chức chân PORTA output, ta “clear” bit điều khiển tương ứng với chân ghi TRISA Thao tác hoàn toàn tương tự PORT ghi điều khiển tương ứng TRIS (đối với PORTA TRISA, PORTB TRISB, PORTC TRISC, PORTD TRISD vàđối với PORTE TRISE) Bên cạnh PORTA ngõ ADC, so sánh, ngõ vào analog ngõ vào xung clock Timer0 ngõ vào giao tiếp MSSP (Master Synchronous Serial Port) Đặc tính trình bày cụ thể phần sau - Cấu trúc bên chức cụ thể chân PORTA trình bày cụ thể Phụ lục - Các ghi SFR liên quan đến PORTA bao gồm:  PORTA (địa 05h): chứa giá trị pin PORTA  TRISA (địa 85h): điều khiển xuất nhập  CMCON (địa 9Ch): ghi điều khiển so sánh  CVRCON (địa 9Dh): ghi điều khiển so sánh điện áp ADCON1 (địa 9Fh): ghi điều khiển ADC b PORTB 1K VC C 5v C 2383 33R C C 2383 33R A C 2383 33R 1K 1K PO R T PORTC U 1K C 2383 33R C 2383 68R T 1K D I 1K C 2383 27R O 1K C 2383 27R C 2383 68R N 1K ! Mạch quang led (caution!) Mỗi chữ khối quang led ghép lại từ led mắc song song, nên cần có giá trị điện trở khác để đảm bảo an toàn cho led Chữ C T có số lượng led 9led: VLED=2V , ILED=90mA ⇒ VRC=VCC -VLED=5-2=3V IRC=ILED=90mA ⇒ V RC R C= I = RC = 33Ω , chọn RC=33 Ω 90 Chữ A O có số lượng led 10led: VLED=2V , ILED=100mA ⇒ VRC=VCC -VLED=5-2=3V IRC=ILED=100mA ⇒ V RC R C= I RC = = 30Ω , chọn RC=33 Ω 100 Chữ I ! có số lượng led 5led: ⇒ VLED=2V , ILED=50mA VRC=VCC -VLED=5-2=3V IRC=ILED=50mA ⇒ R C= I V RC = RC = 60Ω , chọn RC=68 Ω 50 Chữ O vàN có số lượng led 12led: VLED=2V , ILED=120mA ⇒ VRC=VCC -VLED=5-2=3V IRC=ILED=120mA V RC ⇒ R C= I RC = = 25Ω , chọn RC=27 Ω 120 Điện trở hạn dòng cho chân B tranzito Ta có: kIC= β IB ⇒ I B= kI C , chọn k=5, β =80 β ⇒ I B= 5.120 = 7.5mA 80 Ta có: VRB=VCC-VBE=5-0.7=4.3V ⇒ V 4.3 RB RB= I = 7.5 = 573Ω ⇒chọn RB=680 ~ 1K Ω B KHỐI DIỀU KHIỂN ĐỘNG CƠ J1 RB4 RB5 VCC 1K 12v 1K TIP42 Q1 1N4007 MOTOR DC 1 Q5 1K 1N4007 TIP42 2N2222 TIP41 2N2222 Q3 1N4007  Tính RB cho transistor: Ta có dòng IE3 = IĐC = 75mA β = 80 Mà cơng thức tính dòng điện bão hòa : Β*IB3 = k*IC3 (mà IC3 ≈ IE3) 1K Q2 1N4007 TIP41 Q4 Q6  IB3 = k*IC3/β  IB3 > 5*75mA/80  IB3 > 4,6875mA Và RB3 = Vcc/IB3 = 5V/4.6875mA ≈ 1k Ω Chọn điện trở 1k Ω Ngoài diode 4007 dùng để bảo vệ transistor động trả điện ngược lại KHỐI CẢM BIẾN VC C 270 10k 270 LED 270 10k k C 1815 Vout - Led Thu Led Phat + R 270 741 1k nguon 5v  Rled thu=Rled phát=Rled= 270~330 Ω hạn dòng Ta có: Vled=2V; Iled=10(mA)  VR=VCC-Vled=5-2=3V IR=Iled=10(mA)  R=VR/IR=3v/10mA=300 Ω Thực tế Rled thu 270 ~ 330 Ω nên chọn Rled thu cao (10k Ω ) để led thu nhạy hoạt động tốt cự li xa Vì led thu giống quang trở có ánh sáng hồng ngoại mạnh điện áp nghịch qua lớn ngược lại  Tính cho trường hợp khơng có V6 (có Vout led thu dẫn): Khi có khơng có V6 V+ = 0v V- =Vcc*(VRB + 0,27)/(VR+0,54) Để V6 = Vcc V+ < V0 < (Vcc*(VRB + 0,27))/(VR+0,54)  VR + 0,54 < Vcc*VRB + Vcc*0,27  10 + 0,54 < 5*VRB + 5*0,27  10 + 0,54 – 1,35 < 5*VRB  VRB < 0,81/  VRB < 1838 Ω Nên chọn VR có điện trở 10k Ω  Tính RB cho c1815: Ta có: chọn k=5, β =80 IE ≈IC=10mA VRB=Vout-VBE= 5V-0.8V =4,2V Mà: k*IC= β*IB  IB = k*IC/ β  IB = 5*10mA/80 = 0.625mA Nên RB = VRB/IB = 4,2V/0.625mA= 6,72k Ω Nhưng chọn điện trở 4,7k với điện trở 1k để tạo nên cầu phân áp cho c1815 điện trở 1k dùng để chống nhiễu VB = V6*1/(4,7+1) = 5*1/(4,7+1) =0,877V CHƯƠNG IV LƯU ĐỒ GIẢI THUẬT SƠ ĐỒ NGUN LÝ VÀCHƯƠNG TRÌNH IV Chương trình #include #fuses nowdt,noprotect,nolvp,xt,put #device 16f877*=16 adc=10 #use delay (clock=4000000) #use fast_io(d) #use fast_io(b) #use fast_io(a) #use fast_io(c) #use fast_io(e) #byte portd=0x8 #byte portb=0x6 #byte portc=0x7 #byte porta=0x5 #byte porte=0x9 #bit f=portb.4 //chan kich mo cua xe vao #bit t=portb.5 //chan kich dong cua xe vao #bit k=portb.6 //chan kich mo cua xe #bit l=portb.7 //chan kich dong cua xe #bit a1=porta.1 //quet led dem xe #bit a2=porta.2 #bit a3=porta.4 //quet led nhiet #bit a4=porta.5 #bit b0=portb.0 //cam bien xe vao #bit b1=portb.1 //cam bien xe #bit b2=portb.2 #bit b3=portb.3 #bit e3=porte.2 int mang[10]={192,249,164,176,153,146,130,248,128,144}; int mangg[10]={192,249,164,176,153,146,130,248,128,144}; int i,z,h,dv,chuc,chuct,dvt; float x; int16 y; void doc_adc(); void hienthi(); void xera(); void xevao(); void canhbao(); void racungluc(); void vaocungluc(); void hienthix(); void main() { set_tris_d(0); set_tris_b(0b00001111); set_tris_c(0); set_tris_a(0b00000001); set_tris_e(0b000); z=0; x=0; h=0; h=read_eeprom(0x01); portb=0b00001111; portc=0b00000000; porte=0b000; l=1; t=1; for(i=0;i

Ngày đăng: 29/04/2019, 10:38

Tài liệu cùng người dùng

Tài liệu liên quan