Consommation courant arduino

Bonjour tout le monde !
(et bonne année, puisqu'on a tout janvier pour ça :slight_smile: )

Je me résous à poster, car je me mélange les pinceaux avec ces histoires de consommation en sortie de l'arduino.

Prenons un arduino mega par exemple.
J'ai bien compris que chaque pin peu fournir max 40mA (20 conseillés), pour un max de 200mA pour tout l'arduino.
J'ai bien compris les calculs donnés par la loi d'ohm pour savoir quelle résistance utiliser ou encore quel courant sera "pompé" par un composant, en me référant à la datasheet de ce dernier.
J'ai bien compris que d'après cela, si j'utilise 10 leds utilisant chacune 20mA je suis déjà au max.
J'ai bien compris qu'on peut alimenter les composants par un circuit externe pour éviter que l'arduino n'est à fournir plus d'A qu'il n'est capable d'en fournir.

Voici un cas concret sur lequel je fais mes armes :

  • 14 boutons poussoirs lumineux SPDT type antivandalime : pour chaque bouton j'ai besoin d'utiliser un pin pour gérer sa LED et un autre pour gérer le bouton (l'appuie sur un bouton doit éteindre plusieurs autres boutons par exemple)
    Déjà là si je branche comme ça, j'ai besoin de 28 pins, donc niveau consommation courant je suis mal :frowning:
  • 2 strips led de 20 leds tpye LPD8806, alimentées par une alim externe 5v / 16A, et utilisant chacune 2 pin (Data et Clock)
  • un interrupteur on - off et ses 2 leds jaunes, utilisant 1 pin chacun (3 donc)

Au delà d'avoir vos conseils sur la meilleurs manière de gérer tout ce beau monde (quand bien même c'est possible), voici mes questions plus précises:

  • si j'alimente tous les composants (boutons, leds boutons, strip led...) avec une alimentation externe (imaginons que voltage et ampérage fournis sont corrects), quelle quantité de courant est utilisée par chaque pin pour commander les composants ? Je comprends pas comment calculer ça
  • en prenant l'exemple d'une strip led, alimentée par alimentation externe, même question pour les pin utilisés pour Data et Clock : quelle consommation de courant par rapport aux 20mA max ?
  • d'une manière générale, est-ce qu'en utilisant systématiquement une alimentation externe pour les composants, ça règle le problème du maximum de courant fourni par les pin de l'arduino ?

J'espère que mes propos sont clairs :slight_smile:

Merci à vous

Réponse partielle. (le message est "parti tout seul en cours d'édition)

  1. les 40mA il faut bien voir qu'il ne sont pas déconseillés mais interdits par Atmel en service permanent.
    Ce sont des Absolute Maximum Rating, regarde le texte joint par Atmel sur sa datasheet.
    En résumé 40 mA permanent, selon le lot de fabrication, cela peut tenir ou cramer.

  2. Pour les 200 mA sur gnd et Vcc c'est à cause des tout petits fils d'aluminium qui connectent la puce au pattes du boîtier. Il ne faut pas qu'ils fondent.

  3. Pour les diodes tu dis qu'avec 10 diodes de 20 mA chacune tu es au taquet.
    Je tempère tes propos :
    a) il existe des dels (led en français) haute luminosité qui à 5 mA éclairent autant que des bas de gamme à 20 mA
    b) Mais pourquoi les connecter toutes de la même façon ?
    La limite c'est 200 mA sur le Vcc et sur le gnd mais le Vcc et le gnd sont indépendants.
    Tu peux mettre 10 diodes entre le + 5V général et une sortie du micro (-> 200 mA qui s'écouleront par les pattes gnd du boîtier du micro) et 10 autres diodes entre une sortie du micro et la masse générale (-> 200 mA qui arriveront dans la diode par les pattes Vcc du micro).
    Dans le premier cas la sortie du micro "sink" (absorbe) le courant de la diode, dans le second cas elle "source" (fourni) le courant à la diode.

Dernière subtilité : la capacité en courant d'un PORT (groupe d'entrée/sortie) est de 150 mA en mose source mais seulement de 100 mA en mode sink. Je rapelle que la moitiée des pin d'un port peut sourcer et l'autre moitiée peut "sinker" (horrible anglicisme, désolé).
La carte UNO comporte 3 ports B,C et D.
PORT D pins D0 àD7
PORTB pins D8 à D13
PORTC pins A0 à A5 (en mode numérique également accessibles par D14 à D19)

  1. Attention à l'amalgame arduino / micro-contoleur.
    Le micro c'est un micro Atmel, arduino ne fait pas de composants.
    La carte arduino (pour la UNO) c'est un assemblage sur circuit imprimé avec le micro Atmel atmega328p, une interface USB/UART réalisée avec un petit micro atmega16U2 et deux régulateurs de tension.

  2. Consomation en mode commande :
    C'est dans le cas où tu places une interface entre le micro et la puissance : ca dépend de l'interface choisie, mais en général si on met une interface c'est justement pour ne rien consommer

