Servo power consumption while idle

Hi,

I have a project involving a Wemos D1 mini board and an MG996R servo-motor.

Summary

This project is running just fine on an external DC power source, but recently I decided to put the entire project on batteries (1x 18650 should do it).
The idea is that I have some components on my PCB that are drawing some current (just with empty PCB, the current drawn from 18650 battery is about 0.6mA), but with everything in place the current drawn is about 1mA. Maybe is too high for a battery powered project, but this is the best I can do with the current situation (if anyone need more details I can post the schematic).

Right after I finished tweaking my PCB (since I started from an astonishing 12mA current drawn just by the PCB itself) I was happy with that total of 1mA in deep-sleep (PCB + WemosD1 + DS1307).
Next, I plugged in the MG996R servo and I was just puzzled, while watching my amp-meter going up to 6.6mA, while in deep-sleep. So, just the servo itself draws a current of about 5.6mA, with no PWM signal going to its control pin.
Next, I measured the current drawn by the servo and just by connecting the servo to a 5V power source (only VCC and GND) it shows a current draw of 3.6mA. I measured the resistance between the VCC and PWM pins to GND and it shows 47K on VCC-GND and 120K on PWM-GND. This explains that current drawn by the servo :frowning:

So, I am asking here: is anything I can do to get rid of that absurd power consumption by the servo while is not active?

I searched the web but did not find any viable solution, so I thought maybe I can use a relay to just disconnect the GND line from the servo while the wemos is in deep-sleep.
Since I already have 2 Wemos relay shields: Relay Shield — WEMOS documentation, I though I could use one of those for that. But, the problem is that the default pin is D1 and D1 is also the SCL line of the i2c. Since I also have the DS1307 connected to i2c, this means the relay would go on and off while communicating with the DS1307.
But, for this relay it says this: " * 7 configurable IO, default: D1(GPIO5)". Does anyone knows how can I configure the IO for this relay to be D8, for example? Do I have to make some hardwiring on the shield? Or how is this "configurable IO"?

L.E.: nevermind about the pin configuration on the relay. It seems that the latest version has some configurable jumpers on the back of the shield. What I have is an old version with just D1 connected. Probably I'll have to re-wire that connection to another pin.

The servo controller has to compare the set and actual position all the time. That analog or digital circuit can not be put asleep.

You can replace the servo by your own motor and position feedback and a self-locking gear box or spindle drive. Then you can turn off the motor as long as the setpoint is unchanged because the position is maintained.

I used linear actuators in place of a servo motors. That way I can cut power to the linear actuators during non-torque times.

Thanks for the suggestions.
Since I already have this servo, I would like to use it.
Eventually I did the trick with the relay and it does the job. Now, the servo will be powered only when needed.

Yes, but now you have to provide current to the relay coil at least part of the time. You might consider using a P-channel mosfet in the servo's high-side supply instead, controlled by a GPIO pin.

I am not using just a relay, I am actually using a relay board (which already has a mosfet in order to control the relay operation). Indeed, the relay board that I am using has an N-channel mosfet connected to the negative side.
But I'll take into consideration your suggestion and maybe, for future boards I'll use a relay with a P-channel mosfet instead.
Thanks!

The type of mosfet won't make any difference if you use a relay module. What I was suggesting is using a mosfet instead of a relay to switch power to the servo. That would avoid the current draw needed to actuate the relay, and avoid future problems with the relay contacts.