I have a Li-po battery (or any portable power source) providing 3.7 V output voltage. I want to connect a very small motor to it and have it power it for as long as possible. Here is the catch: the motor is pulling around 80 mA of current. This is terrible for the battery life and will not last very long.

Is there a way to reduce the maximum amount of current drawn by the motor, whilst also dropping the current draw from the battery (not using a resistor as this still pulls current which is wasted), meaning that the battery life of the system increases. I don't mind if the RPM drops either. Is there a component or method that is capable of this?

  • \$\begingroup\$ Welcome! A smaller motor? A PWM controller? A voltage regulator? A resistor in series? \$\endgroup\$
    – winny
    Nov 24, 2022 at 19:58
  • 1
    \$\begingroup\$ Since your focus is entirely on battery life and assuming you want to keep the motor you have, then you will need an efficient way to run the motor at a lower voltage. That's either going to be done using a buck switcher or else using a less-than-100% duty cycle (PWM) at a frequency high enough that you won't notice. The RPM will drop. So will the available torque. But you will get longer battery life. \$\endgroup\$
    – jonk
    Nov 24, 2022 at 20:14

2 Answers 2


If an off-the-shelf pulse-width-modulator (PWM) doesn't provide low-enough average current drain, and RPM is of no consequence, replace it with a CMOS timer. The TS555 typically draws ~100 µA, so would drain a 4 A-h 16850 cell in 10,000 hours (~1 year) by itself, and it can handle ~100 mA output. If the motor runs for 0.6 second in 60 seconds, its drain has been effectively reduced by a factor of 1,000 (80 µA), so the combined draw might get about six months life. (Using a much shorter run time might not be feasible, since the mechanical inertia of the motor might prevent it from turning at all.)

BTW, a small photovoltaic battery would keep this running as long as the sun shines... just don't overcharge the Li cell.


As DrMoishe Pippik mentioned in his answer, the usual solution is PWM, which permits you to control average motor current very efficiently. The downside is the relatively complex circuit to produce the PWM signal, and switching elements.

You shouldn't dismiss the idea of using a passive element, like a resistor, to diminish power delivered to the motor. Sure, there's an inherent inefficiency to this approach (since power is necessarily dissipated in the resistor), but if you used a series resistance to reduce battery current by a factor of ten, for example, you reduce overall power drawn from the battery by that same factor, irrespective of how you actually achieve it.

The biggest problem you face, regardless of your chosen solution, will be getting the motor to start with diminished drive current. It must overcome static friction to begin spinning in the first place. Presumably there's some load connected to the motor shaft, which will worsen this problem. Usually, when a motor starts, it has minimum coil resistance, passes maximum current, enough to get the motor running. As it speeds up, back EMF increases the effective coil resistance, reducing the current required to maintain speed.

A naive system to limit motor current will be designed to set the maximum "running" current, but that same constraint will also applied during start-up, which is likely to prevent the motor from even beginning to turn, unless static friction is negligible (which it probably won't be).

Therefore whatever solution you employ will also need to pass whatever current the motor requires to get started, and then some time later introduce a throttle on current.

This could be as simple as a capacitor in parallel with the throttling resistor, which has no impedance initially, but increases its effective resistance as it charges (left here):


simulate this circuit – Schematic created using CircuitLab

On the right I use a transistor to bypass the throttling resistor, R3, for about 200ms. This has the advantage of using a smaller timing capacitor, and bypassing in a more digital "on or off" manner.

If you go with a PWM solution to limit average current, you will need to employ a digital means of disabling throttling for some period while the motor gets up to speed (ie. 100% duty cycle for a quarter of a second or so, then down to, say, 25%). This would be really easy to accomplish using a microcontroller, such as an Arduino.

Whatever your PWM implementation, you'll need a transistor to switch the motor on or off, given the relatively weak digital signal from the PWM system, and this can be combined with a "one-shot" (single, monostable pulse) at power-on, using a similar resistor+capacitor technique:


simulate this circuit

This is almost certainly not the best way, but you get the idea: D1 and D2 "OR" the PWM signal and the start-up pulse (from R1 and C1) together, so the motor is powered when either is high. I used a MOSFET here because it solves many of the problems with BJTs (significant base current, low current gain, significant \$V_{CE}\$ and so on). The voltage across the motor might resemble this:

enter image description here

You can use whatever astable multivibrator you want to produce the PWM waveform, such as the classic astable 555.

  • \$\begingroup\$ Is there a way to use an Arduino or other microcontroller to deliver required amounts of current or voltage. I thought about using a rp2040 microprocessor which can be set to output a custom voltage or current? In addition I have a DRV8833 motor driver. Can this be used to lower the speed of the motor/reduce current pull? If i Can then I can code it to run 100% briefly to get it going and then drop speed down for reduced power pull. \$\endgroup\$ Nov 25, 2022 at 20:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.