You are on page 1of 28

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

GII THIU MODULE QEI ADC INT TRONG VI IU KHIN


A/ IU KHIN NG C DC SERVO (CHC NNG QEI)

1 / S khi ch QEI: (da trn h dsPIC30F )

2/ Quadrature Encoder Interface. Incremental hay optical ecoder l loi tiu biu thng c s dng, c ba tn hiu li ra: pha A, phase B v xung index. Ba tn hiu rt hu t v thng c xc nh v tr v iu khin tc ng c ACIM hoc SR. Phase A (QEA) v pha B (QEB) c mt mi tng quang c nht. Nu phase A sm pha hn phase B ch ra motor quay thun chiu, nu pha A chm phase hn phase B motor quay ngc chiu. Xung index xut hin 1 ln trn mt vng v c s dng nh l mt tham chiu xc nh v tr tuyt i. Xung index trng khp vi phase A v phase B

Bi ging Vi iu Khin 2011

Page 1

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

3/ Enable Digital Filters Lc k thut s khi kch hot cho php lc bt c nhiu sinh ra trong tnh hiu ca encoder.

Hnh trn cho bit cch m lc c nhiu ca tnh hiu encoder. Vic lc nhiu da trn vic tnh ton rng xung nh nht da trn tc ng c

VD: Tc ng c 4000 vng/pht, xung encoder 500, th rng xung nh nht s l:

Bi ging Vi iu Khin 2011

Page 2

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

V vy cu hnh b lc loi b cc tnh hiu c rng nh hn 15us. Trong v d ny chng ta ang chy ti 14,75 MIPS, cu hnh b lc t c yu cu:

Ta cu hnh ch QEI sao cho b chia l 64 th cc xung nh hn 13us s b loi b.

4/ Increment Pulse Counter B m xung gia tng m da trn s thay i cc chn QEn. QEI phi c cu hnh ch X4. Trong ch X4 tn hiu cnh ln chn QEA v QEB u lm tng hoc gim gi tr trong thanh ghi POSCNT.

Bi ging Vi iu Khin 2011

Page 3

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

5/ Reset Pulse Counter. Xung reset b m ti chn index (Ch reset bi chn index)

