Welcome to buchanan1.net

J.R. Buchanan


Some experiments with toroidal inductors

November 2016

Picture of Data Logger

A while back I needed an inductor for a project. I had a bunch of toroids left over from my Joule Thief article. I thought I could use one of these. But I needed to know how many turns of wire to use. That should be easy, right? All I needed to know was the dimensions of the core, the permeability, and the inductance I wanted. Then I'd know how many turns to wind. But how to find the permeability? That seemed easy, wind a coil and measure the inductance, then calculate the permeability from that. Or just use the fact that the inductance of the coil is proportional to the square of the number of turns, then calculate the number of turns based on the number of turns on the test coil. It didn't turn out to be so easy.

The formula for the inductance of a toroidal coil

formula for inductance of a
toroidal coil

u is the permeability, the product of the relative permeability and the permeability of free space or (4pi)e-7
N is the number of turns
A is the cross sectional area of a turn in meters squared
r is the average radius of the toroidal core in meters

From http://hyperphysics.phy-astr.gsu.edu/hbase/magnetic/indtor.html

How to measure the inductance

First I had to measure the inductance. My first thought was to use my "FISH8840" component tester, a fairly common type of tester, more on it at the end of the article.:

Picture of FISH8840 component tester

I tried several coils, and got these values:

20.5 turns1.21mH
12.5 turns0.84mH
7.5 turns0.16mH
4.5 turns0.08mH

For reference, a commercial inductor rated at 1mH +/- 10% yielded a reading of 1.0mH.

These values didn't look right. The inductance did not seem to be proportional to the square of the number of turns. So I calculated the ratio of inductances vs. the ratio of the number of turns square. The ratios are nearly uniform, as I sort of expected I'd be doing this when I wound the coils.

(20.5 / 12.5)^2 = 2.7
(12 .5/ 7.5)^2 = 2.8
(7.5 / 4.5)^2 = 2.8

The ratios of the inductances per the component tester:

1.21 / 0.84 = 1.4
0.84 / 0.16 = 5.3
0.16 / 0.08 = 2.0

None of these are even close to a ratio of 2.7 or 2.8. OK, the component tester may not be too accurate, it's not a high quality piece of test equipment after all. So let's try something else. I searched the Internet and found this circuit, a simple multivibrator that is supposed to produce a frequency that can be used to calculate the value of the inductance. I intended to find the URL of the article and share it, but I seem to have lost it. A very similar circuit is described at: http://www.homemade-circuits.com/2014/08/15-v-inductance-meter-circuit.html

The inductance is 50/f where the frequency is in KHz and the inductance is in mH (or in Hertz and Henries).

To get the result to read 1.0mH on the commercial inductor, I had to set the power supply voltage to 1.16V, not the recommended 1.2V. Perhaps not a great assumption, as the inductor is rated at +/- 10%, but this put it on an even footing with the component tester. The 68 ohm resistors are only +/- 5% themselves, so expecting the results to be accurate without tweaking the supply voltage would probably be naive anyway...

The resulting readings:

20.5 turns50/65KHz0.77mH
12.5 turns50/94KHz0.53mH
7.5 turns50/296KHz0.17mH
4.5 turns50/496KHz0.10mH

Resulting in ratios of:

0.77 / 0.53 = 1.5
0.53 / 0.17 = 3.1
0.17 / 0.10 =1.7

The ratios are still not in the 2.7 to 2.8 range. I felt that perhaps I needed to go back to basic principles. The fundamental property of an inductor is that the current through an inductor can not change instantaneously. If you apply a dc voltage to an inductor, the current will not immediately rise to its maximum value. The current will rise at a rate that is proportional to the voltage applied and inversely proportional to the inductance, that is di/dt = e/l How can we use this to measure the value of the inductor? We can apply pulsed DC to the inductor and observe the current rising with an oscilloscope and knowing the voltage applied and the rate of current change, we can calculate the inductance. Here is the circuit I used:

