Technical Notes

Electrical Model of Loudspeaker Parameters

July 23, 2017 Technical Notes No comments , , , , , , , ,

0. Introduction

In this article I present a way to model a loudspeaker driver’s parameters  as an electrical circuit using lumped elements. While this subject has been thoroughly explored, I will present my contribution in the form of an online calculator that will easily do the calculations for you. The article will show how the model is derived and some of its uses. Loudspeaker enclosure can also be added in the model and investigate the effects they have on the overall impedance that is present at the loudspeaker terminals.

It should be noted that this entire article refers to dynamic loudspeaker drivers only.

To try out the examples in this article yourselves you will need the following tools:

1. Loudspeaker’s Impedance

In the beginning we should remind ourselves the nature of a driver’s impedance and what are the elements that contribute to this property. This will give us some insights into the advantages and limitations the model has. In a driver we can clearly identify 3 sections corresponding to electrical, mechanical and acoustical domains and 2 energy conversions, from electrical to mechanical domain and from mechanical to acoustical domain respectively.

Figure 1. shows a representation of a driver’s physical parts and an equivalent electrical circuit using lumped elements. Breaking the driver into its components allows us to easily identify what contributes to the driver’s behavior. On the electrical side we have the driver’s motor comprised of the voice coil and the magnetic circuit. The voice coil has a dc resistance R_e property which is given by wire material, diameter and length. Being a coil it will also have an inductance L_e which is determined in part by the voice coil’s physical parameters such as size, number of wire turns, etc. The magnetic circuit has also a contribution on L_e, first by creating a ferrous core and second from eddy currents that form in the steel around the voice coil.

The effect of the steel creates what is referred to as a semi-inductance and can be observed at higher frequency where the impedance rises at 3db/octave instead of 6db/octave like a normal inductor. This complicates things as the semi-inductance can not be easily modeled using lumped elements and it is not something that can be derived from fundamental properties of the driver. Some manufacturers do publish parameters that help model this but it is quite rare and many models are creating via curve matching technique which requires impedance measuring capabilities. For this reason the semi-inductance is not modeled in this online calculator.



Figure 1. Loudspeaker driver model

Figure 1. Loudspeaker driver model

The magnetic circuit creates a static magnetic field in the gap with a flux density B. The product between magnetic flux density B and voice coil wire length l is often called the motor force factor and it is basically the coupling factor between the electrical side and the mechanical side. The force exercised on the voice coil is equal to F=Bli with i being the electrical current through the voice coil.  We can see the coupling between the electrical side and mechanical side is therefore represented by a gyrator because we make the analogy that velocity corresponds to electrical current and force corresponds to voltage. This is referred to as impedance analogy.

If we think in terms of efficiency, than we would like to generate as much force from electrical current as possible by having a large coupling factor. Bl is the product of magnetic flux density B and voice coil wire length l but increasing the later means also  increasing R_e which limits the current therefore the best way to increase the coupling factor and efficiency is to increase B.

On the mechanical side, fundamental properties such as mass and compliance are described as lumped electrical components such as resistor, inductor and capacitor. First we have the total mass of the moving elements such as the cone, dust cap and voice coil combined with the contribution to the moving mass by the spider and surround and finally the mass of the air load around the cone. Depending on the spider’s and surround’s geometry a fraction of their mass is added to the moving mass. This mass is represented by inductance M_{ms}.

Some papers treating this subject do not include the air load mass on the mechanical side and such they note the total mass as M_{md}. While this makes sense, it is not often used.

Why is mass an inductance? There are two basic electric elements that can store energy,  the inductance and the capacitance. To find out which one mass is, we need to apply Newton’s Law of Motion stating F = M_{ms}a where F is force, m is mass and a is acceleration. For instantaneous values we can say:

    \[ F = M_{ms}\frac{dv}{dt}\qquad (1) \]

Replacing F and v with their electrical analogues u and i we get:

    \[ u = L\frac{di}{dt}\qquad (2) \]

which basically describes an inductance with L = M_{ms}.

The compliance C_{ms} is the inverse of spider’s and surround’s combined stiffness and is shown as a capacitor since the relationship between force, velocity and compliance is identical to that of voltage, current and capacitance:

    \[ F = \frac{1}{C_{ms}}\int vdt\qquad (3) \]

