I have here an FOC controller with encoder and a 2200kv, 40A, 324W motor. I can run the motor just fine and I limited the current to 4A and the motor spins up to around 1400rmp. When I now increase the current limit, I would expect the motor to turn faster, since it allows higher voltage across the phases, but this seems not to work at all and the motor turns maybe around 1450rmp at 10A, where also the PWM on timings are changed only a small amount. I run the motor not in the speed control mode, just in the current control mode, which will spin the motor to the maximum possible rmp.

What could cause the problem here? Is it possible, that the FOC with encoder somehow goes into saturation?

Edit: Here is a plot of (Iq,Id,Vq,Vd) for this motor, with a reference quadrature current Iq=-3A, where I first let the motor run full speed, then I slowly put a load on it with my hand until stall. Is it possible, that if |Vq|<|Vd|, the motor cannot accelerate anymore? Since this is the case here, when the motor holds the speed.

Edit 2 I made now some new measurements, where also the speed is included and the phase currents. Iq_ref is set to 2A and I hold the motor and release it with my hands. I really don't know what really does limit my speed here. Id grows, when the motor reaches the current limit Iq_lim of 2A. The plotter is not the fastest, so that the phase currents could only be truly depicted at very low speeds.


  • \$\begingroup\$ 2200kV??? Are you saying you have 2,200,000V? Or did you mean 2.2kV? Even that's odd. Maybe 0.22kV, as in 220V perhaps? \$\endgroup\$
    – JRaef
    Oct 5, 2018 at 0:50
  • \$\begingroup\$ The kv value of a BLDC motor is the speed in rpm the motor needs to turn to produce 1V BEMF \$\endgroup\$ Oct 5, 2018 at 5:04
  • 1
    \$\begingroup\$ There is no speed in your graph and no units. It could be that the sequence is not correct, maybe you have swapped d and q axis, current sensors or transistor pairs. Make a simple test, set Id=3A and Iq=0A, the motor shall remain standstill. \$\endgroup\$ Oct 5, 2018 at 6:09
  • \$\begingroup\$ Iq and Id are in mA, Vd and Vq in mV. The driver works fine for different motors at lower speeds and also a speed and position controller is implemented on top of it that perfectly tracks a reference signal. I probalby will test some other motors too, especially with higher kv to see if something else limits the speed. I will upload a new graph with speed etc. later. \$\endgroup\$ Oct 5, 2018 at 6:40
  • \$\begingroup\$ Then maybe the encoder is not aligned. IMO, if the Id current has to be kept zero, then I don't see a reason why your controller has to put such large voltage Vd to acheive that. It is somehow heavy linked Id vs. speed \$\endgroup\$ Oct 5, 2018 at 7:18

2 Answers 2


You have two current controlers in your FOC Iq and Id. If you drive a PMSM motor, then Id has to be 0, and Iq is the one which controlls the torque.

It is obvious if you limit the Iq to 4A, the motor will accelerate until it will deliver a setpoint torque which is related to the 4A setpoint.

Now if there is no load presen and the motor spins at high revs, the controller can't inject more current because the back EMF is now the same as supply voltage. This BEMF is related to the motor constant.


d-axis stand for excitation, menawhile q- axis for torque. It is similar to brush DC motor with separate excitation and with permanent magnet. Iq is the armature current, Id is the field current. Since you already have a permanent magnet, then Id shall be zero.

enter image description here

Vq and Vd are also similar to brush DC, except they are also cross linked with Iq and Id respectively.

$$u_d = R_s i_d+L_s\dfrac{di_d}{dt}-\omega L_s i_q $$ $$u_q = R_s i_q+L_s \dfrac{di_q}{dt} +\omega (L_si_d+\lambda_{pm})$$

If the id=0 and it's kept constant, neglecting the resistance , then the vd has to be: $$ -\omega L_s i_q $$ That's the feedforward component that user JonRB refered at. Meanwhile the vq can be simplified to the similar formula as brush DC motor armature voltage:

$$u_q = R_s i_q+L_s \dfrac{di_q}{dt} +\omega k_e$$

  • \$\begingroup\$ Yes, but the supply voltage is 12V and the motor kv is 2200, such that 1400rmp means, the BEMF is only 0.636V. So to reach the setpoint current with the BEMF, the controller will increase the average phase voltage. As long as the 12V are not reached, I think the motor should spin up? \$\endgroup\$ Oct 4, 2018 at 13:41
  • \$\begingroup\$ Id does not have to be zero for PMSM... IF you want todo any form of phase advance you inject into the D-axis \$\endgroup\$
    – user16222
    Oct 4, 2018 at 19:01
  • \$\begingroup\$ @JonRB You do inject by means of feedforward term, the setpoint still remains 0. The purpose is to have a better control at Id=0. \$\endgroup\$ Oct 5, 2018 at 6:25
  • \$\begingroup\$ I am right with the assumption, that Vd ist actually the BEMF voltage and Vq the applied voltage in average to the motor phases, when FOC is used? Iq in the end the injected phase current and Id the field current. \$\endgroup\$ Oct 5, 2018 at 7:14
  • \$\begingroup\$ I think I found it, somehow the encoder seems to be too slow. I use an AS5601, 12bit encoder over I2C,400kHz. This leads to a sampling frequency of around 7.5kHz. Lets say a deviation of 5° of the electrical rotor angle is ok, that means with 7 pole pairs, the motor can travel 5/7=0.714°, with 7.5kHz this means 5357°/s or 892rmp. I really need a different encoder here. How can speeds be rached of 100'000rmp an more, like with the VESC? I mean the FOC speed itself should already extremly slow down the maximum allowed speed? \$\endgroup\$ Oct 7, 2018 at 8:10

You may also have to look into the speed-torque characteristics of the motor and also the rated speed of the motor. If the rated speed itself is around 1400 rpm, you may have to do field weakening to achieve higher speeds. As mentioned in the comment above, at no load, rated speed can be reached with a very low current. Then the BEMF comes very close to supply voltage and it is not possible to pump in any more current.

  • \$\begingroup\$ Well, I don't think the BEMF is even close to the supply voltage, when I adjust the supply voltage between 8V and 20V, nothing changes. \$\endgroup\$ Oct 4, 2018 at 13:57

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.