DC motor control - variable voltage, or PWM?


What's the best way to control a 12 volt DC motor?

As far as I can tell there are two normal ways to control a DC motor.. 1) Vary the DC voltage - i.e. run it at 8 volts for slow speed, 10 volts for medium speed, or 12 volts for full speed. 2) Use PWM (aka a 'chopper') effectively this involves taking your 12 volt DC voltage and turning it on and off very quickly to vary the speed of the motor.

Which is best and why? Most arduino based designs seem to use PWM but to my thinking it seems more complicated than simple voltage control. Or maybe there's something I'm missing (there usually is!)

my vote goes to pwm due to its simplicity. it can be done with 1 line of code, 2 resistors, and a mosfet transistor. It's also very efficient. voltage control works, but if done with a linear supply you will have tons of losses, and if you use a switching power supply, well they basically run on the same principles as pwm so you end up with a bunch of excess components.

I can think of a few special cases where one might choose voltage control over pwm, but what it really comes down to is how big is your 12 volt motor (current draw), and what are you driving with it? is precise speed control necessary? do you need current limiting?

feel free to ask for any clarification if I'm being vague, I haven't slept in a while so this makes perfect sense to me but it could be gibberish to any other person.

Ask a handy and can be used offline.

Normally PWM - efficient, easy. The only downside is more RFI from the switching, which occasionally is important, but not for general use.

My only caution about using PWM is based on a problem that I had with an old project I did many years ago, I found that the frequency of the PWM signal seemed to match the resonant frequency of the motor I was using, so when the motor was on 100% power (effectively DC voltage) it worked fine, but when it was working between 75% and 50% power the constant on/off switching (which is effectively what PWN is) caused the motor to rattle at the frequency of the PWM signal. That particular problem was fixed by abandoning the PWM control, and using what was effectively a bloody big rheostat! (a control unit 'borrowed' from an electric milk float!)

It is normal to select an appropriate frequency for the motor, not abandon PWM!

Try 4kHz, 8kHz, 16kHz