Saturday, February 9, 2019

How to model a BLDC (PMSM) motors Kv (velocity constant) and Kt (torque constant) in FEMM

In a previous post, the velocity constant (Kv) and torque constant (Kt) was estimated for a number of different 'hobbyist level' BLDC (PMSM) out-runner motors. In this post, I will be using FEMM to model one of these motors as accurately as possible. In the process, you will see how to use FEMM to model such a motor and how accurately its results compare to the real thing.

Measuring key parameters prior to modelling

Before the motor can be simulated in FEMM we first need to determine its key parameters. The motor to be simulated is an Odrive Robotics N5065 motor which has previously been characterised in this post. Note that this motor is a pre-production unit that was sent to me for testing by Oskar of Odrive Robotics and differs slightly (5mm shorter stator, different winding number) from that offered in his shop today.

The key motor parameters are:
  • The number of slots in the stator and the number of poles in the rotor
In order to make this, and the following steps, easier the motor was first disassembled. Disassembly was achieved by the removal of a single circlip from the shaft and pulling the rotor bell away from the stator. Some force is required due to the attraction of the magnets to the stator iron. 

With the rotor bell removed it was simply a matter of counting the number of slots/teeth on the stator and the number of magnets on the rotor. This motor has 12 slots and 14 poles (12n14p). The likely reason that the manufacturer chose this number of slots and poles is explored in detail here.
  • The stator lamination dimensions and tooth profile
The stator lamination dimensions and tooth profile can be difficult to measure directly. If you don't mind destroying your motor then you can remove all the windings and separate a single stator lamination (or just section the entire motor with a slow speed saw) and use a flatbed scanner to capture the dimensions of the lamination without any perspective errors. Including a ruler when scanning will allow you to set a correct scale. Then you could use a software package with edge detection (such as Inkscape, which is free) to produce a DXF file without the need for any other CAD software.

In my case, I didn't want to destroy or unwind the motor and so I instead opted to model it as best I could in F360 (free for hobby/student use) and then export the sketch as a DXF file for FEMM. By doing this in with parametric design software like F360 it also allows me to play around with motor parameters in future without the need to start from scratch.

The sketch was started with the inner and outer diameters and then a single tooth and its windings were added. This tooth was then copied using the 'circular pattern tool' to make a full stator. 

F360 sketch of the stator
While this method is far from ideal it does give a good approximation as we shall see.
  • The rotor magnet dimensions and grade
The magnets are glued to the rotor bell with epoxy and are also held at the correct separation by segments machined into the end cap and also into an aluminium retaining ring at the open end of the rotor bell.

The silver magnets are retained in the black rotor bell with the grey epoxy and the silver coloured aluminium ring in the open end
This approach gives good retention of the magnets but does make it difficult to estimate the actual thickness of these magnets. I made my best approximation by taking the outer bell diameter and the inner flat-to-flat measurement of the magnets and assuming the rotor bell thickness (the black walled region in the image above) is constant. Using this data, and the assumption that the magnets are flat and not curved the rotor was also modelled in F360.

F360 sketch of the rotor
Since the magnets are assumed to be perfectly flat and are glued to the inside of a cylinder there is a small 'air space' (actually filled with epoxy) below the magnets. When I imported this sketch as a DXF into FEMM later these small gaps were removed by FEMM. If you wish to maintain them for accuracy then you can force FEMM to recognise them by including a small line segment between the rotor bell and the magnet that crosses the thin air gap region.

 The magnet grade specified by the motor manufactures is N42. If you don't know the magnet grade of your motor then you can make a fairly safe guess by assuming N35 if its a cheaper model or N42 if its a higher end model. As there was in no material option in FEMM for N42, I went with N40 instead. In my case, FEMM suggests that using over N40 over N35 grade magnets leads to a ~7% increase in torque.

The rotor and stator sketches were exported as DXF files ready for importing into FEMM. You can find a copy of DXF files here. Note that FEMM doesn't know the difference between 'construction' geometry generated by F360 and normal sketch lines and so you may want to remove them before exporting as a DXF file.
  • The diameter of the wire used, the turn number per tooth and the number of parallel strands
Since I didn't want to unwind the motor it was difficult to determine the number of strands and turns per tooth used. Isolating a single strand and measuring it with a calliper suggested the diameter to be around 0.35 mm and so the diameter of the wire without copper insulation was assumed to be 0.34 mm.

