Since I will be taking the sensor to the rock I’m going to temporarily give up on getting an absolute measurement, and take a leaf out of Bartington’s book from last time and use a flat coil. I will never be able to contain the sample in the magnetic field[ref]unless I grind a slot in the rockface and put the coil into it I suppose :)[/ref] as I might be able to in a solenoid, to the effective susceptibility will always be lower than 1. One day I may be able to calibrate this and find a fixing factor, but for now I will look for relative differences.
I want a 2″ diameter coil so I cut some end-cheeks from acrylic. One day it would be nice to have a lathe, but this I did with a saw and spinning the work in a drill and sanding, which is how the cracks got into the lower disc.
Initially I figured I’d use a 4046 PLL and swipe a technique from the tesla coil community which I’ve seen used in a paper on measuring paramagnetic nanoparticles, (which is a common non-weird agriculture application 😉 ) US patent 7241630 describes the idea and Uzzors’ PLL induction heater driver shows the principle in action. I implemented this
with a 2^9 divider to run the VCO at 512kHz.
The trouble is the phase shift across the tank circuit doesn’t actually vary that fast. Simulating the tank damped by the 6k8 resistor shows the phase shift varies ±20° between 1.025k and 1.03k, so the amount of frequency change is a combination of where the PLL VCO voltage wants to sit and the output of the phase detector, which locks in a range between 0 and 180 degrees (to acquire the signal in the first place experience shows this usually wants to be within ±90°, though it depends on the characteristics of the loop filter)
So the whole thing is a bit lacking in Q. I’m using the VCO and not sweating the tank circuit Q to clean the signal up. The circuit works fine and tracks the frequency, but the PLL is noisy and as a result the 5th and sixth digits twitter on the frequency display. I tuned a scanner to the 512kHz frequency and stuck 10cm of wire as an aerial – the note is rough
Back to radio ways?
The PLL probably wanted optimisation and a second order filter, but I just didn’t feel I was going in the right direction here. In general, you want to couple the sensor as lightly as possible so changes in inductance can shift frequency in a clear way, unmuddied by resistive damping. What I need is a regular variable frequency oscillator (VFO).
I was hankering after the elegant simplicity of the Colpitts oscillator in part 1. It also occurred to me that I could dispense with the PLL – although it takes more than 10 seconds of cycle counting to get 5 digit resolution at 1000 Hz because you need 10,000 cycles to get that precision, I could also count 1024 cycles of the unknown roughly 1 kHz cycles, and start a timer counting CPU clock in the microcontroller and stop it after I have, say, 1024 cycles. I would have bucketloads of clean signal from a VFO so the slicing threshold shouldn’t vary too much over a second (which would otherwise give me a noise error in the analogue domain, which a PLL loop filter would take out).
Because it’s a differential measurement spaced over a couple of seconds, the poor long-term stability and temperature drift of a VFO aren’t an issue. Time for a rethink. The trouble with the Colpitts oscillator is that the capacitive divider halves the value of capacitance possible – I am using 1µF mylar, and I don’t have anything bigger. Observing that gain is easily to be had at 1kHz points me at a lightly coupled oscillator, something like the Franklin oscillator, with op-amps[ref]after designing this I came across Irving Gottlieb’s Practical Oscillator Handbook in Google Books which implies running open-loop. My innovation is observing opamps can do non-inverting, which the valve or transistor stage can’t do in a discrete-component Franklin, hence the need for a second stage. I need R2 – else U1A rams itself up against the single supply rail after a few cycles[/ref].
It would be possible to do this with one opamp, but I wanted to use U1B unity gain to monitor the sensor loaded as little as possible and without nonlinearity. There’s a convenient squarewave on the output of U1A, the risetime is limited by the slew rate of U1A to about 32µs.
Measuring the frequency shows the 5th digit is stable on my frequency meter which is the best it can do on the 10s range – using a better counter shows the .01 digit is stable over the few seconds a measurement would take, this is a short-term (ie period of measurement of ~ 1sec) stability of better than 1 part in 100,000. This will not be my greatest source of error.
Counting MCU clock cycles rather than low-frequency cycles
I can lose the PLL by using a PIC or an Arduino – and using one of the internal timers to count, say, 500 cycles of the 1kHz (taking half a second) while at the same time counting MCU clock cycles over the same period. From part 1
χm is (L2-L1)/(L1 × 4 π)
where L1 is the initial empty inductance and L2 is the inductance in the presence of the sample. Since the frequency is proportional to the square root of inductance I can transform this to
χm = (f1²-f2²)/(f1² × 4 π)
where f1 and f2 and the initial empty frequency and the frequency in the presence of the sample, Since I will be measuring the period times a constant which is proportional to the reciprocal of frequency, if C1 and C2 are the counts corresponding to f1 and f2 I get
χm = (C2²-C1²)/(C2² × 4 π)