The losses of the suspension system are shown as  resistance R_{ms} . This is determined by the materials and geometry of the voice coil former, spider and surround. On the mechanical side we can see a resonant circuit being formed by M_{ms} and C_{ms} with f_s = \frac{1}{2\pi\sqrt{M_{ms}C_{ms}}} and resistance R_{ms} acting as damping. I find it important to mention that above the resonant frequency f_s, for most of the bandwidth, the output of the driver is controlled by the mass M_{ms}.

Besides the mass contribution, the driver’s cone and it’s surface act as the transformer between the mechanical side and the acoustical side. The bigger the cone’s surface the more mechanical energy is transformed into acoustical energy. In terms of efficiency it is desirable to have a large cone as long as the mass does not increase. Depending on its geometry part of the surround surface also contributes to the total area SD.

On the acoustical side, in figure 1, we have a generic impedance element Z_a. This corresponds to the radiation resistance for both front and back of the cone and the enclosure impedance. If no enclosure is modeled we would only keep the radiation resistance R_a and treating the cone as pulsating half sphere, we can define R_a as:

    \[ R_a = \frac{\rho \omega^2}{2\pi c}\frac{1}{1 + (\frac{\omega r_d}{c})^2}\qquad (4) \]

    \[ r_d = \sqrt{\frac{SD}{2\pi}} \]


\rho is air density,

c is speed of sound in air,

r_d is radius of a half sphere with same surface area as SD.

As can be seen in equation 4, R_a is non-linear and depends on frequency and thus it cannot be modeled using lumped elements. Let’s assume we have a 12″ driver with SD = 0.056 m^2.  Figure 2 plots the value of the  radiation resistance on the acoustical side as R_a and after transformation to the mechanical side as R_{ma}.  Values of R_{ma} are quite small and we can neglect its influence especially when R_{ms} is much higher.

The transformation from acoustical side to mechanical side is straight forward:

    \[ R_{ma} = SD^2R_a \qquad (5) \]

Figure 2. Acoustic Radiation Resistance for a Driver with SD = 0.056 m^2

Figure 2. Acoustic Radiation Resistance for a Driver with SD = 0.056 m^2

Because of it’s relatively low value and the fact that it cannot be modeled as a pure resistance, we will leave R_a out of the current model so we will only concern ourselves with the enclosure’s elements on the acoustical side. If we would use M_{md} instead of M_}ms} on the mechanical side then we should include the air mass around the front and back of the cone as inductors.

Figure 3 shows the electrical circuit equivalents for closed and vented enclosures. With a closed enclosure the air inside acts as a compliance and thus it is modeled as a capacitor C_{ab} and is defined by equation 6. If the enclosure is not air tight some of the air will leak. These losses are modeled as a resistor R_{ab} whose value depends on the parameter Q_l. With a vented enclosure we need to add the mass of air that occupies the port’s volume as inductor L_{ap}. This air acts as a mass because it will move back and forth as the cone vibrates unlike the air inside the enclosure who is elastic compressing or rarefying under force and recovering when the force is removed.

Figure 3. Loudspeaker Enclosure Model

Figure 3. Loudspeaker Enclosure Model

    \[ C_{ab} = V_b/\rho c^2 \qquad (6) \]

    \[ L_{ap} = \rho l_v/S_v \qquad (7) \]


V_b is enclosure volume,

\rho is density of air,

c is speed of sound,

l_v is port lenght,

S_v is port area

The circuit in figure 1 while offers an insight into the role each element plays, it’s not in a useful form due to the BL and SD transformations. To study the electrical impedance it would make sense to move all the elements on the electrical side and then apply circuit theory. The transformation from the acoustical side to mechanical side is defined by the following equation:

    \[ Z_m = SD^2Z_a \qquad (8) \]


Z_m is the impedance on the mechanical side,

Z_a is the impedance on the acoustical side.

Figure 4. Converting components from acoustical side to mechanical side

Figure 4. Converting components from acoustical side to mechanical side


