I wanted to model a brushless DC motor so that I can add controllers(PID ) to correct the transient state behaviors. I started to model my BLDC and I found some model. Then I used specs from MAXON motors to verify my model by supplying my model with nominal voltage and looking at the no load speed. The problem is that the no load speed I found from my state space is not the same as the one on the data sheet. It led me to believe that my state space model is wrong. But I could not find out what is wrong. I scoured the internet for answers but still could not find a usable model. I need to find out where I am wrong so that I can correct it. I will explain how I modeled the motor.


The first is the BLDC schematic.it is a 3 phase motor so we are going to have to work with wye or delta connection.i started with wye connection of stators, and assumed it is balanced. There is an inductance of \$L\$ per phase and resistance of \$r\$ per phase. The figure shows how I converted wye to delta so that I can some how convert the 3 phase scheme to a single phase one.wye to delta

Each line voltages are going to be triggered one after the other for electrical commutation. The idea is that even if this lines are commutated one after the other, each current values and voltage values should be the same except for phase changes, so I can take one line voltage circuit and work as if it was a brushed dc motor( this assumption might also be the source of error, if it is please correct me ). So the circuit for one line is: circuit for bldc

Now from this model, I got my state space model to be: states


inputs $$\begin{bmatrix}((v)\\(Tl)\end{bmatrix}$$

\$ Tl \$ is the load on the torque , since I want to verify it at no load it is zero


Are the states themselves

state space



$$C=\begin{bmatrix}(1)&(0)\\(0)&(1)\end{bmatrix}$$ $$D=0$$

The specs I used to verify the model is for maxon motor which has the following characterstics:

motor characteristics

I plugged in my \$k_{t}\$ (torque constant), my \$k_{e}\$ (speed constant ) and finally my \$bm\$ (torque speed gradient). Using matlab the output plot at steady state is about 4170 but from my data sheet it should go to 16700 rpms and my current from state space is 2.5A but my data sheet says it should go to .723A. So what seems to be the problem with the model.

  • \$\begingroup\$ In EE Stackexchange, you need to escape the '$' character: \\$x\\$ reads \$x\$. In English, the nominative personal pronoun is capitalized: 'I', not 'i'. I have edited your text. \$\endgroup\$
    – TimWescott
    Jun 3, 2019 at 13:48

1 Answer 1


First, you probably both can and want to neglect the RL circuit. Want, because with commutation the model gets complicated (or at least complicated to verify that it can be simplified in the manner you have done), can because in general the dynamics of the electronic portion of the loop is generally much faster than the electromechanical dynamics. As long as the electronic part settles more than ten times faster or more than the mechanical part, you're safe to treat the electrical problem and the electromechanical problem separately.

So I'm going to just treat the electromechanical part by itself, meaning that I'm going to ignore inductance.

The first thing you need to do is to write out the differential equation. This is your real error -- your immediate error should become apparent in the solution. I'm going to do this just using \$k_T\$ and \$R\$, because the other constants you mention are derived from those, and I know my way works. Note that this means you need to remember the units conversion \$\mathrm{\frac{N \cdot m}{A}}\$ = \$\mathrm{\frac{V \cdot s}{radian}}\$. I feel it's a small price to pay.

On to the math. Acceleration is proportional to torque, per Newtonian mechanics: $$T = J\alpha$$ Torque is generated by the motor from current: $$T_a = k_T\, i$$ (Note the total torque \$T = T_a + T_l\$ where \$T_a\$ is the armature torque and \$T_l\$ is your load torque) The motor's back-EMF is generated by rotation: $$E_a = k_T\, \omega$$ (this is why I like using \$k_T\$ throughout). Finally, armature current is the effective voltage across the armature divided by resistance: $$i = \frac{V - E_a}{R}$$

I'm going to be bad and put that all together in one step. Feel free to review for errors: $$J\alpha = T_l + k_T \frac{V - k_t \omega}{R}$$ Now rearrange, and substitute in \$\alpha = \dot \omega\$: $$\dot \omega = \frac{T_l}{J} + k_T \frac{V}{J\,R} - \frac{k_T^2}{J\, R}\omega$$

All of your desired behaviors should drop out of this, with the exception of the no-load current, which is a consequence of a fraction of \$T_l\$ that is always present -- you need to infer this from the datasheet (and pay attention to the fact that almost none of it is nice viscous damping that goes as \$B\omega\$ -- some is coloumbic friction that goes as \$\mathrm{sgn}(\omega)\$, some is windage that goes as \$\mathrm{sgn}(\omega)\omega^2\$, the rest is outright odd).


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.