6/ VD on m thit lp cc thng s ban u cho khi QEI. void InitQEI(void) { ADPCFG |= 0x0038;// Configure QEI pins as digital inputs QEICONbits.QEIM = 0;// Disable QEI Module QEICONbits.CNTERR = 0;// Clear any count errors QEICONbits.QEISIDL = 0;// Continue operation during sleep QEICONbits.SWPAB = 0;// QEA and QEB not swapped QEICONbits.PCDOUT = 0;// Normal I/O pin operation QEICONbits.POSRES = 1;// Index pulse resets position counter DFLTCONbits.CEID = 1;// Count error interrupts disabled DFLTCONbits.QEOUT = 1;// Digital filters output enabled for QEn pins DFLTCONbits.QECK = 5;// 1:64 clock divide for digital filter for QEn DFLTCONbits.INDOUT = 1;// Digital filter output enabled for Index pin DFLTCONbits.INDCK = 5;// 1:64 clock divide for digital filter for Index POSCNT = 0;// Reset position counter QEICONbits.QEIM = 6;// X4 mode with position counter reset by Index return; }

Bi ging Vi iu Khin 2011

Page 4

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

7/ Tnh ton v tr gc vi QEI Gi tr m ti a trn mt vng c tnh da vo s xung ca encoder (500) v ch QEI.

phn gii ca gc :

Vi phn gii ny, gi tr ta cn chuyn i l t 0-1999 thnh mt phn s 16 bit c du t 0-32767 Ta s dng cng thc sau:

VD Tnh ton v tr gc: int AngPos[2] = {0,0}; // Two variables are used for Speed Calculation int POSCNTcopy = 0; void PositionCalculation(void) { POSCNTcopy = (int)POSCNT; if (POSCNTcopy < 0) POSCNTcopy = -POSCNTcopy; AngPos[1] = AngPos[0]; AngPos[0] = (unsigned int)(((unsigned long)POSCNTcopy * 2048)/125); // 0 <= POSCNT <= 1999 to 0 <= AngPos <= 32752 return; } 8/ Tnh ton vn tc gc vi QEI: Vic tnh tan vn toc gc s c thc hin trong ngt.Vn tc gc l 1 s tng dn trong khon thi gian ph hp. Khong thi gian ngt phi nh hn thi gian ti thiu t c vng tc ti a. Cng thc tnh khong thi gian ngt:

VD: Khi to cc thng s cho timer1 c c chu k ngt l 0.075 s

Bi ging Vi iu Khin 2011

Page 5

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

void InitTMR1(void) { TMR1 = 0; T1CONbits.TON = 0; T1CONbits.TSIDL = 0; T1CONbits.TGATE = 0; T1CONbits.TCS = 0; T1CONbits.TCKPS = 2; PR1 = 1728; IFS0bits.T1IF = 0; IEC0bits.T1IE = 1; T1CONbits.TON = 1; return; }

// Reset timer counter // Turn off timer 1 // Continue operation during sleep // Gated timer accumulation disabled // use Tcy as source clock // Tcy / 64 as input clock // Interrupt period = 0.0075 sec with a 64 prescaler // Clear timer 1 interrupt flag // Enable timer 1 interrupts // Turn on timer 1

VD: Tnh vn tc gc #define MAX_CNT_PER_REV (500 * 4 - 1) #define MAXSPEED (unsigned int)(((unsigned long)MAX_CNT_PER_REV*2048)/125) #define HALFMAXSPEED (MAXSPEED>>1) int Speed; void __attribute__((__interrupt__)) _T1Interrupt (void) { IFS0bits.T1IF = 0; // Clear timer 1 interrupt flag PositionCalculation(); Speed = AngPos[0] - AngPos[1]; if (Speed >= 0) { if (Speed >= (HALFMAXSPEED) Speed = Speed - MAXSPEED; } else { if (Speed < -(HALFMAXSPEED) Speed = Speed + MAXSPEED; } Speed *= 2; return; }

Bi ging Vi iu Khin 2011

Page 6

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

V d s dng module QEI ca DsPic // Cc th vin h tr ca DsPic #include <p30f4011.h> #include <pwm.h> #include <qei.h> void QEI_Init() { ADPCFG = 0xFFFF; QEICONbits.QEIM = 7; // Configure QEI pins as digital inputs // (bit 10-8 Disable QEI Module) x4 mode

QEICONbits.QEISIDL = 0; // bit 13 Continue operation during sleep QEICONbits.SWPAB = 0; // bit 7 QEA and QEB not swapped QEICONbits.PCDOUT = 0; // bit 6 Normal I/O pin operation QEICONbits.TQGATE= 1; // bit 5 Timer gated time accumulation disabled QEICONbits.TQCKPS= 0; // bit 4-3 Timer Input Clock Prescale Select bits //(1:1 prescale value) QEICONbits.POSRES = 0; // bit 2 Index pulse does not reset position counter QEICONbits.TQCS=0; //(TCY) // bit 1 Timer Clock Source Select bit=Internal clock

Bi ging Vi iu Khin 2011

Page 7

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

DFLTCONbits.CEID = 1;

// Count error interrupts disabled

DFLTCONbits.QEOUT = 0; // Digital filters output disabled for QEn pins DFLTCONbits.QECK = 0; } // clock divide for digital filter for QEn

iu khin ng c theo dng hnh thang

Sample code for PWM void PWM_Initialize() { DisableIntMCPWM; // Macro disable the PWM Interrupt SetPriorityIntMCPWM(7); DisableIntFLTA; PTPER=14570; //

// Config PTPER : PWM Time Base Period Register //tn s PWM 2KHz ,14 bits resolution

Bi ging Vi iu Khin 2011

Page 8

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

// Config PWMCON1 : PWM Control Register 1 PWMCON1bits.PMOD1=1; // PWM I/O pin pair is in the independent output //mode PWMCON1bits.PEN1H=0; // Disable for PWM 1H output PWMCON1bits.PEN1L=1; //LMD18200 PWMCON1bits.PEN2H=0; // Disable for PWM 2H output PWMCON1bits.PEN2L=1; // Enable for PWM 2L output(Disable for PWM 2L output) // Enable for PWM 1L output ----------> PWM for

PWMCON1bits.PEN3H=0; // Disable for PWM 3H output PWMCON1bits.PEN3L=0; // Disable for PWM 3L output

// Config PWMCON2 : PWM Control Register 2 PWMCON2bits.SEVOPS=0; // PWM Special Event Trigger Output Postscale //Select bits PWMCON2bits.IUE=0; // Updates to active PDC registers are

//synchronized to the PWM time base PWMCON2bits.UDIS=0; // Updates from duty cycle and period buffer

//registers are enable // Config PDC1 : PWM Duty Cycle Register 1 // Config PTCON : PWM Time Base Control Register

Bi ging Vi iu Khin 2011

Page 9

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

PTCONbits.PTSIDL=1; PTCONbits.PTOPS=16; PTCONbits.PTCKPS=0;

// PWM time base halts in CPU Idle mode // 1:16 Postscale (125 Hz). // PWM time base input clock period is TCY

//(1:1 prescale) PTCONbits.PTMOD=0; PTCONbits.PTEN=1; } // Tnh ton s xung cn xut void getu (unsigned int U) { u = f(U); // Tnh ton ra s xung da vo tn hiu cm bin, Sinh vin t chn li cng thc ca hm f(U) da vo cm bin s dng . fposition = ceilf(u);// lam tron so xung if (fposition < 0) {neg_mode = 1;} else neg_mode = 0; phase1dist = abs(fposition/2); // phase1dist gi 1/2 qung ng cn di chuyn phase = 0; Page 10 // PWM time base operates in a free running mode // PWM time base is on

Bi ging Vi iu Khin 2011

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

pwm_in_progress = 1; position = 0; mposition = 0; } // Tnh ton iu khin vn tc theo dng hnh thang void UpdateTraj () { if (pwm_in_progress) // Nu ng c vn hot ng { if (!phase) { if (velact < vlim) { // Nu vn tc cha t ti vn tc gii hn th // Nu l na u ca qung ng

// gia tc tng thm velact += accel;

} else { flatcount ++;// Nu t ti vn tc gii hn th bt c flatcount

Bi ging Vi iu Khin 2011

Page 11

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

phase1dist -= velact; // tr dn na qung ng cho velact if (neg_mode) position -= velact;// Nu di chuyn ngc chiu th tr else position += velact;// Nu di chuyn chiu thun th cng } if (phase1dist <= 0) //Nu ht na qung ng u th chuyn sang na //sau { } } else { if (flatcount)flatcount--; else if (velact) { velact -= accel;// Gim tc if (velact < 0) velact = 0;
Bi ging Vi iu Khin 2011

phase = 1;

Page 12

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

} else {

pwm_in_progress = 0;// Nu vn tc bng khng th c dng ng c position = fposition; // qung ng i c hon thnh } if (neg_mode) {position -= velact; } else {position += velact; } } }

Bi ging Vi iu Khin 2011

Page 13

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

// Tnh ton PID void pid_cal() { EncoderCount = POSCNT - Count; // lay sai lech xung cua encoder Count = POSCNT; mposition += EncoderCount ; // mode lam viec cua encoder la x4 // Tinh toan sai lech u = position - mposition ; Ypid = ceilf(u*Kp) ;// Lm trn s xung Intergral =Intergral + u; Ypid = Ypid + ceilf(Ki*Intergral); Ypid = Ypid + ceilf(Kd*EncoderCount); PDC1 = PDC2 = Ypid; } B/ MODULE ADC CA VI IU KHIN PIC c nhiu chn phc v x l ADC vi nhiu cch thc khc nhau . dng ADC , phi c khai bo #DEVICE cho bit dng ADC bao nhiu bit ( tu chip h tr , thng l 8 hay 10 bit hoc hn) chn la ADC 8 hay 10 bit ty mc ch s dng. Cc hm sau phc v ADC :

Bi ging Vi iu Khin 2011

Page 14

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

1 / Setup_ADC ( mode ): Khng tr v tr. Dng xc nh cch thc hot ng b bin i ADC . Tham s mode tu thuc file thit b *.h c tn tng ng tn chip ang dng , nm trong th mc DEVICES ca CCS . Sau y l cc gi tr mode ca 16F877 o ADC_OFF : tt hot ng ADC ( tit kim in , dnh chn cho hot ng khc ) . o ADC_CLOCK_INTERNAL : thi gian ly mu bng xung clock IC ( mt 2-6 us ) thng l chung cho cc chip . o ADC_CLOCK_DIV_2 : thi gian ly mu bng xung clock / 2 ( mt 0.4 us trn thch anh 20MHz ) o ADC_CLOCK_DIV_8 : thi gian ly mu bng xung clock / 8 ( 1.6 us ) o ADC_CLOCK_DIV_32 : thi gian ly mu bng xung clock / 32 ( 6.4 us ) 2 / Setup_ADC_ports ( value ): Xc nh chn ly tn hiu analog v in th chun s dng . Ty thuc b tr chn trn chip , s chn v chn no dng cho ADC v s chc nng ADC mi chip m value c th c nhng gi tr khc nhau. Sau y l cc gi tr cho value ( ch dng 1 trong cc gi tr ) ca 16F877 : o ALL_ANALOGS : dng tt c chn sau lm analog : A0 A1 A2 A3 A5 (Vref=Vdd) o NO_ANALOG : khng dng analog , cc chn s l chn I /O. o AN0_AN1_AN3 : A0 A1 A3 , Vref = Vdd o AN0 : A0 . VD : setup_adc_ports (AN0_AN1_AN3 ) ; // A0 , A1 , A3 nhn analog , p ngun +5V cp cho IC s l in p chun . 3 / Set_ADC_channel ( channel ): Chn chn c vo gi tr analog bng lnh Read_ADC ( ) . Gi tr channel tu s chn chc nng ADC mi chip .Vi 16F877, channel c gi tr t 0 -7 : 0-chn A0 | 1-chn A1 | 2-chn A2 | 3-chn A3 | 4-chn A5 | 5-chn E0 | 6-chn E1 | 7-chn E2 Hm khng tr v tr . Nn delay 10 us sau hm ny ri mi dng hm read_ADC ( ) bo m kt qu ng . Hm ch hot ng vi A /D phn cng trn chip. 4 / Read_ADC ( mode ): Dng c gi tr ADC t thanh ghi (/ cp thanh ghi ) cha kt qu bin i ADC . Lu hm ny s hi vng c cho ti khi c ny bo hon thnh bin i ADC ( s mt vi us ) th xong hm .
Bi ging Vi iu Khin 2011

E0 E1 E2

Page 15

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

Nu gi tr ADC l 8 bit nh khai bo trong ch th #DEVICE , gi tr tr v ca hm l 8 bit, ngc li l 16 bit nu khai bo #DEVICE s dng ADC 10 bit tr ln . Khi dng hm ny , n s ly ADC t chn bn chn trong hm Set_ADC_channel( ) trc .Ngha l mi ln ch c 1 knh Mun i sang c chn no, dng hm set_ADC_channel( ) ly chn . Nu khng c i chn , dng read_ADC( ) bao nhiu ln cng c. mode c th c hoc khng , gm c : ADC_START_AND_READ : gi tr mc nh ADC_START_ONLY : bt u chuyn i v tr v ADC_READ_ONLY : c kt qu chuyn i ln cui 5 /V d:

Chng trnh sau ly ADC 8 bit , c v xut ra LCD port B. Kt ni chn trn 16F877 : RA0 l chn ly Analog vo , p chun l ngun +5V , mass=0 V a /S mch:

b /Chng trnh vit trong CCS:


Bi ging Vi iu Khin 2011

Page 16

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

#include <16F877.h > #use delay( clock=20000000 ) #device *= 16 ADC = 8 // s dng ADC 8 bit , gi tr ADC vo t 0-255 #FUSES hs,nowdt,noput,nolvp //khai bao cau hinh cho PIC #byte portB =0x06 #byte portC=0x07 #define RS pin_c0 #define RW pin_c1 //dinh ten portB // dinh ten portC cho PORTC cua chip // dinh ten RS la chan RC0 cua chip // dinh ten RW la chan RC1 cua chip

#define E pin_c2 // dinh ten E la chan RC2 cua chip Int8 adc, donvi, chuc, tram; Int8 a =0; Main( ) { output_b(0x38); truyen_lenh(); output_b(0x0E); truyen_lenh(); Delay_ms (100 ); // chon che do de giao tiep LCD l 8 bit, hien thi 2x16, font 5x8 //truyen lenh vao LCD // bat den hien thi,bat con tro //truyen lenh vao LCD // delay 100 ms

Setup_ADC ( ADC_internal ) ; Setup_ADC_ports (AN0); Set_ADC_channel ( 0 ) ;

Bi ging Vi iu Khin 2011

Page 17

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

Delay_us (10 ); // delay 10 us While (true ) { adc = read_adc ( ) ; a = adc; convert_to_ascii(); hienthi(); } } ////////////////////////////////////////////////////////////////////////////////////// void convert _to_ascii() {a=a%1000; tram=a/100 + 0x30; a=a%100; chuc= a/10 + 0x30 ; donvi=a%10 + 0x30; } /////////////////////////////////////////////////////////////////////////////////////////// Void hienthi() { Output_b( 0x80); Truyen_lenh ; //chuong trinh con chuyen ma thnh m ascii de hien thi ra LCD //lay gia tri so du sau khi chia cho hang nghin //lay gia tri hang tram chuyn sang m ascii //lay gia tri so du sau khi chia cho hang tram //lay gia tri hang chuc chuyn sang m ascii //lay gia tri hang don vi chuyn sang m ascii

Bi ging Vi iu Khin 2011

Page 18

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

Output_b (V); Truyen_du_lieu (); Output_b (donvi); Truyen_du_lieu (); Delay_ms (10 ); Output_b ( chuc); Truyen_du_lieu (); Delay_ms (10); Output_b ( tram); Truyen_du_lieu (); Delay_ms (10); } ////////////////////////////////////////////////////////////////////////////////// void truyen_lenh() {output_low(RS); output_low(RW); output_high(E); delay_ms(5); output_low(E); delay_ms(5);} //chuong trinh cho phep ghi vao thanh ghi tren LCD //bat che do truyen lenh vo thanh ghi //bat bus ghi du lieu //bat dau cho du lieu qua //cho thoi gian truyen du lieu //tat du lieu va da san sang ghi du lieu //cho thoi gian dong du lieu