The transformation from the mechanical side to electrical is a little bit more complicated due to the gyrator. It will convert series circuits to parallel circuits  and vice-versa and it will convert inductors to capacitors and vice-versa. Figure 5 shows the equivalent electrical circuit with all elements transferred on the electrical side. The formulas for the conversion are listed below:


    \[ R_{es} = \frac{(Bl)^2}{R_{ms}} \qquad (9) \]

    \[ C_{mes} = \frac{M_{ms}}{(Bl)^2} \qquad (10) \]

    \[ L_{ces} = (Bl)^2C_{ms} \qquad (11) \]

    \[ R_{eb} = \frac{(Bl)^2}{SD^2Rmb} \qquad (12) \]

    \[ L_{ceb} = \frac{(Bl)^2C_{mb}}{SD^2} \qquad (13) \]

    \[ R_{ep} = \frac{(Bl)^2}{SD^2Rmp} \qquad (14) \]

    \[ C_{mep} = \frac{SD^2M_{mp}}{(Bl)^2} \qquad (15) \]

Figure 5. Converting components from mechanical side to electrical side

Figure 5. Converting components from mechanical side to electrical side

With no gyrators or transformers in our circuit we can easily calculate the impedance presented at the generator V_g. Using a tool such as LTSpice we can create the above circuit and define our desired simulation. To get the impedance presented at the generator we should define an ac simulation and plot \frac{V_g}{I_g}.

Analytically, we can brake the circuit and deal with groups of parallel or series connections one at a time. Let’s consider the vented enclosure circuit. The impedance of the series elements corresponding to the enclosure will be treated in parallel with the driver’s components and the resultant impedance will be treated in series with the voice coil components. Expressing the result in Cartesian form we get the following:

    \[ Z_m = R_m + jX_m\qquad (16) \]

    \[ R_m = \frac{1}{R_{es}} + \frac{R_{ep}}{R_{ep}^2 + (\omega L_{ceb} - \frac{1}{\omega C_{mep}})^2}\qquad (17) \]

    \[ X_m = \frac{1}{\omega L_{ces}} + \frac{\omega L_{ceb} - \frac{1}{\omega C_{mep}}}{R_{ep}^2 + (\omega L_{ceb} - \frac{1}{\omega C_{mep}})^2} - \omega C_{mes} \qquad (18) \]

    \[ Z_e = R_e + j(\omega L_e)\qquad (19) \]

    \[ Z_t = (R_e + R_m) +  j((\omega L_e) + X_m)\qquad (20) \]

    \[ |Z_t| = \sqrt{ (R_e + R_m)^2 +  ((\omega L_e) + X_m)^2}\qquad (21) \]

    \[ \Phi _{Z_t} = \arctan{(\frac{(\omega L_e) + X_m}{R_e + R_m})}\qquad (22) \]


Z_m is the total equivalent impedance of the parallel circuit to the right of L_e,

R_m is the real part of Z_m,

jX_m is the imaginary part of Z_m,

Z_e is the total equivalent impedance of R_e and L_e,

Z_t is the total equivalent impedance presented at the generator V_g,

|Z_t| is the magnitude of Z_t,

\Phi _{Z_t} is the phase of Z_t.

2. Why is this useful?

For our examples let’s consider the following driver:

Resonance Frequency, Fs [Hz]: 57
DC Resistance, Re[Ω]: 5.5
Inductance, Le[mH]: 0.8
Motor Force Factor, BL[Tm]: 6
Compliance, Cms[mm/N]: 0.29
Mechanical Loses, Rms[kg/s]: 0.65
Moving Mass, Mms[g]: 26.6
Piston Surface, SD[m^2]: 0.049


Using the online calculator, let’s build the equivalent circuit model for this loudspeaker. Let say this loudspeaker will be in a vented box with a volume of 100 liters, a vent of 50 mm in length and  70 mm in diameter.

Figure 6. Speaker Equivalent Electrical Circuit

Figure 6. Speaker Equivalent Electrical Circuit

The online calculator will provide the values for all the components in the circuit. All we need to do now is to build the circuit in LTSpice and run an ac simulation. To get the impedance curve in figure 7, we will plot  \frac{V_g}{I_g}. The resultant curve is the familiar vented loudspeaker impedance.

Figure 7. Loudspeaker LTSpice Simulation

Figure 7. Loudspeaker LTSpice Simulation

We can continue our analysis for example by stepping any component value from the circuit and see how the impedance is affected. In this case, let’s vary L_{ceb} which corresponds to the enclosure’s volume. This can be achieved by adding a .step directive in LTSpice and defining the min, max and interval parameters. The result in figure 8 shows how we can easily check the enclosure volume for our desired LF alignment.

Figure 8. Parameter Step in Loudspeaker Simulation

Figure 8. Parameter Step in Loudspeaker Simulation