Merci pour vos réponses.

Vos détails me confirment que mes lectures m'ont appris les bonnes limitations.

S'agissant de la luminosité, dans mon état actuel, peu m'importe et je suis prêt à utiliser des résistances de 560ohms sur les les pour baisser leur consommation.
A terme par contre la question se reposera mai dans l'immédiat c'est à des fins de test.

Ce qui m'importe le plus dans l'immédiat, c'est de réponde à mes questions concernant l'alimentation externe de l'ensemble des composants, pour comprendre combien consommes les pin pilotant chaque composant, alors qu'ils sont alimentés par une source autre que l'arduino.

Je pense que ça réglerais mes problèmes mais j'ai un doute sur ma bonne compréhension.

Merci

Argh c'est ce que je craignais :frowning:

Par exemple, les deux entrées du circuit LPD8806 ne consomment pratiquement rien sur les sorties correspondantes de l'Arduino, et le courant des leds qu'il pilote passe exclusivement dans son alimentation de puissance externe. L'Arduino est donc effectivement soulagé par ce montage.

=> pour que je progresse, sauiez-vous m'indiquer comment on calcul cette consommation ? c'est pour me faire une idée aussi

Quand vous parlez de circuit de commutation, vous pensez par exemple à des transistors ?
J'ai lu à ce sujet
D'après ce que j'en comprends, l'arduino délivrera 20mA dans son exemple, pour une seule LED, donc ça règle pas mon soucis.

D'après mes calculs pour les boutons (hors led), puisque j'utilise une résistance pull down et une tension de 5V, l'intensité sera 0,5mA par bouton c'est bien ça ?
Donc à priori je serai pas embêté par les boutons car 0,5 x 14 = 7mA

Pour les les boutons, si j'utilise des résistances 560ohms (la luminosité conviendra pour les tests mais pas à terme), chaque led va consommer 2,5v / 560 = 4,4mA, donc pour 14 leds = 62,5mA
Ici encore je suis large même en cumulant, mais c'est valable que pour des tests :slight_smile:

Pour les leds, j'avais pensé utiliser des shift out, pour en piloter 8 par 8.
Dans ce cas, quelle courant l'arduino doit fournir ? comment le calculer ?

Sinon dans mes lectures j'ai aussi croisé les PCA9685, ça parait être une bonne alternative non ?

Bonjour pepe

Ton premier schéma est intéressant. Ca veut dire que si je met la moitié des leds au 5V et l'autre moitié au GND je peux commander 20 leds à 20mA de courant (un peu moins pour ne pas dépasser 200mA sur le 5V et 200mA sur le Gnd avec la conso du micro).

Ok merci je comprends mieux.

Du coup je pense utiliser un PCA9685 16 canaux

Si j'alimente par l'alimentation extérieure, puisque ça utilise I2C ça devrait ne pas impacter les sorties de l'arduino en courant.

Tu en penses quoi pepe ?

Bonjour,

Sujet très instructif, merci pepe pour les schémas!

Merci aussi 68tjs pour les précision entre sink et source, on comprend mieux la distinction entre VCC et Gnd.

Naïvement, je pensais que ce qui passait par VCC, revenait nécessairement par le Gnd.

En effet pepe merci pour toutes ces infos !

La carte Arduino fournit un peu plus de 20 mA si le 5V est celui de la carte. Mais le microcontrôleur ATmega ne supporte que le courant nécessaire à la commande de la base du transistor, soit moins de 1 mA dans le cas présent.

Est-ce que cela signifie qu'en utilisant un transistor pour chaque led, le pin de chaque led consommera 1mA ?

Note que tu peux faire un montage avec des résistances de pull up, en inversant simplement la logique dans ton programme. Dans ce cas, tu peux utiliser les résistances internes de l'ATmega (fonction pinMode(pin,INPUT_PULLUP);), lesquelles auront une consommation encore inférieure (elles font entre 20kΩ et 50kΩ).

Merci pour l'info, c'est vrai que ça vaut le coup de modifier mon code source pour inverser les états HIGH/LOW, vu le gain via les résistances internes !

Oui, Mais d'après la doc, les boutons contiennent déjà une résistance de limitation, de valeur inconnue, à laquelle ta résistance externe va se rajouter. Pour évaluer le courant effectivement consommé dans ton cas de figure, on ne peut pas faire le calcul : il faut faire la mesure.

Oui en effet, il y a une résistance interne. Actuellement j'utilise des résistances 220ohms, donc même si on ne connait pas la valeur de a résistance interne du bouton, on peut imaginer que l'intensité induite soit maximum égale à mon calcul (forcément plus basse je veux dire)
Question : la résistance interne est valable pour la LED et le bouton également ou que pour la LED ?

D'une manière générale, je sais pas si c'est une bonne pratique mais je pense que je vais systématiquement alimenter ls composants par une alimentation externe, pour éviter de trop pomper à l'arduino...

