I am controlling a BLDC motor (24V, 125W) with this IFX007T board controlled by an STM32L412 MCU. The PWM frequency should be around 40kHz (I have 80MHz clock, counter period of 512-1 and prescaler of 4-1). I am using the hall sensors and a commutation table. I use FreeRTOS and the BLDC task has realtime priority. On each phase I have an LC filter with 40uH and 680uF. I have removed the two 220nF (from phase to VCC and GND) capacitors on the board. The motor is turning (more or less quietly) but it is not as strong as I would expect it to be (I am using it to run a rotary vane pump, which it can't manage to do right now). The picture on the oscilloscope looks like this: bldc with filter If I remove the filter, I see this: bldc without filter

however, from what I understand, it should actually look something like this (source): expected oscilloscope image

Does anyone have an Idea why I don't see nice slopes between the steps? And why do I have a lot of peaks despite the filter?

UPDATE 1: This is what the PWM looks like: pwm in the "transition part" the PWM is set to half of the maximum duty cycle, but the phases are actually left open since the enable pin is pulled low on the IFX007T.

UPDATE 2: These are the hall sensors and one of the phases: hall sensors and one phase

UPDATE 3: SOLUTION the commutation was wrong, once I adapted it using this table, the motor spins quietly and the waveform looks as expected!

  • \$\begingroup\$ Interesting. How does your PWM outputs from your controller look? \$\endgroup\$
    – winny
    Commented Jul 21, 2021 at 16:26
  • \$\begingroup\$ @winny I added the PWM screenshot to the post. \$\endgroup\$
    – lazerlini
    Commented Jul 21, 2021 at 16:49
  • \$\begingroup\$ how much current is it pulling? \$\endgroup\$
    – Aaron
    Commented Jul 21, 2021 at 17:29
  • \$\begingroup\$ @Aaron for debugging I am running it at ~20% duty cycle. With no load attached it pulls around 1A, when I attach the pump, it won't start spinning and the current will go up to 7A. Even at 100% duty cycle it won't spin and the current will exceed the maximum rated current of the motor (also, my multimeter only goes up to 10A). \$\endgroup\$
    – lazerlini
    Commented Jul 21, 2021 at 17:39
  • 1
    \$\begingroup\$ The drive waveform should look symmetrical (like your ”good” example of a BLDC motor without LC filter), yet the voltage in your motor is much lower during ramp-up than during ramp-down. I suspect that your drive waveform is actually leading the rotor by roughly 60 electrical degrees, which would explain why the motor runs like crap. \$\endgroup\$
    – jms
    Commented Jul 22, 2021 at 14:25

1 Answer 1


The voltage should ramp up while the phase is floating due to back-EMF from the motor, then stay at a constant high value while that phase is driven high, then ramp down due to back-EMF while the phase is floating again, and finally stay low while the phase is driven low. Your ”good” example exhibits this behavior, your actual measurement doesn't:

enter image description here

As you can see, the waveform isn't symmetrical - the voltage is much lower during the floaty bit prior to a phase being driven high than the one after.

I suspect that your drive waveform is actually leading the rotor by roughly 60 electrical degrees, which would explain why the motor runs like crap


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.