Another use is to help design crossover sections. Let’s look at a 2nd order low pass filter with 1kHz cutoff. We will build the circuit in LTSpice and we will simulate it’s response over the audio range. As can be observed in figure 9 our crossover section is made up of inductor L_1  and capacitor C_1. We can use .step again to simulate the response with different values for L1 and C1.

We can also use the equivalent electrical circuit of a loudspeaker to test amplifier output stages and check it’s stability under a complex load.

Figure 8. Low Pass Filter Simulation

Figure 9. Low Pass Filter Simulation

3. How good is it?

The model depends on the accuracy of the T/S parameters up to the midrange. At higher frequency \omega L_e term from equation 21 dominates in our model but for a real driver, as discussed in paragraph 1, the effect of Eddy currents in steel plates and/or the presence of shorting rings will combat this and L_e appears as a semi-inductance keeping the impedance lower as can be seen in figure 10. This semi-inductance is very hard to model using lumped elements and has been the subject of some debate. We will address it in future articles.

Figure 10. Simulated vs Real Loudspeaker Impedance

Figure 10. Simulated vs Real Loudspeaker Impedance

4. Bibliography

  • Handbook for Sound Engineers, edited by Glen Ballou, Chapter 21 Loudspeakers by Tom Danley and Doug Jones

  • Wikipedia, Impedance Analogy,
  • Acoustics: Sound Fields and Transducers, Leo Beranek, Tim Mellow, Academic Press 2012
  • Impedance Analysis of Subwoofer System, ARTHUR P. BERKHOFF, J. AudioEng.Soc.,Vol.42,No.1/2,1994
  • Loudspeakers’ Electric Models for Study of the Efforts in Audio Power Amplifiers, Rosalfonso Bortoni, Homero Sette Silva, AES Convention Paper 5911
  • An empirical model for loudspeaker motor impedance, J R Wright, AES 86th Convention 1989

Sizing Steel Parts for Field Coil Loudspeaker Motors

May 5, 2016 Technical Notes No comments , , , , ,

0. Introduction

In designing loudspeaker motors we usually try to avoid saturation along the magnetic path. This means we need to properly size the steel pieces to keep the magnetic flux density below the saturation value. We will start with the input data for our design and usually this is desired flux density in the gap B_g, voice coil diameter d_{vc}, voice coil height h_{vc} and desired voice coil excursion in one way X_{max}.

We should also consider the motor type, either underhung or overhung as part of the input data for our design and such we can determine first the magnetic gap height:

  1. Underhung

    \[ h_g = h_{vc}+2X_{max}\qquad (1) \]

2. Overhung

    \[ h_g = h_{vc}-2X_{max}\qquad (2) \]

1. Magnetic Path

For the remaining of this article I will refer mostly to field coil powered motors but the ideas expressed can be applied to permanent magnet motors as well. In figure 1 we have the axisymmetric section through such a motor. We can see the magnetic path by following the red lines representing the magnetic flux in this example. The direction is given by direction of current in the field coil but we don’t have to be concerned with this aspect in this article.

Axisymmetric Cross Section

Figure 1. Axisymmetric section of Field Coil Motor

In figure 1 \Phi_c represents the magnetic flux through the steel parts or core and \Phi_g represents the  magnetic flux through the gap. However Gauss law dictates that:

    \[ \Phi_c =\Phi_g\qquad (3) \]

and since:

    \[ \Phi_c =B_cA_c, \Phi_g =B_gA_g\qquad (4) \]


    \[ B_cA_c=B_gA_g\qquad (5) \]

where B_c is the flux density through steel piece, A_c is the cross section area of steel piece perpendicular to magnetic flux, B_g is the flux density through the air gap and A_g is the cross section area of the gap.

The last equation while simple, it is also quite meaningful. It states that unless the area of the gap and the area of the steel through which magnetic flux passes, are equal, then the flux densities through these different areas will be different. This is very important since we need to keep B_c below the saturation value for that particular steel. It also states that since the area of the steel around the gap through which magnetic flux passes is very close to the magnetic gap average area, the flux density in the gap can not be grater than the saturation value for that particular steel because B_c cannot be grater then B_{sat}.

Generally we can say:

    \[ B_c=\frac{B_gA_g}{A_c} < B_{sat}, A_g = \pi d_{vc}h_g\qquad (6) \]

    \[ B_c=\frac{B_g\pi d_{vc}h_g}{A_c} < B_{sat}     \qquad(7) \]

