Electronic – Small brushed DC motor speed falls off above a certain PWM frequency

dc motormotor controllerpwm

I'm using the kind of small brushed DC motor shown below. My MCU controls the motor using PWM via a DRV8833 motor driver, also shown below.

If I set the PWM frequency very low, e.g. 10 Hz, the motor clearly judders on and off. So for a smooth motion, it would seem obvious to set the frequency as high as possible.

However, above 100 Hz something odd starts to happen: the speed of rotation actually starts to drop off. I'm confused – I can vary the duty and frequency values independently and it was my understanding the duty value affects the speed while the frequency should just affect the "smoothness" (i.e. the judder) that I see at low frequencies.

What's going on here? I tried Googling and the only thing I found was a DesignSpark article where they say:

One explanation may be that the very narrow pulses of a high-frequency signal are just not long enough to ‘kick’ the rotor into action.

This doesn't sound terribly convincing. Is this really the explanation for the behavior that I'm seeing?

When experimenting to find the optimum frequency, I kept the duty value at about 25%. I'm using a 3.3V ESP32 connected via two PWM pins to the A_IN1 and A_IN2 pins of the DRV8833 chip (i.e. pins 15 and 16). I'm using a library where the PWM duty value is a 10-bit value that can vary between 0 and 1023 – I keep it fixed at 255 for A_IN1 and 0 for A_IN2.

At 10 Hz and a duty cycle of 25%, I believe that the judder that I see is the result of the frequency being low enough that the starting and stopping of the motor is visible to the human eye (with the low duty cycle meaning that the motor does not have enough momentum to carry it through the off phases).

motor driver

Best Answer

Thanks for teaching me an English word new to me.

Judder A spasmodic shaking. (like Jitter & Shudder combined)

No-load RPM is voltage-controlled (i.e. avg. Vdc = %PWM) and Torque is current-controlled and visa-versa for accleration or braking.

The coil commutation converts the DC into AC to provide continuous torque in one direction but depends on magnet positions relative to the coils.

The magnetic commutation frequency and the PWM commutation frequency act with a nonlinear mixing effect on Torque. The effect is a modulation of rotational torque. Each frequency has harmonics from the discontinuity and the result is Intermodulation or Aliasing Effect.

I would expect maximum Judder Effects when the PWM and frequency approach synchronous cutoff/on of alternate phases with each PWM cycle and then torque smoothing yet weakening above this PWM rate.

There will be some flying effect with increasing speed or rotational inertia and smoothing effect with increasing PWM, but it also increases the impedance of the motor from PWM with X(f)= 2πfL, yet L is also changing with rotor angle from magnet strength.

Thus when PWM f gets too high, it becomes current-limited for torque and when the alias frequencies of harmonics get too low, the torque gets more jerky as it changes speed and thus spastically "judders" more. I noticed this before as well on BLDC fan motors and opted to go with linear Vdc controlled cooling due to the erratic noise.