Here is the current through the inductor,as measured by looking at the voltage across the 1 ohm resistor. The positive side of the bench supply is used as the ground in this circuit.

One obvious problem with this circuit is that the voltage across the coil rises very rapidly to a high value when the voltage is removed. A Schottky diode and a snubber resistor could be used to damp this, but, upon experimentation, the voltage is not excessive with just the stray capacity of the circuit to limit the voltage and rise time. None of the coils produced peak voltages over 30V during the test.

To calculate the inductance value I wrote a quick and dirty Perl script to do the math for me. It makes some assumptions about the width of the pulse and its amplitude, if you build a circuit that produces other values of pulse width and amplitude, the appropriate lines in the program must be changed.


# Calculate the value of an inductor based on the di/dt when a 4.36uS
# 4.3V pulse is applied

# di/dt = E/L

use warnings;
use strict;

my ($voltage);         # magnitude of applied voltage pulse
my ($current_change);  # change in current in amps
my ($time_change);     # width of applied voltage pulse
my ($inductance);      # inductance, first in Henrys, then converted to mH

$voltage = 4.3;         # this is 4.3 volts for every inductor wee're testing
$time_change = 4.36e-6; # this is 4.3uS for each inductor we're testing
                        # These are determined by the test circuit

print "Enter di: ";       
$current_change = <STDIN>; # Enter the change in current, usually 0 to peak
chomp ($current_change);   # remove new line

$inductance = ($time_change / $current_change) * $voltage; # L in Henries
$inductance *= 1000;                                       # convert to mH
$inductance = sprintf ("%.3f", $inductance); # We want 3 decimal places
print "Inductance is $inductance mH\n"; # Print result

So what were the results? Using the inductance program:

Number of turnsChange in currentInductance

Commercial 1mH inductor, 0.02mA for an inductance of 0.937mH

The results for the 20.5t coils and the 12.5t coil are the same as the multivibrator method, and the results for the other three coils are similar. What about the ratios?

0.781 / 0.536 = 1.5
0.536 / 0.156 = 3.4
0.156 / 0.075 = 2.1

Still not the 2.7 to 2.8 expected, in fact very similar to the previous results. Why doesn't the inductance of the coils increase with the square of the number of turns like it is supposed to? I asked some people (well 2 people) and they both suggested that I might be saturating the cores and not getting an accurate reading because of this. This does not seem likely, as there is not a large amount of current flowing here. Also, the waveforms seen on the oscilloscope are nice and linear, they would not be if the cores were saturating. What does that leave?

I thought I'd try this again with a different core type, but that's inconvenient, as I only have singles of any other type of core. I'd have to wind 20.5 turns, test, then take turns off, test again, and so on. While thinking about this, a light went off in my head. What if the permeability of these four cores is not the same? That seemed unlikely as they were bought in a bag together, but what else could explain these results?

I did this, using the same core for all four readings. I first used the multivibrator method to measure the inductance, as it was the simplest of the two methods that were reasonably close to agreement. Here is what I got:

The resulting readings:

20.5 turns50/51KHz0.98mH
12.5 turns50/129KHz0.39mH
7.5 turns50/301KHz0.17mH
4.5 turns50/621KHz0.08mH

Resulting in ratios of:

0.98 / 0.39 = 2.5
0.39 / 0.17 = 2.3
0.17 / 0.08 = 2.1

Then I tried the same test with the 555 circuit, here are the results again using the inductance program:

Number of turnsChange in currentInductance

Resulting in ratios of:

1.08 / 0.421 = 2,69
0.421 / 0.175 = 2.41
0.175 / 0.065 = 2.57

That's more like it! Not exactly as predicted, but the ratios of inductance fall a lot closer to the ratio of the turns squared! It seems that the first 4 cores used had different permeabilities, and that the 555 circuit gave more accurate readings.