or better put using our input data:

    \[ A_c > \frac{B_g}{B_{sat}}\pi d_{vc}h_g     \qquad(8) \]

2. Sizing the Steel Parts

To avoid saturation, the area of steel through which magnetic flux passes must satisfy the Equation 8. Now let;s examine what this means for each of the steel parts of a field coil motor.

  1.  The center pole piece

Figure 2 shows a section of the center pole piece with red line representing the magnetic flux direction. We can see that the cross section area corresponding to magnetic flux varies, getting smaller towards the top but for now let’s determine the diameter for the thicker section.

Central Steel Piece

Figure 2. Section of central pole piece

    \[ A_c = \pi (\frac{d_m}{2})^2\qquad (9) \]

From Eq 3

    \[ \pi (\frac{d_m}{2})^2 > \frac{B_g}{B_{sat}}\pi d_{vc}h_g\qquad (10) \]

    \[ d_m > \frac{\sqrt[2]{\frac{B_g}{B_{sat}}d_{vc}h_g}}{2}\qquad (11) \]

d_t from figure 2 will be determined by voice coil diameter and gap width but it is not as big a factor as d_m because the field lines will not pass through the top section. Magnetic flux will steer towards the gap and thus the area will be very close to the gap area as shown in figure 3. In Eq 6 we have the expression for gap area but in reality that area is larger because of flux bulging out in the gap (flux lines marked a in figure 3) and not strictly following the geometrical path we would like it to. To what extend the difference is depends heavily on the geometry. But this also means it will take more flux to saturate that area so it is safe to assume the gap area as in Eq 6.

Central Steel Piece Zoom

Figure 3. Detail of magnetic gap region

2.   Bottom plate

In figure 4  we can see the path the magnetic flux takes through the bottom plate. We can also observe that the flux travels through a disc which means that the diameter increases the further it goes. If the thickness of the bottom plate is constant it will mean the area through which flux passes through increases from the center of the motor towards the outer diameter. While the increase will not hurt the magnetic flux, it is a waste of material and will add extra weight to the motor.

bottom plate2

Figure 4. Central pole piece and bottom plate

To size the bottom plate it is best to start from the center. The center pole piece with diameter d_m  meets the bottom plate and the flux lines turn about 90 degrees and start passing through the bottom plate. We can thus define the center area as:

    \[ A_{bp_c} = \pi d_mh_{max}\qquad (12) \]

where A_{bp_c} is the center area of the bottom place.

According to Eq 8:

    \[ \pi d_mh_{max} > \frac{B_g}{B_{sat}}\pi d_{vc}h_g\qquad (13) \]

    \[ h_{max} > \frac{B_g}{B_{sat}}\frac{d_{vc}}{d_m}h_g\qquad (14) \]

In figure 4 d_p is the bottom plate diameter.  If we want to keep a constant area trough  the bottom plate we can easily see that:

    \[ \pi d_mh_{max} = \pi d_bh_{min}\qquad (15) \]


    \[ \frac{h_{max}}{h_{min}} = \frac{d_b}{d_m}\qquad (16) \]

3.   Steel Ring

The steel ring piece can be identified  in figure 5.  This piece can be an actual ring or it can be made using multiple steel rods. Its purpose to the provide a path for magnetic flux between the bottom plate and the top plate. The steel rods will allow for better cooling of the field coil but will concentrate the flux around them in the bottom and top plate so in terms of avoiding saturation it is my opinion not to tapper the the bottom plate’s thickness as discussed in previous section. So basically keeping h_min same as h_max.

Steel Ring

Figure 5. Field Coil Motor structure section showing steel ring

The area perpendicular to the magnetic flux vector is represented in figure 6 for both cases using a ring or multiple rods. For the first case, in next calculations we shall keep the outer diameter of the ring equal to that of the bottom plate d_b. and we shall determine the thickness or width of the ring w_{r} as depicted in figure 6.a.

steel ring detail

Figure 6. Steel Ring (a) and Steel Rods (b) Top View

Lets call d_i the inner diameter of the ring:

    \[ d_i = d_b-2w_r\qquad (17) \]

Area for steel ring in Fig 6.a would be:

    \[ A_r = \pi \frac{d_b^2 - d_i^2}{4}\qquad (17) \]