////////////////////////////////////////////////////////////////////////////////////////////////////

Bi ging Vi iu Khin 2011

Page 19

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

void truyen_du_lieu() //chuong trinh ghi du lieu vao RAM va hien thi len LCD {output_high(RS); output_low(RW); output_high(E); delay_ms(5); output_low(E); delay_ms(5); } //bat che do doc du lieu can hien thi //bat bus ghi du lieu vao RAM //bat dau cho du lieu qua //cho thoi gian truyen du lieu //tat du lieu va da san sang ghi du lieu //cho thoi gian dong du lieu

C/ CHC NNG TRUYN NHN QUA IC RS232 CA VI IU KHIN. - Chng ny s gip chng ta vit chng trnh c s dng giao tip UART trn PC v Vi iu khin . iu ny rt cn thit khi chng ta mun VK khi hot ng c th truyn d liu cho PC x l, hoc nhn gi tr t PC x l v iu khin ( dng PC iu khin ng c , nhit , hay bin PC thnh dng c o cc i lng in , . . .) . - s dng giao thc ny, chng ta phi c 2 khai bo nh v d sau : #use delay (clock = 40000000 ) // nu VDK ang dng OSC 40Mhz #use rs232 (baud=19200 , parity=n , xmit=pin_C6 , rcv=pin_C7 ) // baud= 19200 , khng chn l , chn truyn C6 , chn nhn C7 - Cc hm lin quan : Printf ( ) Getc ( ) putc ( ) Getch ( ) putchar ( ) Getchar ( ) fputc ( ) Fgetc ( ) puts ( ) Gets ( ) fputs ( ) Fgets ( ) Kbhit ( ) 1 / printf ( string ) Printf ( cstring , values . . . ) - Dng xut chui theo chun RS232 ra PC . - string l 1 chui hng hay 1 mng k t ( kt thc bi k t null ) . - value l danh sch cc bin , cch nhau bi du phy . - Phi khai bo dng format ca value theo kiu %wt .Trong w c th c hoc khng, c gi tr t 1-9 ch r c bao nhiu k t c xut ra ( mc nh khng c th c bao nhiu ra by nhiu ), hoc 01-09 s chn thm 0 cho k t hoc 1.1-1.9 cho trng hp s thc . Cn t l kiu
Bi ging Vi iu Khin 2011

