Measuring inductor saturation by a time domain method

In power electronics, it is essential to make sure that the inductance of a choke will not decrease too much due to core saturation at the working current. There are basically two possibilities how to measure it - "statically" by using a usual LCR meter but providing DC current bias to the inductor, or "dynamically" by measuring the dI(t)/dt curve after connecting the inductor to a hard voltage source and checking its (non)linearity.
The former method is simpler so I choose it first, see here.

Open hardware inductor core saturation tester schematics and Kicad design



The remainder of this page is concerned with the dynamical approach. The quick way is of course just to use an oscilloscope, but I liked to design a device which would be more comfortable to use, displaying directly the values like current for which inductance halves directly on display, and possibly uploading the measured data to PC for graphical display and further analysis. Also the dynamical method is more practical for high test currents than using high DC current bias.

I was considering whether it is necessary to employ fast ADCs and FPGA and SRAM in a way an oscilloscope works, but came to the conclusion that for typical inductance values employed in power electronics it would be an overkill and that about 500ks/sec should be sufficient, if relatively low test voltage is used. For example, connecting 100uH inductor to 2V source yields 20mA/us slope, so should the inductor be rated to 1A, at 0.5Ms/s we get 25 samples before saturation which should be enough. The peak ADC sampling rate available in , my favorite STM32F37 microcontroller series, is 1Ms/s, so it should be sufficient.

I have thus designed open hardware Kicad schematics and PCB of such an inductor saturation tester. For convenience you can view the schematics also in PDF format. The operating principle is as follows: one DAC controls a DC/DC step down power supply for the testing voltage ( details here). A P-channel power MOSFET switches this voltage on the DUT inductor. The current then goes through a 0.1R or 0.01R shunt and the voltage is optionally amplified by an op-amp and measured by a fast ADC. Second DAC prepares a threshold voltage for a comparator, which implements current limiting via discrete hardware logic, to be fast, which is placed between GPIO control pin and the P-mosfet.
I considered also using op-amps to compute the current derivative in analog, but finally dropped the idea to keep the circuit simple (it would have to be done for each channel, and probably would require also a dual power suplly for the op-amps). With a 12-bit ADC I hope one can get sufficient accuracy in the numerical derivative.

On the photos below you can see the complete device and inside. You can notice patches on the board, I did not get it all right the first time (should have been reading datasheets in more detail ;-)), but the Kicad design on this page contains all the corrections to hardware already. On the left you can see the mains power supply, which was taken from a 3A rated laptop DC adapter and its voltage was lowered to about 15V by a change of one resistor.


GPL open source firmware for the inductor core saturation tester

The principle of operation is as follows:
Inductor with internal resistance R and inductance L connected to voltage source U:
U = RI + L dI/dt
Indicating explicitly functional dependences:
U(t) = RI(t) + L(I) dI(t)/dt
for analytic solution assume U(t)=const, L(I)=const, then
I = U/R * (1-exp(-Rt/L))
In limit L=0 : I = U/R
In limit R=0 : I=U/L*t
However, as core saturates, L(I) is a general nonlinear function. Moreover, U(t) is not constant since our capacitor bank is not infinite We could measure U(t) along I(t), at the expense of halving the effective sample rate (presently not implemented). Note that R = Rsense + R_L if we take Vup as U. Since R_L should be small and can be measured by DC milliohmmeter, we take it as an optional external correction (its determination from measurements by this device is difficult, since we do not have a constant current source), with default 0. Then we get for the inductance
L = (U-RI)/I' where I' is dI/dt
We sample I(t) at a equally spaced time grid with finite "dt" and approximate the derivative by finite difference.

The main firmware program 'saturation.c' with all other files needed is in stm32f37.tar.gz archive. Parts written by myself are under the GNU GPLv3 license, STM hardware libraries are under their license.
The use of the device is very simple - by a switch toggle between the high/low current measurements and connect the inductor to appropriate sockets. Then press middle button to start, and the to erase displayed data and start again. Left and right button can be used to change measurement parameters like voltage, max current, sampling frequency etc. There is a GND socket to connect a scope probe if you want to see the voltage/current on the inductor graphically. The device shows on the display min and max inductance in the current interval measured, inductance at half of the max current and average of inductances in the smaller-I half of the measured interval. More data is printed at the serial USART port. If 'nan' is shown instead of numerical values, or the max inductance value differs much from a measurement by a LCR meter with a small amplitude AC, the measurement parametes are not appropriate for the given inductor and have to be changed accordingly. There is no autoranging feature. The device supports also USB communication with a PC - just connect USB, power the device, then start a terminal program on /dev/ttyACM0 or a windows-equivalent and send 'enter' into the terminal, to switch from USART to USB output.

My Electronics page


My hobby page


My main page with e-mail contact


TOP of my family pages