Following Eq 8:

    \[ \frac{d_b^2 - d_i^2}{4} > \frac{B_g}{B_{sat}}d_{vc}h_g\qquad (18) \]

    \[  d_i > \sqrt[2]{d_b^2 -4\frac{B_g}{B_{sat}}d_{vc}h_g}\qquad (19) \]

    \[ w_r > \frac{d_b - \sqrt[2]{d_b^2 -4\frac{B_g}{B_{sat}}d_{vc}h_g}}{2}\qquad (20) \]

Then for steel rods in Fig 6.b Eq 8 would be:

    \[ N(\frac{d_r}{2})^2 > \frac{B_g}{B_{sat}}d_{vc}h_g\qquad (21) \]

    \[ d_r^2 > \frac{B_g}{B_{sat}}d_{vc}\frac{4}{N}h_g\qquad (22) \]

    \[ d_r > 2\sqrt[2]{\frac{B_g}{B_{sat}}\frac{d_{vc}h_g}{N}}\qquad (23) \]

where N is the number of steel rods, N = 8 in Fig 6.b

4. Top Plate

 Top plate  behavior is similar to the bottom plate but the thickness of the plate near the gap is given by the gap height h_g as shown in Figure 7.  There are cases when the thickness is tapered towards the outer diameter but usually it is constant to make mounting on the speaker frame easier.

Loudspeaker Magnetic Gap

Figure 7. Representation of Magnetic Gap (b) with Top Plate (a), Central Pole Piece (c) and Voice Coil (d)

With a constant thickness, at the outer edge of the top plate, the B_c value will be smaller than B_g as the area though which magnetic flux passes, \pi d_ph_g, is larger. Moving towards the gap the area becomes smaller as the diameter decreases towards d_{vc} and thus B_c approaches B_g.

If tapering is desired then Eq 16 should be applied in this case as well.

3. Conclusion

Through simple calculations we can determine rough dimensions of the loudspeaker motor in order to avoid magnetic saturation of the steel in the magnetic circuit. These values can be a starting point and then refined with the use of advanced numerical methods. We also identified the restrictions around the magnetic gap and the limit imposed by the saturation value of the material. For typical 1010 Steel B_{sat}=1.85T, for 1006 Steel B_{sat}=2.13T and for Hyperco50 Alloy B_{sat}=2.4T.

We can see the importance of using steel materials with high saturation values to lift the limits imposed on the gap. This is also the reason why in some designs only in the region around the gap high quality steel is used and for the rest of the motor’s structure a lower grade is chosen to keep the costs down.

Lua Scripts for FEMM to aid Electrodynamic Loudspeaker Motor Design

March 13, 2016 Technical Notes No comments

0. Abstract

Information about loudspeaker design is very hard to find and there very little tools out there to help the aspiring DIY-er. The purpose of these scripts is to provide a starting point for a loudspeaker magnetic circuit design by simulating various geometries and parameter sets and choosing the best result.

 These scripts are meant to be used with Finite Element Method Magnetics (FEMM) software. FEMM is a free application written by Dr. David Meeker that can do FEM analysis of magnetic circuits.

The scripts are written in Lua programming language and are available in the Project Ryu Loudspeaker Drivers repository on GitHub. Please visit the FEMM homepage for more information about the software and download link.

Depending on the time you will read this article there will probably be more than one script corresponding to different types of motors. In this article I will focus on the field coil motor script.

1. Introduction

Dynamic loudspeaker motors are basically actuators. A voice coil is immersed in a constant magnetic field and when current flows through the coil it will create a force (a consequence of  Lorentz force) whose direction depends on the direction of the current through the coil.

In dynamic loudspeakers the constant magnetic field is generated with  either a permanent magnet or a field coil. This magnetic field is then directed and concentrated in the area where the voice coil is. A magnetic circuit created from a material with much greater magnetic permeability than air (usually low carbon steel) is used to achieve this.

The force acting on the voice coil will be a product of magnetic flux density and length of the wire  multiplied by current intensity. Ideally, the magnetic flux  lines will always be perpendicular to the direction of the current flow in the wire and thus the force’s magnitude can be express in scalar form as follows:

    \[ F = BLi \]

where F is the force, i is the current through the voice coil, L is the total length of the wire in the voice coil and B is the magnetic flux density. If we consider i to be the input of your system and F the output we can see how the electrical signal is transformed into a mechanical signal and how the product BL can be thought as an electro-mechanical coupling factor. Since L depends on voice coil, our interest in designing the magnetic circuit is focused on magnetic flux densitiy B.

