Multiple DC motor control (speed) using an Arduino Uno R3

Hello,

I am looking for some advice on how best to control up to six 12VDC motors using an Arduino Uno R3. The motors accept an input voltage of +/- 0 to 12VDC, they vary in current draw from 0.5mA to about 2A (max), each motor is independently powered by a separate DC power supply.

What I am looking to do is connect each motor to an independent DC variable power supply that is set to 12VDC, then use the Arduino to control the power on/off to the motor as well as the speed of the motor.

I bought a relay board that I can use to power on/off the 12VDC power supply to the motor with the Arduino Uno R3, but now I am looking to control the speed of the motors by limiting the supply voltage to the motor. I think that a transistor is the best approach?

I took a look at using a digital potentiometer, but these have very low current ratings and won't support the motor. The available Motor Shields for the Arduino R3 work, but they are only capable of driving two motors per Arduino, and I think they use PWM. I am looking for a solution that doesn't add a PWM signal onto the output voltage sent to the DC motor.

I think I want to do something like this, but instead of taking the input from a pot, to programmatically control the transistor.

http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoads

This I think will only allow control in one direction, so to provide a reverse function, I would need to use a H-bridge?

http://itp.nyu.edu/physcomp/Labs/DCMotorControl

Is this the best approach or is there a better way to do this?

Thanks

I don't understand why you are excluding PWM as it is the most convenient and efficient (electrically) way to control motor speed.

...R

maybe condition the signal with an op amp to provide the needed current

For single direction you might PWM a logic level MOSFET. For speed and bidirectional control, an H-bridge is commonly used.

Robin2: I don't understand why you are excluding PWM as it is the most convenient and efficient (electrically) way to control motor speed.

...R

Some of the motors are quite old (circa 1950s / 1960s), research on these particular motors suggests that using PWM can at a minimum reduce the lifetime of these motors and cause heat-related damage at slow speeds. So while it maybe convenient and efficient, I'm willing to go a bit out of the way to come up with a pure DC solution.

melonsdg01: maybe condition the signal with an op amp to provide the needed current

So something like the digital pot solution could use an op amp on the output voltage to increase the current to the needed level?

If you don't want to use PWM and you are going to use a transistor as a "variable resistance" you will need one that can safely dissipate a lot of energy. I'm not sure how you would control the base current with an Arduino - perhaps through a digital potentiometer?

To the best of my knowledge old electric motors work in the same way as new electric motors. If you find the motor is overheating with PWM you could probably solve that problem by changing the PWM frequency up or down to better suit the inductance of the motor.

PWM is so much simpler that I would do some testing before rejecting the technique. And electric motors are fairly cheap so I would seriously think about buying new motors rather than face the complexity of non PWM speed control.

...R