Rotary Variable Inductor

About the writer: Harvey Morehouse is a contractor/consultant with many years of experience using circuit analysis programs. His primary activities are in Reliability, Safety, Testability and Circuit Analysis. He may be reached at Simple questions for which I know the answer are free. Complex questions, especially where I am ignorant of the answers, are costly!!!

Summary: In several interesting systems, an inductance varies dependent on linear or rotary displacement of an armature. This could be a motor, a displacement sensor, a LVDT (Linear Variable Displacement Transducer) or a RVDT (Rotary Variable Displacement Transducer). This variable inductance will then act on or react to a stimulus in a predictable manner, differing as its inductance value is 'modulated' by position.

In this paper we will model a coil of a VR (variable reluctance) motor, also known as a SR (switched reluctance) motor. This model would be useful in a micro model of a VR motor. That is, instead of averaging the motor effects over a full cycle, the internal motor details will be considered.

Switched Reluctance motor:

As part of a variable reluctance motor modeling project, there was a need to develop a model of an SR motor coil, wherein, dependent on motor shaft angular position, the inductance (or reluctance) of the motor varies. When the coil and the nearest armature pole are totally unaligned, the reluctance is high (the inductance is low) as there is an effectively large air gap.

When the armature rotates such that the armature pole starts to 'shade' the stator pole, the inductance increases and the reluctance decreases till such time as the armature/stator pole is totally shaded by the stator/armature pole. At that time, and until the rotor moves to where the armature/stator pole is outside of the arc of the stator/armature pole, the inductance is a maximum and the reluctance a corresponding minimum.

As the rotation continues and less shading occurs, the inductance decreases until the point where the armature pole is totally out of the arc of the stator salient pole and it reaches the minimum value of inductance until the rotation brings it to the next pole.

The coil inductance thus as an approximation presents a trapezoidal waveform of inductance as a function of rotor angular displacement.

Now when the stator coil is energized, it will cause a force to be exerted on the nearest rotor salient pole tending to cause the poles to become aligned. The force however is only materially present during the interval of changing inductance. Because the armature is composed of soft iron, unlike that of a stepper motor, the force will always tend to align stator and rotor poles (there is no repelling force), hence the drive to the stator coil must be sequenced and controlled to create the proper drive during the rise in inductance to create a 'positive' motor torque. Coil currents flowing during the time a stator coil and armature pole are aligned will produce no torque, and current flowing during the 'fall' of inductance will produce a torque in the opposite direction to that of the interval of 'rising' inductance. Thus, it would behoove us to drive the appropriate coil during the time of rising inductance, and totally or at least largely discharge the coil during the time the poles are in alignment.

Note that the direction of coil current to the force tending to align the stator and rotor poles has no effect, unlike the case of a permanent magnet motor. In this case the torque on the rotor is dependent on the square of motor current, as the references will show. (See References 2 and 3.)

The mechanical construction and operation details are interesting. Some possible motor configurations are shown in Figure 1 following

Figure 1
Four possible motor configurations

The diagram in Figure 1 is taken from Reference 1 - Figure 1. The motor configuration in (a) of Figure 1 is not often used, as it presents starting difficulties, not to mention getting it to rotate in the proper direction. In fact, all of the motors present rotational direction problems without a means of sensing the shaft position directly in order to properly sequence the winding drivers. Typically this is done using an optical encoder, although now other more complicated schemes have been devised to do this. This difficulty is not germane at this time as it will be assumed that the motor coils will be appropriately driven with the shaft in a given rest position at the start of a simulation.

Each stator pole, really half of a pole pair, consists of a single winding about each of the halves of the pole pair, connected in series with the appropriate winding sense to add to the magnetic flux.

For the moment we will be considering just clockwise armature rotation, looking 'down' along the shaft of the motor into the Figure 1 motor depictions. For motor (b), assume that the motor is at rest as shown. To achieve proper rotation, the first coil actuated will be at the 1:30 and 7:30 clock positions. With 8 stator poles, each pole (pole pair) will cause a shaft rotation of 45/2 or 22.5 degrees. The appropriate rotor pole will be rotated from usually midway between two stator poles into full alignment. The next coil activated will then move the next appropriate stator pole 22.5 degrees, as did the first. This will continue until a total of 16 pole activations have taken place. 16 activations represents 4 phases of coil activations in sequence.

