Announcement

Collapse
No announcement yet.

FPGA based multi-frequency VLF design

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • FPGA based multi-frequency VLF design

    Hi, this is my first post, although I've been reading these forums for some time.



    I thought I understood the basic principles of a vlf metal detector. You provide an alternating voltage in one coil and read the induced voltage on a secondary coil. You measure the phase shift between TX and RX to discriminate the type of metal.



    With this in mind I wanted to build a multi frequency vlf metal detector. I finally built hardware and software to do this, or so I thought, but I only see in an oscilloscope very little phase shift when putting different metals under a coil. (Less than 1 degree..). I've seen plots in books where this phase shift is much larger.



    I will provide all the details of my design below including schematics, but I'm looking for help to determine what I'm doing wrong. Am I misunderstanding how vlf is supposed to work, am I not wiring correctly into the search coil? Do i need a different kind of coil ? Ect... I think at this point it's strictly a hardware problem and not software because i am looking directly at oscilloscope and even there I don't see a phase shift.





    I am using a Whites Electronics coil, the one that comes with the XLT. Its optimized for a frequency of 6.6kHz.. Here is a link to the product page and the pinout i am using.

    https://www.whiteselectronics.com/pr...loop-6-59-khz/
    https://drive.google.com/file/d/0ByZ...ew?usp=sharing




    I use an fpga board from National Instruments, the myrio-1900. It uses a xilinx zynq-7010. And I use labview to program it. That is a graphical programming language.

    http://www.ni.com/en-us/shop/select/...modelId=125751

    http://www.ni.com/pdf/manuals/376047c.pdf




    Here is a link to the schematic of the A/D and D/A board I designed. Caution there are bugs on the schematic that have been fixed in the actual hardware. Note: There is a second fpga on this board only because the myrio-1900 i/o is limited in speed. So the second fpga is a serial to parallel converter.
    https://drive.google.com/file/d/0ByZ...ew?usp=sharing



    Here is a picture of the actual hardware.... the board layout is not optimal. But I just wanted a proof of concept...
    https://drive.google.com/file/d/0ByZ...ew?usp=sharing






    Brief description of what happens in firmware:


    User selects desired frequency, and it is continuously output via D/A and power amp to tx coil.. sampling frequency is 1 MHz. User can select multiple frequencies to sum, scale, and output.


    Secondary coil is sampled at 1 MHz, and fed into a Goertzel Algoritm (single frequency Fourier transform), then thru an arc tangent lookup table to find the phase shift. This is done on each user selected frequency.





    For all my testing I am using just one frequency, the one the coil is optimized for. The amplitude of the sine wave is 7.5 volts....



    Let me know if there is any details I left out.





    Hopefully someone can help me figure out what I'm doing wrong... analog electronics is not my thing and I suspect my understanding of the sensor/coil interface is the problem.





    Thank you

  • #2
    What happens to the analog signal going into the ADC as you wave targets?

    Comment


    • #3
      Have you nulled the searchcoil? If not, you're probably just looking at looking at a searchcoil misalignment. In VLF metal detectors the searchcoil misalignment is ignored by synchronously demodulating the received AC signals and then removing the resulting DC offset with a sample and hold, a differentiator, or a potentiometer. On an oscilloscope one removes it with the DC offset control on the 'scope and/or by AC coupling.

      Comment


      • #4
        i have linked to a scope picture.. Channel 1 is the voltage to TX coil and Ch. 2 is voltage from the RX coil without being plugged into my circuit. The signals are in phase, which is probably already bad.

        https://drive.google.com/file/d/0ByZ...ew?usp=sharing

        When i wave metals in front of the coil, the amplitude of RX changes a bit and the phase relative to TX does not appear to move. When plugged into my circuit, my readout is a small fraction of a degree phase shift for random metals from my tool box, and around 1 degree from a silver coin.


        The scope RX channel is set to AC coupling as suggested by Dave. In software any DC offset should be ignored since i'm not looking at the 0 Hz frequency bin, only the 6.6kHz bin.

        Am i plugging into the coils wrong? any additional circuitry that i should be providing? Thank you

        Comment


        • #5
          Getting a really good null on your coil will help your progress. Ensure it's kept a decent distance away from any metal objects. The null can be fine-tuned (with some constraints) by positioning a small piece of ferrite (pea-sized or less) in an appropriate place close to the search-coil (eg. blu-tacked to the coil case). You should be able to get the null voltage below 1 mV RMS.
          Target signals will be a few mV if the target is less than 3 cm from the coil, but they fall off really quickly. Good commercial detectors will find targets whose signal is below 10 microvolts.
          You need some 'known' test targets, not random toolbox items and a dollar coin. This gives you a range of phase shifts to work with.
          A piece of ferrite eg. a 20mm length of 'Medium Wave radio' rod will give you a zero degrees reference. Your silver dollar will be OK as a 'big lag' target, about 172 degrees (90+82) relative to ferrite. A modern zinc-cored U.S 1 cent coin will give about 142 degrees (90+52) lag, and a U.S 5 cent 'nickel' will be 112 degrees(90+22).

          I only gave a quick look at the schematic, it appears you only have a unity gain pre-amp before the ADC ? Make that Gain = 100 and you might start getting somewhere. A good coil null will help if you want more gain.
          Though not essential at these early stages, I should point out that the receive coil would typically have an intended load placed on it, typically a capacitor to tune it to a frequency 20% (?) higher or lower than 6.6KHz, and a load resistor. Scrutinising White's schematics should give you some guidance.

          Comment


          • #6
            The scope image shows that your receive signal from the RX coil (without being plugged into the circuit) has an amplitude of 1.13V. If this is the raw signal, then it's too high. I would have expected an amplitude of around 10 to 20mV. My first thought was that your coil is not balanced correctly, but this cannot be the case since you're using a White's commercial coil. So there are two possibilities that come to mind:

            1) I cannot see any tuning capacitors for the RX coil in your schematic.
            2) Your coil is sitting close to a large chunk of metal. However, if that was true, I would expect to see a large phase shift between the TX and RX signals.

            Comment


            • #7
              Quote:"In software any DC offset should be ignored since I'm not looking at the 0 Hz frequency"
              This shows some misunderstanding. The DC offset is AFTER demodulation to get a DC level.
              Example (simplified):
              Nulled signal from coil, no target present = 2 mV RMS
              Amplify this x 100 = 200 mV RMS
              Synchronous demodulated => +200mV DC (demodulators have different gains, depends on type, and integral gain etc)
              Bring target near coil => +250 mV DC
              Use various methods to remove the 200 mV DC => 50 mV DC, the target signal.

              Obviously you will do two demodulation processes, at (usually) 90 degrees apart. How you choose your zero/90 references is one of the issues ,hardware or software can give solutions.

              Comment


              • #8
                Originally posted by Skippy View Post
                Quote:"In software any DC offset should be ignored since I'm not looking at the 0 Hz frequency"
                This shows some misunderstanding. The DC offset is AFTER demodulation to get a DC level.
                Example (simplified):
                Nulled signal from coil, no target present = 2 mV RMS
                Amplify this x 100 = 200 mV RMS
                Synchronous demodulated => +200mV DC (demodulators have different gains, depends on type, and integral gain etc)
                Bring target near coil => +250 mV DC
                Use various methods to remove the 200 mV DC => 50 mV DC, the target signal.

                Obviously you will do two demodulation processes, at (usually) 90 degrees apart. How you choose your zero/90 references is one of the issues ,hardware or software can give solutions.
                I think the problem is more basic than that. In post #4, the image shows the raw RX signal directly from the coil (not attached to the circuit). The amplitude of this signal is way too high, which indicates that the coils are not balanced correctly. However, this is not a home-made coil.

                Comment


                • #9
                  Well I assume it worked on his XLT, so there's no reason to suspect it's faulty. So we've got to work out (WITH HIS HELP) what he's done wrong to end up with such a tragic nulled voltage.
                  1) Accidentally sitting the coil on a horse-shoe
                  2) Driving the TX wrongly, eg. is the cold end of the TX winding actually driven with the hot signal? This might upset the null, don't know how much, though.
                  3) Not operating the coil at the correct freq. I've no idea if this particular coil is finely tuned or not, but I'd assume it would be reasonable over 6 - 7 KHz
                  4) Is the action of sticking the scope on the circuit messing it up? Earth loops, sticking the Ground clip in the wrong place, goodness knows what else
                  5)Is there some electronic coupling directly from TX circuit to RX ? Just connect the RX coil to the scope directly, see what the output is.


                  I think I was wrong about the pre-amp, it has a single gain-setting resistor allowing gains from 1 and above (the 665 Ohm shown on the cct).

                  Comment


                  • #10
                    The outside of connector J1 is grounded. Where is the return to ground for J2?

                    Comment


                    • #11
                      I realise I'm thinking ahead a bit here - but is the chosen coil going to be suitable for your projects' intended multi-frequency operation. I'm no multi-freq expert, but I recall commercial mf machines tend to have noticeably lower-inductance transmit coils. Maybe it's the high-frequency components of the square-wave they are driven with that dictates this.
                      So an alternative coil choice may be needed. One obvious one is that for the Fisher CZ-3 / 6 / 70 etc, designed for a 5KHz square-wave drive.
                      And the White's DFX etc coil should be considered. Minelab BBS/FBS coils have the complication of having an internal pre-amp, which may limit what you can achieve.

                      Comment


                      • #12
                        Skippy you are right. The best choice would be a CZ or DFX coil for multi-frequency. An XLT coil is tuned and has a 1uf cap across the tx coil and probably some other components across the rx. . The XLT coil would be okay to get a basic FPGA vlf test circuit going at 6.5khz

                        Comment


                        • #13
                          I swapped the TX wires and now the RX signal is around 20mV amplitude. Still no phase shift though.
                          The amplitude did change more noticibly when waving the silver coin.

                          https://drive.google.com/file/d/0ByZ...w?usp=drivesdk

                          Swapping the RX wires simply inverted the signal.


                          So do I need a capacitor across the RX coil for it to work properly? Using the equation f = 1/ (2*pi*sqrt(L*C))?

                          Comment


                          • #14
                            Originally posted by Panchito View Post
                            So do I need a capacitor across the RX coil for it to work properly? Using the equation f = 1/ (2*pi*sqrt(L*C))?
                            Yes.

                            Comment


                            • #15
                              This will give you an idea of what's inside the xlt coil
                              Attached Files

                              Comment

                              Working...
                              X