BÁO CÁO MÔN VXL TRONG ĐO LƯỜNG VÀ ĐIỀU KHIỂN

download BÁO CÁO MÔN VXL TRONG ĐO LƯỜNG VÀ ĐIỀU KHIỂN

of 16

Transcript of BÁO CÁO MÔN VXL TRONG ĐO LƯỜNG VÀ ĐIỀU KHIỂN

Bo co mn vi xa l trong o lng iu khin

BO CO MN VXL TRONG O LNG V IU KHINI. t vn :Ngy nay vic ng dng vi iu khin trong o lng iu khin c nhiu ngha. Cng vi s pht trin ca khoa ha k thut, c bit l cng ngh bn dn, dn n s ra i ca nhiu dng vi diu khin khc nhau. Vi vi iu khin PIC887, l mt dng vi iu khin mi ra i, nn c cc chc nng tng ng vi mt vi iu khin hin i: tch hp chc nng ADC 8bits v ADC 10bits ty ngi dung cu hnh, c 3 b timer: timer0 8bits, timer1 16bits, timer2 8bits, truyn thng SPI, UART, I2C ng c mt chiu DC l mt i tng tng gp trong thc t, n ng dng rng ri trong cng nghip, dn dngVic o lng v iu khin tc l mt yu cu thc t, do nhm chng em chn ti: iu khin v o lng tc ng c DC.

II. Mc ch yu cu :Mc ch: + Tm hiu v giao thc gia my tnh v vi iu khin, c th trong bo co ny l UART. + Tm hiu v cu trc ca vi iu khin cng nh lp trnh cho vi iu khin. + Bit cch xy dng mt giao din ng dng s dng b th vin MFC ca VC++ 6.0. Ni dung cng vic chng em thc hin l: + Xy dng mt modul iu khin ng c DC, modul hin th LCD v modul truyn thng ln my tnh qua cng COM trn mt board mch. + Lp trnh cho vi iu khin iu khin v o lng tc ng c. + Xy dng mt giao din trn my tnh s dng truyn thng ni tip truyn d liu iu khin t my tnh xung v t vi iu khin ln.

III. Modul phn cng :1. Khi Vi iu khin v hin th: Hnh nh ca PIC16F887

1

Bo co mn vi xa l trong o lng iu khin

S khi ca PIC16F887

PIC16F887 c 40 chn c trnh by trong datasheet. Chng em s dng chn RC2 (chn s 17) l chn PWM1 ca PIC16F887 dng to rng xung iu khin tc ng c v chn RA4 (chn s 8) l chn c nhim v nhn xung m c t Encorder gn trn trc ng c, dng chn 25 (chn TX) v chn 26 (chn RXD) truyn v a tn hiu ln my tnh qua cng COM. ng thi chng em s dng Port D dng cc chn nh trong nguyn l hin th cng lc ln mn hnh LCD.

2

Bo co mn vi xa l trong o lng iu khin

2. Moddul truyn thng: Do vi iu khin hot ng mc lgic ca h IC TTL (mc 0 tng ng vi t 0 - 2V; mc 1 tng ng vi 2,3 5V), trong khi chun RS232 ca my tnh li lm vic mc logic khc (mc 0 ng vi 3-12V; mc 1 ng vi -3 n - 12V). Do , ghp ni gia my tnh v vi iu khin phi ng nht mc tn hiu. lm c iu chng ta s dng IC Max 232, trong IC c cha hai b chuyn i qua li gia hai mc in p l mc in p logic trong TTL v RS232. Max 232 hot ng mc in p 5V gm 20 chn nh sau:

S khi bn trong ca Max 232 nh sau:

Trong s khi c mc thm t m bo cho IC hot ng n nh. Vic ghp ni my tnh v vi iu khin c thc hin nh sau:

3

Bo co mn vi xa l trong o lng iu khin

Chn 2 v 3 ca cng COM c ni vi chn 8 v 14 ca Max 232, sau khi tn hiu c chuyn i c ni vi vi iu khin thng qua chn RxD v TxD l hai chn s 25 v 26 ca PIC16F887. 3. Modul iu khin ng c: Phn mch cng sut iu khin ng c, s dng mch kch FET.

4

Bo co mn vi xa l trong o lng iu khin 4. S mch nguyn l: Cc linh kin c dng trong mch bao gm: - Mosfet IRF540N. - Optocouple P521. - Bin tr 100K. - T 104. - Thch anh 8 MHZ. - T gm 22p. - iode 3A. - Tr 1K. - Bin tr 10K. - Led bo.

