BLDC motor drive with PWM

Hi all,
I built a drive scheme for the given trapezoidal BLDC-motor-model in Simulink with PWM to control speed about the input duty cycle. I set all given parameters from the data sheet of my motor in the Simulink model. Important information is that the motor runs with 24V to the maximum speed of 32400rpm. In case the duty cycle is 1, PWM should give me "24V" to control the speed of the motor to 32400rpm. This case is no problem and works fine.
Now my problem is, that when I set the input duty cycle to any other value, for example to 0.5, I should get a motor speed of 0.5*32400rpm = 16200rpm. Unfortunately this does not work and I am not sure why. When I am using a controlled voltage source instead of PWM my model also works fine.
I attached my model so that it might be easier to understand, where my problem is. I am using R2021b version.
Hope that someone can help me!
Thanks in advance!

3 Comments

hello
I could not open your model because I have R2020b
but maybe there is just this point to clarify : the speed is not proportionnal to PWM !
  • a PWM = 1 means the average voltage is equal to the DC supply = +24V , so motor spins in one direction at the max possible speed
  • a PWM = 0 means the average voltage is equal to the reversed DC supply = -24V , so motor spins in the other direction at the max possible speed
  • a PWM = 0.5 means the average voltage is 0 , so motor is at stop
Hi,
first thanks for your answer to my question.
However I am not sure if the speed is not proportional to the PWM for BLDC motors. I always thought this only takes effect for simple DC motors. But I am using a trapezoidal BLDC motor.
I thought about that my model gives me the maximum speed of 32400 rpm when I set the DC voltage to 24 V without using PWM. And in the case of setting the DC voltage to 12 V without using PWM (which must be the same as setting the duty cycle to 0.5 when DC voltage is 24 V) my model gives me half of the maximum speed, which means that these two parameters should be propotional. I thought about that the generation of the PWM signal could be the problem, but I could not find it out up to now.
Maybe I have a mistake in my logic while thinking about that topic or there is a mistake in my model which does not concern the PWM. I will send some pictures of my model. Maybe this could help to solve the problem.
Thanks in advance again!
well
thewording "without PWM" is a bit misleading and can let on'es think that the BLDC motor is driven directly from the DC bus (24 or 12V dc as you mention)
but there is no BLDC motor that runs without 6 MOSFETS drive so there is always a PWM signal to be fed to them , either fixed (if your duty cycle is fixed ) or variable (if it's part of a control loop)
so the fact that you have half the max RPM at 12V with a duty cycle = 1 vs 24V (with also a duty cycle = 1) is no surprise as you have halved the average voltage and current in the motor
your equation between RPM and dutycycle is RPM is proportionnal to Vdc and (dutycycle-0.5)
  • max RPM forward direction if dutycycle = 1
  • motor stopped if dutycycle = 0.5
  • max RPM backward direction if dutycycle = 0
the coefficient depends of motor constants (RPM / volt) and load

Answers (0)

This question is closed.

Asked:

on 24 Oct 2022

Closed:

on 8 Jul 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!