Page 20

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

gi tr. t c th l : C : 1 k t S : chui hoc k t U : s 8 bit khng du x : s 8 bit kiu hex ( k t vit thng ,VD : 1ef ) X : s 8 bit kiu hex ( k t vit hoa ,VD : 1EF ) D : s 8 bit c du e : s thc c lu tha VD : e12 f : s thc Lx : s hex 16 /32 bit ( k t vit thng ) LX : hex 16 /32 bit ( k t vit hoa ) Lu : s thp phn khng du Ld : s thp phn c du % : k hiu % 2 / KBHIT ( ): - Thng dng RC6 v RC7 cho RX v TX trong giao tip cng COM. VDK PIC trang b phn cng phc v vic ny vi thanh ghi gi v nhn v cc bit bo hiu tng ng . Do khi dng RS232 h tr t phn cng th KHBIT ( ) tr v TRUE nu 1 k t c nhn ( trong b m phn cng ) v sn sng cho vic c , v tr v 0 nu cha sn sng. - Hm ny c th dng hi vng xem khi no c data nhn t RS232 c. 5 /V d: a/ S mch:

Bi ging Vi iu Khin 2011

Page 21

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

b /Chng trnh vit trong CCS: #include<16F877.h> #use delay (clock=20M) //khai bao header file, tuong ung chip su dung //su dung xung clock tan so 20MHz