5

Bo co mn vi xa l trong o lng iu khin

III. Chng trnh phn mm:1. Chng trnh cho vi iu khin PIC16F887 :

a. nh hng chng trnh: iu khin ng c DC, c hi tip: + ti s dng encoder quang phn hi tc (ng c c gn encoder 100 xung/vng.) Gi tr xung c update sau mt khong thi gian trch mu, khong thi gian ny c xc nh bi timer. + in p t vo 2 u ng c thay i s lm tc thay i, v vy tn hiu iu xung PWM c tc ng trc tip ln vn tc. Nhim v l phi c mt hm iu bin xung. + Gi tr tc c th c set t phm bm, hay t PC truyn xung + Gi tr tc set t phm bm ly t gi tr tc c lu trong b nh EEPROM ca PIC887. b. Gii quyt vn : Gi tr ca tc c set t phm bm hay c th c truyn t PC xung vi iu khin thng qua cng COM. Cc tnh ton trong lp trnh: c gi tr encoder: + o c tc ng c, ta dng timer1 nh khong thi gian ly mu, v timer0 chy ch counter m s xung. + Khong thi gian ly mu Ts c nh trc, sau mi khong thi gian Ts(Trong bi, Ts = 3ms.) th timer1 s sinh ngt, cho bin so_xung cp nht gi tr v hin th ln LCD v gi ln my tnh. + Ta c cng thc tnh ton vn tc ng c theo s xung m c nh sau: n [vng/pht] = No : S xung trong mt vng( phn gii ca encoder). Ts : Khong thi gian ly mu. so_xung : S xung m c trong thi gian Ts. iu xung PWM: Tn hiu iu khin trc tip ln mch cng sut l tn hiu PWM iu khin tc ng c. + S dng timer2 t tn s PWM:

c v tnh gi tr t bin tr: + Vi iu khin PIC16F887 c 12 knh ADC c phn gii 10bit, gi tr c vo t 0 -> 1023. + Ta c th s dng bin tr thay i tc nhanh hay chm ca ng c.6

Bo co mn vi xa l trong o lng iu khin c gi tr tc t b nh trong EEPROM. B nh trong EEPROM trong PIC887 l vng nh c th ghi/xa, thng dng lu tr cc d liu quan trng. Trong bi ny, chng em s dng lu tr cc gi tr tc c xc nh trc. ghi gi tr vo a ch mt nh trong EEPROM, chng trnh CCS s dng lnh: write_eeprom(value,add); c gi tr ca mt nh trong EEPROM, ta d dng lnh: read_eeprom(add); Trong , value l gi tr ghi vo, add l a ch ghi gi tr. Trong bi, lu 5 gi tr tc vo EEPROM, nhng chng trnh ch s dng 3 tc . Hin thc code: Chng trnh c vit bng ngn ng C trn phn mm CCS. Chng trnh c phn ra thnh cc modul d qun l, debug li v c th m rng cc modul phn mm.... Vi d n ny, chng em chia thnh 3 modul: dcMotorObject.c: Khai bo cc th vin, cc hm, v cc bin ton cc. action.c: Cha cc hm x l chnh ca vi iu khin. chinhthuc.c: chng trnh chnh. Quan h gia cc Modul:

action.c

dcMotorObject.c

Chinhthuc .c

2. Chng trnh giao din trn mn hnh my tnh:

Chng trnh c thit k trn VC 6.0, s dng b th vin MFC.

7

Bo co mn vi xa l trong o lng iu khin

3. S lc v gii thut lp trnh:Start

Ngt truyn thng?

Tc t ly t my tnh truyn xung.

Tc t ly t phm bm v bin tr vo.

Xut ra PWM

o tc t s xung pht ra t encoder

Hin th ln LCD v truyn thng ln my tnh qua cng COM.

8

Bo co mn vi xa l trong o lng iu khin

