Metal Detector
Metal Detector
Metal Detector
Recieved By : ____________________________________
01 December
Metal Detector
2 CONCLUSION: ..............................................................................................................................4 3 HOW METAL DETECTORS WORK:........................................................................................5 3.1 DETECTION OF METAL:...............................................................................................................5 3.2 DETECTION METHOD: .................................................................................................................5 3.3 DISCRIMINATION OF DIFFERENT METAL: .....................................................................................7 4 BFO DETECTOR DESIGN: .....................................................................................................7 4.1 COIL & OSCILLATOR: .................................................................................................................8 4.2 C CIRCUIT: ...............................................................................................................................9 4.3 MEASURING RESULTS OF BFO: ................................................................................................10 4.4 IMPROVEMENTS TO BE DONE:....................................................................................................11 5 PI DETECTOR DESIGN: ...........................................................................................................12 5.1 TRANSMITTER & COIL: .............................................................................................................12 5.2 REFLECTIVE PEAK LIMITER & GATED AMPLIFIER: ...................................................................13 5.3 RECEIVER / AMPLIFIER: ............................................................................................................14 5.4 MICRO CONTROLLER: ...............................................................................................................15 5.5 IMPROVEMENTS TO BE DONE:....................................................................................................16 Appendix A: Appendix B: Appendix C: Appendix D: Appendix E: Appendix F: Appendix G: Appendix H: Appendix I: Appendix J: Coil calculations C Program NS-Diagram Project Introduction Timetable List of instruments Pictures of product BFO Schematic PI Schematic Reference list
01 December
Metal Detector
1.2 PI Detector:
The Pulse Induction (Later only PI) uses a totally different way of sensing the metal, it sends out a very short magnetic pulse. Just after the pulse is finished the coil makes a spark (Later Reflected pulse). The reflected pulse is changing shape when metal comes near the coil. A part of the reflected pulse is amplified and put into some kind of a pulse detector.
01 December
Metal Detector
2 Conclusion:
The Project elapsed great, the timetable was almost true, only approximate 1 day later with the finished design than we planned. The project was a little more difficult than I expected from the beginning, but already when we got the assignment I had an idea to solve the problem, but after some hours work, and no positive result, I was almost quitting the idea. After a little time more we got the detector part to work so it was sensitive enough. The frequency detector was mounted and it worked great even the average part. We tried to make another detector to see if it could be more sensitive, and if the first failed, we had another horse to carry on with. Actually it ended up with almost 2 different working detectors, the second wasnt finished when we need to stop and finish the report. But since it is an analogue project I decided to describe the second detector also. Our team worked out the project without big conflicts. But if the knowledge of designing circuits and build circuit was almost at the same level in the group, the time used to make the product could be reduced. I mean one in the group maybe would have gained more if he had joined the basic level.
01 December
Metal Detector
01 December
Metal Detector
Active detectors uses the coil to transmit a pulse or a continually waveform, some uses the same coil to receive with, and others have 1 or 2 receiving coils. The PI loads the coil with some current in a narrow pulse, and when it releases the coil it make a reflective pulse the duration of the reflected pulse is only a few S, and the pulse can be several 100v high. When some metal are coming close to the coil the amplitude of the reflective pulse is getting little Figure 2 Typically PI sample point lower and the duration of the pulse a little longer, almost like the metal behaves like a capacitor for magnetic energy, in the top of the reflective the metal collect magnetic energy, and when the pulse is falling in voltage it returns the energy slowly. Different metal, have different reaction time. Just after the normal duration time of a spike, the measurement has to be done, like in Figure 2 illustrates, the pulse will rise a little when some metal comes near. The sampled signal has to be amplified up to a signal that can be used. Positive: Not sensitive to electro magnetic noise Long distance detect Detection near wires / high magnetic fields in the earth / water Negative: High Current / Voltage Difficult to build Difficult discrimination of Ferro / non Ferro metals
01 December
Metal Detector
3.3 Discrimination of different metal:
Expensive metal detectors can show which kind of metal there is registered, and even be setup to discriminate between them, so there wont be any kind of detection it comes near an old can, but if it is gold or other nonferrous metal it shows some result. The way that can be done is to closely analyse the returned signal. VLF principle is the best type to discriminate metal, it sends out a constant magnetic field, and receive it in another coil. Figure 3 Different metals pulse feedback When the received field is changed in the phase there must be a metal close. The amplitude of the signal tells how deep / big the object is. Fig. 3 & 4 show how different metal response to the magnetic pulse.
Speaker
Detector Coil
Relaxation Oscillator
Micro Controller
Led-Row
This relative simple metal detector isnt a real BFO, but it is the closest group of detectors. The Oscillator makes a frequency change when some metal is near the detector coil. The signal is send to a timer pin on the C. Internal in the C the calculation is made, and showed on the LED and some different sounds are made. The C gives a big advantage of detecting the signal it makes detection of small changes down to a few hertz. Average is also a function the C can manage, and then it can discriminate high level of magnetic fields in the earth, a kind of auto gain control.
01 December
Metal Detector
4.1 Coil & Oscillator:
The coil is a flat spiral coil, with 13 turns around an old CD, which have the diameter of 12 cm. The used copper wire has a diameter of 1.5 mm. The coil is made in the spiral shape to get the magnetic field as wide as possible. Different types of coils where tested, but this seemed to be the best. <Appendix A> shows the calculation for the coil. The metal sensing part of our designed metal detector, is built around an inverter, where the frequency depended components is the detector coil and the 2 capacitors. The inverter delivery enough power to the oscillation parts, so it continues to oscillate. The oscillator always starts when the power is turned on, while the dc level on the output is inverted and dc coupled to the input. The LC components limit the frequency to the oscillating frequency. The oscillating frequency can approximately be calculated using this formula:
1 = 2 L *C 1 = 175.4kHz 39nF *39nF 2 42.2uH 39nF + 39nF
Fosc =
The 2 capacitors are coupled in series, through the ground, and it makes a parallel oscillation circuit. The resistor in the top gives the coil a little lower Q, and the oscillation a higher bandwidth.
01 December
Metal Detector
4.2 C Circuit:
Figure 9
The Function of the C is to compare the input frequency with a reference, in this case an internal timer in the C, it counts for approximate 250mS = 4 samples in a second. The frequency from the oscillator is connected to an internal 16bit counter, every time the timer generates an overflow the counter is read. The result of the counter * 4 gives the incoming frequency, but there is no need to now the frequency, only the difference is important. When the detector is turned on, the oscillator has to stabilize, the C waits until the frequency is stable, in the meanwhile all LEDs are flashing. The detector is averaging the incoming signal all the time, if the same frequency has been present for 16 measurements the frequency will be the new zero point. It is necessary for using the detector in areas with high level of iron in the ground. The speaker and LED indicates the level of detected material, in zero point it is around the middle of the area, so it can detect both ferrous and nonferrous metal, and make different output of it. The C reset circuit is R2 & C12, which makes a time delay before the reset pin is on the high level, the C doesnt start before the reset pin is high. The capacitor on the loudspeaker is the ensure there only flows a current in the changes of the signal. The software can be found in <Appendix B>.
01 December
Metal Detector
4.3 Measuring Results of BFO:
The following measurements are made with a 10Kr coin in different positions from the coil: The measurements are approximate. Distance from the coil [cm]: 0 1 2 3 4 5 6 7 8 9 10 Oscillator frequency [kHz]: Spk. Frequency [Hz]: 176.56 10000 176.54 10000 176.49 10000 176.46 7600 176.46 7000 176.46 6500 176.45 6000 176.43 4000 176.43 3000 176.42 1750 176.42 0
10
01 December
Metal Detector
Trace 1 in figure 10, shows the oscillator frequency, with a piece of metal near, the signal is between the 2 inverters U1A & U1B. The second trace is the output to the loudspeaker. The output frequency in this case is 11.3kHz, the signal have a duty cycle of 50/50(not showed). Settling time when cold Settling time when warm Min voltage Supply Current Supply Current with speaker Ht min frequency Ht max frequency Frequency when warm Power supply = 42 sec approx. = 13 sec approx. = 6.1 v = 38.9 mA = 40.2 mA = 20 Hz = 10 kHz = 178.029 kHz = 9V Battery
11
01 December
Metal Detector
5 PI Detector Design:
Sea rch Co il R efle ctiv e Pea k Lim iter "Ga ted Am pli fier" R eciev er Am plif ier
Figure 12
TX pulse comes from the C, which control the time the dc current flows through the coil. Q1 amplifies the current from the weak C pin, which can sink more current. When the TX pulse stops, the collector gets high impedance, and L3 returns a reflective pulse (counter electromotive force). R6 loads the coil, so the reflected pulse doesnt make ringing pulses after the big reflective. Q3 is a high voltage transistor, which can handle up to 1500V on the collector, and has not build in diode. The coil is turned around a CD with 0.5mm wire. The voltage across the coil has to be regulated, else the reflected pulse can move a little. If the voltage across the coil gets to high, there will come some pulses inside the TX pulse time. In figure 13 the reflective pulse (1) and charging (2) pulse is showed. The reflective pulse amplitude is about 500-700V when the supply to the coil is 9.6V. The interesting point is where the pulse starts to flatten off. If R6 werent present, there would be some peaks in that area. The pulse comes 1000 times in a second, to reduce power the samples can be limited, but if the output of the amplifier has to be integrated a lot of sample is needed to get at god result.
12
01 December
Metal Detector
The reflective pulse from the transmitter is limited (D1) and put to Gnd reference (C1) before it is amplified 48 times. R7 limits the current from the reflective pulse to make sure the pulse isnt damaged with the low impedance from the zenerdiode when the voltage is above 16 volt. D1 protects the opamp for not having more than 32V between the 2 inputs. The non-inverting amplifier U1B has the reference point on the output from U1C, which has a gain of 1. The reference point of U1B can be lifted up, so the common signals level is enough different to run the opamp correct, if the 2 signals are to common the opamp inverts the signal and behaves strange.
Kasper Jensen C:\Documents and Settings\KJ\My Documents\Metaldetector.doc
13
01 December
Metal Detector
The output of the amplifier is almost always shorted to Gnd after a resister, only the period after the reflective pulse where the pulse is flatten out, is the signal not shorted to Gnd. The result is a gated amplifier, which only give output in the C controlled period, just after it turned of the TX pulse. Q2 is a current amplifier so the C pin isnt loaded too much. On the output there is a filter there only passes AC. 2
Trace 1 shows the input of the amplifier after the limiter. Trace A (the one with the smallest amplitude) shows the output of the amplifier. The last trace (2) shows the output with a big metal object at the coil.
Figure 16 Amplifiers
14
01 December
Metal Detector
The purpose of the amplifier is to amplify the signal coming from the gated amplifier so the signal can be detected either with and ADC trigged in the pulse or an integration circuit to get a Dc. The 2 first amplifiers has the gain of 60db(1000times) and has lifted reference to run the opamp correct, and decide from which DC level the pulse will be amplified. The last amplifier has variable gain, from 2times to the open loop gain
Trace 1 shows the input to the amplifier with some metal on the coil. The 2nd trace shows the output adjusted to max gain.
15
01 December
Metal Detector
The timing of the transmit pulse and the signal to open the gated amplifier is controlled of the C, to make it simple to change and get the pulses at the right places. Can be used later to put an ADC to sample the signal and make some visual signals.
Trace 1 shows the time the coil is loading with power. Trace 2 shows the time the gated amplifier is open.
16
3.1416*0.75*.075
Pi * (Diameter+(Coil Wire Diameter * Turns on coil 3.1416*12+(0*1.5mm) 3.1416*12+(1*1.5mm) 3.1416*12+(2*1.5mm) 3.1416*12+(3*1.5mm) 3.1416*12+(4*1.5mm) 3.1416*12+(5*1.5mm) 3.1416*12+(6*1.5mm) 3.1416*12+(7*1.5mm) 3.1416*12+(8*1.5mm) 3.1416*12+(9*1.5mm) 3.1416*12+(10*1.5mm) 3.1416*12+(11*1.5mm) 3.1416*12+(12*1.5mm) 3.1416*12+(13*1.5mm) = = = = = = = = = = = = = = = = 37.70 38.17 38.64 39.11 39.58 40.06 40.53 41.00 41.47 41.94 42.41 42.88 43.35 43.83 570.67 5.71 cm cm cm cm cm cm cm cm cm cm cm cm cm cm cm m
= 0.056518
2.746 Inch
Coil inductanse :
L=
41.91
N=Turns on coil; A=Average Radius; Di=Inner Diameter; W=Wire width; S=Spacing between wires Coil inductanse : Measured = 42.2
Total Capacitance :
C to t =
19.5 nF
Kasper Jensen
Metal Detector
APPENDIX A1
Qcoil :
Q=
Zresonans :
L C Rwire
816 Q
38
Z tot =
Qnew =
= =
37.7 813 Q
Qnew :
Kasper Jensen
Metal Detector
APPENDIX A2
C:\Program Files\Borland\CBuilder6\Projects\uCprogram.cpp #include <AT89x051.H> #include <stdio.h> // External Subroutines prototype extern initint(); extern inittimer0(); extern inittimer1(); // Internal Subroutines prototype void timer1int(void); void showlevel(unsigned int);
30/11/2003 22:03:32
Page 1 of 4
//declare global variables unsigned char timer1ofl=0, array1_count=0, change_count=3, change1_count=10; unsigned int array_1[16]; int difference = 10; /*-----------------------------------------------MAIN C Function ------------------------------------------------*/ void main(void) { //declare variables unsigned int i=0, freq; //call all init subs initint(); inittimer0(); //as counter inittimer1(); //as timer //start timer 0 and 1 TR0 = 1; TR1 = 1; //Wait for frequency difference to be stable, it's stable when the //difference is between -1 and 1 5 times while(i < 5) { while(difference >= 1 || difference <= -1) { //Blink leds on port 1 for (freq=0;freq<0x3fff;freq++) { P1 = 0x00; } for (freq=0;freq<0xffff;freq++) { P1 = 0xff; } } i++; } //runs till the power is taken of(for infinity) while(1) { //makes the sound when difference it less or equal to -2 while(difference <= -2) { //port 3.7 toggles each time the for loop it ran through //the frequency this happens with it determined by a //fixed value multiplied with the absolute value // of the frequency difference from the coil freq = 0x005c * (0-difference); for (i = 0;i < freq;i++) { } P3_7 ^= 1; } //makes the sound when difference it more or equal to 2 while(difference >= 2) { //port 3.7 toggles each time the for loop it ran through //the frequency this happens with it determined //by a fixed value divided by the //value of the frequency difference from the coil freq = 0x005c / difference;
30/11/2003 22:03:32
Page 2 of 4
} /*-----------------------------------------------TIMER 1 OVERFLOW Function ------------------------------------------------*/ void timer1int(void) interrupt 3 { //declare variables unsigned int presentval; //increments the timer overflow register timer1ofl++; //checks if the overflow has happened 8 times(roughly 250 m[S]) if (timer1ofl==8) { TR0 = 0; TR1 = 0; //read counter presentval = (0xff * TH0) + TL0; //setup counter and timer for next load and start timer1ofl = 0; TH0 = 0; TL0 = 0; TH1 = 0x5e; TL1 = 0xe0; TR0 = 1; TR1 = 1; //read out and get difference(in the global variable difference) showlevel(presentval); //If the frequency difference is small(less than 4 //{Hz] either way) the difference is stored //it as a part of the average and the change count //registers is reset if (difference < 4 && difference > -4) { array_1[array1_count] = presentval; array1_count++; change_count = 0; change1_count = 0; //makes sure that there only is written data //in the array if (array1_count == 16) { array1_count = 0; } } else { //If the frequency difference is medium //(between than 4 and 9 {Hz] either way) a register is //incremented(change_count), when it reaches 3 //the difference is stored it as a part of the average if (difference < 10 && difference > -10) { if (change_count == 3) { array_1[array1_count] = presentval; array1_count++; //makes sure that there only is //written data in the array if (array1_count == 16) { array1_count = 0; }
30/11/2003 22:03:32
Page 3 of 4
else
{ change_count++; }
{ //If the frequency difference is high //(more that 9 {Hz] either way) a register is //incremented(change1_count), when it reaches //10 the difference is stored //it as a part of the average, and the change //count is set equal to 3 if (change1_count == 10) { array_1[array1_count] = presentval; array1_count++; change_count = 3; //makes sure that there only //is written data in the array if (array1_count == 16) { array1_count = 0; } } else { change1_count++; } }
/*-----------------------------------------------SHOW THE FREQUENCY DIFFERENCE Function ------------------------------------------------*/ void showlevel(unsigned int presentval) { //declare variables unsigned char i; unsigned long average=0; //gets the last saved frequencies for(i=0;i<16;i++) { average += array_1[i]; } //calculates the average average = average/16; //calculate the difference between the average and the current frequency difference = presentval - average; //"prints" the difference on the LEDs if (difference < -11) { P1 = 0xfe; } if (difference <= -7 && difference > -11) { P1 = 0xfd; } if (difference <= -3 && difference > -7) { P1 = 0xfb; } if (difference > -3 && difference < 3) { P1 = 0xf7; } if (difference >= 3 && difference < 7) { P1 = 0xef; } if (difference >= 7 && difference < 11) {
C:\Program Files\Borland\CBuilder6\Projects\uCprogram.cpp P1 = 0xdf; } if (difference >= 11 && difference < 15) { P1 = 0xbf; } if (difference >= 15) { P1 = 0x7f; } } //EXTERNAL SUBs// #include <AT89x051.H> void initint(void) { //interupt for timer 1 ET1 = 1; //activate all int EA=1; } #include <AT89x051.H>
30/11/2003 22:03:32
Page 4 of 4
void initTimer0() { // Sets timer0 mode to 16bit counter TMOD &= 0xF5; TMOD |= 0x05; // Sets timer0 mode to 16bit counter //loads timer register with 0 TH0 = 0; TL0 = 0; } #include <AT89x051.H> void inittimer1(void) { //Sets timer1 16 bit timer TMOD &= 0x1f; TMOD |= 0x10; //loads timer register with 24288 which is roughly 250 m[S] when the //timer runs over 8 times TH1 = 0x5e; TL1 = 0xe0; }
function Main call initinit call inittimer0 call inittimer1 start timer0 start timer1 timer1overflow = 0 array_count = 0 lowchange = 3 highchange = 10 difference = 10 while ( i < 5 ) while ( difference >= 1 & difference <= -1 ) for ( freq=0 as long as freq < 16383 increment freq by one) Turn on alle led on port 1 for ( freq=0 as long as freq < 65536 increment freq by one) Turn off alle led on port 1 increment i by one while ( 1 ) while ( difference < -2 ) freq = 92 * (0-diference) for ( i=0 as long as i < freq increment i by one)
toggle port 3.7 while ( difference > 2 ) freq = 92 / diference for ( i=0 as long as i < freq increment i )
toggle port 3.7 function initint Setup timer1 to interrupt function inittimer1 setup timer1 for timer function with 16 bit register and load the timer registers with 24288 function inittimer0 setup timer0 for counter function eith 16 bit register function timer1int interrupt function increment timer1overflow variable by one if ( timer1oferflow = 8 ) then Stop timer 0 stop timer 1 make presentval equal timer 0 count prepare timers for next run start timer 0 start timer 1 call showlevel parsing presentval to it if ( 4 > difference > -4 ) then if ( 10 > difference > -10 ) savearray[array_count] = presentval then increment array_count by one lowchange = 0 highchange = 0 then if ( array_count = 16 ) then array_count = 0 function showlevel(current_Freq) for ( i=0 as long as i < 16 increment freq by one) average = savearray[i] devide average with 16 difference = curent_freq - average if ( -11 > difference ) then turn on led1 if ( -7 => difference > -11 ) then turn on led2 if ( -3 => difference > -7 ) then turn on led3 if ( 3 > difference > -3 ) then turn on led4 if ( 7 > difference > 3 ) then turn on led5 if ( 11 > difference > 7 ) then turn on led6 if ( 15 > difference > 11 ) then turn on led7 if ( difference > 15 ) then turn on led8 else else else else else else else else else else if ( lowchange = 3 ) if ( highchange = 10 ) else else then savearray[array_count] = presentval increment array_count by one lowchange = 3 increment highchange by one increment lowchange by one if ( array_count = 16 ) then array_count = 0 else else else
Kasper Jensen
Metal Detector
Appendix C
10
11
Loudspeaker Frq. change 12000 Speaker Frq [Hz] 10000 8000 6000 4000 2000 0 1 2 3 4 5 6 7 8 9 10 11
Spk. Frq vs. distance
Kasper Jensen
Pictures of project:
Kasper Jensen
Metal Detector
Appendix G
Reference list :
Internet adresses : http://demining.jrc.it/aris/events/mine99/program/P155-160/MINE99PO.htm http://www.deepfriedneon.com/tesla_f_calcspiral.html http://www.nuggetshooter.com/articles/UnderstandingPIdetector.html http://home.clara.net/saxons/bfo.htm http://wildcat.phys.nwu.edu/classes/2002Fall/Phyx1352/Projects/Metal_Detect/MetalDetector/PI.html http://www.gi.alaska.edu/~jesse/treasure/misc/howdetector.html
Kasper Jensen
Metal Detector
Appendix J