1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án Vi điều khiển ( vi điều khiển PIC 16F877A)

17 1,2K 7

Đ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

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 561,5 KB

Nội dung

Pic 16f877a có tập lệnh gồm 35 lệnh, mỗi lệnh được thực hiện trong một chu kỳ xung clock. Tốc độ hoạt động tối đa cho phép là 20mhz. với mỗi chu kỳ lệnh là 200ms , bộ nhớ chương trình 8K14bit . Số port IO là 5 với 33 pin IO Các đặc tính ngoaji vi bao gồm các khối chức năng sau: + timer0: bộ đếm 8 bit với bộ chia tần số 8 bit +timer1: bộ đếm 16 bit với bộ chia tần số ,có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khi vi điều khiển hoạt động ở chế độ sleep + timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler + hai bộ Capture so sánh điều chế độ rộng xung + Các chuẩn giao tiếp UART với 9 bit địa chỉ + Các đặc tính Analog: 8 kênh chuyển đổi ADC 10 bit, 2 bộ so sánh + Bên cạnh đó là một vài đặc tính khác của vi điều khiển: như bộ nhớ flash có thể nạp xóa 100.000 nghìn lần, bộ nhớ eproom ghi xóa được 1.000.000 lần + Nạp được chương trình ngay trên mạch điện ICSP 1.1 Giới thiệu về các linh kiện sử dụng trong mạch 1.1.1 LCD 16x2 Màn hình tinh thể lỏng (Liquid Crystal Display, LCD) là loại thiết bị hiển thị cấu tạo bởi các tế bào (các điểm ảnh) chứa tinh thể lỏng có khả năng thay đổi tính phân cực của ánh sáng và do đó thay đổi cường độ ánh sáng truyền qua khi kết hợp với các kính lọc phân cực. Chúng có ưu điểm là phẳng, cho hình ảnh sáng, chân thật và tiết kiệm điện. Ngày nay, thiết bị hiển thị LCD được sử dụng trong rất nhiều các ứng dụng của