The number of parallel strands was estimated by isolating a segment of wire running from tooth to tooth and poking it with a pen until most of the individual strands were visible. 

I count a total of 8 strands. Luckily for me, the number of turns per tooth (ten) was written right on the side of the stator stack.

However, it should be possible to estimate the number of turns with a reasonable margin of error from the winding resistance of the motor and the wire diameter if needed.
  • The method of winding (i.e. star or delta)
In my previous post, I had assumed that this motor is star wound. This turns out not to be the case. As can be seen in the image above one of the leads coming from the motor has 16 parallel strands. This suggests that the motor is delta wound, with the ends of each phase winding (8 parallel strands) grouped together with the next phase for termination to give a total of 16 strands. This was further supported by the fact that that I can't see any region in the motor where a required join would be made for the natural point of a start wound motor. It is likely that all of the motors I previously look at are delta and not star wound.

Other motor parameters include the lamination thickness, the lamination hysteresis loss, skin and proximity effect of the windings, friction of the bearings etc. can be ignored here as we are only considering the motor under static conditions.

Modelling a motor in FEMM

Getting started with FEMM is fairly straight forward if you can look past its outdated interface. Before starting the motor simulation below I would highly recommend following this quick tutorial so that you are familiar with the interface first.

When ready to model your motor, start a new magnetics problem. From the menu bar select 'problem' and check that you are using the correct units with respect to your DXF file and that have set up a planar simulation. You will also want to check that the 'depth' of your simulation matches the length of your rotor. In this case, my rotor was 30 mm long.

The next step is to import your DXF file(s) using the file -> import DXF option. This can take some time depending on the amount of geometry. If you have any 'construction' lines left over from your CAD model now is also time to remove those. Note that it is also important that the centre of your model be located at point (0,0) for torque estimation to be conducted later.

With your geometry imported its now time to assign material properties. In my case, the rotor bell was assumed to be M-22 Fe-Si steel which is inaccurate. I should have used hot rolled low carbon steel or similar. However, this is unlikely to have had a large impact on the results. The shaft was selected as hot rolled low-carbon steel. The laminations were chosen as M-22 Fe-Si steel which is a common grade used for electric motors.

Magnet placement was done using the Lua scripting language, which is natively supported by FEMM. You can find a copy of the script I used here. Simply enter the number of poles, the radius at which the magnets can be found and the angle (0 degrees being horizontal) that the first magnet can be found. The script will then place each material assignment at the correct orientation. If you wish to change the magnet grade just change the name of the block property in the script (i.e. "NdFeB 40 MGOe")  to that of the magnet you wish to use from the list in FEMM.

The windings were then assigned based on the number of turns and the number of strands. In my case, I created a new 'block property' using the property definition dialogue box. In this case, I selected plain stranded wire with a 0.34 mm diameter and 8 strands and then assigned the same properties used by the other copper conductors.

The actual order which the windings were placed was determined using this handy winding layout tool. By selecting 12 slots, 14 poles, two-layer winding (single winding per tooth as opposed to a single winding for every second tooth) the following is seen.

Using this as a template the winding phase and direction (either into or out of the page) was assigned. This was the most tedious process of creating the motor in FEMM. With all the materials properties assigned we see the following.
The regions filled by air were assigned (one for the air gap region inside the rotor bell and one for outside the motor) and the open boundary builder (circle within a circle button) was used to set the boundary conditions and default settings are fine here.

Finally, we need to set how much current is supplied to each winding. Since this motor is driven using field oriented control (FOC) we need only supply a current to one phase and a current opposite in sign, and twice as small, for the other two phases as per the figure below.

In addition, this motor is delta wound and so the current supplied to the phase will be equal to square root(3) of the line current as described here. In my previous post a phase current of 40 A produced a torque of 1.2 N.m. However, this value of 40 A is the line current (or phase current for a star wound motor) and so we need to divide that value by sqrt(3) to get the phase current that our delta wound motor saw. This gives a value of + 23.1 A for phase A, and - 11.55 A for phase B and C. These values are set in the circuit dialogue box with a series connection.

With this, the motor is now ready for simulating. The complete FEMM file used can also be found here.

Torque constant estimation

The torque constant (Kt) of an electric motor can be estimated using FEMM with only a single simulation. However, you will want to make sure that your rotor is rotated so that it will produce its maximum torque per amp. In this case, peak motor torque is given when the rotors d-axis is 90 electrical degrees (360 electrical degrees is equal to 360 mechanical degrees divided by the number of pole pairs, which in this case is 7) ahead of the q-axis. A simpler 6n8p motor schematic below for illustration purposes.

