Photo by Harrison Broadbent on Unsplash

How much amps or current can Arduino handle?

Microcontrollers are quite versatile devices. Not only can they process data, but they can interact with the “real world”. This means that they have to work with external devices and sensors or sometimes just a simple LED needs to be lit. And what a joy it brings when your “Hello world!” project on a microcontroller blinks an LED.

While the output voltage of a microcontroller is, in general, fixed, the current sourcing and sinking requirements can vary. It is our responsibility to stay within the recommended current limits of our microcontroller. We must refer to the appropriate documentation or datasheets to guide us to the land of safe operation of our device.

In the case of Arduino Uno, the recommended current per pin is 20 mA (milliamps) and the total current for pin groups is 100 mA, and for all pins combined – 200 mA but read further to find out the current limits for other Arduino devices and how information in datasheets can be misleading.

Different current handling capabilities of Arduino devices

When talking about current handling capability, a distinction must be made regarding the current flow – current sourcing and sinking. Current sourcing is when a device is supplying current to a consumer. For example, you are lighting up an LED with your Arduino; the Arduino is the current source and it is supplying the current to the LED. Current sinking is the opposite scenario – a device is allowing a current flow through its I/O (Input/Output) pins to ground and some external device is supplying the power.

A comparison between the Arduino boards’ current handling capabilities can be seen in Table 1. At first, the technical information on the Arduino page seemed to conflict with what I found in the datasheets. This lead to two columns in Table 1 – “Recommended current per pin” vs.
Maximum current per pin“. The Recommended current per pin” should be considered more as “guaranteed to work. If you are interested in an explanation for this as well as how datasheets can be misleading, see the next section of this article.

Additionally, the Arduino family of boards include a 3.3V pin on their boards. This pin can be used to power external 3.3V devices. The current sourcing capabilities of 3.3V pin for different Arduino boards are available in Table 1 as well.

Board (links to microcontroller datasheet)Recommended current per pinMaximum current per pin*Total current per all pins**Total current for 3.3V pin (data from Arduino Store)
Arduino Uno20 mA40 mASource: 150 / 200 mA
Sink: 100 / 200 mA
50 mA
Arduino Nano20 mA40 mA100 / 200 mA50 mA
Arduino Mega20 mA40 mA100 / 200 mA50 mA
Arduino Zero7 mASource: 46 / 92 mA
Sink: 65 / 130 mA
800 mA
Arduino Leonardo20 mA40 mA100 / 200 mA50 mA
Arduino Micro20 mA40 mA100 / 200 mA50 mA
Arduino DueSource: 3 / 15 mA***
Sink: 6 /9 mA***
Source: 9 / 24 mA***
Sink: 9 / 14 mA***
130 mA800 mA
Table 1: Comparison of current handling capabilities of Arduino boards
* Although it is possible the pins can source or sink more current than recommended, it is not guaranteed that they will. Additionally, in this case, the pin voltage might exceed the limits defined in the datasheet. Refer to the “Electrical Characteristics” section in the datasheet of the microcontroller for more information. 
** The total current is dependent on pin grouping as well. While the total current can be the largest mentioned value, there are lower current limits for individual pin groups. Refer to the “Electrical Characteristics” section in the datasheet of the microcontroller for more information. 
*** Depends on the pin group. Refer to the “Electrical Characteristics” section in the datasheet of the microcontroller for more information. 

How to find this information for yourself? Do datasheets lie?

To gain independence from random people online (myself included), you should know where to look for and analyze this information for yourself as with more complicated projects, more intricate questions will follow. Of course, you can use various social media platforms and ask questions there, but you put yourself up to the mercy of people online as well as waiting for the correct answer.

In the case of Arduino Uno, first, you can take a look at the Getting Started with Arduino Uno page. Here under “Tech Specs”, you can see in the table “DC Current per I/O Pin” which, in this case correctly, states 20 mA (see Figure 1). But why did I specify correctly? Let’s investigate further!

Screenshot from Arduino Uno Technical Specification showing that DC Current per I/O Pin is 20 mA
Figure 1 Cutout of the technical specification table for Arduino Uno