#fuses hs,nowdt,noput,nolvp //khai bao cau hinh cho PIC #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //khai bao RS232 (toc do baud = 9600, dat parity = N, dat chan truyen DL la C6, dat chan nhan la C7, du lieu 8bit) #byte portB=0X06 #byte portC=0X07 #define RS pin_c0 // dinh ten portB cho PORTB cua chip // dinh ten portC cho PORTC cua chip // dinh ten RS la chan RC0 cua chip Page 22

Bi ging Vi iu Khin 2011

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

#define RW pin_c1 #define E pin_c2

// dinh ten RW la chan RC1 cua chip // dinh ten E la chan RC2 cua chip

unsigned char DIG[]={'h',e','l','l','o','#'}; //khai bao chuoi ky tu unsigned char hienthi; int8 a=0; int8 b=0; //////////==========Cac chuong trinh con=========//////////// void truyen_lenh() {output_low(RS); output_low(RW); output_high(E); delay_ms(5); output_low(E); delay_ms(5);} //chuong trinh cho phep ghi vao thanh ghi tren LCD //bat che do truyen lenh vo thanh ghi //bat bus ghi du lieu //bat dau cho du lieu qua //cho thoi gian truyen du lieu //tat du lieu va da san sang ghi du lieu //cho thoi gian dong du lieu

////////////////////////////////////////// void truyen_du_lieu() //chuong trinh ghi du lieu vao RAM va hien thi len LCD {output_high(RS); output_low(RW); output_high(E); delay_ms(5); output_low(E); //bat che do doc du lieu can hien thi //bat bus ghi du lieu vao RAM //bat dau cho du lieu qua //cho thoi gian truyen du lieu //tat du lieu va da san sang ghi du lieu

Bi ging Vi iu Khin 2011

Page 23

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

delay_ms(5);}

