The best PWM frequency is a combination of MCU, driver, and motor.
The PWM frequency needs to be high enough that the motor commutates smoothly, which I suppose is a parameter of your motor. Increasing the PWM frequency also increases the perceived resolution of the sine wave. Higher PWM speeds also increase switching losses. However, the PWM frequency needs to be slow enough that your half bridge has time to turn on and off, otherwise no current will flow to the motor. Also, having the speed too low will produce a lot of heat due to DC current flow. The driver chip should have some information on this (f_gate):
In this case they recommend 200kHz, but also you need to consider if your microcontroller can produce PWM signals at this speed. What MCU are you using?
If 20kHz works for you then you should keep it, there is not a lot to be gained I think from this. If anything, you might be able to hear 20kHz and a bump to 25 or 30 may reduce the noise produced. (audible range 20Hz - 20kHz)
The 200kHz is a maximum rating. In my experience this would be quite high
Usually, a frequency above 22kHz is chosen if possible, to reduce audible noise. Frequencies lower than this cause commutation noise that can be heard.
Most MCUs can generate fairly high frequency PWM, but higher PWM frequencies almost always mean lower PWM resolution, so it’s a trade-off.
But the frequencies you can use depend mainly on the driver stage, I.e. your FETs. The faster the frequency, the more often you switch, and the higher the switching losses. Also, the FETs have times needed for switching on and off, and if the PWM frequency is too high and/or the FETs are too slow, then they can’t fully turn on during low/high duty cycles…
Hi @runger i would like to know what is the effect of the speed of switching to the waveform of BLDC phase? i know that the faster i switch the mosfet, the BLDC spinning faster too. but i still not sure yet what happen to the waveform signal of BLDC phase? should it be wider or narrower? for example if the BLDC are spinning at 1000 rpm, is the waveform of the BLDC phase are the gonna be the same with 100 rpm?
Hi, this question is perhaps more complicated than you might expect.
The commutation waveform depends on the type of commutation. Let’s assume Sine-commutation, which is the default in SimpleFOC.
In this case the commutation waveform is 3 sine waves, offset by 120° from each other.
As you increase the speed, you increase the frequency of these sine-waves.
There are other kinds of commutation for BLDCs, like trapezoidal commutation, space-vector commutation or 6-step commutation. The other types of commutation generally have more “square” or trapezoidal waveforms rather than sine-waves. But they also have the properties of the three phases being offset from each other by some amount (typically 120°) and of increasing in frequency when you increase the speed.
Because you mentioned switching: the switching is a slightly different thing. The switching of the MOSFETs is done using a PWM (square wave) waveform, and at a much higher frequency. You can think of this as being like an analog-out function: the MOSFETs are switched very quickly with a square-wave, and the duty-cycle (on-time vs off-time) of this square-wave is variable (this is called PWM - pulse width modulation).
This PWM signal is too fast for the motor, which electrically is like a kind of inductor. So the motor “integrates” this fast PWM signal and effectively sees an analog voltage.
If the drive voltage is 10V, and the PWM duty cycle is 50%, the motor effectively sees 5V on that phase.
So you can imagine by changing the duty-cycle with a sinusoidal pattern, the phase voltage seen by the motor will follow that same sine wave pattern.
great explanation, i understand it now. based on your explanation above, if the PWM frequencies are high that mean lower PWM resolution, so is it possible if i get a look alike (near same) BLDC phase waveform between 1000rpm and 500rpm?
because i experienced it now. i set the frequency PWM of my MCU (Arduino Due) at 25kHz, and when i spin it (by giving PWM signal to the mosfet) by 1000rpm and 500 rpm, the output of the phase are look alike.
at first i assumed that it look alike because of lower PWM Resolution that makes the waveform of the phase are look alike.
but i also think about the BLDC motor that i use, i’m using JKM JK42BLS02-X035ED, you can get the specification from this link :
and the thing that i concern is that the motor that i use can produce maximum of 60W (4000 rpm or around 40 rad/s * 0.143N.m)
just want to make sure, does the motor give effect to the waveform that look alike at different speed (1000 rpm and 500 rpm)? or it just because the lower PWM Resolution (because i set the PWM Frequency to 25kHz)