Saturday, February 8, 2014

Arduino Power, Current, and Voltage Limitations


Subscribe by Email!
By Gabriel Staples
Started: 6 Jan. 2014
Last Updated: 12 June 2015
Update History (newest on top)
-added info about IO pin voltage protection using a single resistor (ex: 10K --> +15.5V/-10.5V) - 20150612
-very minor corrections: some clarity added - 20140730

Related Articles:
Other Articles You May Be Interested in Reading:
(image above is from this Adafruit tutorial here

In using Arduino and designing my circuits for it, I have often-times asked myself the question, "What are the power/current/voltage limitations of the Arduino?"  "Will I risk damaging it?"  In the image above, for instance, a large servo is being powered by the voltage regulator right on the Arduino development board.  Larger servos and motors like these have the potential to push the Arduino past its max current limits, potentially causing it to reset itself and cause unusual errors while running, or possibly even damage the Arduino (I should note that most linear voltage regulators have an over-temperature auto-cutoff feature, however, so damage is unlikely).  In either case, it's important to understand the limitations of your Arduino, its input/output pins, and its voltage regulators.

Here, I will attempt to succinctly and accurately describe the power limitations of the standard Arduino boards, such as the Uno and Nano.  References will be included at the end, and references for particular data are denoted by square braces with the reference number, such as this: "[1]."  Following my references and methodology, you can use the same techniques to figure out the limits of your particular board, in case you're not using an Uno or Nano.

Summary of information below:

  • Input Voltage Limits:
    • Recommended: 7~12V
    • Absolute: 6~20V
    • Input/Output (I/O) pins: -0.5V to +5.5V (the actual max is "Vcc + 0.5V," which for a 5V Arduino, is +5.5V) (Note 1)
  • Output Current Limits:
    • When powered by USB: total of 500mA
    • With external battery or power supply: total of 500mA~1A (see below for specifics)
    • 5V pin: same as above: 500mA or 500mA~1A
    • Each input/output pin: 40mA
    • Sum of all input/output pins combined (but NOT including the "5V" pin): 200mA
Note 1: simply by adding a resistor in series with an I/O pin, you get increased input voltage protection for that pin. Ex: a 10k resistor provides voltage enough protection to allow input voltages between -10.5V and +15.5V. A 100k resistor allows DC input voltages from -100.5V to +105.5V. Read my article here for more info: Quick Tip: Arduino Input/Output (I/O) Pin Over-Voltage Protection Using a *Single* Resistor!

KEEP READING BELOW FOR MORE DETAILS.

Power Limitations of the Arduino Uno & Nano:


Voltage Input Limits:
  • Input power:  to power the Arduino, you either plug it in to a USB port, or you input a voltage source to it either its 2.1mm x 5.5mm DC power jack (if present, such as on the Uno) or via jumpers going to its "VIN" and "GND" pins (which are on all Arduinos that I've seen).  When powering the Arduino via the power jack or VIN and GND pins, it has the following input voltage limitations:
    • Recommended input voltage limits: 7~12V [1&2]
      • These input voltages can be sustained indefinitely
    • Absolute voltage limits for powering the Arduino: 6~20V [1&2]
      • Below 7V may cause the 5V levels on the board to waver, fluctuate, or sag, causing board instability and less accurate analog readings when using analogRead().
      • Sustained voltage leves above 12V will cause additional heating on the linear voltage regulator of the Arduino, which could cause it to overheat.  Short periods, however, are fine.  Feel the voltage regulator with your finger.  If it feels too hot to comfortably touch, you need to use a voltage source within the recommended limits in order to reduce heat buildup.  In the picture below, the black device at the left side of the Arduino, circled in yellow, is the voltage regulator.  Caution: before touching any electro-static discharge (ESD) sensitive parts on the Arduino (which is pretty much all of the Arduino), touch the metal part of the USB plug first to ground yourself out to the board and safely discharge any static voltage you have built up.
  • Voltage limits on input/output pins: -0.5 - +5.5V max. [3]
    • If you need to read in a voltage on an Arduino digital or analog input pin, ensure it is between 0 and 5V.  If it is outside these limits, you can bring down the voltage using a voltage divider.  This scales the input voltage to allow for analog or digital readings of voltages otherwise outside the allowed range. If your input signal is digital, and you don't need to take scaled analog readings, another technique is to clip (cut the top off of) the input voltage, rather than scale it. Since AVR microcontrollers (ex: the Atmel ATmega328) have internal clipping diodes (note that Atmel, mistakenly I believe, calls them "clamping diodes"), this can be done by simply adding a single resistor in series with the pin. Ex: adding a 10k resistor in series with the input pin permits input voltages as low as -10.5V or as high as +15.5V. Read my article here for more information.


Advertisement
Current Output Limits:
  • Total maximum current draw from the Arduino when powered from a USB port: 500mA [1]
    • The Uno has a "resettable polyfuse that protects your computer's USB ports from shorts and overcurrent." [1]
  • Total maximum current draw when powered via external power supply: 
    • Arduino Uno: 1A [4]
    • Arduino Nano: 500mA [5]
    • Arduino-compatible Nano that I like to use: 1A [6]
    • Note: If not powered by USB, the total 5V current limit coming out of the Arduino is limited by the voltage regulator on your particular board, and/or your input power supply, whichever provides less power.  Let's assume your power supply going to the Arduino can provide 7~12V and >= 1A.  If this is the case, the 5V power is limited strictly by your Arduino board's voltage regulator.  
  • Total max current draw across the Arduino "5V" pin and "GND": as specified just above.
    • The output current limit from the "5V" pin will be according to the info just above.
  • Total max current per input/output pin: 40mA [1, 2, & 3]
  • Sum of currents out of all input/output pins combined: 200mA [3].
    • Note: this is the one that usually gets people, as it may be the least understood!  Despite the fact that your voltage regulator on the Uno (or the Nano that I use) may permit up to 1A draw across the "5V" and "GND" pins, the sum of all currents going into or out of the input/output pins (all Analog and Digital pins combined) of the Atmega328 microcontroller itself cannot exceed 200mA.  So, if you are powering 10 LEDs at 20mA each, via your Analog or Digital pins, you just hit your limit!  Any more than that and you may damage the microcontroller on the Arduino board.  A work-around if you need more current is to use transistors.  The Arduino input/output pins can then use a very low current to activate a transistor, which then turns a higher current on and off from the 5V pin directly (which is connected straight to the output of the on-board linear voltage regulator), to the device you want to control.  This way, you keep the sum total output from the Arduino analog/digital pins below 200mA, while allowing up to the 500mA~1A limit from the 5V pin.
Here's a helpful table from the Atmega328 datasheet [3].


References:

The first place to look is to go to Arduino.cc --> Products, then click on the board you use.  This brings you to your board's main reference page.  Schematics for your board can be found by looking for the "schematic" link on your board's main reference page.
  1. Main Arduino Uno reference page - http://arduino.cc/en/Main/ArduinoBoardUno 
  2. Main Arduino Nano reference page - http://arduino.cc/en/Main/ArduinoBoardNano 
  3. The Arduino Uno and Nano use the Atmega328 microcontroller.  Googling "Atmega328 datasheet" helped me find its datasheet here; see pg 303, Table 29.1, Absolute Maximum Ratings - http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf 
  4. Arduino Uno Schematic - http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf 
    1. I got to this schematic by going to Arduino.cc --> Products --> Uno --> "arduino-uno-Rev3-schematic.pdf".  In this schematic, at the top right, I can see that the voltage regulator used on the Uno is the NCP1117ST50T3G.  By Googling "NCP1117 datasheet" I found the datasheet here:  http://www.unihedron.com/projects/sqm-le/PDFspecs/NCP1117-D.PDF.  It says that the regulator can supply "Output Current in Excess of 1.0 A."
  5. Arduino Nano Schematic - http://arduino.cc/en/uploads/Main/ArduinoNano30Schematic.pdf
    1. I got to this schematic by going to Arduino.cc --> Products --> Nano --> "schematic".  At the bottom-left I can see that the voltage regulator is a UA78M05.  Googling "UA78M05 datasheet" helped me find the datasheet here:  http://www.ti.com/lit/ds/symlink/ua78m05.pdf.  It specifies "Output Current up to 500 mA."
  6. The Arduino-compatible nano that I use has an AMS1117 5V linear regulator, as printed on the top of the regulator, which is located on the bottom of the board.  The datasheet is here: http://www.advanced-monolithic.com/pdf/ds1117.pdf.  It specifies "Output Current of 1A."



***Subscribe by Email!***

24 comments:

  1. Is there a input current limit for Vin? I'm using an Arduino Nano and I will use this multi-voltage converter to run some tests. ELI-1000

    http://www.steren.com.mx/doctosMX/ELI-030_ELI-035_ELI-050_ELI-055_ELI-055BL_ELI-100_ELI-102_ELI-1000_ELI-1000BL_ELI-1200.pdf

    I think the current that flows is 1000mA. is this too much?

    thanks

    ReplyDelete
    Replies
    1. Hey Tomas, great question. A 1000mA power supply is definitely not too much. Actually, the higher the better.

      However, for linear (not switching) voltage regulators, The input current should not be greater than the sum total of the output current. For a standard Nano, that's 500mA. Check the writing on your Nano's regulator, and find its datasheet to see if it's a 500mA or 1A regulator, or what.

      Let me explain further though: your question itself indicates a fundamental misconception about the electrical limits, so I'll make this clarification: drawing power has a *maximum* limit (ex: you can't draw more than 500mA). Providing power has a *minimum limit* (ex: you should't use a power supply that can provide *LESS* than 1000mA). The power drawn depends on the *load* however, *not* on the supply. So, if your linear regulator outputs a max of 500mA, you need a power supply that can supply a *MINIMUM* of 500mA. A 1000mA power supply would be even better, and a 1500mA power supply better still. Just because the power supply is rated that high does *not* mean it is delivering that much current. Rather, it means it *could* deliver that current if the load required it. Again, the higher the power supply capability, the better. It's like a car. You don't want an engine that can just barely make your car go exactly 75mph at full throttle, if that's the highway speed, rather, you want an engine that *could* make your car go 100mph+, so that going 75mph is relatively easy on the engine and doesn't require all it's got.

      One more point: since your supply has an adjustable voltage, set it to the 7.5V setting. The lower the voltage setting (while still being ~1V higher than the 5V regulator on the Arduino), the *better.* This is because less power has to be burned off as heat (produced in the Arduino's linear voltage regulator), so the Arduino's regulator can actually output more current.

      Ex: I used some equations the other day to analyze the mic5219 "LG50" 500mA-Peak Output linear regulator (http://www.micrel.com/_PDF/mic5219.pdf), and I calculated the following:
      -If I use an input voltage of 12V, the regulator can only output a max of 62.4mA continuously, or else it will overheat.
      -If I use 9V input, it can output 106.9mA continuous
      -7.873V input (no such standard input voltage, but this is for learning) --> 150.0mA continuous
      -6V input (the minimum allowed, and also the best choice if you want high output current) --> 304.5mA max continous output

      See how that works? Lower input Voltage, within reason, means greater output current capability.

      Let me know if you have any other questions! If you want my equations/code for the above calcs I can post my FreeMat .m file script, as I used FreeMat to do them.

      Delete
  2. hello,
    I have two question.
    I want to interface an arduino with GSM shield , How much current and voltage should I use on arduino?
    and If I want to interface (arduino+ GSM M10 shield+GPS module+SD card) ,How much current and voltage should I use on arduino?
    please answer me

    ReplyDelete
    Replies
    1. Referring to the Arduino GSM Shield webpage, it says under the "Power requirements" section: "It is recommended that the board be powered with an external power supply that can provide between 700mA and 1000mA. Powering an Arduino and the GSM shield from a USB connection is not recommended, as USB cannot provide the required current for when the modem is in heavy use."

      Therefore, it appears the GSM shield is powered by the Arduino's 5V power when you plug the shield into the Arduino. I recommend a 1000mA (or larger) 9V power supply, plugged into the Arduino. Alternatively, you can use a battery, but a 9V battery will probably *not* work, as it cannot provide adequate current. I do *not* recommend a 12V power supply, as it will cause the Arduino's 5V regulator to heat up greatly, since linear regulators essentially burn off the excess voltage as heat. Therefore, a 9V 1000mA+ power supply is best.

      The recommendation not to power the Arduino and shield from a USB port is because a USB 2.0 port is only specified to be able to provide 500mA max output current, yet the GSM shield alone draws 700mA+. If you use a USB 3.0 port (usually these ports are blue in color, and most modern PCs or laptops have only one or two of these) you can probably ignore that recommendation, however, as USB 3.0 ports can provide up to 900mA output current, which should be sufficient to power an Arduino with GSM shield. (USB 3.0 source 1, source 2).

      If you want to use GSM shield + GPS module + SD card, I recommend a power supply of 9V 1500mA+. To be sure, you need to check the specs of each device. We already know that the GSM shield alone, for instance, requires 700mA~1000mA. Keep in mind the SD card probably requires 3.3V power, so I expect it has an onboard 3.3V LDO regulator to bring the 5V power down to 3.3V.

      I think this should cover your questions. Don't forget to use Google. You can do some research too. If you don't understand something, that's where I can help clarify. If you just need to know how much current a GSM shield, GPS module, or SD card pulls, you can google.

      I hope that helps. Good luck! Let me know if you're stuck.

      Delete
    2. Gabriel Staples


      thanks very very much

      Delete
  3. Hi Gabriel Staples

    What would the cause be for the small 8 Pin chip (located just under the crystal in your image) to overheat? I received a pretty nasty blister on my finder just from touching it for less than a second. I've seen no visible signs of shorts or loose terminals.

    for some reason this has now happened to my second Arduino UNO R3.

    the project I was working on can be found on
    http://www.circuitstoday.com/water-level-controller-using-arduino

    could it be possible that 12V went directly through pin 8 and caused an issue?
    would appreciate your assistance with guiding me through this mysterious problem.

    regards
    Cameron Reaper

    ReplyDelete
    Replies
    1. Cameron, let's start by figuring out what that chip is. I dont have an uno on hand. What are the part numbers on top of the chip? Can you identify what part it is and find a datasheet?

      Delete
  4. help!
    is it possible that we could generate white illuminance spectrum by using LED colorimeter board ( arduino educational kit) by controlling R,G and B LED's by coded Micro Controller.
    if yes?
    please help with the code thing.

    ReplyDelete
    Replies
    1. Yes, it's possible, but why don't you just use an RGB LED from ebay instead? I'm not writing your code for you. Do some learning, figure things out (ex: start here), and ask questions on the Arduino forum. If the question pertains specifically to one of my articles, libraries, or areas of expertise, and the answer is not readily available elsewhere, then feel free to post your question still on the Arduino Forums, while posting a link back here to me so I can help too. Good luck. You can do this.

      Delete
    2. PS. It looks like those RGB LEDs I linked to are common anode type, which means they share a common + side and the - side needs to be grounded through the microcontroller pins to light the LED. There is one pin for each color. If you use digitalWrite(pin,LOW) you will turn on that color to full brightness. If you use analogWrite(pin,value), where value is 0 to 255, you can vary the brightness. Be sure to use a PWM-capable pin with analogWrite, and note that for common anode RGB LEDs, since LOW activates the light, the values are inverse. This means analogWrite(pin,0) gives you FULL brightness, and analogWrite(pin,255) gives you NO brightness, which is opposite what you would normally expect. For further questions post it on the Arduino Forum, and then come back here and post a link to it. I don't want to be the sole answerer of your questions, and the Forum is a better venue to get the answer seen by more people.

      Delete
  5. I want to clarify one thing that I am building a 10 step resistive divider across the Uno 5v and GND. Please tell me is it safe to apply the 5v end of the string directly to the analog pin for an analog read? If not then please tell me that what size of resistor would be best for a limiting resistor. Waiting for your response

    http://www.rbaker.co.uk/

    ReplyDelete
    Replies
    1. I can't tell if this is spam (since you put a link) or a legitimate question. Convince me it's not spam or I may have to delete it.

      Yes, so long as the pin is set to INPUT and *not* OUTPUT, you can put 5V straight onto it with *no* resistor. A pin set to INPUT is high impedance (ie: it's as though it already has a huge resistor on it). Just keep the voltage on the input pin below Vcc + 0.5V (ie: below 5.5V for a 5V Arduino).

      Delete
  6. Great article. I got some question.
    Can i supply a power for ESP8266 (3v3, 200mA) directly from arduino nano? Some of articles say that the output current for 3v3 arduino is too small (20mA if i'm not mistaken). But on your article says this "5V pin: same as above: 500mA or 500mA~1A". Does 3v3 pin output supply that current too? Sorry for bad English. Thank you.

    ReplyDelete
    Replies
    1. Hermon, if you look at the schematic for the Nano you'll see the 3.3V supply comes out of the USB UART interface chip. It is very low current, like you've been informed, so no it won't work to power the 8266. I recommend you use a separate LDO (Low Drop Out) 3.3V 500mA to 1A regulator, powered from the 5V rail, to power your 8266. Do an ebay or Amazon search for "Arduino esp8266", or "arduino 3.3V board," or "arduino xbee," and you may even find an adapter board with such a regulator built onto it.

      Delete
    2. Hermon, I highly recommend you check out and use this Adafruit Huzzah ESP8266 breakout board for $10, until you get used to how to hook up the cheaper ones from scratch. This Adafruit board has built-in 5V --> 3.3V level shifting and an on-board 3.3V regulator. Watch out, many 3.3V devices are *not* 5V tolerant even on the communication pins, and simply by using 5V communication lines without level shifting can damage 3.3V devices. This board, however, has built-in level shifting too, making it perfectly 5V tolerant. Adafruit is expensive, but they do a *fantastic* job designing their products and providing *excellent* code and tutorials to support them. For those of us who are penny-pinchers, use eBay (mostly) and Amazon (sometimes), but expect to have to learn a lot more and spend a lot more time tinkering to make up for it. Adafruit parts on the other hand just work.

      Delete
  7. This comment has been removed by the author.

    ReplyDelete
  8. Hi Gabriel,

    I want to connect a LED strip to my arduino uno which need 5V and 18A.

    the arduino can't suply that much ampere, therefore I need to connect the strip to an outside PSU.

    Is there a way to use the output from the PSU for both: the arduino and the strip?
    and if so (like connecting in parallel), how much ampere the arduino need?

    ReplyDelete
    Replies
    1. Yes just wire the LEDs and Arduino in parallel. Put the 5V output from the 5V power supply directly onto the Arduino 5V pin--just ensure it is < 5.5V is all, and connect power supply ground to Arduino GND. A few hundred mA should be plenty for most Arduino applications. Just sitting still it draws 49mA according to Nick Gammon here.

      Delete
  9. Hi Gabriel

    Great article! I have a similar question to "Unknown". I am using an Arduino Nano (clone) to control a strip of twenty WS2812B LEDs that run on 5V. I have a nominally 5V 2A wall wart that actually puts out about 5.68V, a little too high by your measure for the Nano's +5V pin. I'm pretty confident my reading of the voltage is accurate, since I measured the same voltage with two different multimeters.

    I tried your suggestion to put a 10K ohm resistor in series with the multimeter, but I still get a reading of 5.66V. Am I missing something about your explanation? Is it the combination of the 10K resistor with the Nano's internal clipping diode that limits the voltage to a safe level < 5.5V?

    Any advise you can provide will be greatly appreciated1

    ReplyDelete
    Replies
    1. Philip, sounds like you are a bit confused on the 10k resistor. Putting it in series with a signal *input pin* (but NOT the 5V power pin) will simply limit current so that the internal clamping diode can route excess voltage to the 5V power pin, thereby clamping the input pin to ~5.5V (5V power pin + ~0.5V clamping diode voltage drop).

      If you theoretically had a "5V" power pin that was actually at 5.68V instead, then your 10k resistor on the input pin would clamp the input pin to 5.68V + ~0.5V = 6.18V.

      But....I don't recommend anything over 5.5V on the 5V power pin. The "Absolute Maximum Ratings" table above for the ATmega328 microcontroller shows it can take up to 6V, but I don't recommend going that high.

      Limiting voltage on regulated power coming in to the 5V power pin directly is another story altogether....the easy solution is to just put a 1N4001~1N4007 diode in series with the 5.68V power supply and ~5.0V will magically come out the other end due to the voltage drop across the diode. I recommend the 1N4007 for anything up to ~0.5A, though it's rated up to 1A. For higher currents use a bigger diode. Take a look at Figure 4 here in the 1N4007 datasheet to see a plot of forward current versus forward voltage for these diodes. This is a neat little trick that is very useful when you need to just knock off a little voltage from an otherwise regulated supply.

      Delete
  10. Gabriel,
    Yep, I'm confused - got a lot to learn!
    In forums online I read suggestions to use a diode, but you're the only one to explain WHY the diode works in this situation, I really appreciate that.

    That is exactly the advice I needed, I'll give the diode a try tonight.

    ReplyDelete
  11. can the uno handle 5V 4A as i need this for a project?

    ReplyDelete
    Replies
    1. I don't know. Please provide a circuit diagram. You can hand draw it and paste a link to a photo, or use the schematic drawing tools on Arduino Stack Exchange or Electrical Engineering Stack Exchange, or you can use KiCad or Fritzing. My preference is KiCad. With the right circuit, your Uno can handle 5 million volts and 5 million amps for your project. With the right circuit, an Uno could turn the power grid for an entire state or country on and off.

      Delete
  12. How long should the Arduino sketch wait for the 3.3 volt regulated power to stabilize? Sometimes when I power up an Uno, the voltage reads only 2.24 volts or 2.5 volts. After hitting the reset button on the Uno to restart the code, the voltage is now the proper 3.3 volts.

    ReplyDelete

Thanks for your comment or question! If it is a question, I will try to get back to you quickly. Notice to spammers: I personally remove all spam promptly and report spammers to Google, so please don't do it.

Note: some HTML tags are allowed in your comments. To learn how to add bold (<b>...</b>), italics (<i>...</i>), or hyperlinks (<a href="URL">NAME</a>) to your comments, read here.

~Sincerely, Gabriel Staples.

P.S. Yo hablo español también. Je parle français aussi. (I speak Spanish & French too).