MỤC LỤC MỤC LỤC PHẦN 1:GIỚI THIỆU CÁC LINH KIỆN ĐIỆN TỬ TRONG MẠCH ĐIỆN Giới thiệu vi điều khiển PIC 16F877A .3 1.1Giới thiệu linh kiện sử dụng mạch 1.1.1 LCD 16x2 a/ Hình dạng kích thức Chú ý : b/ Tập lệnh 1.1.2 Encoder .8 PHẦN 2: MÔ PHỎNG NGUYÊN LÝ VÀ MẠCH IN 11 2.1 Mạch nguyên lý 11 2.2 Mạch mô mạch in 11 2.3 Nguyên lý hoạt động phần mềm hỗ trợ .12 PHẦN 3: LƯU ĐỒ THUẬT TOÁN VÀ CODE NẠP CHO VI ĐIỀU KHIỂN 12 3.1 Lưu đồ 12 3.2 Chương trình .14 MỞ ĐẦU Hiện đất nước ta thời kì đổi mới, thời kì công nghiệp hoá đại họá với phát triển công nghệ thông tin, ngành kỹ thuật điện tự động hóa phát triển lên tầm cao Điều khiển tự động ngành quan trọng trình công nghiệp hóa, đại hóa đặc biệt góp phần vào việc giải phóng sức lao động người xác người Điều khiển tự động có mặt từ trước công nguyên đồng hồ có phao điều chỉnh Ktesibios Hi Lạp Rồi sau có thêm số máy móc điều khiển tự động (như: hệ điều chỉnh nhiệt độ Cornelis drebble, hệ điều chỉnh tốc độ ứng dụng công nghiệp….) Trong chiến tranh giới thứ người hỏi điều khiển tự động để ứng dụng vào mục đích quân (như: máy bay tự động lái, điều khiển vũ khí, điều khiển đa ) Những năm 50 phương pháp toán học bắt đầu đời đưa nhanh vào ứng dụng thực tế Ở Mỹ người ta nghiên cứu dựa miền tần số Liên Xô lại dựa miền thời gian Ngày để đáp ứng nhu cầu người, giảm tải lao động tay chân, hệ thống “Đo tốc độ động hiển thị LCD” đời giúp cho việc đo tốc độ động công nghiệp trở nên dễ dàng thuận tiện nhiều, giảm thiểu sai sót vận hành hệ thống với động điện PHẦN 1:GIỚI THIỆU CÁC LINH KIỆN ĐIỆN TỬ TRONG MẠCH ĐIỆN Giới thiệu vi điều khiển PIC 16F877A Pic16f877a có độ dài lệnh 14 bit sơ đồ chân gồm 40 pin - Pic 16f877a có tập lệnh gồm 35 lệnh, lệnh thực chu kỳ xung clock Tốc độ hoạt động tối đa cho phép 20mhz với chu kỳ lệnh 200ms , nhớ chương trình 8K*14bit Số port I/O với 33 pin I/O Các đặc tính ngoaji 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ố ,có thể thực chức đếm dựa vào xung clock ngoại vi vi điều 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 UART với bit địa +/ Các đặc tính Analog: kênh chuyển đổi ADC 10 bit, so sánh +/ Bên cạnh vài đặc tính khác vi điều khiển: nhớ flash nạp xóa 100.000 nghìn lần, nhớ eproom ghi xóa 1.000.000 lần +/ Nạp chương trình mạch điện ICSP 1.1 Giới thiệu linh kiện sử dụng mạch 1.1.1 LCD 16x2 Màn hình tinh thể lỏng (Liquid Crystal Display, LCD) loại thiết bị hiển thị cấu tạo tế bào (các điểm ảnh) chứa tinh thể lỏng có khả thay đổi tính phân cực ánh sáng thay đổi cường độ ánh sáng truyền qua kết hợp với kính lọc phân cực Chúng có ưu điểm phẳng, cho hình ảnh sáng, chân thật tiết kiệm điện Ngày nay, thiết bị hiển thị LCD sử dụng nhiều ứng dụng VĐK LCD có nhiều ưu điểm so với dạng hiển thị khác: Nó có khả hiển thị kí tự đa dạng, trực quan (chữ, số kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn tài nguyên hệ thống giá thành rẻ a/ Hình dạng kích thức Có nhiều loại LCD với nhiều hình dáng kích thước khác nhau, hình loại LCD thông dụng Khi sản xuất LCD, nhà sản xuất tích hợp chíp điều khiển bên lớp vỏ đưa chân giao tiếp cần thiết Các chân đánh số thứ tự đặt tên hình : Chân Kí hiệu Ý nghĩa VSS Chân nối đất cho LCD, thiết kế mạch ta nối chân với GND mạch điều khiển Vdd Chân cấp nguồn cho LCD, thiết kế mạch ta nối chân với VCC=5V mạch điều khiển VEE Điều chỉnh độ tương phản LCD RS Chân chọn ghi (Register select) Nối chân RS với logic “0” (GND) logic “1” (VCC) để chọn ghi + Logic “0”: Bus DB0-DB7 nối với ghi lệnh IR LCD (ở chế độ “ghi” write) nối với đếm địa LCD (ở chế độ “đọc” - read) + Logic “1”: Bus DB0-DB7 nối với ghi liệu DR bên LCD RW E 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 Chân cho phép (Enable) Sau tín hiệu đặt lên bus DB0-DB7, 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-tolow 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 LCD thông qua chân Dx Chân 15 chân 16: ghi A K Nó anot katot led dùng để sáng LCD bóng tối, k nối , sử dụng nối chân 15 với trở 220 or 330 ôm lên VCC, chân 16 nối đất Tập lệnh LCD 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ữ ghi (xem bảng trên) +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 Nhưng 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 phải đánh lệnh phức tạp 1.1.2 Encoder Encoder mục đích dùng để quản lý vị trí góc đĩa quay, đĩa quay bánh xe, trục động cơ, thiết bị quay cần xác định vị trí góc Encoder chia làm loại, absolute encoder incremental encoder Tạm gọi encoder tuyệt đối encoder tương đối Với encoder tuyệt đối với tín hiệu ta nhận được, rõ ràng vị trí encoder, không cần xử lý thêm, biết xác vị trí encoder Còn incremental encoder, loại encoder có 1, 2, tối đa vòng lỗ Ta hình dung này, bạn đục lỗ đĩa quay, lần đĩa quay vòng, ta nhận tín hiệu, biết đĩa quay vòng Nếu có nhiều lỗ hơn, ta có thông tin chi tiết hơn, có nghĩa đĩa quay 1/4 vòng, 1/8 vòng, 1/n vòng, tùy theo số lỗ nằm incremental encoder Cứ lần qua lỗ, phải lập trình để thiết bị đo đếm lên Do vậy, encoder loại có tên incremental encoder (encoder tăng lên đơn vị) Nguyên lý encoder, đĩa tròn xoay, quay quanh trục Trên đĩa có lỗ (rãnh) Người ta dùng đèn led để chiếu lên mặt đĩa Khi đĩa quay, chỗ lỗ (rãnh), đèn led không chiếu xuyên qua được, chỗ có lỗ (rãnh), đèn led chiếu xuyên qua Khi đó, phía mặt bên đĩa, người ta đặt mắt thu Với tín hiệu có, ánh sáng chiếu qua, người ta ghi nhận đèn led có chiếu qua lỗ hay không Khi trục quay, giả sử đĩa có lỗ nhất, lần mắt thu nhận tín hiệu đèn led, có nghĩa đĩa quay vòng nguyên lý hoạt động encoder Với việc sử dụng encoder để đo xung tính toán tốc độ động cơ, ta phải có công thức để tính toán tốc độ động V= 60.n N T Với :-V vận tốc động (vòng/phút) -n số xung xuất kênh 1s -N số xung đĩa động encoder -T thời gian lấy mẫu 10 PHẦN 2: MÔ PHỎNG NGUYÊN LÝ VÀ MẠCH IN 2.1 Mạch nguyên lý 2.2 Mạch mô mạch in 11 2.3 Nguyên lý hoạt động phần mềm hỗ trợ +Mạch sử dụng vi điều khiển PIC 16F877A để đếm xung xuất từ chân encoder phương pháp ngắt đếm số lần ngắt đo chân B0 Sau vi điều khiển tính toán theo công thức cho sẵn hiển thị LCD tốc độ vòng/phút động +Phần mềm thiết kế mạch in: Altium 16 +Phần mềm mô phỏng: Proteus 8.0 +Phần mềm lập trình:MikroC PHẦN 3: LƯU ĐỒ THUẬT TOÁN VÀ CODE NẠP CHO VI ĐIỀU KHIỂN 3.1 Lưu đồ 12 13 3.2 Chương trình #include #include #define LCD_RS PIN_D2 #define LCD_EN PIN_D3 #define LCD_D4 PIN_D4 #define LCD_D5 PIN_D5 #define LCD_D6 PIN_D6 #define LCD_D7 PIN_D7 #include #include #use delay(clock=20000000) float32 w = 0;//cai dat w=0 voi kieu bien co dau cham dong long int Dem=0,dem1=0,xung=0,count=0;// Dem xung Encoder, so chu ki Dem++ float32 Get_W(void);// Ngat kenh A #int_ext void kenh_A() { Dem++; // dem tang } #int_timer1 void ngat_timer1() { set_timer1(3036);// // Cai dat timer1 count ++; 14 if(count==10) { w=get_w();// Tinh van toc w (vong/phut) } else { count = ;} // Prescale = 8; tran timer sau 100ms // T_interrupt = {4*8*[(2^16-1)-timer1]x }/20MHz= 100 ms => gia tri ban dau cua timer =3036 } void main() {char so[8];// dinh nghia ham "so"=8 voi kieu char // Cai dat thong so ban dau setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);// setup 1/4 xung clock, lay thoi gian mau o che T1_DIV_BY_8 voi Tmax=104.8ms ext_int_edge( L_TO_H );// ngat co xung canh len // Khai bao ngat enable_interrupts(global);// ham khoi tao ngat enable_interrupts(int_ext);// ngat ngoai enable_interrupts(int_timer1);// ngat timer tran set_timer1(3036); LCD_Init();//Ham khoi tao LCD sprintf(so," Toc "); //hien thi len LCD gia tri muon hien thi lcd_Gotoxy(1,2);// toa lcd_Puts(so);// xuat LCD den sprintf(so,"dong co"); lcd_Gotoxy(1,8); 15 lcd_Puts(so); sprintf(so,"vong/phut"); LCD_gotoxy(4,8); LCD_Puts(so); LCD_SendCommand( 0x0C);// tat tro nhap nhay while(1)//vong lap hien thi toc lien tuc { sprintf(so,"%5.0f",w); LCD_Gotoxy(2,0); LCD_Puts(so); delay_ms(1000); // Hien thi len LCD } } // Ham tinh van toc goc vong/phut float32 Get_W(void) { float32 tocdo; Xung = Dem - dem1; // Xungencoder: so xung/vong cua encoder xung: so xung doc duoc giua hai lan ngat lien tiep thoigianmau: thoi gian(s) lay mau Quy tac tam xuat: Xung giay tocdo x xungencoder xung 60 thoigianmau 16 => tocdo x xungencoder x thoigianmau = xung x 60 => tocdo = (xung x 60)/( xung encoder x Thoigianmau // xungencoder = 20 xung/vong // thoigianmau = 1s tocdo = 3*(float32)xung; dem1 = Dem; return(tocdo); } 17 [...]... lcd_Gotoxy(1,2);// toa do lcd_Puts(so);// xuat ra LCD den sprintf(so,"dong co"); lcd_Gotoxy(1,8); 15 lcd_Puts(so); sprintf(so,"vong/phut"); LCD_gotoxy(4,8); LCD_Puts(so); LCD_SendCommand( 0x0C);// tat con tro nhap nhay while(1)//vong lap hien thi toc do lien tuc { sprintf(so,"%5.0f",w); LCD_Gotoxy(2,0); LCD_Puts(so); delay_ms(1000); // Hien thi len LCD } } // Ham tinh van toc goc vong/phut float32 Get_W(void)... dụng vi điều khiển PIC 16F877A để đếm các xung xuất ra từ chân của encoder bằng phương pháp ngắt ngoài và đếm số lần ngắt ngoài đo được trên chân B0 Sau đó vi điều khiển sẽ tính toán theo công thức đã cho sẵn và sẽ hiển thị ra LCD tốc độ vòng/phút của động cơ +Phần mềm thiết kế mạch in: Altium 16 +Phần mềm mô phỏng: Proteus 8.0 +Phần mềm lập trình:MikroC PHẦN 3: LƯU ĐỒ THUẬT TOÁN VÀ CODE NẠP CHO VI ĐIỀU... float32 Get_W(void);// Ngat kenh A #int_ext void kenh_A() { Dem++; // dem tang } #int_timer1 void ngat_timer 1() { set_timer 1(3 036);// // Cai dat timer1 count ++; 14 if(count==10) { w=get_w();// Tinh van toc w (vong/phut) } else { count = 0 ;} // Prescale = 8; tran timer sau 100ms // T_interrupt = {4*8* [(2 ^16-1)-timer1]x 1 }/20MHz= 100 ms => gia tri ban dau cua timer 1 =3036 } void main() {char so[8];//... dau setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);// setup 1/4 xung clock, lay thoi gian mau o che do T1_DIV_BY_8 voi Tmax=104.8ms ext_int_edge( L_TO_H );// ngat khi co xung canh len // Khai bao ngat enable_interrupts(global);// ham khoi tao ngat enable_interrupts(int_ext);// ngat ngoai enable_interrupts(int_timer1);// ngat khi timer tran set_timer 1(3 036); LCD_Init();//Ham khoi tao LCD sprintf(so," Toc do ");... xung doc duoc giua hai lan ngat lien tiep thoigianmau: thoi gian(s) lay mau Quy tac tam xuat: Xung giay tocdo x xungencoder xung 60 thoigianmau 16 => tocdo x xungencoder x thoigianmau = xung x 60 => tocdo = (xung x 60) /( xung encoder x Thoigianmau // xungencoder = 20 xung/vong // thoigianmau = 1s tocdo = 3*(float32)xung; dem1 = Dem; return(tocdo); } 17 ... mềm lập trình:MikroC PHẦN 3: LƯU ĐỒ THUẬT TOÁN VÀ CODE NẠP CHO VI ĐIỀU KHIỂN 3.1 Lưu đồ 12 13 3.2 Chương trình #include #include #define LCD_RS PIN_D2 #define LCD_EN PIN_D3 #define LCD_D4 PIN_D4 #define LCD_D5 PIN_D5 #define LCD_D6 PIN_D6 #define LCD_D7 PIN_D7 #include #include #use delay(clock=20000000) float32 w = 0;//cai dat w=0 voi kieu bien co dau cham

Ngày đăng: 13/05/2016, 16:30

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w