Simulating the 12n14p N5065 motor with the rotor 90 elec. degrees ahead of the d-axis looks like the following.

To determine the torque produced the rotor needs to be selected using the area selection tool (green box inside four points) by clicking on each of the magnets and the back iron as shown below.

With rotor selected we can find the torque around point 0.0 using the integrate option and 'Torque via Weighted Stress Tensor' selection from the drop-down menu as recommended in the FEMM manual.

The result is a torque of 1.37 N.m.

For reference, the real motor measured 1.2 N.m. Therefore the FEMM value is an overestimation of about 15%. Considering the number of assumptions made with this model I was actually surprised that the FEMM estimation is as close as it is.

Kv, back EMF estimation

The back EMF constant (Kv) can be estimated using only the torque constant and the motor current as described in this post. In this case, our line current of 40 A and FEMM modelled torque of 1.37 N.m gives

`K_{V} \approx \frac{8.3 \times 40 }{\tau } \approx 242`

The listed Kv of this motor was 270 Kv and so once again we are only off around 15 %.

In order to estimate the shape of the back EMF we need to do a series of simulations at different rotor angles and plot the torque output. This torque output can then be converted to Kv in the same way as shown in the equation above. In order to automate the rotor incrementing process, I used a Lua script which can be found here.  In short, it rotates group one by x degrees around point 0,0 and solves. At the completion of solving it prints the torque around point 0,0 to the console and takes a screenshot of the resulting output. Thefeore the use of this script means that you need to assign each line segment and materials property of the rotor to group one as is shown in this video. Don't forget to copy the contents of the console output into another file and the completion of your simulation or otherwise modify the script to output data to a file. To use this script, place it in the same folder as your motor's .femm script so that your file is listed in line 8 "open(mydir .. "Your file name here.FEM")". You can also set how many steps you wish to make and how many degrees of rotation you desire.

Note that solving for each position may take up to 30 seconds and so running hundreds of steps will take many hours to complete. Doing this for the D5065 motor model we see the sinusoidal torque output with rotor angle below.

This sinusoidal torque with rotor angle, and therefore back EMF as they are the same thing, agree well with the back EMF seen for this motor.

Using the excellent, and free, OBS studio in 'slide show' mode was also able to stitch all the separate solutions .bmp files that my script outputted and create this clip of the flux distribution for different rotor angles.

Cogging torque estimation

The cogging torque (torque due to the attraction of the rotor magnets to the salient teeth of the stator) was estimated using the same method as the Kv estimation. The key difference being that the armature current was set to zero and a much finer step was used. The figure below shows the raw output data in black which is quite noisy and an FFT smoothed fit of the data in red.

As discussed in the last post, the number of cogging steps per rotation is given by the least common multiple (LCM) of the number of stator slots and rotor poles. The LCM of this 12n14p motor is therefore 84. A quick count of the peaks in the smoothed data above and extrapolated out to 1 rotation (360 mechanical degrees) and a cogging frequency of 84 is confirmed. As will be discussed in more detail in a future post, the cogging torque amplitude depends strongly on magnet placement, magnet shape, stator tooth shape etc. and so the magnitude and shape of your cogging torque estimated be FEMM will only be accurate if you have modelled your motor exactly.

Modelling motors with symmetry

While it is not shown here, it is important to point out that it is often not necessary to model an entire motor to determine its properties. For motors with symmetry you may only need to model a small segment of the motor and from that, you can extrapolate the results of a full-size motor. There are also a few different tools available in FEMM that may be worth exploring.

Alternatives to FEMM

As can be seen from the results above FEMM is capable of approximating some properties of an electric motor. However, there are many alternatives that are also worth considering. If you would like to use FEMM on platforms other than windows then take a look at the xFEMM project. While xFEMM does away with the user interface it is also considerably faster (up to 80x in some instances) and is still a free open source.

If you require simulations of 3D bodies or more complicated AC loss analysis etc. then you will need to move on to an expensive commercial FEA package such as the Maxwell from Ansys or Comsol Multiphysics


Modelling an electric motor in FEMM is no easy undertaking. However, by carefully replicating all of the required components it is possible to get a reasonably accurate estimation of a motors Kt, Kv, back EMF shape and cogging torque parameters. Kt and Kv was shown to be within about 15% of that measured for a real motor and so FEMM can act as a nice starting point for verifying ideas when designing an electric motor.

