Thông tin tài liệu
ĐỀ TÀI NHÓM “Ứng dụng Pic16F877A đo ổn định nhiệt độ thuật toán PID” MỤC LỤC Chương I: Tìm hiểu thiết bị Chương II: Sơ đồ nguyên lý Chương III: Lập trình CCS, kết nối PC mơ Proteus Chương IV: Mơ hình thực tế chạy thử chương trình Chương V: Kết luận Thành viên nhóm: 1/ Nguyễn Anh Tuấn – 08D2 (nhóm tr ưởng) 2/ Nguyễn Duy Luân – 08D2 3/ Nguyễn Hữu Tâm – 08D2 4/ Nguyễn Văn Hiệu – 08D4 Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page Chương I TÌM HIỂU THIẾT BỊ 1/ 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 bít.Mỗi lệnh thực thi chu kỳ xung clock.T ốc đ ộ hoạt động tối đa cho phép 20MHz với chu kỳ l ệnh 200ns.B ộ nh chương trình 8Kx14 bít, nhớ liệu 368x8 byte RAM nh d ữ 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 bít với chia tần số bít Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page + Timer1: đếm 16 bít 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 ển ho ạt đ ộng ch ế độ sleep + Timer2: đếm bít 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, SPI I2C + Chuẩn giao tiếp nối tiếp USART với bít địa + Cổng giao tiếp song song PSP với chân điều ển RD, WR, CS bên - Các kênh Analog: + kênh chuyển đổi ADC 10 bít.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 + 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 2/ CẢM BIẾN NHIỆT ĐỘ LM35 DZ: Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page - LM35 cảm biến nhiệt độ analog, nhiệt độ xác định cách đo hiệu điện ngõ LM35: + Đơn vị nhiệt độ: °C + Có mức điện áp thay đổi trực độ C (10mV/*C) + Có hiệu cao, cơng suất tiêu thụ 60uA + Sản phẩm không cần phải canh chỉnh nhiệt độ sử dụng + Độ xác thực tế: 1/4°C nhiệt độ phịng 3/4°C ngồi khoảng -55°C tới 150°C + Chân +Vs chân cung cấp điện áp cho LM35DZ hoạt động (4—20V) + Chân Vout chân điện áp ngõ LM35DZ, đưa vào chân Analog ADC + Chân GND chân nối mass,lưu ý cần nối mass chân đ ể tránh làm hỏng cảm biến làm giảm sai số trình đo 3/ OPAM LM358: - Tín hiệu từ cảm biến đưa qua opam LM358 để khuếch đại lên trước đưa vào chân analog pic qua nâng cao đ ược đ ộ xác Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 4/ LED ĐOẠN: - LED đoạn công cụ thông dụng dùng đ ể hi ển th ị thông số dạng số từ đến 9.Mặc dù công cụ LCD giúp ta th ể hi ện thông số cách linh động LED đoạn đ ược sử dụng nhiều cơng nghiệp ưu như: chịu ảnh hưởng nhiệt độ, d ễ t ạo ý góc nhìn rộng - LED đoạn bao gồm đoạn LED đánh dấu kí t ự a, b, c, d, e, f, g dấu chấm thập phân kí hiệu dp.Ta có th ể xem LED đo ạn tổ hợp gồm LED.8 LEDnày có đầu (Anode Cathode) đ ược nối chung bố trí theo mộtqui tắc định dùng đ ể hi ển th ị chữ số thập phân Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page - Có hai loại LED đoạn, loại Anode chung (c ực Anode c LED nối chung với nhau) loại Cathode chung (cực Cathode c LED nối chung với nhau) - Tùy theo loại LED mà ta có phương pháp ều ển LED tổ hợp sáng tắt cách thích hợp.Đối với loại Anode chung, m ột LED bật sang mức logic đưa vào chân điều khiển đoạn LED m ức logic 0.Đối với loại Cathode chung, LED bật sang n ếu m ức logic đưa vào chân điều khiển đoạn LED đo mức logic 5/ TRANZITO PNP (A1015): Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page - Bảng thông số: - Chân nguồn led đoạn điều khiển chân vi điều khiển thông qua cực Base tranzito PNP Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 6/ QUẠT LÀM MÁT: - Tác dụng làm mát cho nguồn nhiệt lúc cần thiết - Thông số: + Nguồn DC 12V + Dòng điện: 0.14A + Vỏ bọc nhựa + Kích thước 30mm x 30mm x 10mm 7/ MOSFET IRF 540 + OPTO PC817: Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page - Mosfet hay cịn gọi tranzitor có cực cách ly, có tác dụng nh m ột khóa K Việc kích đóng hay mở khóa K tùy thuộc điện áp đặt vào chân G c mosfet - Ở ta đưa xung PWM từ chân RC1 Pic vào chân G c mosfet đ ể kích mở nó, qua điều chỉnh điện áp cung c ấp cho đ ộng c (qu ạt làm mát), nghĩa thay đổi tốc độ động Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page - Dùng Opto PC817 để cách ly quang mạch động l ực m ạch ều khiển 8/ CỔNG COM VÀ IC MAX 232: Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 10 - Giá trị điện áp trung bình đặt lên tải: Ud=Umax*(t0/T) V hay Ud=Umax*D Với D=t0/T hệ số điều chỉnh tính theo % - Cách xuất xung PWM CCS: // cài đặt tần số điều xung: + setup_timer_2 (mode,period,postscale); // cài đặt chân RC2 RC1 làm chân xuất xung PWM + setup_ccp1(ccp_pwm); + setup_ccp2(ccp_pwm); // cài đặt độ rộng xung: + set_pwm1_duty(value); + set_pwm2_duty(value); 5/ CHƯƠNG TRÌNH CCS: // De tai: va on dinh nhiet bang thuat toan PID=============== #include #fuses XT,NOWDT,NOLVP,NOPROTECT,HS #include #device *=16 adc=10 #use delay(clock=12M) #use rs232 (baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7) // Toc baud=9600, khong bit chan le, chan truyen RC6, chan nhan RC7== #define TANG RD2 #define GIAM RD3 #define ENTER RD1 // Khai bao bien toan cuc=============================== Byte const maled[ ]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; int8 mode,i,j,k,p,tem_dat,tem_do,HC,HDV,tam_i,tam_p,tam_d; float adc_tong,adc_tb,adc_cu,adc_moi,TPe2,TPe1,Out_put; signed int8 e2,e1; Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 19 long int16 value; float Kp; float Ki; float Kd; //e2: sai so nhiet hien tai; //e1: sai so nhiet qua khu truoc do; //tem_dat: nhiet dat; //tem_do: nhiet hien tai; //Ki: he so tich phan; //Kp: he so ti le; //Kd: he so vi phan; // Khai bao ngat timer1================================= #INT_TIMER1 void Ngat_TIMER1( ) { if(mode==1) { set_timer1(24280); k++; if(k==2) { k=0; printf("%u",tem_do); }}} // Khai bao ngat TIMER0=============================== #INT_TIMER0 void Ngat_TIMER0( ) { if(mode==1) { set_timer0(21);// T=256*(256-21)*4/12 ~ 20ms j++; if(j==5) {j=0; Ki=(tam_i)*0.1; Kp=(tam_p)*0.5; Kd=(tam_d)*0.5; e2=tem_do-tem_dat; TPe2=Ki*(e2+e1)*0.05; Out_put=Out_put+Kp*e2+TPe2+TPe1+Kd*(e2-e1)*10; Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 20 TPe1=TPe2; e1=e2; if(Out_put=0)&&(Out_put150) //value=150; else value=Out_put; set_pwm2_duty(value); }} else set_pwm2_duty(0); } // Khai bao ngat truyen thong RS232======================== // San sang nhan data tu RS232=========================== #INT_RDA void ngat_RDA ( ) { p++; if(p==1) tem_dat=getc( ); if(p==2) tam_i=getc( ); if(p==3) tam_p=getc( ); if(p==4) tam_d=getc( ); if(p==5) mode=getc( ); if(p==6) { mode=getc( ); p=0; Out_put=0; }} // Khai bao chuong trinh con============================= void CAI_DAT_NHIET_DO( ) void main( ) { Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 21 TrisD=0x0E; TrisB=0x00; PortD=0xF0; // Cai dat ADC===================================== setup_adc_ports(AN0); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); Delay_ms(10); // Cai dat ngat TIMER1================================ enable_interrupts(INT_TIMER1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); enable_interrupts(GLOBAL); set_timer1(24280) ; set_timer1(6); // Cai dat TIMER0=================================== enable_interrupts(INT_TIMER0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); enable_interrupts(GLOBAL); set_timer0(21); // Cai dat PWM=========================================== // F(x)=F(osc)/(4*mode*(period+1))) //Duty_cycle=value/(period+1) // Bam xung 5KHz; Setup_timer_2(T2_DIV_BY_4,149,1); Setup_ccp2(CCP_PWM); set_pwm2_duty(0); // Cai dat ngat truyen thong RS232========================== enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); mode=0;tem_dat=0;adc_cu=0;e1=0;TPe1=0;j=0;Out_put=0;j=0;k=0;p=0;tem_d o=0; tam_i=0;tam_p=0;tam_d=0; while(1) { // Cai dat nhiet do==================================== if(mode==0) CAI_DAT_NHIET_DO ( ); // PID on dinh nhiet do================================= if(mode==1) { // Chong nhieu vi sai lay mau=========================== Nguyễn Anh Tuấn - 08D2 – Bách Khoa Đà Nẵng Page 22 adc_tong=0; for(i=0;i
Ngày đăng: 14/08/2020, 22:28
Xem thêm: Đồ án: Ứng dụng Pic16F877A đo và ổn định nhiệt độ bằng thuật toán PID