I am a student who is still very new to developing sensorless FOC software. What I'm trying to do now is to open-loop control a BLDC motor using SPWM (to get theBEMF values ​​required for the close loop.)

I installed the necessary hardware for this and wrote the software for an STM32F407. The code produces a 10kHz carrier (PWM frequency) and 28Hz reference frequency (240RPM*14pole/120) with 3 phases and 120 degree phase difference between them. I used 3 channels and connected the main pwm channel modulated to the Hin part of the IR2110 and the CHxN to the Lin part (I applied this for 3 separate IR2110s.) On the oscilloscope, I saw the 10kHz carrier I wanted and the 120 degree sines with 28Hz reference.

The motor needs to be rotated by hand at the beginning. Apart from that, the motor continues to rotate at the speed I want. Another problem is that my motor draws currents like 4 amperes and this is a bit too much for me (while rotating.) The motor I have is a 12V BLDC drone motor. If you want, I can share the code I wrote and the hardware I prepared with you.

  • 1
    \$\begingroup\$ Why SHOUT at us in your title? Did you look at other questions and the format? \$\endgroup\$
    – Solar Mike
    Mar 16, 2023 at 6:54
  • \$\begingroup\$ Sorry, that wasn't my intention. I'm new to the forum, I fixed the title. \$\endgroup\$ Mar 16, 2023 at 7:06
  • \$\begingroup\$ 4 A - a bit too much did you scope the current in one of the half bridges? \$\endgroup\$
    – greybeard
    Mar 16, 2023 at 7:14
  • \$\begingroup\$ I couldn't measure the current directly but my power supply was drawing 4A but I'm not sure that this is the current in the motor phases. Then my breadboard melted from the heat and I had to terminate the application. \$\endgroup\$ Mar 16, 2023 at 7:18

1 Answer 1


If I understand you correctly, you are running the motor at 28 Hz, which should produce 240 RPM. The motor will turn at this speed when this frequency is applied if you start it by hand.

First of all, FOC motor controllers must have a start-up algorithm. Your motor cannot instantly achieve 240 RPM from a standing start; accelerating the motor up to running speed requires torque. So you must start it by hand if you are applying a fixed frequency.

The speed of the motor in your design is fixed at 240 Hz; you have correctly calculated the speed-to-frequency using the number of pole pairs. Since the Back EMF is dependent on the speed only, the back EMF is fixed during this experiment. As you increase the duty cycle, the amplitude will exceed the back EMF, and the motor will draw high current.

In FOC, a controller uses the PWM for two functions, to generate sinusoidal current waveforms and to provide the amplitude for speed control. To determine your back EMF, you need to run the motor unloaded (remove propeller if possible) and run at the lowest amplitude you can. In a theoretically perfect motor, the back EMF would equal the drive voltage and the current would be zero when the motor was idling. In real life, some current is required to provide torque to overcome friction, and the back EMF must be exceeded by the drive voltage to account for the voltage drop in the windings from this current.

If you can spin the motor externally, you could measure the back EMF directly since there would be no current in the windings. If you are trying to measure using your setup, get the unloaded motor spinning at the lowest duty cycle you can, then decrease the duty cycle until you stall. This will get you about as close as you can.


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.