Sunday, January 27, 2019

Selecting the best pole and slot combination for a BLDC (PMSM) motor with concentrated windings

The full spreadsheet used in this post is available for download. To modify the sheet just choose the 'Make a copy option' from the drop-down file menu.


Concentrated windings have a single coil per tooth and are commonly used on 'hobbyist' style BLDC (PMSM) out-runner motors.

A key advantage of concentrated windings is that they can be quickly and cheaply wound by machine as seen in the video below.

Even motors with very thick conductors can be wound by machine.

Other advantages include short end turns, which do not contribute torque to the motor and only increase the winding resistance, and space for effective air cooling. A major drawback of concentrated windings is that without careful consideration of the stator slot number and rotor pole number the performance of the motor will be poor.

This post will examine the advantages and disadvantages of different slot and pole combinations. The information is based off the paper 'Distribution, coil-span and winding factors for PM machines with concentrated windings' by S.E Skaar et al. and the book 'Design of Brushless Permanent-magnet Machines' by J. R. Hendershot and T. Miller. See the 'recommended reading' list above for more information on this book. The glossary page is also useful for reference.

The winding factor

An electric motors 'winding factor' (not to be confused with its copper fill factor) is a number between 0 and 1 which represents the fraction of the armature current which is used to produce torque.

From's glossary page the winding factor is defined as the following:
The winding factor for a specific winding expresses the ratio of flux linked by that winding compared to flux that would have been linked by a single-layer full-pitch non-skewed integer-slot winding with the same number of turns and one single slot per pole per phase. The torque of an electric motor is proportional to the fundamental winding factor.
Despite being so fundamental, the calculation of the winding factor is not often discussed in text books. I found that the paper mentioned above has the easiest to follow description, although I had to rely on the description of an unbalanced winding as the solution provided in the paper appears to not cover all scenarios.

I will not be going into detail about the calculation of the winding factor. However, you can find the spreadsheet used to calculate the values shown in this post here. This spreadsheet includes up to 108 slots and 70 poles and is easily extended further where needed.

The winding factor for a 3 phase machine with a non-skewed rotor can be seen listed in the table below where the top row is the number of poles and the left hand column is the number slots. Since this is a three phase machine the number of slots increases by three and since a magnet has two poles (a pole pair) the pole number increases by two.

It can be seen that some slot and pole combination have a winding factor of one while others are approaching zero, or even negative. However, not all of these slot and pole combinations can be used as is described below.

1. Exclude windings where q < 0.25

The slot to pole ratio with consideration for the number of phases is designated by the variable q. If q is less than 0.25 then the arc covered by a rotor pole is now less than half a stator tooth. This results in multiple north and south magnet poles interacting with each stator tooth and so the torque generated by the motor is reduced. Therefore, q values less than 0.25 are generally not considered feasible and can be eliminated. The images below were created with this winding layout tool. Note that in reality the gap between each stator tooth would be much smaller..

2. Exclude windings where q > 0.5

Alternatively, if q is greater than 0.5 then it no longer makes sense to use a concentrated winding as a single rotor pole will span over multiple teeth. Instead, a distributed windings would be used. Therefore, these combinations can also be excluded for our purposes.

3. Exclude windings where Ns = Nm

If the number of slots (Ns) is equal to the number of poles (Nm) then the motor will produce a large cogging torque and will no longer be self stating. These combination can therefore also be eliminated.

4. Removal of unbalanced windings and motors without symmetry

A motor with balanced windings will have the same number of coils for each phase per repeating segment of the motor. A motor must have balanced windings for operation. More information here

Also, it is ideal to have a motor that has a symmetry of at least 2 (i.e. the motor has two repeating sections) as this helps avoid unbalanced radial forces and noisy operation. In other words, a motor without any symmetry will produce its torque on only one side of the rotor. If a motor has a symmetry of two then its torque will be produced on opposite sides of the rotor, balancing the forces.

The slot and pole combinations that produced unbalanced windings and no symmetry can therefore be eliminated.

Based on the table above it can be seen that 12s10p and 12s14p are attractive combinations. This explains why these slot and pole combinations are so popular for 'hobbyist' out-runner electric motors.

5. Consideration of cogging torque

