I'm having trouble implementing a DC series motor simulation, and I think this is due to the fact that I do not understand the motor behaviour itself.

Notice that the mechanical part of the simulation is completely functional, so I don't have to bother with this. I have a DC series motor (motor constant G, internal resistance R) which get some voltage V applied on its terminal, and a mechanical load (Torque T, angular speed w) applied on the shaft.

Here's what I currently do:

  1. Evaluate the current in the circuit: that'd be \$I = \dfrac{V - BackEMF}{R}\$
  2. Get the torque from that current: \$T = G \cdot I^2\$
  3. The mechanical simulation spits out the speed based on this torque and the load, and I compute the \$BackEMF = G \cdot I \cdot w\$
  4. Back to 1

The issue is getting to the steady state: I can't see what will prevent my motor to diverge.

The way I see it, when going to steady state, BackEmf gets close to V -> the torque gets very small...But so does the current, which means BackEmf becomes small on the next simulation step -> (V - BackEmf) grows again, the torque increases, etc.

So: what actually prevents that? Is it inherent to my step-by-step simulation? How can I circumvent this?

What I have tried so far, without success:

  • the magnetic flux is actually not linear but should saturate at some point (when?)
  • I tried to add a small friction torque so the motor isn't "perfect"

I also have the same (related, I think) instability issues when I reduce the applied voltage V.


1 Answer 1


If I understand you correctly, you have a function \$I\mapsto \omega(I) \$ (the mechanical simulation) and you are looking for \$I\$ that solves \$ I = { V - G I \omega(I) \over R } \$.

This is a steady state solution, there are no system dynamics involved, so the issues are with the technique you are using to solve the equation.

There is no reason a priori that the 'relaxation' technique will work.

One hack you could try is to update the current \$I\$ incrementally, which introduces some numerical 'damping'.

You could try a binary search to find the satisfying value.

You could implement a secant method (essentially estimate the slope by finite differences).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.