In this case, the inductance is also a function of coil current, as the soft iron armature will exhibit saturation effects. Moreover, because of the rotary (or linear) motion, a back EMF voltage will be presented to the motor coil. These effects for any given simulation or model may or may not be significant, however, they will be present in the final model.

One last detail needs to be mentioned, however. Namely that in general, there will be '2*N' different pole pair excitations for 1 shaft revolution. Provided that the coil current during the inductance 'rise' is properly discharged during the interval before or when its shaded armature pole is aligned and the unaligned interval, one could model and drive a single pole pair 'N' times to get a single rotation. Thus, the model could be simplified to have just a single control circuit and drive represent a full motor cycle, recognizing that the control, drive and coil power and temperatures would not be correct. Other artifices could be used to simplify the model in certain cases. Or, one could model 'N/2' coil pairs and drive them more accurately.

The overall motor model will be considered at a later time.

Rotary Variable Inductor:

The first model attempted will be just that of an inductance whose magnitude is dependent on its angle with relation to the shaft angular position.

Figure 2
Position Variable Inductor ckt #1

The V1 source provides a signal to device X1 equivalent to 10 radians per second. Device X1 provides a modulo 2*Pi/N radian output, where N = 8 in this case, equivalent to a 45 degrees signal. Device B4 converts this radian output to degrees and provides it as an input to pwl device A1.

Device X1 is not part of the standard library at this time. It is referenced in an article in the resources section of the B2SPICE web site that should be posted sometime before this article.

Device A1 is a 'pwl' generator, a piecewise linear voltage source characterized by 'x' and 'y' array corresponding values. The output will be described by the piecewise linear curve represented by joining the corresponding 'x' and 'y' array values.

Examination of the arrays shows that when the input is equal to zero volts, the output is also zero volts. This condition persists until the input is 10.5 volts when at that time, the output will linearly rise to 40e-3 volts at 20.5 degrees. It will dwell there for 4 degrees, and then decrease linearly zero once again. Notice that the 45 degrees (volts) output from device A1 is identical to zero volts (degrees) output, and the output waveform is repetitive.

The inductance being simulated will vary from 10 to 50 mH in a trapezoidal manner. To get this value, a constant 10mV (mH) is added to its output. The question will arise why the 10mH value was not just included into the array? It was done so that a user could vary the minimum inductance floor separately from the changing portion of the inductance.

The output curve of this model is shown in Figure 3 following:

Figure 3
Graph of circuit 1

Here we see the graph of inductance (the blue trace) as a function of time. But of course the angular displacement is a function of time as well, consequently the inductance change as a function of shaft angle will be dependent on the angular velocity as well.

Now we have a voltage representative of inductance, which changes as a function of shaft angle. Reference 4 is one of my articles in the Beigebag website Resources section, as a voltage variable inductance. As the article explains, we cannot just pass this value to an inductor. To do so would violate the defining laws of an inductor and the conservation of flux linkages.

Recapping, we know that:

e(t) = d(Li)/dt

Where both L and i are functions of time. Taking the integral of both sides,

Integral[e(t)] = L(t)*i(t)

And solving for i(t) we get:

i(t) = integral[e(t)]/L(t)

Now some persons might misstate the law as being:

e(t) = Ld(i)/dt

Which is valid ONLY for L being a constant. You see, the law is really about the conservation of flux linkages. The fact that the current does not abruptly change for fixed values of inductance is just a convenient generalization in that case, whereas:

L(t))*i(t) = integral[e(t)]

shows that it is flux linkages that are conserved. In any event, after that digression, the circuit in Figure 4 shows the creation of an inductor (with a test circuit) whose value is a function of angle that can be imbedded into a circuit as an equivalent device.