In addition to the winding factor, cogging torque is also an important consideration. Cogging torque creates vibration and noise during operation and acts to disturb the motor away from its desired position when used in servo applications. The cogging torque frequency is also closely correlated with the production of rotor losses both with and without current supplied to the armature.

The cogging torque frequency is given by the least common multiple (LCM) of the stator slots and the rotor poles. The figure below displays the possible slot and pole combinations with the winding factor replaced with the cogging torque frequency. 

Selecting as high a cogging frequency as possible is desirable as it reduce the amplitude of the cogging torque. With this in mind 24s22p would be an attractive option with its 264 cogging steps per rotation and 0.949 winding factor as opposed to only 84 cogging steps per rotation for 12s14p.

6. Higher order harmonics

So far we have only being considering the fundamental winding factor. However, different slot and pole combinations also effect the winding space harmonics. This topic will be covered in more detail in a future post once I have a better understanding of the topic.

7. Additional considerations

From the last two tables above its easy to conclude that a 24s22p motor is 'better' than a 12s14p motor since it has both a higher winding factor and a higher cogging frequency. However, there are other factors that also need to be considered.

7. 1 Maximum electrical frequency

The electrical frequency (current sine-wave supplied to each phase) scales linearly with the number of pole pairs (Nm/2) of a motor. Therefore, doubling the pole count of a motor will increase its core losses by a factor of four since it scales with the square of the electrical frequency. Doubling the pole count will also double the back EMF produced and so twice the required voltage will be needed to drive the motor at the same RPM. However, rewinding of the motor with a lower number of conductors per tooth can be used to offset this increase in the back EMF and will not impact the efficiency of the motor. In addition, reducing the lamination thickness will help minimise eddy current losses, which scale with the square of the lamination thickness. See this spreadsheet for more details. At the extreme, the switching frequency of the motor controller used to drive the motor may also need to be increased in order to maintain a good approximation of a sine wave. This will incurs additional dead time losses in the motor controller. 

The electrical frequency required to operate the motor at 10,000 RPM is shown below.

7. 2 Mechanical winding considerations

Trying to squeeze more slots into a small motor is not always possible. Increasing the number of slots while keeping the motor diameter the same typically means that multiple smaller conductors must be used in order to bend around the tighter radii and make use of the available space. Smaller conductors have a larger fraction of their total cross section taken up by insulation and so the copper fill factor of the motor can be reduced even if the winding factor is increased. A lower copper fill factor means a higher current density in the winding and so higher I^2R losses.

7. 3 Cooling considerations

Effective cooling is critical for a high power density electric motor. Having a large number of slots and small conductors may congest the air flow path and reduce air cooling effectiveness. This, in combination with higher core losses due to an increase in the electrical frequency, can reduce the power density of a motor.

7. 4 Tooth-tip leakage

Squeezing more slots into a motor may also require that the gaps between the teeth be reduced. Reducing the size of this gap can allow some flux to jump (or zig-zag) from one tooth to the next, reducing the effective torque produced by the motor.

7. 5 Rotor skewing

If you plan on skewing your motor in an effort to reduce its cogging torque then it is important that the required skew does not lower the winding factor too much. The reduction in the winding factor is given by the skew factor discussed here. This topic will be covered in more detail in a future post.

7. 6 Reduced rotor and stator back-iron (yoke) mass

Increasing the pole and slot count of an electric motor has the advantage of reducing the flux density in the back-iron. This is because the higher number of stator slots and rotor poles means that flux does not need to travel as far around the stator or rotor to make a closed magnetic path. For every doubling of the pole or slot number the flux density is halved and so the thickness, and therefore mass, of the back-iron can also be halved. This acts to increase the power density of the motor. 

For example, Siemens appear to have increased the gravimetric torque density (torque per unit mass) by 50% for their 260 kW light aircraft electric motor by increasing its pole and slot count from an already high 36s30p to 72s60p. Note that this assumption is based solely on the images from their promotional material.


The tables above provides guidance when selecting the number of slots and poles for a BLDC (PMSM) motor with concentrated windings. If the diameter of your motor is less than approximately 60 mm and if your maximum RPM is less than 10,000 then 10s14p or 12s14p may be a good choice. For larger diameter and/or motors that rotate more slowly a higher slot and pole count can be used, such as 24s26p with a reduced number of turns per tooth and thinner Fe-Si laminations. Higher pole count motors will have a higher electrical frequency, increasing losses, but will also have a lower mass since a reduced back-iron thickness can be used while also having a smaller cogging torque amplitude.