Pololu Robotics & Electronics
My account Comments or questions? About Pololu Contact Ordering information Distributors

Pololu Forum

Am I missing something obvious regarding low duty cycles with this setup?

I am using a VNH5019 driver (https://www.pololu.com/product/2507) powered at 12V and a 25D 12V HP motor (https://www.pololu.com/product/4846). The whole thing is controlled by an Arduino Due.

Mostly, it is working really well, except one scenario. If I set the duty cycle to less than 25%, the motor stops completely. I get similar results when using the Arduino default PWM frequency, and when running it at 20kHz as I can with the Due (I can go slightly lower at 20kHz and still get movement).

I wonder if this is expected in this setup? I was really hoping to have a dynamic range in speed of more than a factor of 4. The motor is under a very low load (Just friction bearings) and checking the input voltage I am not seeing a drop in voltage that would indicate that the driver and motor are trying to draw more current than can be delivered, something I assume would happen if it was a friction problem.


I would expect that motor to keep running at lower duty cycles than that. Does the duty cycle it stops at change if you slow it down gradually from a higher speed versus starting with the motor stopped? How much current does the setup draw when running at full duty cycle? If you have an oscilloscope, could you look at the PWM pin to make sure the duty cycle is really what you expect? Could you also post your code and pictures of your setup that show how everything is connected?


Thanks. Then I know that this is not expected. I weill do a full debug next time I pass by the electronics workshop where I have a full range of equipment.

So now I did a proper test and I am getting a dynamic range of about 12 which seems much more reasonable. Not sure what I did wrong, but now it seems to work. Thanks!

So some follow-up on this one.

It definatley looks like an issue with static friction, in that if I give the motors a bit of a kick, then I can lower the speed and they keep running at much lower power. I wrote a PI regulator that does this automatically and it works-ish.

The issue is that at this state where the motor moves slower than its start speed, it is rather moody. In order to get the speed down to the requested speed, the driver lets the motor coast. But then when the speed becomes to low, the motor needs to be given a rather strong kick to get moving again which all-in-all gives a rather less-than-smooth experience.

Now, at this point, I am powering the motors with a rather weak 12V power supply, and it could be that this power supply isn’t keeping up (I have tried to measure this, and I am not seeing anything, but I don’t feel confident ruling it out just yet).

Now, my plan is to go to battery power, something like an RC car battery. These can deliver massive currents, but the challenge then is to find one that is 12V. So I wonder how sensitive these motors are to getting exactly 12V? If I occasionally (Peaks of max 100ms with a duty cycle of 10%) power the motors at 15V, is that something that would shorten their lifespan measurably?


Those 25D motors can accept a range to input voltages, though as you mentioned, exposing the motor to voltages above 12V might reduce its lifetime. I expect 15V to be pretty safe especially for short periods, but you can also reduce stress by limiting the maximum PWM duty cycle so the motor only sees an effective 12V (about 80% duty cycle).

Are you just using the VNH5019 shield to control the motor open loop or do you have an encoder or some other speed control involved?


Yes, I use that driver and on top of that I use a PI controller with the built-in encoder. So I have every opportunity to measure how long I go over 12 v and also make sure I mostly stay within the speed and current limits.

So I think I will proceed that way.