What are the permeabilities then?

So what were the permeabilities of the 5 cores used?

Again I wrote a program, one to calculate the permeability. Again I wrote the program for these specific conditions, an average radius of 0.00895 meters and the area of a single turn being 29.7e-6 meters squared.


# Used to calculate the permeability of a toroid coil having a radius
# of 0.00895 meters and with the area of one turn 29.7e-6 meters
# squared

# L = u0 * u1 * N**2 * A / 2 * pi * r
# where:
# L is inductance in Henries
# u0 is the permeability of free space
# u1 is  the relative permeability of the core
# N is the number of turns
# A is the area of one turn in meters squared
# r is the average radius of the core in meters

use warnings;
use strict;

my ($u0);         # permeability of free space, units very awkward
my ($area);       # area of one turn, meters**2
my ($turns);      # number of turns
my ($pi);         # 3.14
my ($radius);     # radius of core, average of inside and outside radius
                  # in meters
my ($inductance); # inductance in mH
my ($u1);         # relative permeabilty

$u0 = 12.6e-7;     # value of permeability of free space
$area = 29.7e-6;   # area of a turn, the same core size is used for all tests
$pi = 3.14;
$radius = 0.00895; # average radius of toroid, same size core used for all tests

print "Enter number of turns: ";
$turns = <STDIN>;    # read in number of turns
chomp ($turns);      # remove new line

print "Enter inductance in mH: ";
$inductance = <STDIN>;  # read in measured inductance, easier to type mH
chomp ($inductance);    # remove new line

# calculate relative permeability
$u1 = ($inductance / 1000) / ($u0 * $turns**2 * $area) * (2 * $pi * $radius);

# we don't want any decimal places, it would be better to limit our precision
# to 3 places, but that's harder to do (although rounding to nearest 10
# would be similar in this case, but not in general)
$u1 = sprintf ("%.0f", $u1);

print "Relative permiability is $u1\n"; # print result

Here are the results for the first 4 cores:

Number of turnsRel. Permeability

A rather wide range of values, it certainly explains the initial results...

What the results for the single core used with various number of turns?

Number of turnsRel. Permeability

Average of the four tests: 4350

Still a rather wide range. The maximum and minimum values are +/- 11% from the average. Not too surprising given the expected accuracy of these measurements. I suspect that stray capacitance skews the results for the lower inductance coils. I also suspect, but don't want to spend the time to prove, that if each of these cores were tested with all four winding counts, the average permeabilities would be a lot closer to each other than what I measured, but that they would still be far enough apart to explain the inductance not seeming to follow the square of the number of turns.


I see two unexpected results, first the FISH8840 tester is really inaccurate for inductors in this range. OK, maybe that's not too surprising. Some reviews I found of similar testers, based on the same design, show that it is likely better on other components. Maybe I'll do some testing and a review of it later. The other unexpected result was that the cores all had different permeabilities. Both the tester and the cores were inexpensive items from Amazon and presumably shipped from China. I think I've learned not to blindly trust parts from Amazon, and presumably eBay. I'll probably still order them, but I'll be careful about making assumptions.

About the FISH8840 tester

This sort of tester is based on a design by Karl-Heinz Kübbeler, the URL for the project is http://www.mikrocontroller.net/articles/AVR_Transistortester Most, if not all commercial versions of this tester come from China.

The FISH8840 tester has the URL of fish8840.taobao.com on the front. The URL points to a page all in Chinese with a lot of inexpensive electronic equipment. Google translate via Chrome helped a lot. A quick Google of TaoBao shows that it is related to Alibaba, but caters mostly to Chinese customers. The name means "Searching for Treasure." It seems to function similarly to eBay. They don't seem to have a very good reputation. I got the tester from Amazon, so some TaoBao seller's products do seem to make it to the US via Amazon and maybe they sell them on eBay too. From the articles I read, much of what TaoBao sells often includes fake and low quality products.