I am trying to drive BLDC via a custom ESC. I have read that we can control the motor in 2 ways - current control and voltage control. I am using PWM to get them working. Now, I understand that we need to measure BEMF (as it is sensor less). I have been doing this like a stepper motor method. But this does not give good thrust.

enter image description here

I am attaching an image which has 2 waveforms. The yellow wave is of interest to us. If we notice that in the bottom there is a small rise from the bottom (floor). This is the '0' crossing. This is open loop and not closed loop.

I will look at '0' crossing to go into closed loop. Many docs also say that looking at Vcc/2 as a method to detect '0' crossing. In my waveform I am unable to measure Vcc/2 as its always > Vcc/2.

Now, most of the docs state that motor can be controlled via voltage or current. I understand:

  1. Voltage (PWM duty cycle) controls speed of the motor.
  2. Current - varying current varies thrust. How is this done? How can I vary current?
  3. Frequency - is frequency a factor in this. How will frequency change affect thrust/speed(rpm)?
  • 1
    \$\begingroup\$ I had recieved some responses to this answer. Now they r not visible. What happened. \$\endgroup\$
    – Board-Man
    May 18, 2014 at 19:17
  • 1
    \$\begingroup\$ Unfortunately, we have a troll on this board. The deleted posts which you are inquiring about were made by that troll. \$\endgroup\$ May 18, 2014 at 19:52

1 Answer 1


I think you misunderstand what "controlling by voltage or current" means.

The motor, as a matter of fact, is always controlled by voltage, a bit like a car is controlled by fuel injection. In the case of a BLDC, we usually talk of a modulated voltage generated by a voltage source (let's say 24V).

And although it is true that voltage is associated to speed, voltage induces current, and current relates to torque. What you usually need to control at your lowest level is current (or almost directly torque).

Controlling current "directly" may mean to switch the voltage measuring current and comparing it to a setpoint. Have a look at keywords such as DTC (direct torque control). This method is harder to master, and more complex to understand and implement, but it usually results in better performance.

A simpler, more intuitive way of controlling the motor is by making use of a standard PI controller, employing the Direct-quadrature transformations to transform 3-phases (I assume) currents into quasi-linear currents Iq and Id, where controlling Iq has a direct influence on torque, while Id should be kept at 0 as it's associated to energy losses.

Back-emf should be compensated for a good torque control.

Frequency goes up with velocity... Careful, because with it, also disturbances get more nasty.


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