Figure 4
Position Variable Inductor Model w/stimulus

In Figure 4 several changes have been made to simplify the model, while at the same time, the effects of current modulation of inductance (saturation) and back EMF voltage in the coil due to a voltage being induced in the coil by the changing flux in the coil.

Here, everything connected the left of terminals L1 and L2 represents a test stimulus.
B1, B2, R1 and R2 create the signals to drive switches S1 and S2. A DC level provided by voltage source V5 is applied to the equivalent inductor represented by Rs1 and the B5 and B8 generators. Am1 is an ammeter whose measured current value is used elsewhere in the circuitry.

Pwl device A1 is unchanged from the previous.

Added device A2 creates a derivative of inductance with respective to theta angle (which is itself a function of time. This value, multiplied by the inductor current and the derivative of L is used to set the BEMF voltage generator B5 output. This is mentioned in the references.

One might ask why a differentiator device is not used. The reason is that we wish to get a derivative with respect to theta. A circuit-based derivative would be with respect to time.

As before, the coil current is set as the integral of the inductor voltage divided by L(t), however, the value of L(t) is reduced by a factor dependent on the coil current. Ammeter Am1 measures the coil current and is used by pwl generator A3 to develop a factor varying between unity (at zero current) to (in this case) 0.1 at a current of 10A. The actual curve is dependent on the programming of device A3, and in this case it is not necessarily representative of a real motor.

For reference the netlist is as follows:

Position variable inductor 3.cpr

***** subcircuit definitions

* b2 spice subcircuit
* pin # pin name
* omega omega
* mod2n mod2n
* mod2p mod2p
* angle angle
.subckt wmod2pidn omega mod2n mod2p angle ***** main circuit
r3 mod2p 0 1k
b1 mod2p 0 v = (2*v(5,0))*(atan(tan(((v(angle)))*v(5,0)/(2*v(5,0)) -v(5,0)/2)) +v(5,0)/2)/v(5,0)
r2 5 0 1k
b2 5 0 v = 4*atan(1)
r4 mod2n 0 1k
b3 mod2n 0 v = (2*v(5,0)/ 8.000000000000e+000 )*(atan(tan(((v(angle)))*v(5,0)/(2*v(5,0)/ 8.000000000000e+000) -v(5,0)/2)) +v(5,0)/2)/v(5,0)
a1 omega angle integrator_block
.model integrator_block int in_offset = 0.0 gain = 1.0 out_lower_limit = -1t out_upper_limit = 1t limit_range = 1u out_ic = 0.0

***** main circuit
v0__b2__sm 31 0 0
v0__b1__sm 32 0 0
v0__a2__out_ref 33 0 0
v0__a2__in_ref 34 0 0
v0__b4__sm 35 0 0
v0__a1__out_ref 36 0 0
v0__a1__in_ref 37 0 0
v0__b3__sm 38 0 0
v0__a3__in_ref 39 0 0
v0__a3__out_ref 40 0 0
v0__b6__sm 41 0 0
v0__b10__sm 42 0 0
v0__b9__sm 43 0 0
vns2__a2__out 44 NS2 0
vn3__b8__sp 45 N3 0
vn4__b5__sp 46 N4 0
v8__a1__in 47 8 0
v8__a2__in 48 8 0
v12__a1__out 49 12 0
v28__a4__out 50 28 0
v18__a3__out 51 18 0
v17__a3__in 52 17 0
v29__x1__omega 53 29 0 R2 22 0 1K
R1 14 0 1K
B2 22 31 v = u(v(8)-10.5)*u(20-v(8))*5
B1 14 32 v = u(v(8)-10.5)*u(24.-v(8))*5
R6 NS1 0 1Meg
B6 8 41 v = v(20)*45/atan(1)
A1 %vd(47 37) %vd(49 36) pwl
R7 NS2 0 1Meg
A2 %vd(48 34) %vd(44 33) pwl2
R8 L2 0 1Meg
R12 30 0 1K
R11 28 0 1K
Rs1 L1 15 8
V2 NS1 25 1.000000000000e-002
B8 45 N4 i = v(30,0)
B9 24 43 v = v(n3,n4)
B10 30 42 v=v(28,0)/v(NS1)
A4 24 50 integrator_block
VAm1 15 N3 0
B5 46 L2 v = I(vam1)*v(ns2)*v(29)
S1 16 L1 14 0 switch
V5 16 26 5.000000000000e+001
S2 26 L2 22 0 switch
A3 %vd(52 39) %vd(51 40) pwl3
B3 17 38 v = i(vam1)
B4 25 35 v = v(12)*v(18)
R3 12 0 1K
R4 0 18 1K
D4 L2 16 mbr10100
V3 29 0 1.000000000000e+002
XX1 53 20 27 23 wmod2pidn
D3 26 L1 mbr10100
R5 L1 L2 100K

.model pwl pwl x_array = [0 10.5 20.5 24.5 34.5 45] y_array = [0 0 40e-3 40e-3 0 0] input_domain = .05 fraction = true

.model pwl2 pwl x_array = [0 10.49999 10.5 20.4999 20.5 24.5 24.500001 34.5 34.50001 45] y_array = [0 0 .229183 .229183 0 0 -.229183 -.229183 0 0] input_domain = 1 fraction = true

.model integrator_block int in_offset = 0.0 gain = 1.0 out_lower_limit = -1t out_upper_limit = 1t limit_range = 1u out_ic = 0.0

.model switch SW vt = .5 vh = 0 ron = 10m roff = 1Meg

.model pwl3 pwl x_array = [0 1 2 3 4 5 6 7 8 9 10] y_array = [1 .9 .8 .7 .6 .5. .4 .3 .2 .1 .1] input_domain = .1 fraction = true

.model mbr10100 D is = 1.567e-07 rs = 0.01853 n = 1.031 tt = 2e-08 cjo = 1.22e-09 vj = 0.5408
+ m = 0.4941 eg = 0.6 xti = 8 kf = 0 af = 1
+ fc = 0.5 bv = 122 ibv = 0.001

.TRAN 1E-6 0.2 0 1E-5 uic
.IC V(NS1)= 10m V(NS2)= 0

.OPTIONS method = gear


At any rate, a set of curves from this realization is shown in Figure 5 following:

Figure 5
Position Variable Inductor Model graph 1

There are a wide range of possible curves dependent on the parameters chosen for the inductance, the current modulation of inductance, the back EMF, the motor velocity and so on.


Although the model must be taken as somewhat tentative at this time until some refinements are made, it seems to be a viable means of modeling a variable reluctance motor coil. The real proof is to imbed this coil model with a more realistic drive model. Then, to solve for a torque as a function of current (s) of the coils, apply this torque to a mechanical load by means of the motor torque equation. Solving for the rotational velocity, this would then be input to the model herein presented, closing the loop.


1. Models and Simulation of the Switched Reluctance Motor Drive System, by Hao Chen and Jin-Woo Ah. KIEEInternational Transactions on EMECS, Vol. 2-B, No. 4, pp. 201-206, 2002 201

2, A New Calculation Model of Switched Reluctance Motor for Use on Spice, O. Ichinokura, Member, IEEE, S. Suyama, T. Watanabe, Member, IEEE, and H. J. Guo, Member, IEEE. IEEE TRANSACTION ON MAGNETICS, VOL. 37, NO.4, JULY 2001

3. Switched Reluctance Motor Control - Basic Operation and Example Using the TMSF240, by Michael T. DiRenzo. TI Application Report SPRA420A - February 2000

4. SPICE Simulation of SRM Considering Nonlinear Magnetization Characteristics, TOMOYUKI TSUKII, KENJI NAKAMURA, and OSAMU ICHINOKURA
Department of Engineering, Graduate School of Tohoku University, Japan. Electrical Engineering in Japan, Vol. 142, No. 1, 2003, Translated from Denki Gakkai Ronbunshi, Vol. 122-D, No. 1, January 2002, pp.16-2 1