IV. Kt Lun:Sau mt thi gian tm hiu v nghin cu, chng em thu c nhng kin thc sau: - Thc hin c vic truyn thng my tnh qua cng COM. - Bc u nghin cu lm quen vi PIC16F887, s dng c cc tnh nng c bn ca chip nh: dng chn RC2 to rng xung iu khin tc , s dng ADC, s dng b nh trong EEPROM, giao tip vi ngoi vi (c th l LCD.) - Thit k c mch o v hin th tc ng c in DC v truyn thng hin th kt qu o c trn mn hnh my tnh . - Bc u ng dng k thut lp trnh vo trong ng dng c th. ng dng thc tin: Thit k mch o v iu khin h thng qut thng gi, lm mt, robot Code chng trnh: //File dcMotorObject.c //====================================================== //Chuong trinh: Do luong va dieu khien dong co DC // Hien thi len LCD 16*2 va truyen thong qua COM //Chuong trinh co the dieu khien bang tay hay tu dong thong qua: // 4 phim bam vs bien tro. //Nhom thuc hien: Nguyen Ngoc Anh // Tran Viet Lam // Nguyen Anh Tung // Vu Van Hien //Lop: Tu Dong Hoa K48 //Ngay thuc hien: 20/9/2010 //Ngay hoan thanh: 1/10/2010 //Mo ta phan cung: Su dung PIC16F887 // LCD 16*2, khoi truyen thong COM, // khoi dieu khien dong co DC //====================================================== //----------------- khai bao cac bien toan cuc--------------unsigned int16 so_xung; int1 stt_1=0,stt_2=0,stt_3=0;9

Bo co mn vi xa l trong o lng iu khin int8 mode=1,k=0; char doc_data; float adc; int16 v,vantoc,v_set; //-------------5 toc do co ban cua dong co DC----------------#define speed_1 0 #define speed_2 100 #define speed_3 350 #define speed_4 750 #define speed_5 1023 #define sw_1 pin_b1 #define sw_2 pin_b2 #define sw_3 pin_b3 //===================================================== //----------------Khai bao cac ham con--------------------//====================================================== void init_mcu(void); void truyen_nhan(int16 obj); void hien_thi(int16 obj); void toc_do(unsigned int16 pwm_1); int16 doc_adc(char i); int16 re_eeprom(int add); void wr_epprom(); void hieu_chinh(int16 v); void set_speed(); //file action.c #include "dcMotorObject.c" void truyen_nhan(int16 obj) { if(obj>=1000) { printf("%lu",obj); } else if((obj>=100)&&(obj=10)&&(obj=0)&&(obj3) k=1; stt_1=0; lcd_putcmd(0x01); } switch(k) {12

Bo co mn vi xa l trong o lng iu khin case 1: lcd_putcmd(0x80); lcd_putchar("Toc do 1"); v_set =(unsigned int16) read_eeprom(0x01); break; case 2: lcd_putcmd(0x80); lcd_putchar("Toc do 3"); v_set =(unsigned int16) read_eeprom(0x03); break; case 3: lcd_putcmd(0x80); lcd_putchar("Toc do 5"); v_set=(unsigned int16)read_eeprom(0x05); break; } if(input(sw_3)==0) {delay_ms(10); stt_3=1;} if(input(sw_3)==1 && stt_3==1) { v = v_set; stt_3=0; mode=1; k=0; lcd_putchar("okiman"); lcd_putcmd(0x01); } } } } void hieu_chinh(unsigned int16 v){ { set_adc_channel(0); adc = read_adc(); delay_us(100); adc = adc*5000/1023; if(adc < 2.5) { v_set = v - adc; toc_do(v_set); } else { v_set = v+ adc; toc_do(v_set); } while(mode != 1){13

Bo co mn vi xa l trong o lng iu khin if(input(sw_3)==0) {delay_ms(10); stt_3=1;} if(input(sw_3)==1 && stt_3==1) { v = v_set; stt_3=0; mode=1; k=0; lcd_putchar("okiman"); lcd_putcmd(0x01); } } } }void hien_thi(int16 obj) { int8 a=0,b=0,c=0,d=0; a=obj/1000; b=(obj-1000*a)/100; c=(int)((obj-1000*a-100*b))/10; d=obj%10; ///////////////////////////////// lcd_putcmd(0x80); lcd_putchar("MP"); lcd_putcmd(0xC0); lcd_putchar(a+48); lcd_putchar(b+48); lcd_putchar(c+48); lcd_putchar(d+48); lcd_putchar(" vg/phut"); } //file chinhthuc.c #include #include #device *=16 ADC=10 #FUSES HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT,NOWDT #use delay(clock=20mhz) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include #include "action.c" #INT_TIMER1 void timer1_isr() {14

Bo co mn vi xa l trong o lng iu khin //T_dinh thi cua Timer1