J'en profite pour une autre question : j'utilise un bloc d'alimentation PC, qui possède 2 lignes 12V/16A pour alimenter 16 arduinos, en utilisant 2 "pieuvre jack DC", soit une pieuvre pour 8 arduinos.
A priori les 16A sont répartis sur les 8 arduinos déjà ? 2A par arduino pour une pieuvre ?
J'ai lu sur Internet que ce qui est important en alimentation c'est le voltage, ok !
Mais cela veut-il dire pour autant qu'on peut alimenter UN arduino avec une alim qui fournit 12V/16A ?
Selon moi le risque c'est que les composants en entrée de l'arduino, au niveau de l'alimentation fondent c'esdt ça ?

Encore merci

J'aurais du poster sur la forum plus tôt, pepe a répondu à bcp de questions que je n'arrivais pas à trouver sur le net haha !

J'ai un PCA965 de ce type actuellement, pour des servos moteurs, mais peu importe ça fera l'affaire pour des leds.
14$ c'est largement acceptable je trouve :slight_smile:
Je suis ouvert à des propositions si vous connaissez des cartes en "tout-ou-rien" pour reprendre le terme de pepe

Ce sont les erreurs d'utilisation des Arduinos qui risquent de les griller, pas la puissance de l'alimentation à laquelle ils sont branchés. Il suffit de dépasser 40 mA (0,04 A) pour griller une sortie, et ce n'est pas en changeant l'alimentation 16 A par un modèle moins puissant qu'on empêchera que ça se produise.

Ok c'est ce qu'il me semblait.
En revanche, je constate que ça chauffe pas mal au niveau du japan jack quand j'utilise l'alim qui fournit 16A aux 8 arduinos, par rapport à quand j'utilise une alim de 1A uniquement pour 1 arduino.
J'imagine que c'est "normal", mais c'est surtout à cause de cette chauffe que je posais la question.
Ce n'est pas brûlant, mais je préfère me méfier et ne pas griller 16 arduinos d'un coup :slight_smile:

En tout cas merci pour toutes ces réponses pepe ça m'a fait énormément avancer !!

Je laisse le post un peu ouvert si cela ne gêne pas, au cas où d'autres questions me viennent en rapport avec le courant.

Pour mieux illustrer la finesse des fils de bonding je mets une photo.
Bonding.jpg
Ce doit être une vielle photo car au vu de la couleur les fils semblent être en or. Depuis 15/20 ans l'or a quasiment disparu et est remplacé par l'aluminium.
L'aluminium est bien moins cher mais souffrait de problèmes d'électro-migration [1] qui ont été résolus.
[1] des particules microscopiques d'aluminium se détachaient et sous l'effet des champs électriques se répandaient sur la puce. N'oublions pas que l'unité de base d'un CI est le µm.

La "soudure" des fils de bonding se fait par thermo-compression.
Les métaux en contact sont fortement pressés jusqu'à ce que les atomes des deux métaux arrivent à mettre des électrons en commun. Ce n'est pas une vraie "soudure" et il suffit d'exercer une force de quelques dizaines de grammes pour arracher le fil de bonding.
Pour faciliter l'opération on chauffe localement à l'aide d'ultrason.

Le diamètre des fils est de quelques dizaines de microns. C'est ce qui explique en grande partie la limite de 200 mA sur Vcc et Gnd.
A titre de comparaison visuelle les pattes de sortie du boîtier doivent faire 0,8 ou 0,5 mm de large.

Cette explication peut se généraliser aux PORTS d'entrée/sortie numérique.
Chaque port est alimenté par une petite piste métallique exactement comme sur un circuit imprimé. Sauf que comme cela a déjà été dit l'unité de base n'est pas le mm mais le micron et donc les pistes sont extrêmement fines et ne supportent pas beaucoup de dizaines de mA.
Par contre la différence entre les modes sink et source doit trouver son origine ailleurs mais il n'y a qu'Atmel qui peut répondre.

Merci pour les explications 68tjs, en effet, on comprends pourquoi ces limitations.

Je sais pas si vous connaissez ce produit
J'ai lu dans la doc que chaque output peut sortir 500mA !
Est-ce que c'est essentiellement dû au fait que les soudures sont plus "costaudes" ?

Non je ne connais pas.
Je constate que c'est pour de l'audio donc des fréquences très basses.
Pour les fréquences basses on n'est pas géné par les capacités parasites et on peut se permettre de faire des "GROSSES" pistes, des "GROS" transistors et pour les bondings d'utiliser des rubans mis en parallèle.

Les conditions sont différentes de celles d'un micro-contrôleur tournant à 20 MHz.
La carte DUE utilise un micro-contrôleur qui tourne autour de 80 MHz et ses E/S ne supportent que 15 mA pour les quelques plus puissantes, sinon avec toutes les autres il ne faut pas dépasser 8mA !