How to reduce voltage drop?

Hey, so I have a circuit with 6 servos, 6 TCRT5000 sensors, an Arduino Nano (powering it through the 5V pin), a lcd screen, an SD card reader and a CD4021BE shift (in) register all powered by a 5V usb power supply (like an iPad charger so around 2A).

When I start it up the voltage is around 4.7V but when the servos start to work (one at a time) the voltage can drop to 4.1V which makes the LCD and the leds on the sensors flicker, and the SD card reader fail.

The curcuit draws aroud 220mA at idle and 400mA peak.

I attached my circuit diagram (I know it’s not the best)

I hope somehow I can fix this voltage drop

How did you determine that peak? Because servo’s are damn power hungry and easily have spikes of 1A each.

So couple of things:

  1. Get a better power supply / cable. One that’s 4.7V even when under light load is crap
  2. Get a more powerful supply if you plan on moving all servo’s at once
  3. If you don’t want to move them all at once, don’t ever do that which includes at startup (aka attach())

I used a multimeter to find that peak, and I know it might not be totally accurate, but the servos don't have a ton of load on them, also I'm only powering them one at a time, and detaching every servo after use.
I don't want to/can't use a bigger supply.

Then I can tell you, that measurement is still an average :wink:

If you can't use a bigger supply and only use single at once:

  1. At least go with point 1 from reply #1.
  2. Use capacitors to have a buffer but you might need a couple of thousand uF for what you have.
  3. Never attach() more then a single servo
  4. You could decouple the rest from the servo's with a diode and use a separate capacitor to only buffer for the rest. But, you still have quite a lot connected.

letsgo00:
Hey, so I have a circuit with 6 servos

So you need to budget the power supply to handle the servos. 1A per servo is a rough rule of thumb for
small servos. 6A supply is therefore indicated if you want them to all be active simulataneously.

A separate supply for the servos is extremely wise, so there's nice clean reliable power for all the sensors and Arduino.

I don't want to/can't use a bigger supply.

Then you’ve boxed yourself in with those choices as a usb power supply and cable were never designed for more than two amps which obviously isn’t enough current.

The typical recommendation for 6 servos would be a 6 amp supply. You’re kidding yourself to think you can defy the known requirements.

BTW, a crap usb cable could be making a bad situation worse.

As I wrote it in my above post, I'm only attaching/using 1 servo at a time so that's not a big issue.
When I removed the 6 TCRT500 sensors the power consumption dropped by 100mA.
I also tried using a 1000uF capacitor, but that did not help much, I guess I need more of them

EDIT: So I added 4 1000uF 16V capacitors in paralell and the SD card is not failing which was my main issue, but the lcd still flickers

letsgo00:
As I wrote it in my above post, I'm only attaching/using 1 servo at a time so that's not a big issue.
When I removed the 6 TCRT500 sensors the power consumption dropped by 100mA.
I also tried using a 1000uF capacitor, but that did not help much, I guess I need more of them

EDIT: So I added 4 1000uF 16V capacitors in paralell and the SD card is not failing which was my main issue, but the lcd still flickers

Even a whole farad of capacitance will not help you, the power is simply inadequate.

MarkT:
Even a whole farad of capacitance will not help you, the power is simply inadequate.

So you say 2A will not be enough for only one servo running at the time?

as a n00b, let me tell you that servos (or any DC motor) can really interfere with the power supply for the Arduino.

read this;
http://www.thebox.myzen.co.uk/Workshop/Motors_1.html

the easiest way is to provide separate supplies - i have yet to make a proper circuit that combines the supply that doesn't disturb the micro-controller.

keep your power supply for the servos, and then what i do is run the microcontroller (and other peripherals) on a simple battery pack - 2xAA + boost converter to 3v3, or 3xAA + boost converter to 5V.

BabyGeezer:
as a n00b, let me tell you that servos (or any DC motor) can really interfere with the power supply for the Arduino.

read this;
Motors 1

the easiest way is to provide separate supplies - i have yet to make a proper circuit that combines the supply that doesn't disturb the micro-controller.

keep your power supply for the servos, and then what i do is run the microcontroller (and other peripherals) on a simple battery pack - 2xAA + boost converter to 3v3, or 3xAA + boost converter to 5V.

This is a good suggestion, but unfortunately I do not have access to boost converters at the monent and cannot wait 30 days for them to arrive. Also my main goal was to power this from one source, preferably from a usb.

I have a 5V 6A power supply tho which I can try

letsgo00:
I don't want to/can't use a bigger supply.

Then you have to get yourself much smaller servos. If you can't supply the power to fulfil your demands, you have to reduce your demands.

There are really small microservos around that draw only a couple hundred mA stalled. Your puny power supply may be able to handle one of those, plus the 100+ mA those TCRT5000 sensors take, and the ~100 mA or so for the display and LEDs (maybe even more, depending on how many LEDs that are), and don't forget the ~100 mA power spikes your SD reader needs to work, and of course the Arduino itself (an Uno needs 50-100mA).

letsgo00:
So you say 2A will not be enough for only one servo running at the time?

A proper 2A power supply (as in, can deliver 2A at 5V) will be enough. Your power supply's voltage drops badly, so it's not a proper power supply.

You can add a battery to act as a 'capacitor'. By using a NiCad, during idle/low use times, with the addition of a NiCad recharge circuit, you can recharge the batteries.

Even better would be to use a lead acid battery with deep cycle capability.

I think a bigger power supply is the more practical solution. Especially lead/acid batteries are HUGE.

wvmarle:
There are really small microservos around that draw only a couple hundred mA stalled. Your puny power supply may be able to handle one of those, plus the 100+ mA those TCRT5000 sensors take, and the ~100 mA or so for the display and LEDs (maybe even more, depending on how many LEDs that are), and don't forget the ~100 mA power spikes your SD reader needs to work, and of course the Arduino itself (an Uno needs 50-100mA).

  1. The LEDs are on the TCRT5000 sensors so those are included in the ~100mA.
  2. If I add up the the current alues you said it should give the ~220mA idle, and the +100mA sd spikes shouldn't be an issue, so we are looking at ~350mA. So if I use a regulas SG90 servo and as some of you said it will take 1A that's still under 2A.
  3. I tried using a 5V 6A power supply and the display still flickered so the issue might be something else

Replace those hair-thin power wires for something that can carry serious current.

letsgo00:
...
3) I tried using a 5V 6A power supply and the display still flickered so the issue might be something else

it's not just an issue of sufficient power (current) but also interference - did you get to read the link i gave ?

and hoping to run it all on USB (from the PC ?!) is not advisable - especially if you're going to draw anywhere near to 1A !

Like I said, 2A should be fine for running a single servo. But as I already mentioned in reply #1, apparently if the power drops that easily you have:

  1. either a supply that’s crap;
  2. or piss poor wires
  3. or both

Fix that to fix the problem.

So my issue is finally solved. Thanks a lot for the help!

I have changed my input wire from small breadboard wire to 22 AWG wire and also I added a 1000uF capacitor in paralell to the input and now my voltage is perfect, and I only get .1V fluctuation which is acceptable, and not noticable