lab2_final_report - Purpose lab2 u lab1 q] 8 oscilloscope u...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Purpose lab2 u lab1 q] 8 oscilloscope u trigger - "¶ . Oscilloscope u triggering p ð - . è ` ¶ ª oscilloscope u signal ˆ # ´ G á Õµ” 4 84 . ð signal ˆ ] 4 è R ` ª G. F trigger è ` ¶ªG . u trigger level È ` ¶ªG -1V u 1V qˆ 8 4 " level ð _ ]8 7 . Trigger ð - oscilloscope è ` ª G channel ˆ Œ# ª G Õµ 8 4 b 84. è l` ª G interface board ð - " trigger u channel select è ` ¶ hardware ð. ðˆ Œ x´ 6 Õ µ ” 4 _ 8 gpio pin u control è ` ª G module È ` ¶ª server.c ð software È ` ¶ ªG V. u Experiment sequence & results 1 ˜& ] 8 4 À l ` ¶ G Œ#´ . Problem Statement Oscilloscope u trigger pulse È ` ¶ª trigger q ˆ 8 4 . Trigger u channel u level polarity È ` ¶ ª Trigger channel u 1 or 2 € 3i level u -1000mV ~ 1000mV ð- " . Hardware ð- . Channel selection Channel ˆ ]84 comparator è l` ª G ., 1. ADG453 . ADG453 u È `¶ ª 4u AD8561 l`è ªG . ADG453 q ˆ 84 .˜ & ðˆ 8 4 AD8561 u l`ª Œ# tri state buffer è `¶ª Èl ¶ª . IN1 È ` ¶ ª high p S1 u D1 IN2 è ` ¶ ª low channel u 1 u 2 ˆ # ´ ª áÕ ”84 4 u channel 1 u 2 . IN1 ð u IN2 D1 u D2 c- " hannel output È channel 1 u input è ` ¶ ª G S2 u channel 2 u input È ` ¶ ª G .è l ¶ª IN1 u D1 S1 D2 S2 -. " ¶ u output u channel 1 è ` ¶ G u output u channel 2 ð -." u IN1(IN2) u control È l ¶ ª G embedded board è ` ¶ GPIO pin ˆ ] 8 4 2. AD8561 ˆ]8 comparator È `¶ ª G è `¶ ªG +in > -in È ` ¶ high è ` ¶ ª G ð . è " l¶ ` ª G ˆ]8 l ¶ª .u S1 u high . IN1 u low È ` ¶ ª G . . ð . ˆ #´ ª +in < -in È ` ¶ áÕ ”8 4 ; 4 . È ¶` ª hysteresis low è ` ¶ ª G .u ˜ & ˆ8 à ` ¶ª G ˆ Œ trigger level ˜ ˆ ] 8 4 À l`¶ G è l ` ª G -in u trigger level È ` ¶ ª G . Trigger level è l ¶ ª G low è ` ¶ ª G .T 5 iªG T 5 i ªG > 4 comparator .ð u comparator ˆ #´ ª G áÕ ” 84 ; 84. ˜ & ˆ84 À`¶ª ˆ #´. ˆ . u input u output u high o” , r +in output u ðu ð signal u vref ¸i ¶ª low l "¶ ª 6 signal u vref ¸i ¶ ªG high l " ¶ª G . ¸ ` ¶ signal u noise ˜ ˆ ] ˆ] 4 .: T4 o W Feedback loop ˆ ]8 . 4 l ` ¶ 6 ˆ Œ x vref u . . ˜ & ˆ T4 u datasheet noise ¸ ` ¶ °l` ¶ 6 ˆú ç .ˆ G output u low u high feedback loop ¸ ` ¶ªG . # ´ª á µ ”8 b T _ˆ 8 7 . Output u L+ `¶ G .u signal l " ¶ª G Vtl noise u high u low ˆ úç . ¸ ˆ ú . Signal ˆ ú Vth ˆ ú output u L-u setting ˆ ú output l " ¶ L+¸ ` ¶ G . ˆ Vtl ~ Vth u q] 8 4 . q] 4 Vout u 0V u (V+ -1)V qˆ 8 4 .u capacitor ˆ ] 8 . Vref - Vin+ R1=Vin+ Vin+=VrefR2R1+R2+Vout R1R1+R2 V Vin+=( Vout- Vref)R1R1+R2+Vref R ? 6 . u ¶ Vth=( Vin+-1- Vref)R1R1+R2+Vref V Vtl= Vref(1-R1R1+R2) p . u Vth u Vtl u e . - Vout R2 V . ˆú noise u output ˜ ˆ ]8 `° ¶ G ˆŒ ´ ˜&ˆ 8 l ¶ ª G Vref u 0V ¸ ` ¶ 0V l " ¶ ª 6 hysteresis ¸ ` ¶ ª G . 0V ¸ ` ¶ ª 6 Vth=4R1R1+R2(V) , Vtl= 0(V)p .u 4R1R1+R2 V noise 3 i . q] T4 R1 u R2 lq" ª G . ¸ i ¶ ª comparator ˆ # ª G á µ ” 4 b T7. ˆ ú R1 u R2 ˆú. u R1:R2 u 1:500, 1:1000 ¸ i ¶ ªG Vth=4R1R1+R2(V) ˆ ú Vref lq " ¶ 6 comparator q ˆ 8 . ˜ & ˆ 8 7 ° i ¶ G ˆ noise ˆ ç´. noise ˆ ˆ ú ç , PGA ˆ ú noise .Ω W r =. 4 .u R1, R2 u 1:5, 1:10 ¸i ` G Vth=4R1R1+R2 ˆ Œ ´ G ª ª á Õ ”T 7 _ noise l " ¶ G . 7 ˆ ú ç trigger ˜ ˆ] 4 ° `¶ª6 ˆ .r 4. .I. .u: trigger l " ª G . ˜ & ˆ 8 _? ª ˆŒ R1. R2 q ] 84 . ˜ & ˆ 84 _ ¶ ª 6 noise .uW r = . . u trigger u q ˆ 84 R1:R2=1k:100k lq ª ¶ G .u Vth=4R1R1+R2=40mV l q ? ¶ ª noise ˆ u. u lab3 q] 7 output ˆ # ´ªG á Õ µ 87 b 7 u Vref u 0V . ˆú ç . ˆ] 8 out q ] 8 7 inverting l q ¶ ª G hysteresis ˜ &ˆ 8 4 q¶ ª 6 ˆ . u ˜ & ˆ 84 i`¶ 6 +, - ˜ & ˆ 8 4 q ? ¶ 6 ˆ Œ , p noise ˆ # ´ G Õ µ T 7 _ T ut u inverse u o7 l "¶ ª . Rý Vref u 0V R DAC u op-amp ý ç Vref u -1V ~ 1V p .u V level u 500mV R. k a ª ¶ Vth, Vtl u R1 = 1k, R2 = 100k çý Vth = 535mV u Vtl = 495mV u . u input signal u 535mV k ` ¶ªG hysteresis u high l. k a ¶ ª G level u 1V h ` ¶ G Vth = 1.03V u Vtl = 990mV u . ˜ & ˆ 8 4 i`¶ G Œ# -1~1V u Vth R. u u comparator k ¶ª ` G output u low q ˆ 8 4 . ˆ Œ # ªG áÕ µ T4 q 7 level u 950mV p R ç . p Vth = 980mV ka ¶ ª G ý noise capacitor : 4 b: . u. 1V r t. 7 V. uW ). capacitor ˆ ] 8 4 . h `¶ ª G capacitor k ` ¶ ª feedback loop u pole l k ` ¶ G . q ˆ T4 hysteresis ˆ ] 8 4 . h i ¶ ªG fp= 12πCFR2 ýç V Vth = V+ -1V u Vtl = 0V l . fp q] 8 Vth, Vtl q ] 8 .u fp u r < 7 7. uW M . k a` ª 6 capacitor u 3pF ˆ ] 8 4 fp k ` ¶ ª G 530kHz h ` ¶ª . q ˆ 87 spec u 100kHz hi ¶ ª . ˜ ˆ ]84 ` l` ª ˆ . u capacitor p 3pF ˜&ˆ 8 4 `` ¶ 6 ˆ Œ . u R2 ˆ ] 8 R2 7: , r 4= . . Trigger level 1. AD7801_DAC h ` ¶ª DAC(Digital to Analog Converter)u . ˜ ] ˆ 8 `` ¶ ª ˆ u ˜ ]ˆ 8 ,` ¶ 6 ˆ. ˆ # ª 6 Õ µ ” 7 u . u DAC u signal u write q ˆ 8 4 ˆ] 4 . WR’ u GPIO PIN ˆ ]8 4 u . h i ` ª G datasheet ˜ ˆ ] 8 4 `i ¶ª6 ˆŒ. _ ]8 8bit u . h i ` ¶ CS’ u . ˆ Œ # ªG á µ T 7 b . DB7~DB0 h ª ¶ G ` . ˆ ]8 WR’u rising edge h ` ª G T . u CS’u low k ` ¶ ª GPIO PIN lý ç DAC output u Vref h ` ¶ ª G 0V u 2Vref lý . l ý ADR510 amp ˜ ˆ ] T4 , ` ¶ 6 ˆ Œ . q ˆ8 4 l ý . h i ¶ ªG DAC output u 0V~2V u Vref u 1V k ` ¶ ªG 0~2V ka ªG ¶ -1V u 1V u shift h ` ¶ G . .p 1V p l op 2. OP275_Dualopamp Opamp ˆ # ´ª h i ` ª 6 ADR510 á µ ”8 l.˜ ˆ ] 8 T 7u . Vref u , 1 ¶ª 6 . ˆ Vin-(+IN A)1k=+IN A-01k , Vref-(-IN A)1k=-IN A-Vout1k , +IN A = -IN A ˜& ] 4 ` i `¶ 6 Œ# . Vout= 1k1k+1k1+1k1kVin-1k1kVref=Vin-Vref ¸ " ¶ 6 . shift ¸ &" ª G . u Vref u u -1V ~ 1V ˜ "¶ ª .ˆ Œ # 3. ADR510 ˜ "¶ª Vref à0 V output ˆ Œ ´ ªG áÕV T 1V ª 6 áÕ à < Vin u DAC u output u µ T7 b T7. à Vin u Vref u 0V ~ 2V ¸ " ¶ ª G op amp out u output ˜ " ¶ª 1V à .u b ¶ . q] 8 7 . q 87 ˆ b T. u 2kΩ ¸ ? ¶ ªG . 7 W: r =. 4 . (Pspice : 4 W: . uW .) Software p <gpio.h> . 6 7 8 9 10 11 12 13 #define GPIO_DAC_0 #define GPIO_DAC_1 #define GPIO_DAC_2 #define GPIO_DAC_3 #define GPIO_DAC_4 #define GPIO_DAC_5 #define GPIO_DAC_6 #define GPIO_DAC_7 #define GPIO_TRI_CH 17 #define GPIO_DAC_WR 16 #define MASK_DAC_0 ( 1 << GPIO_DAC_0 ) #define MASK_DAC_1 ( 1 << GPIO_DAC_1 ) #define MASK_DAC_2 ( 1 << GPIO_DAC_2 ) //LSB # define MASK_DAC_3 ( 1 < GPIO_DAC_3 ) < # define MASK_DAC_4 ( 1 < GPIO_DAC_4 ) < # define MASK_DAC_5 ( 1 < GPIO_DAC_5 ) < # define MASK_DAC_6 ( 1 < GPIO_DAC_6 ) < # define MASK_DAC_7 ( 1 < GPIO_DAC_7 ) < # define MASK_TRI_CH ( 1 < GPIO_TRI_CH ) < # define MASK_DAC_WR ( 1 < GPIO_DAC_WR ) < # define GPIO_OUTPUT_MASK //MSB ( MASK_DAC_0 | MASK_DAC_1 | MASK_DAC_2 | MASK_DAC_3 | MASK_DAC_4 | MASK_DAC_5 | MASK_DAC_6 | MASK_DAC_7 | MASK_TRI_CH | MASK_DAC_WR ) # define GPIO_INPUT_MASK ( MASK_DAC_0 | MASK_DAC_1 | MASK_DAC_2 | MASK_DAC_3 | MASK_DAC_4 | MASK_DAC_5 | MASK_DAC_6 | MASK_DAC_7 | MASK_TRI_CH | MASK_DAC_WR ) V <gpio.h> ˆ l ` ª G GPIO_DAC_0~7 u 6~13 h D . ˆ ` ¶ª GPIO PIN u 6~13 u digital bit input èq ¶ G . u 13 u pin u MSB u 6 u pin u LSB u . u trigger channel u DAC_WR p 17 16 u pin .h u GPIO_OUTPUT_MASK u GPIO_INPUT_MASK ˆ ` ª 11_0011_1111_1100_0000 h D . u <gpio.c> ˆ l ` ªG . <gpio.c> h Db . void GPIO_IO_Init( void ) { GAFR0_L &=~ GPIO_OUTPUT_MASK ); ( // Disable Alternative Function GRER0 &=~ GPIO_OUTPUT_MASK );// Clear Rising edge trigger. ( GFER0 &=~ GPIO_OUTPUT_MASK ); // Set as Falling Edge Detect ( GPSR0 |=(MASK_DAC_WR); } int dso_outb( int data ) { GPDR0 |=( GPIO_OUTPUT_MASK ); // ˆ R ` ¶ 6 ª GPCR0 |=( GPIO_OUTPUT_MASK ); //GPCR V Clear register GPSR0 |=(data < 6); < //GPSR V SET register return 0; } int dso_ioctl(struct inode *inode, struct file *filp, int command, int data) { int dso_data; switch(command){ case 1: //channel choice if(data = 1){ = dso_data =0x1< 11; < dso_outb(dso_data); } if(data = 0) { = dso_data =0x0< 11; < dso_outb(dso_data); } break; case 2: //trigger choice dso_outb(data); udelay(2); GPCR0 |=(MASK_DAC_WR); udelay(5); GPSR0 |=(MASK_DAC_WR); udelay(2); default : } return 0; break; printk("Error"); break; } V void GPIO_IO_Init( void ) ˆ ` ª ¶ . ˆT ] GPSR0 |=(MASK_DAC_WR); ˆ 6 ª ¶` .V V DAC_WR signal V rising edge e digital V analog 5. h High h DAC è ?¶6 ª L ow high è ?¶ DAC ˆ x´ª á µÕ T 7 b T . è _ ª ¶ 6 int dso_outb( int data ) ]ˆ T GPIO IN V data h b¶ . h GPIO_OUTPUT_ MASK ˆ ] 7 , ˆ R ` ¶ bit V clear e . è _ ?¶ data< 6 _ ¶ 6 <è set V . V V data V 6bit 5 ¶b , dataV input V 0~ 255 h 5 b . _ ˆ T7 GPIO PIN V 6 V 13 V pin Œ ˆ x ª 6 á Õ µ T 7 _ T dataV 6bit R ¶ ª 6 ˆ shift h5b . int dso_ioctl(struct inode *inode, struct file *filp, int command, int data) X b` ª G . u input u inode, file, command , data ø ` ¶ª . Inode u fiel directory u file system ˆ ] 8 4 .u q 8 4 b, data structures X ` ¶ ª G . ø a ¶ ª G inode number X ` ¶ª G 7 inode p X ` ¶ª G . Inode u file h ” type X b ¶ ª 6 . u inode u nuber index ø ` ¶ ª G device driver p p . File u file system X ` ¶ ª G command u data ˆ ] 8 . Command u 1 u data u 1 u channel 1 X ` ¶ªG data u 0 ø ` ¶ channel 2 X ` ¶ªG . u dso_data u 11bit q 4 b, 7u MASK_TRI_CH u GPIO PIN u 17 hh. ø a ` ª 6 11bit Xb`¶ dso_outb()Xb `¶ G 6bit ø a` ¶ G 17bit X ` ¶ ª G . Channel 2 p data u 0 X ` ¶ ª channel 2 u q ˆ ]84 low q ˆ 8 4 0 h h . Command u 2 X ¶ ` DAC u data p .u data h dso_outb() data h delay ø ` ¶ MASK_DAC_WR u clear u . u 0 u h h delay ø ` ª MASK_DAC_WR u set X ` ¶ high ø ` ¶ ª . X b ¶ ª DAC u WR u rising edge ø ` ¶ ª . X b `¶ server.c h ”¶ . <server.c> if((strcmp(d1,"Set")==0)&&(strcmp(d2,"trigger")==0)){ if(strcmp(d3,"channel") == 0){ if(atoi(d4) == 1){ channel =1; chan(channel); } if(atoi(d4) == 2) { channel =2; chan(channel); } } if(send(new_fd,buf,MAXDATASIZE,0)!=-1){} g=1; } if((strcmp(d1,"Set")==0)&&(strcmp(d2,"trigger")==0)){ if(strcmp(d3,"level") == 0) { level = atoi(d4); if(level >1000) { level = 1000; } if(level <-1000) { level = -1000; } lev(level); g=1; if(send(new_fd,buf,MAXDATASIZE,0)!=-1){} } int chan(int channel) { int dev2; dev2 = open("/dev/gpio", O_RDWR|O_NDELAY ); if (dev2 < 0){ printf( "GPIO Open Fail trigger channel\n"); // ø a ¶ ª exit(1); } if (channel == 1) ioctl(dev2, 1, 1); if (channel == 2) ioctl(dev2, 1, 0); close(dev2); return 0; } int lev(int level) { int dev3; int temp = 0; dev3 = open("/dev/gpio", O_RDWR|O_NDELAY ); if (dev3 < 0){ printf( "GPIO Open Fail trigger level\n"); // X b ¶ ª exit(1); } temp = 127.5 + 127.5 * level / 1000; // 0~255 ioctl(dev3, 2, temp); close(dev3); return 0; } } Client “Set trigger channel 1(or 2)” , “Set trigger level x(-1000<x<1000)” hh ” h h ” ¶ . Channel X ¶ ` channel 1 u ioctl(dev2, 1, 1)ø ` ¶ ª G channel 2 X ` ¶ ioctl(dev2, 1, 2)u . L evel ¨ ?¶ int lev(int level) h ÷ .e L evel V -1000 ~1000 temp V 0~ 255 V. temp =127.5 +127.5 * level / 1000 h .¨ ? ¶ 6 ioctl(dev3, 2, temp) h. ç h÷ Discussion 1) Have you satisfied the specification for triggering? If net, suggest a method for improvement. If yes, suggest an advanced circuit which can meet an enhanced specification. 2) In this lab, all the analog signals are confined into -1V to 1V. If you confine all the analog signals into 0V to 2V, what is advantage and disadvantage? 3) In this lab, trigger polarity function is not implemented. Suggest your own digital circuit to implement the trigger function including channel, level, and polarity. How many ICs are added to include this Trigger polarity function? 4) Summarize functions, inputs, and outputs, for Linux system calls of open(), read(), write(), ioctl(), and close(). Consideration Experimental results Discussion ...
View Full Document

Ask a homework question - tutors are online