The main processor, as stated in Figure 1, or the microcontroller of the Arduino Uno is ATmega328P. While writing this article (more specifically while creating Table 1), I had to compare most of the Arduino family boards. When I looked at the Arduino Nano technical specification on the Arduino Store page for Arduino Nano, which is using ATmega328 (basically the same microcontroller as Arduino Uno with some unrelated differences), I noticed that “DC Current per I/O Pin” states 40 mA (while the Getting Started with Arduino Nano page correctly states 20 mA under “Tech Specs”).

People online have provided both of these values as the current limit for Arduino Uno. Which one is right? Why do both of these values float around as “the correct answer” to this question? In Figure 2, you can see a screenshot from ATmega328 and ATmega328P datasheet.

Screenshot from megaAVR® Data Sheet showing Absolute Maximum Ratings table that DC Current per I/O Pin is 40 mA
Figure 2 Screenshot of Electrical Characteristics from ATmega328 and ATmega328P datasheet

In this screenshot, we can see that the Absolute Maximum Rating for DC Current per I/O Pin is 40 mA. Case solved? But why does Arduino then state that the maximum current is 20 mA? Well, it took me quite some time to see it for myself, but closer inspection of the ATmega328 datasheet has quite an interesting twist as an answer to this question.

When you look at the table in DC Characteristics section, for parameters “VOL Output Low Voltage(4) except RESET pin” and “VOH Output High Voltage(3) except Reset pin”, the datasheet states that for 5V supplied power (Arduino Uno has 5V supply voltage for the microcontroller), the current source and current sink testing condition is 20 mA. While this doesn’t mean the pins cannot supply more than 20 mA, these parameters have some interesting notes (3) and (4), which at first state “Although each I/O port can source (sink) more than the test conditions (20mA at VCC = 5V, 10mA at VCC = 3V) under steady state conditions (non-transient) [..]”. This again embraces the fact that pins can supply more current than 20 mA, but the notes end with “Pins are not ensured to sink (source) current greater than the listed test condition [20 mA]”.

Finally, we have found the answer to the question and now we know that the maximum current limit is 40 mA per device pin, but “Pins are not ensured [..]” to handle currents greater than 20 mA, therefore, to guarantee that your design will fulfill your current handling needs, you should stick to 20 mA per device pin. It is not clear to me why this information is hidden under notes.

I asked Microchip about the current limit per pin and this was their response:

As stated in the datasheet, VOL may exceed the related specification when IOL exceeds the test condition. This must be taken care of carefully and so the pins are not recommended to sink/source [more] than the listed test condition.

However, it is possible to reach the 40mA current per I/O pin and hence its mentioned as the absolute maximum rating. In this situation, the condition of the total port pin’s current not exceeding 100mA and the output low voltage value must be considered without fail.

Microchip Support

I feel like this is quite misleading and can cause problems for unsuspecting readers, therefore, I used the term recommended in my article regarding the current limits per pin. I can imagine someone rushing to find an answer to this question (as I did) and not anticipating any problems. While it is possible for the pins to handle 40 mA, the resulting voltage drop can cause problems if this is not accounted for. Additionally, I think the resulting voltage drop could differ from each device, therefore, the results may vary and could be unpredictable between devices.

Conclusion

Current handling capability of a microcontroller is not as straightforward as we would like it to be. It depends on the microcontroller itself and the specific use case. As we saw in the article, the current handling can be defined for an individual pin, the whole device, and even more strict current restrictions can be defined for specific pin groups or even differing current sinking and sourcing capabilities.

For most of the Arduino family of devices, the recommended current limit per I/O pin is 20 mA with the maximum being 40 mA and the total current for all device pins being 100 mA or 200 mA (100 mA is defined for certain pin groups). This is the case for the most popular Arduino boards – Arduino Uno, Nano, Mega, Leonardo, and Micro – with the exception being Arduino Due and Zero devices.

As we saw in the article, datasheets can be troublesome to navigate, and the available information might not even tell the whole story as it was in this case with the current handling capabilities of a device pin. I did not anticipate going down a “datasheet rabbit hole” while writing this blog post. I assumed it would be a quick and easy post just collecting information from the vendor’s website, but I am glad that I got through this journey and hope it taught you a valuable lesson as well. At least it did for me.

Did you find this post helpful? Do you have any questions? Feel free to reach out in the comments!

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *