Im testing a 3 phase BDLC motor. I have a MCU which takes the position sensors (3 Hall-effect based ones) state and drives the adequate transistors in a full bridge so the motor can spin. The high side transistors of the bridge are PWM modulated. So far, the motor spins, but I've noticed a couple of things that seems abnormal: If I increase the DC link voltage (is a regulable lab suppply) the motor spins faster, but the current also increases. Why isn't the increased BEMF preventing the current from ramping? The same happens when I keep the DC link voltage constant and increase the duty cycle. The motor has no mechanical load attached, but overheats when increasing speed by any of the previous methods. This indicates that not all the excess electric power is being converted to mechanical power. What could be the cause of this?

If you need any info about the motor or the driver, I will gladly post it. BLDC motor driver

I'm using an IGBT bridge. The drivers are IR2110, optoisolated from the MCU. MCU decodes sensor input and outputs which of the transistors should be on. The logic gates are connected between the MCU outputs and the opto inputs and serve 2 purposes:
Modulate the high side gate signals with the only PWM signal, and modulate the low side gate signals in such a way that the loading of the bootstrap capacitor is ensured.
Just to clarify the latter, lets suppose that Q1 and Q4 should be on. Q4 is drived on for the duration of this step. Q1 is on and Q2 is off when the PWM signal is high. Q1 is off and Q2 is on when PWM is low. This gives the bootstrap capacitor some extra juice.

About the motor specs, its a Maxon 351144. Its nominal voltage is 36 V. I've tested with as much as 20 V and less than 50 % duty cycle. Could this be a reason for the high current? Nominal speed: 60 kRPM. No load current: 240 mA. When tested with 10 V and D=35%, it reaches about 6000 RPM, but my supply shows a current of about 0.9 A in the DC link.

Update: revisiting my study of the motor, I've found a problem with the stepping sequence I was using. The following picture shows the position sensor codes and the possible stator field directions.
bdlc cut

In the previous firmware, the MCU was making these combinations:
010 -> A
011 -> B
001 -> C
101 -> D
100 -> E
110 -> F
The stator field was indeed dragging the rotor, but the angle was less than 90°. As far as I know, this is not the most efficient way to make the motor spin.
I changed the stepping sequence to:
010 -> B
011 -> C
001 -> D
101 -> E
100 -> F
110 -> A
so that the angle between the stator field and the rotor is closer to 90°.
Made a test, again DClink= 10 V, D=0.39.
Speed is about 6780 RPM and the supply reports a current of 0.39 A. Current is still high for my liking, but a far cry from the 0.9 A of before. Motor gets a tad warm, but not hot like before.

Update 2: I revised the mcu code and took a fsm like aproach. Current went down about 100 mA. This indicates that I had a problem with cross conduction indeed. Moral of the story: don't try to program a mcu as if you were configurating a fpga. You could fire a transistor before turning off the other in the same leg. However, the thing that made a more significant difference was putting some inductors in series with the motor. For some reason, motor may overheat if the current gets discontinue. As the motor winding inductance is so low, some extra inductance is needed to reduce ripple and stay in continous conduction mode. Still don't have a supply to test with nominal voltage, but at 20 V and fpwm=61 kHz the motor takes as much as 200 mA (at D=100% and ~40 kRPM) with minimal heating. Thanks all for the help! I'll try to post some scope traces whenever I get to use the lab scope.

  • \$\begingroup\$ Could be bad timing (hall sensor orientation?), incorrect commutation sequence, poorly designed motor, or motor used outside its normal operating range. If you want specific help then supply more details - eg. motor specs, actually current voltage and rpm, commutation and back-emf waveforms. \$\endgroup\$ Sep 14, 2017 at 21:17
  • \$\begingroup\$ Why IGBT for such low voltage? \$\endgroup\$ Sep 14, 2017 at 22:12
  • \$\begingroup\$ The initial design was for a bigger motor with unknown characteristics. \$\endgroup\$
    – uwii
    Sep 14, 2017 at 22:15
  • \$\begingroup\$ 10V @ 35% PWM = 3.5V effective motor voltage which should produce ~6230rpm, so the speed is about right. 0.9A at the DC supply / 35% = 2.6A at the motor (assuming no current consumed by controller). 2.6A^2*0.122 Ohms = 0.825W which should not make a 240g motor overheat. Exactly how hot is it getting? However no-load current is excessive. Perhaps slow opto-coupler response is causing shoot-through in the controller, or the commutation timing is off causing excessive phase current. \$\endgroup\$ Sep 15, 2017 at 3:24
  • 1
    \$\begingroup\$ Now measure the motor current and the DC link current and compare. P_DC=I_DCV_DC ; P_mot= I_motV_mot. Calculate the efficiency. So far you have P_DC=10V*0.4A=4W, the motor has probably P_mot=4V*0.24=1W, you have 25% efficiency or less. Still, I do think you have cross conduction issue. \$\endgroup\$ Sep 16, 2017 at 20:01

1 Answer 1


The BEMF voltage is related to the rotating speed of the motor, not the supplied voltage. So, it is normal that motor speeds up when you increase the voltage (or duty cycle ratio): \$V_{Supply}=V_{BEMF} + I\cdot R\$, \$V_{BEMF}=K\cdot \Omega\$.

If you change the duty cycle is like changing V_supply.

Possible causes:

  • the rotor flux is not properly oriented, by means of hall comutation scheme
  • MOSFETs have long rise/fall switch times and they overheat, poor MOSFET gate driving mechanism

Add a schematics and some scope trace.


The transistors could be cross conducting, because you don't have a dead time circuit generator in between HIN_x and LIN_x. The optocouplers have an additional propagation delay, so it is plausible that you have a cross conduction of HI and LO IGBT while switching.

What you can do:

  • Introduce a new circuit with comparators and logic gates with RC delay in order to make a dead time generator, between optocouplers and gate drive IC.
  • Eliminate the optocouplers and use a MCU with a time process unit that already has dead time generator and all logics for hall sensors. Known to me, these are series of STM32 for motor control MCU.
  • Eliminate the IR2110 gate driver and optocoupler, use an isolated gate driver, all in one device, with a built-in dead time generator. link
  • Expand your logic circuit and add dead time.


  • Does your circuit have the recirculation path? The depicted IGBTs don't have a body diode built in (intrinsic diode in the MOSFET)
  • Are you sure that Roff is 100 ohm and diode 1N1418 is adequate? The 100 ohm will not significantly reduce the turn off resistance, with additional diode it can just add some more capacitance, so you better eliminate both.
  • Why not replacing IGBT with MOSFET, because the IGBT is suitable for HV.
  • \$\begingroup\$ The IGBTs used have a body diode. The symbol I used was the first I got in the soft. Indeed, equivalent Roff is not much lower than 10 Ohm, I will change that resistor later. The design with IGBT was to acomodate for a bigger motor. \$\endgroup\$
    – uwii
    Sep 15, 2017 at 13:27

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.