Let's Make Robots!

How to power different voltage motors from same power source?

I am taking the "There are no stupid questions" comment to heart here.

I am hoping to power DC motors and servo motors from the same power source. The problem is, the servos want 6V and my DC motors are rated for 1.5-3V. A nice simple solution like a potential divider won't work, since each motor has a non-constant resistance, and a voltage regulator would be hideously inefficient. Adding a separate battery pack seems a silly idea, especially given the Arduino will have one of its own as well.

This sounds like an incredibly common problem to me, but I've looked all over the place and not even found anyone asking the same question, let alone finding answers. It's quite possible that something I've theoretically learnt just hasn't clicked yet.

Could anyone give me any guidance on what I should do, or link me to some kind of article/guide on such a thing? I'm sure this problem exists all over the place, probably even on these very forums, but clearly I don't even know what search terms to use.

Let me know if more information is needed for this to make sense. It should be fairly obvious I'm quite the novice. Thanks in advance for any help - I'm at my wits' end trying to puzzle this one out!

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

The PWM method works brilliantly. In retrospect I should have thought of it, in that I had all the facts, I just really couldn't put them together. 

Initially I was concerned, as the drive was ridiculously weak and would cut out at any impediment despite not reaching stall by a long way. After a bit of experimenting I realised that cutting it to 25% would be taking it to [the equivalent of] 1.5V, the motor's lowest operating volatge, and that's assuming perfect 6V battery supply and no voltage drop through the H-bridge. Bumping it to ~33% gave it enough power to run away, and do a small amount of climbing. I'll be spending some time playing around with raising that - perhaps 50% won't be harmful, as long as I watch it carefully and don't let it stall. That'd be nice, seeing as naturally it's rather more efficient at a full rated voltage, and can climb rather well.

I noticed I only got a voltage across the motor of 0.8-0.9V, which was far less than expected, and a measured stall current of 0.3A. This is something for me to experiment with and read up on though - my initial problem is now solved.

@OddBot: I agree. It seemed inefficient but a reasonable compromise to me at first. When I got home I actually worked out what the wasted power equated to in terms of temperature rises using the heatsink that was recommended. My worst-case scenario of 14W wastage didn't sound that bad, since I didn't have a feel for whether that was high or low. An ~84°C rise with a heatsink sounds appalling. Definitely back to the shop with them; I never even got them near a circuit.

Thank you all for your help - I don't think I'd have managed to start at all if there wasn't a place to ask noobish questions!

Yes the PWM thing does not always give you the results you expect. Your multi-meter may not be giving you accurate readings since the PWM is neither the DC or AC that the multimeter is designed to measure.

The 25% value I gave you was a theoretical limit. It does not take into account things such as voltage drop in your "H" bridge or frequency of your PWM. As your frequency gets higher, the inductive reactance of the motor windings increases. This increases the motors impedance so that more voltage is needed to get the expected torque.

In the end you just need to use good old trial and error.

Unless your 2.5V regulator is a DC-DC converter then you should ask the shop for a refund. A linear regulator dropping 6V down to 2.5V is going to generate more heat than power. If your 3V motors draw 1A then they will use 2.5W of power but the regulator will need to dissapate 3.5W of heat. Unless your heatsink is HUGE then your regulator will fry the first time your motors stall.

@kariloy: I saw that page, but sort of dismissed it given it went no smaller than 5V. For some reason I had assumed that voltage regulators are just generally a bad idea, and on that assumption there wouldn't be common smaller ones, since the larger the step down the less efficient they are. A search of Maplin's website has since convinced me otherwise, and I feel a quite the fool for discounting them so quickly.

I have bought myself a 2.5V regulator at the recommendation of shop staff (I wasn't actually expecting Maplin staff to know much - I stand corrected), along with a larger heat sink than I expected.

When I get back to the robot (such as it is), I will try both this and OddBot's PWM. I would far prefer the PWM, now that I've actually stopped to think properly. Sorry OddBot - forehead-slapping was involved when I re-read afterwards.

Thanks to everyone for suggestions. Although inevitably only one will turn out to be the 'right' choice for this situation, it's been very helpful to get several options. They've caused me to read around a bit more and gain a little more understanding, which is never a bad thing. I can't wait to get back to it now. Each part of it thus far has been tested in isolation, now it's just a case of combining it all, with this being the last link.

One thing to remember is that if you stack the two approaches that both have different intents usually.  Once you have a regulated voltage on a motor, the PWM (through an H-bridge) is going to be primarily for speed control, not voltage regulation.  Russel's calculations for duty cycles aren't as useful if you are taking your working voltage down to 2.5v, if I was reading his intent correctly.

Well despite you claiming not wanting to use Vregs, this: http://letsmakerobots.com/node/3880 is still my go-to source when I need to handle voltage regulation. That said, I still new at this stuff :-)

@OddBot: These motors have a stall current of 2A, which I thought was a bad idea to attempt to draw through the Arduino pins. From what I understand, the Arduino has a max load of around 40mA, which is far below most motor loads. Unless you are suggesting I use a PWM signal as the control to a transistor?

@Maxhirez: I have a factory Arduino Uno. I've used the board's 5V supply when controlling one servo, but since the Arduino site seems to suggest that 2 is the maximum number able to be powered in this way, I thought I should start with them on a separate supply - I'm only intending to use 2, but I don't know how sensitive servos are to load, and am wary of approaching any stated maxima. Being rather new to this, I am worried about loading too much onto it and frying it. Hence the careful thinking (perhaps overthinking) before actually plugging things together. I haven't got a good feel for how fragile things are.

Quite aside from concerns about the current load on the board, I have read several times that sharing a power supply between motors and an Arduino can cause problems through power line noise. I thought I'd eliminate that before it even arose to save myself later.

Looks like I have a couple of things I can try out when I get home. I think I may be a little over-cautious here. Sorry for any confusion I may have caused, and thanks for the guidance.

I did not say to power your motor directly from your MCU, I said to use PWM to limit the maximum power to the motors.
Of course you have to use a "H" bridge to drive your motors. You use PWM to control the "H" bridge.


A case of replying when my mind was elsewhere. Seemed pretty clear-cut in retrospect!

The simplest solution is to limit power to the low voltage motors in your software. Use PWM to limit the power. Assuming you use a 6V supply and the maximum voltage for your motors is 3V then the maximum duty cycle should be about 25%.

The reason for the 25% value is that when you double the voltage across the motor terminals, the motor will draw roughly twice as much current. 2x the voltage x 2x the current = 4x the power thus you need to limit the maximum power to about 1/4.

At 25% duty cycle, the motors will receive 400% power 1/4 of the time so the heat generated should be the same as 3V at 100%.


An alternative solution is to use a DC-DC conver like this: http://www.sparkfun.com/products/9370