Y a-t-il une limite à la quantité de courant qu'une broche peut couler?

13

J'ai expérimenté avec une matrice LED 8x8 contrôlée par un Arduino Uno. Comme je pense que c'est typique, la matrice utilise une anode commune pour chaque ligne et une cathode commune pour chaque colonne.

Pour le moment, j'ai toutes les broches de la matrice connectées directement aux broches IO de l'Uno, et je n'ai eu aucun problème pour allumer les LED une par une. En parcourant toute la matrice comme cela, les mises à jour sont un peu lentes, ce qui signifie que les LED ne sont pas aussi lumineuses que je le souhaiterais.

Pour autant que je sache, je ne peux pas allumer une rangée entière en toute sécurité à la fois, car une broche individuelle sur l'Uno n'est pas capable de fournir suffisamment de courant pour alimenter 8 LED distinctes en même temps (nécessitant au moins 10 mA chacune pour être assez brillant).

Il m'est venu à l'esprit que l'inverse pourrait être plus sûr. Si j'allume une colonne entière à la fois, chaque broche n'a qu'à fournir suffisamment de courant pour une LED, ce qui ne devrait pas poser de problème. Cependant, il s'appuie sur une broche potentiellement absorbant le courant des 8, totalisant au moins 80mA.

Est-ce possible ou vais-je faire frire ma planche?

Peter Bloomfield
la source
Quel affichage exact utilisez-vous (fiche technique) et utilisez-vous des résistances en série avec lui? Peut-être que vous faites frire l'affichage de l'heure plutôt que votre Arduino.
jippie
Il n'y a pas de numéro de pièce, donc je n'ai pas la fiche technique exacte. J'ai supposé que chaque LED a une tension directe de 2V, et j'utilise actuellement des résistances de la série 390 ohms (pendant les tests). Cela signifie que je les pousse à environ 8 mA chacun, je pense.
Peter Bloomfield
cela devrait être très bien.
jippie
Pourriez-vous entrer un peu plus dans les détails de ce que vous faites, s'il vous plaît. La raison pour laquelle je demande, c'est parce que je veux faire la même chose, et je suis un débutant. Je suis RTFMing et votre question a été la plus élevée pour ma recherche. Je suis [email protected]. Merci.
user1928764

Réponses:

13

vais-je faire frire ma planche?

Résultat très probable. Voici pourquoi:

L'Arduino Uno utilise le microcontrôleur atMEGA328, qui a une valeur maximale absolue de source ou de puits de 40 mA par GPIO. En outre, le courant total à travers les rails d'alimentation ou de mise à la terre (c'est-à-dire que le total de tous les courants OP veut que les broches GPIO descendent ou se source) est évalué à un maximum de 150 200 mA.

De manière réaliste, les graphiques de courant dans la fiche technique atMEGA328 ne vont même pas jusqu'à 40 mA, il est donc plus sûr de limiter le courant à peut-être 20 mA au total par GPIO.

En d'autres termes, qu'un GPIO soit utilisé comme source ou récepteur, les limites restent assez basses et, dans la pratique, devraient être maintenues bien inférieures aux valeurs maximales absolues. Même en dessous du maximum absolu, le fonctionnement d'un microcontrôleur à une température trop élevée réduit sa durée de vie.

Solution :

Utilisez des BJT, des MOSFET ou des circuits intégrés de pilote tels que l' ULN2003 pour réellement conduire le courant à travers les LED.

Anindo Ghosh
la source
2
Où avez-vous trouvé le 150mA max. pour le package? J'ai un 200mA sous des cotes maximales absolues .
jippie
@jippie I goofed :-)
Anindo Ghosh
9

Je vais voler ma réponse lorsque j'ai répondu à cette question lors de la dernière tentative d'arduino SE.


C'est un peu complexe. Fondamentalement, il existe un certain nombre de facteurs limitatifs:

Les lignes d'E / S du microcontrôleur (c'est-à-dire les broches analogiques et numériques) ont à la fois une limite de courant agrégée (par exemple totale) et une limite par broche:

entrez la description de l'image ici
À partir de la fiche technique ATmega328P .

Cependant, selon la façon dont vous définissez les "Pins" Arduino, ce n'est pas toute l'histoire.

La broche 5 V de l'arduino n'est pas connectée via le microcontrôleur . En tant que tel, il peut générer beaucoup plus d'énergie. Lorsque vous alimentez votre Arduino depuis USB, l'interface USB limite votre consommation totale d'énergie à 500 mA. Ceci est partagé avec les appareils sur la carte Arduino, donc la puissance disponible sera un peu moins.
Lorsque vous utilisez une alimentation externe, via le connecteur d'alimentation du baril, vous êtes limité par le régulateur local 5V, qui est évalué pour un maximum de 1 Amp . Cependant, il est également limité thermiquement , ce qui signifie que lorsque vous consommez de l'énergie, le régulateur chauffera. Lorsqu'il surchauffe, il s'arrête temporairement.

La sortie régulée 3,3V est capable de fournir 150 mA max, ce qui est la limite du régulateur 3,3V.


En résumé

  • Le maximum absolu pour une seule broche IO est de 40 mA ( c'est le maximum . Vous ne devriez jamais réellement tirer un 40 mA complet d'une broche. Fondamentalement, c'est le seuil auquel Atmel ne peut plus garantir que la puce ne sera pas endommagée. Vous devez toujours vous assurer que vous êtes bien en dessous de cette limite actuelle. )
  • Le courant total de toutes les broches IO ensemble est de 200 mA max.
  • La broche de sortie 5V convient pour ~ 400 mA sur USB, ~ 900 mA lorsque vous utilisez un adaptateur d'alimentation externe
    • Le 900 mA est pour un adaptateur qui fournit ~ 7V. À mesure que la tension de l'adaptateur augmente, la quantité de chaleur à laquelle le régulateur doit faire face augmente également, de sorte que le courant maximal diminue à mesure que la tension augmente. C'est ce qu'on appelle la limitation thermique
  • La sortie 3,3 V est capable de fournir 150 mA .
    • Note - Toute puissance tirée du rail 3.3V doit passer par le rail 5V . Par conséquent, si vous avez un appareil de 100 mA sur la sortie 3,3 V , vous devez également le compter par rapport au courant total de 5 V.

Remarque: cela ne s'applique pas à l'Arduino Due, et il existe probablement des différences pour l'Arduino Mega. C'est généralement vrai pour tout Arduino basé sur le microcontrôleur ATmega328.

Connor Wolf
la source