Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
1,12 MB
Nội dung
GVHD: Nguyễn Thanh Thảo Đồ án Chương I: KHÁI QUÁT ĐỀ TÀI I/ Tóm tắt đề tài: 1/ Giới thiệu sơ lược modul mạch: -Tên đề tài đồ án 2:“Lập trìnhPIC16F877Ađiềukhiểntốcđộđộng DC” -Yêu cầu đặt ra: Lậptrình C cho Pic 16F877A điềukhiểntốcđộ cho độngDCcó gắn encoder hồi tiếp tốc độ.Tốc độ cài đặt từ bàn phím tốcđộ tức thời hồi tiếp từ encoder hiển thị hình LCD 16x2 -Tóm tắt hướng thực đề tài: Sử dụng Pic 16F877A vi điềukhiển trung tâm Dùng chương trình CCS lậptrình C biên dịch chương trình Xây dựng khối bàn phím gồm 16 phím để nhập tốcđộđiềukhiểnđộng DC: • 10 phím từ đến để cài đặt tốcđộ (vòng /phúc) • phím SET (hay ENTER) để lưu tốcđộ cài đặt • phím CLEAR để xóa tốcđộ cài đặt • phím SAVE để lưu tốcđộ vào epprom • phím điềuđiều khiển: quay thuận (FORWARD), quay nghich (REVERSE), dừng (STOP) Hiền thị tốcđộ dùng hình LCD 16x2, lậptrình chế độ bit (sử dụng chân để nhận liệu từ Pic) Sử dụng mạch cầu H IC L298N để đảo chiều động Sử dụng kênh PWM vi điềukhiển Pic thay đổi giá trị áp trung bình đặt vào động để điềukhiểntốcđộ Đối tượng điểukhiểnđộngDC 12V có gắn Encoder Ngồi mạch có phím nguồn (POWER) cấp điện từ adapter cho mạch phím RESET cho pic 16F877A Để cấp nguồn cho mạch ta dùng adapter AC/DC (220V/12V) khối nguồn sử dụng IC 7805 để ổn áp điện áp 5V cung cấp cho Pic SVTH: Trần Tường Băng Võ Văn Chính GVHD: Nguyễn Thanh Thảo Đồ án 2/ Sơ đồ nguyên lí mạch: VCC LCD1 R2 R3 R4 5k 5k 5k 5k (10) FW(16) RV(15) STOP (14) CLEAR (11) D0 D1 D2 D3 D4 D5 D6 D7 R1 10 a4 11 a5 12 a6 13 a7 14 RS RW E b0 b1 b2 RV1 VSS VDD VEE 16_X_2_LCD 13 p0 p1 p2 p3 1K set (12) C1 +12V +12V 30pF VCC 10 R5 R9 10k RESET 2k2 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RA0/AN0 RB3/PGM RA1/AN1 RB4 RA2/AN2/VREF-/CVREF RB5 RA3/AN3/VREF+ RB6/PGC RA4/T0CKI/C1OUT RB7/PGD RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 C3 10uF 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 CLK J3 CCP1 CCP2 10 12 11 CCP2 CCP1 CLK SIL-100-05 19 b2 20 b0 21 b1 22 27 a4 28 a5 29 a6 30 a7 15 VS OUT1 OUT2 OUT3 SENSA SENSB GND R1 R2 0.5 0.5 U1 IN1 VCC IN2 IN3 IN4 ENA ENB OUT4 M1 CLK M1 13 M2 M2 14 +88.8 L298 U2 +12V D21N4007 p0 p1 p2 p3 D31N4007 13 14 CRYSTAL D11N4007 X1 D41N4007 C2 U1 +5V 7805 PIC16F877A J1 JACK 1 VI VO R26 1k GND C4 C5 100uF 100nF 30pF C6 C7 100uF 100nF D8 LED J2 TERMINAL2 Hình 1: Sơ đồ nguyên lí mạch 3/Cách vận hành mạch: Bước 1: Bật nguồn (nhấn nút POWER), chờ cho Pic hình LCD khởi động, hình hiển thị: “CHỌN CHẾ ĐỘ:” Chương trínhcó chế độ làm việc: chế độ1 bám tốcđộ đặt, có lưu tốcđộ vào epprom; chế độ bám tốcđộcó định thời gian để thay đổi chiều quay Bước 2: Nhập tốcđộ từ bàn phím phím từ đến 9.Nếu nhập sai ta nhấn phím CLEAR trỏ LCD xóa hết số nhập, ta phải nhập lại từ đầu.Sau nhập xong, nhấn phím ENTER để lưu tốcđộ đặt, tốcđộ đặt tính theo đơn vị vòng/phút Nếu chế độ ta phải nhập them thời gian, sau nhấn phím ENTER SVTH: Trần Tường Băng Võ Văn Chính Đồ án GVHD: Nguyễn Thanh Thảo Bước 3: Để điềukhiểnđộng ta nhấn phím: quay thuận (FORWARD), quay nghịch (REVERSE), dừng (STOP) Bước 4: Để nhập lại tốcđộ ta nhấn phím CLEAR tiến hành đăt tốcđộ bước -Tốc độ tức thời động đươc cập nhật 0,5s so sánh với tốcđộ đặt để đưa tính hiệu điều khiển, đồng thời 0,5s tốcđộ hiển thị hình LCD 4/ Khuyết điểm mạch: -Do khơng áp dụng phương pháp điềukhiển (ví dụ như: PID, điềukhiển mờ,…) nên tốcđộđộng chưa ổn định -Mạch cầu H sử dụng IC L298 điềukhiểnđộngDCcó cơng suất nhỏ -Đối với khối hiển thị, tính chất hình LCD nên bị hạn chế quan sát giá trị hiển thị khoảng cách xa 5/ Hướng phát triển đề tài: - Cải thiện ổn định tốcđộđộng phương pháp PID hay điềukhiển mờ - Tính tốn thiết kế mạch cơng suất để điềukhiểnđộngcó cơng suất lớn - Sử dụng led đoạn để tăng khả quan sát khối hiển thị - Kết nối với máy tính, sử dung visual basic lậptrình để điềukhiểntốcđộđộngDC SVTH: Trần Tường Băng Võ Văn Chính GVHD: Nguyễn Thanh Thảo Đồ án CHƯƠNG II: GIỚI THIỆU VỀ CÁC LINH KIỆN PHẦN TỬ SỬ DỤNG TRONG MẠCH I.Vi điềukhiểnPIC16F877A Khái quát vi điềukhiểnPIC16F877A a/ Khái quát: - PIC tên viết tắt “Programmable Intelligent computer” hãng General Instrument đặt tên cho vi điềukhiển họ.Hãng Micrchip tiếp tục phát triển sản phầm hàng tạo gần 100 loại sản phẩm khác - PIC16F887A dòng PIC phổ biến, đầy đủ tính phục vụ cho hầu hết tất ứng dụng thực tế Đây dòng PIC dễ cho người làm quen với PIC học tập tạo tản họ vi điềukhiển PIC - PIC 16F877A thuộc họ vi điềukhiển 16Fxxx có đặt tính sau: Ngơn ngữ lậptrình đơn giản với 35 lệnh cóđộ dài 14 bit Tất câu lệnh thực chu kì lệnh ngoại trừ số câu lệnh rẽ nhánh thực chu kì lệnh Chu kì lệnh lần chu kì dao động thạch anh Bộ nhớ chương trình Flash 8Kx14 words, với khả ghi xoá khoảng 100 ngàn lần Bộ nhớ Ram 368x8bytes Bộ nhớ EFPROM 256x8 bytes Khả ngắt (lên tới 14 nguồn ngắt ngắt ngoài) Ngăn nhớ Stack chia làm mức Truy cập nhớ địa trực tiếp gián tiếp Dải điện hoạt động rộng: 2.0V đến 5.5V Nguồn sử dụng 25mA Công suất tiêu thụ thấp: SVTH: Trần Tường Băng Võ Văn Chính GVHD: Nguyễn Thanh Thảo Đồ án =tg1) { output_high(pin_e0); delay_us(100); output_low(pin_e0); dem=0; if (d==1) {d=2;} else if (d==2) SVTH: Trần Tường Băng Võ Văn Chính 58 GVHD: Nguyễn Thanh Thảo Đồ án {d=1;} else{} set_timer0(-235); } else { dem++; set_timer0(-235);} } //chuong trinh chinh void main() { i=0; sttphim=0; setpoint=0;tg=0; duty=0; c=0; d=0; ct=0;l=0;m=0; e0=0;e1=0;e2=0;e3=0;e=0;k=0; //================================================ ============ //1:ngo vao;0: la ngo set_tris_b(0b00001111);//4 chan RB4-RB7 xuat du lieu ban phim set_tris_a(0b00001111);//4 chan RA0-RA3 nhan du lieu tu ban phim set_tris_c(0b00000000);//2 chan RC0 va RC1 xuat PWM set_tris_D(0b00000000);//port D la port xuat du lieu LCD //================================================ ============ setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); /* timer1 la bo dinh thoi su dung xung noi,bo chia 1:8 thay doi moi 1600ns Dung timer1 de ngat moi 0.1s vay ta dat gia tri cho timer1 la : 0.1s/1600ns=62500(D)=F424(H) =>gia tri nap la FFFF-F424=BDB*/ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); enable_interrupts(int_ext);//khoi dong ngat ngoai ext_int_edge(H_TO_L); // xung tu cao xuong thap enable_interrupts(global);// khoi dong bit ngat GIE setup_timer_2(T2_DIV_BY_4,249,1); /*timer2 dung dinh thoi cho bo PWM mode: bo chia thoi gian (prescale) cua timer2 1:4 period: gia tri nap chi ghi PR2 postscale : bo chi ra,chon 1:1 PWM khong dung Thach anh 20MHz, PWM fre: 10000Hz, thay doi duty cycle(%) de thay doi toc do*/ setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); SVTH: Trần Tường Băng Võ Văn Chính 59 GVHD: Nguyễn Thanh Thảo Đồ án set_pwm1_duty(0); set_pwm2_duty(0); //================================================ =========== lcd_init() lcd_send_byte(0,0x01); lcd_gotoxy(1,1); printf(lcd_putc,"CHUONG TRINH DK "); lcd_gotoxy(1,2); printf(lcd_putc," TD DONGCODC "); delay_ms(1000); lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," "); read_rom(); lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_ "); while (true) { while (c==0) { quetphim(); if (a!=0) { if (sttphim==1) { ct=1; c=1; lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_%u",ct);} if (sttphim==2) { ct=2; c=1; lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_%u",ct);} } } if (ct==1) {lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_ v/p"); lcd_gotoxy(1,2); printf(lcd_putc,"TD_luu=%lu v/p",e);} else { lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_ v/p"); lcd_gotoxy(1,2); SVTH: Trần Tường Băng Võ Văn Chính 60 GVHD: Nguyễn Thanh Thảo Đồ án printf(lcd_putc,"TG_dat=_ While (c==1) { quetphim(); s");} if (a!=0) { if (sttphim>=0 && sttphim9 { if (m==0) {ghi_tocdo();} if((ct==2)&&(m==1)) {ghi_thoigian();} } if (sttphim==14) {clear();} if ((sttphim==13)&&(i==0)&&(e==0)) { lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"Phai nhap TD_dat"); delay_ms(1000); lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"TD_dat=_"); } if ((sttphim==15)&&(i!=0)) //luu vao eeprom { write_eeprom(0,e0); delay_ms(100); write_eeprom(1,e1); delay_ms(100); write_eeprom(2,e2); delay_ms(100); write_eeprom(3,e3); delay_ms(100); write_eeprom(4,i); delay_ms(100); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," LUU THANH CONG "); } if ((sttphim==13)&&((i!=0)||(e!=0))) SVTH: Trần Tường Băng Võ Văn Chính 61 GVHD: Nguyễn Thanh Thảo Đồ án { if (ct==1) { c=2; if (e!=0 && i==0) luu=e;} if ((ct==2)&&(l>=2)) { c=2;} m=1; }}} while (c==2) { quetphim(); if(a!=0) { if(sttphim==10) { lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," QUAY THUAN "); if (ct==2) {enable_interrupts(int_timer0); set_timer1(-235);} enable_interrupts(int_timer1); enable_interrupts(global); set_timer1(-62500); set_pwm1_duty(duty); d=1; } if (sttphim==11) { lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," QUAY NGHICH "); if (ct==2) {enable_interrupts(int_timer0); set_timer1(-235);} enable_interrupts(int_timer1); enable_interrupts(global); set_timer1(-62500); set_pwm2_duty(duty); d=2; } SVTH: Trần Tường Băng Võ Văn Chính 62 GVHD: Nguyễn Thanh Thảo Đồ án if (sttphim==12)//stop { disable_interrupts(int_timer0); set_timer0(0); disable_interrupts(int_timer1); set_pwm1_duty(0); set_pwm2_duty(0); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," STOP "); duty=0; d=0; } if (sttphim==14) { clear(); c=0; lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,2); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc,"CHON CHE DO :_ "); }}}}} void pwm() { if ((luu>s_vong)&& duty1000) duty=duty+50; else if (error>100) duty=duty+20; else if (error>30) {duty=duty+5;} else if (error>20) duty=duty+1.5; else if (error>10) duty=duty+(0.05*error); else {duty=duty+(0.025*error);} } if (luu0)) {error=s_vong-luu; if (error>=10) SVTH: Trần Tường Băng Võ Văn Chính 63 GVHD: Nguyễn Thanh Thảo Đồ án duty=duty-(0.05*error); else (duty=duty-(0.02*error)); } if(luu==s_vong) duty=duty; if((duty>=250)&&(luu>s_vong)) { lcd_gotoxy(1,1); printf(lcd_putc," "); lcd_gotoxy(1,1); printf(lcd_putc," TD_tt=MAX ");} if (d==0) {set_pwm1_duty(0); set_pwm2_duty(0);} else if (d==1) {set_pwm1_duty(duty); set_pwm2_duty(0);} else {set_pwm1_duty(0); set_pwm2_duty(duty);} } //========chuong trinh nhap toc do======= void ghi_tocdo() { if(i>=0&&i=0&&l