Using FEM analysis we can predict this parameter for certain magnetic structures and one great free tool for this is FEMM application. This said, as with most applications, it requires some time, practice and knowledge to utilize it. For this reason i have created the helper script that should get any DIY-er started faster. It will generate a motor structure and field coil circuit based on your desired B value and a few other parameters.

2. Motor Structure

The geometry of the motor structure is calculated from the input parameters but it will result in classic motor structures. For field coil motors the structure consists of top steel plate, steel ring, steel bottom plate, steel central pole piece and the copper field coil.

Figure 1 depicts the classic structure of a field coil underhung motor and identifies it’s components. It is called an underhung motor because the voice coil’s winding height is smaller than the magnetic gap height.

Field Coil Motor Structure

Figure 1. Field Coil Motor Structure. (a)Voice Coil Former, (b)Voice Coil Winding, (c)Magnetic Gap, (d)Steel Top Plate, (e)Field Coil, (f)Steel Ring, (g)Steel Central Pole Piece, (h)Magnetic Flux Lines, (i)Steel Bottom Plate

Magnetic field is strongest at the center of the field coil and this is why the central pole piece is the easiest to saturate. We must ensure we have enough steel there to avoid this. If this section is saturated it will limit the flux density in the magnetic gap not matter how much the current through the field coil is increased or how big the field coil itself is. We should ensure that the saturation point is in the gap region only.

The next areas with strong magnetic field is on the field coil’s axis, above and below the field coil itself. The bottom plate’s thickness in that region must be considered again to avoid saturation. Above the field coil we have the magnetic gap and this is the area it is best to saturate. As shown in Figure 1. the diameter of the central pole piece is reduced. This is because we need to fit the voice coil but also because it will concentrate the flux lines to the gap.

There will be a few flux lines crossing the air region between the field coil and the top plate because of this but with underhung motors it shouldn’t pose a problem. The reason saturation of pole pieces in the gap region is desired is because this way the flux density will be more stable and less prone to be influenced by the magnetic field generated by the voice coil itself. Another thing to note about the classic structure is that the magnetic gap height usually equals the thickness of the top plate.

3. Input Parameters

In loudspeaker motor design the most important area is the magnetic gap. One could argue the end result would be the same if the magnetic gap parameters and geometry are the same no matter what the rest of the motor looks like and under specific working conditions that would be true. For this reason, i chose the input parameters to those corresponding to the magnetic gap. Let’s enumerate them:

  • Voice coil diameter: this represents the mean diameter

    \[ d_{vcm} =  (d_{vco} + d_{vci})/2 \]

where d_{vcm} is the voice coil mean diameter, d_{vci}, the voice coil inner diameter and d_{vco}, the  voice coil outer diameter. This parameter will determine the radius at which we will acquire the magnetic flux density values in the gap.

  •  Voice coil height: this represents the winding height and it is used together with desired Xmax  to calculate top plate thickness, magnetic gap height

    \[ h_g = 2*x_{max}+h_{vc} \]

where h_g is the gap height and h_{vc} is voice coil height.

  • Voice coil width: this represents the thickness of the voice coil including winding and former. One could define this parameter as:

    \[ w_{vc} = (d_{vco} - d_{vci})/2 \]

This parameter is used in computing the magnetic gap width by adding a clearance factor to the inside and outside of the voice coil.

    \[ w_g = w_{vc} + 2*w_{clear} \]

where w_g is the magnetic gap width, w_{vc} the voice coil width and w_{clear} is the clearance between the voice coil and the steel pole pieces. The default clearance value is 0.3mm and in section 5  i will describe how to modify this value.

  • X_{max}: this represents the desired distance the voice coil can travel in each direction with negligible change in flux density.
  • Flux density: represents the desired B value in the magnetic gap. This value is used in the simulation process that will be described in the next section.

All these parameters are requested via a prompt when running the script. This prompt can be disabled if you can handle adjusting the parameters in the code.

Working directly on code will also enable you to adjust more advanced settings which will be discussed in section 5.

4. Simulations

Once the input parameters are set the script will begin the analysis. It will iterate through different motor sizes and for each motor size it will simulate different field coils by changing the wire diameter and thus the number of turns also. The physical size of the field coil will always be the same for a give motor size. For each field coil the script will use a range of current  values and calculate the magnetic flux density and field coil properties.

