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:
- Evaluate the current in the circuit: that'd be \$I = \dfrac{V – BackEMF}{R}\$
- Get the torque from that current: \$T = G \cdot I^2\$
- The mechanical simulation spits out the speed based on this torque and the load, and I compute the \$BackEMF = G \cdot I \cdot w\$
- 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.
Best Answer
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).