//cho thoi gian dong du lieu

/////////////////chuong trinh xuat chuoi hello ra dng 1 ca LCD////////////////////////// void write_to_row1() {output_b(0x80); Truyen_lenh(); while(DIG[a]!='#') {portB=DIG[a]; Truyen_du_lieu(); delay_ms(5); a++; } a=0;} //hin th bat dau ti v tr u tin ca dng 1 trn LCD //truyen du lieu vao thanh ghi //vong lap hien thi chuoi ky tu 'KIEM TRA PHIM4x4 va kiem tra het chuoi //chuyen ky tu hien thi ra portB //cho phep truyen du lieu va hien thi LCD //thoi gian hien thi tung ky tu //hien thi ky tu tiep theo //hien thi xong chuoi ky tu //xoa bien a

////////////////////////////////////////// void xoa_LCD() {output_b(0x01); truyenlenh(); delay_ms(5); } /////////////////////////////////////////// void hien_thi_du_lieu_nhan() //chuong trinh xuat du lieu ra LCD {output_b(hienthi); //xuat gia tri phim tuong ung phim duoc nhan //chuong trinh xoa LCD //lenh xoa LCD //truyen du lieu vao thanh ghi

Bi ging Vi iu Khin 2011

Page 24

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

Truyen_du_lieu(); b++; if(b==16) {xoa_LCD(); b=0; }}

//cho phep truyen du lieu va hien thi LCD //tang b len 1; bien b dem so lan hien thi LCD tren hang 2 //kim tra hien thi du 16 ky tu chua //neu du 16 lan --> xoa LCD //reset bien b //ket thuc chuong trinh