Each simulation result that passes the desired flux density value will be stored. Once all the simulations are finished an optimization process begins. The program will take each stored result and calculate a weighted sum between flux density, motor size and field coil power. The record with the highest score will be chosen as optimum and results displayed. The weights of the sum represent the importance the user puts on specific parameter. For example if the user is willing to sacrifice a little flux density in order to get a more compact motor than the weight of the flux density parameter will be lower than that of the motor size parameter.

Under User Constants we can find the weight vector w with w[‘dia’] being the wight for motor size, w[‘pow’] – weight for field coil power and w[‘flx’] – weight for flux density. The weights take values between 0 and 1 with 0 meaning ignore and 1 meaning the most important.
Objective: dont care about motor size, sacrifice a bit from flux density value for the best field coil power value
Weight vector:

    \[ w = \{ ['dia'] = 0, ['pow'] = 1, ['flx'] = 0.7 \} \]


    \[ s = w['dia']*d_m+w['pow']*P_{fc}+w['flx']*B \]

where s is the score value, d_m is the motor diameter, P_{fc} is the field coil power and B is the magnetic flux density in the gap

5. Advanced parameters

There are a number of parameters which can only be adjusted by modifying the script’s code. These parameters will influence the geometry, the total number of simulations and the end result.

  • Bottom plate thickness [ default: 20 mm ]: This parameter influences the geometry and thus the magnetic circuit. If the bottom plate saturates you should increase the value. To adjust it modify the botplate parameter under Program Constants.
  • Steel ring thickness [ default: 10 mm ]:   This parameter influences the geometry and thus the magnetic circuit. If this region saturates you should increase the value. To adjust it modify the canplate parameter under Program Constants.
  • Motor height [ default: 120 mm ]: This represents the total motor height. To adjust it modify the mheight parameter under User Variables.
  • Minimum motor diameter [ default: 120 mm ]: This is the start value that defines the motor size range to be simulated. This motor diameter will be the first to be simulated and then the diameter is incremented until it reaches the maximum value. To adjust it modify the min_mdia variable under User Constants.
  • Maximum motor diameter [ default: 180 mm ]: This is the end value that defines the motor size range to be simulated. To adjust it modify the max_mdia variable under User Constants.
  • Minimum field coil wire diameter [ default: 0.3 mm ]: For each motor geometry the scripts simulates a range of field coil wire diameters that will result in different number of turns and impedance. This parameter sets the start value of this range. Modify the min_ecwdia to adjust it.
  • Maximum field coil wire diameter [ default: 1.5 mm ]: Maximum wire diameter to be used in field coil. Modify the max_ecwdia to adjust it.
  • Field coil start current [ default: 0.1 A ]: As mentioned in previous section for each motor the script will test a range of current values through the field coil. This parameter holds the start value for the current and thus will influence the total number of simulations and the script’s running time. If you know the range of the current you will feed the field coil you can modify the variable start_i under Program Constants to reduce the simulation time.
  • Magnetic gap clearance [ default: 0.3 mm ]: This parameter represents the distance between the voice coil and the pole pieces. In order to move freely there has to be a clearance between the voice coil and the steel. It influences the magnetic gap width value. To adjust it modify gapclear variable under Program Constants.

6. Using the script with FEMM

Usage is very simple, once FEMM application is started, press the “Open Lua script” button in the left tool bar indicated in figure 2 with a red rectangle. The script will then execute. By default the prompter variable is set to 1 and this enables a dialog with the user asking for the input parameters presented in section 3 after the user inputs a project name. The FEMM project will be saved under this name by default in C:\temp folder. You can change this location by modifying the code and adjust the save_path variable.

FEMM import script

Figure 2. Importing the script in FEMM

Once the script finished running, the final simulation will be loaded and the user can further improve it or export dxf with the geometry.

7. Conclusions

At the time this article was written, the script can be greatly improved but still provides a good start in designing a loudspeaker motor. Improvements that will follow will be increased mesh size for FEM analysis around the gap for better resolution, increased number of steel options, generate bottom plate and steel ring thickness dynamically, optimization of magnetic gap geometry just to name a few.

Since the project is open source, contributions are most welcomed, please follow the GitHub link at the top to get to the project’s repository. Also reporting bugs is very appreciated so feel free to drop an email at contact[at] or report an issue on GitHub.