How to Measure Inductance With an Arduino

Circuit

I recently found myself wanting to wind my own toroidal inductor.  Unfortunately I had no datasheet on the toroid cores I had purchased from Amazon: uxcell 22mm x 14mm x 8mm Power Transformer Ferrite Toroid Cores Green 10 Pcs

A while back I had tried to measure an air conditioner capacitor and ended up doing it with an Arduino, so I thought maybe a similar trick might work for inductors.  It turns out it is slightly more complicated with an inductor.  I based my work off of this blog post:  https://reibot.org/2011/07/19/measuring-inductance/

The comments stated that it may work with the built in comparator of the Arduino instead of the LM339.  My variant is as follows:

R1 is 150 ohms, but the value isn’t necessarily critical.

Powered over USB and outputs to the serial terminal.  It only takes a few minutes to put together and the only parts required are a resistor, a diode, and a 2.2 uF cap.  You can use another value if you want and the range of measurement will change.  You will also have to edit the source code to match.

Code


//this is based on a measurement technique from
//reibot.org, the parts count has been reduced by using the avr internal comparator

double pulse, frequency, capacitance, inductance;
bool detected = false;
long timeStamp[4];
int sample = 0;
void setup(){
Serial.begin(115200);
pinMode(11, INPUT);
pinMode(13, OUTPUT);
Serial.println(“Why hello!”);
delay(200);
ADCSRB = 0; // (Disable) ACME: Analog Comparator Multiplexer Enable
ACSR = bit (ACI) // (Clear) Analog Comparator Interrupt Flag
| bit (ACIE) // Analog Comparator Interrupt Enable
| bit (ACIS1); // ACIS1, ACIS0: Analog Comparator Interrupt Mode Select (trigger on falling edge) AIN0 is D6 AIN1 is D7

}
ISR(ANALOG_COMP_vect )
{
timeStamp[sample] = micros();
if(sample < 3)
{
sample++;
}
}
void loop(){
digitalWrite(13, HIGH);
delay(5);//give some time to charge inductor.
digitalWrite(13,LOW);

///comparator stuff here

pulse = 0;

sample = 0;
delay(500);
if(sample < 2)
{
Serial.print(“time out\n”);
return;
}
pulse = (timeStamp[1]-timeStamp[0]);

//end comparator stuff

capacitance = 2.2E-6*.92; //insert capacitance here im calibrating to a known inductor, the .95 is my fudge factor.
frequency = 1.E6/(pulse);
inductance = 1./(capacitance*frequency*frequency*4.*3.14159*3.14159);
inductance *= 1E6; //note that this is the same as saying inductance = inductance*1E6
Serial.print(“High for uS:”);
Serial.print( pulse );
Serial.print(“\tfrequency Hz:”);
Serial.print( frequency );
Serial.print(“\tinductance uH:”);
Serial.println( inductance );
delay(20);
}

Theory

The capacitor and the inductor in parallel form a resonant circuit.  When a pulse of current goes through this, part of the energy goes into making the circuit oscillate or “ring”.  I took a photo of what this looks like on my low cost oscilloscope:

The code sends a pulse through the resonant circuit.  Using the comparator interrupt, it gets a time stamp with micros() on the next 3 falling edges.  The time difference between the first 2 falling edges is one period, or 1/f.  Using the formula for resonance of a harmonic oscillator it calculates the inductance.

The blog post I used as a reference for this incorrectly states that the frequency stays the same regardless of the resistance of the inductor.  Unfortunately, a damped harmonic oscillator does not resonate at the same frequency as a perfect one.  If there is any interest I might make a version of this circuit that measures resistance first and corrects for this.  Otherwise this is close enough for most purposes, especially if you have a good, low resistance, inductor.

 

2 thoughts on “How to Measure Inductance With an Arduino”

  1. I just found this from your comment on reibot.org. I tried his circuit (well, close to it) as a metal detector. It worked well, but the sensitivity was too low for my purposes.

    I did not use the internal comparator, I used 1/4 of an LM339. I came up with a circuit better suited to my use, http://www.buchanan1.net/md_1.html I used the LM339 here as well. The author of the first article I started out with recommended using the internal comparator, I have been busy and have not tried that yet, I expect it to work well.

    I wrote an article about some uxcell toroids I got on Amazon. I used several methods of measuring the inductance. The real takeaway was that the relative permeability of my 4 cores (out of I think 10) was all over the place. Of these 4 cores, I got numbers from 3860 to 4820. Not very good quality control!

    1. That’s great, I had been wondering about the toroids, and that was one of the main reasons I built this thing. I think I saw your comment about building a metal detector as well, glad it worked out for you!

Leave a Reply

Your email address will not be published. Required fields are marked *