//////////////////////////////////////// ////////------------Chuong trinh chinh----------------//////// void main() //chuong trinh chinh //che do giao tiep 8 bit, hien thi 2x16, font 5x8 //truyen du lieu vao thanh ghi //bat den hien thi,bat con tro //truyen du lieu vao thanh ghi

{output_b(0x38); Truyen_lenh(); output_b(0x0E); truyenlenh();

//****************************** Write_to_row1(); output_b(0xC0); truyenlenh(); delay_ms(5); while(true) {if(kbhit()) {hienthi=getc(); //vong lap giao tiep chip va PC //kiem tra hoan tat nhan du lieu tu PC //nhan ky tu tu PC //xuat chuoi Hello ra hang 1 LCD //hien thi vi tri dau dong 2 //truyen du lieu vao thanh ghi

Bi ging Vi iu Khin 2011

Page 25

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

Hien_thi_du_lieu_nhan(); //hien thi ky tu nhan duoc len LCD putc(hienthi); } }} //truyen du lieu ra PC //ket thuc 1 lan giao tiep //ket thuc chuong trinh

D/ NG DNG NGT CA VI IU KHIN 1 / enable_interrupts ( level ) level l tn cc ngt ( GLOBAL cho php ngt cp ton cc ) Mi ngt ca VDK u c 1 bit c ngt , 1 bit cho php ngt . Khi c ngt th bit c ngt b set =1, nhng ngt c hat ng c hay khng tu thuc bit cho php ngt . Lnh enable_interrupts (int_xxx ) s bt bit cho php ngt . Nhng tt c cc ngt u khng th thc thi nu bit cho php ngt ton cc = 0 , enable_interrupts( global ) s bt bit ny . VD : cho php ngt timer0 v timer1 hot ng: enable_interrupts (int_timer0); enable_interrupts (int_timer1 ) ; enable_interrupts ( global ); // ch cn dng 1 ln tr phi mun c thay i c bit 2 / disable_interrupts ( level ): Hm ny v hiu 1 ngt bng cch set bit cho php ngt = 0 . disable_interrupts ( global ) set bit cho php ngt ton cc =0 , cm tt c cc ngt. 3 / ext_int_edge ( source , edge ) Hm ny thit lp ngun ngt ngoi EXTx l cnh ln hay cnh xung . source : ngun ngt . Trn PIC 18 c 3 ngun ngt trn 3 chn EXT0 , EXT1 , EXT2 ng vi source = 0 ,1 , 2 . Cc PIC khc ch c 1 ngun EXT nn source = 0 . edge : chn cnh kch ngt , edge = L_TO_H nu chn cnh ln ( t mc thp chuyn ln mc cao ) hay H_TO_L nu chn cnh xung. 5 /V d:
Bi ging Vi iu Khin 2011

Page 26

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

chng trnh s dng ngt khi c s thay i trn chn B4-B7. Mi khi nhn nt bt k trn B4-B7, s kch ngt RB, hm phc v ngt c tn RB_LED c thc thi, hm ny n gin l xut ra LED v tr tng ng nhng trn portD t D4 D7. a/ S mch:

b /Chng trnh vit trong CCS: #include < 16F877.h > #device PIC16F877 *=16 #use delay (clock = 20000000 ) //thm khai bo ny nu ctrnh c dng hm delay,OSC=20 Mhz #byte portb = 0x06 #byte portd = 0x08 #INT_RB Void RB_LED ( ) { portd=portb;
Bi ging Vi iu Khin 2011

//to tn danh nh portb thay th a ch portB l 06h //to tn danh nh portd thay th a ch portD l 08h

// hm phc v ngt

Page 27

Generated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only.

TS. V Tng Qun

Module iu khin ng c DC servo QEI / PID ADC INT

void main ( ) { set_tris_b ( 0xF0 ) ; // portB = 11110000 , B4-B7 l ng vo , B0-B3 l ng ra set_tris_d ( 0x00 ) ; // portD = 00000000 , D0-D7 u l ng ra enable_interrupts ( INT_RB ) ; // cho php ngt RB enable_interrupts ( GLOBAL ) ; // cho php ngt ton cc // do chng trnh khng lm g khc ngoi vic ch ngt nn vng while ny trng khng while( true ) { } } //main

Bi ging Vi iu Khin 2011

Page 28

You might also like