Obtenir un grand nombre (~ 100) de signaux de sortie numériques d'Arduino

19

J'aimerais pouvoir contrôler environ 100 LED indépendantes à l'aide d'un Arduino. Le problème est que l'Arduino n'a pas assez de broches pouvant être configurées pour cela. Quelle serait une façon de résoudre ce problème? Y a-t-il une puce qui peut démultiplexer un signal plus complexe de l'Arduino qui pourrait alors contrôler les LED? Ou existe-t-il une autre solution?

Alexis K
la source
quelles sont vos exigences de taux de rafraîchissement? quelle quantité de courant par LED?
vicatcu
taux de rafraîchissement d'environ 1 seconde. penser environ 8ma par LED. Serait alimenté par un adaptateur externe - pas l'Arduino
Alexis K
Il existe de nombreuses solutions de démultiplexage. Mais considérez la complexité de votre tâche; l'algorithme dont vous avez besoin pour générer les données s'adaptera-t-il aux contraintes du processeur de l'Arduino? Certaines tâches le seront, d'autres ne s'adapteront pas ou ne s'adapteront que via des conceptions de création qui peuvent être très satisfaisantes à créer mais peuvent rendre la maintenance du code difficile.
Chris Stratton

Réponses:

22

Tout d'abord, un Arduino ne peut pas piloter directement 100 LED, car le courant combiné que l'appareil doit fournir ou absorber dépassera de loin à la fois le microcontrôleur et le régulateur de tension sur la carte Arduino. Un bouclier Arduino personnalisé avec sa propre source d'alimentation et sa propre réglementation pourrait cependant convenir.

Il existe plusieurs approches faciles, l'approche la plus simple est détaillée ci-dessous:


Le TLC5940 pilote 16 LED par IC, contrôlées par une entrée série via une légère variante d'une interface SPI. Jusqu'à 40 appareils TLC5940 peuvent être montés en cascade, mais 7 d'entre eux seront suffisants pour piloter les 100 LED en question.

Il existe au moins quelques bibliothèques Arduino ( 1 , 2 ) pour le TLC5940.

Taux d'horloge suggérés à envoyer depuis l'Arduino et taux de rafraîchissement correspondant:

  • 1 MHz GSClk utilisant le code dans ce fil .
  • 330 KHz SCLK (horloge de données série)
  • Ainsi, le taux de rafraîchissement des données LED 244 Hz

Ceci est basé sur les formules de la fiche technique:

f (GSCLK) = 4096 * f (mise à jour)
f (SCLK) = 193 * f (mise à jour) * n
où:
f (GSCLK): fréquence minimale requise pour GSCLK
f (SCLK): fréquence minimale requise pour SCLK et SIN
f ( mise à jour): taux de mise à jour de l'ensemble du système en cascade
n: nombre en cascade d'appareils TLC5940

Le TLC5940 est un puits de courant constant , de sorte que les anodes des LED seraient liées à une tension supérieure de quelques volts à la LED Vf, ou d'environ 7 volts, selon la valeur la plus basse, alimentée indépendamment des broches d'alimentation de l'Arduino. Cette source de tension doit être capable de fournir 100 * (quel que soit le courant sur lequel vous exécutez les LED), mais peut être une source non régulée.

Les cathodes LED vont aux lignes d'entraînement des circuits intégrés TLC5940 respectifs.

Le TLC5940 lui-même consomme jusqu'à Icc = 60 mA par appareil pendant l'écriture de données, donc l'alimentation de 7 d'entre eux à partir de l'Arduino ne fonctionnera pas, il faudra fournir un Vcc régulé indépendant de 3,3 à 5 volts, idéalement la même valeur que le Vcc de l'Arduino utilisé, et les traces de terre doivent se reconnecter à la terre de l'Arduino, bien sûr. Le fonctionnement des pièces TLC à une tension différente de celle de l'Arduino entraînerait un besoin de conversion de niveau du signal série, donc mieux évité.

Plusieurs vidéos YouTube montrent l'utilisation d'Arduino avec des circuits intégrés TLC5940 en cascade.


Bien que ces circuits intégrés aient été conçus pour piloter des affichages LED numériques à 7 segments, ils offrent un contrôle individuel des LED, ils peuvent donc être utilisés pour un maximum de 64 LED par circuit intégré. Deux d'entre eux peuvent être montés en cascade pour piloter les 100 LED nécessaires. La page 13 de la fiche technique montre une configuration en cascade.

Les LED devraient être connectées électriquement en groupes de jusqu'à 8 LED partageant chacun une ligne de cathode (cathode commune), pour cette conception.

Les MAX7219 / 7221 sont des pilotes de LED de multiplexage, donc la luminosité maximale des LED sera inférieure à celle d'un pilote de LED statique comme la section précédente.

Voici une bibliothèque de matrice LED utile et un guide d'utilisation du MAX7219.

Certaines vidéos YouTube pertinentes ( 1 , 2 ) peuvent être intéressantes.


Encore une fois, ces circuits intégrés ont été conçus pour piloter des affichages LED numériques à 7 segments, ils fournissent un contrôle LED individuel, ils peuvent donc être utilisés jusqu'à 40/64 LED par circuit intégré. Deux / trois d'entre eux peuvent être connectés sur un bus Arduino SPI pour piloter les 100 LED nécessaires.

Les notes de conception restent les mêmes que la section précédente. De plus, la luminosité maximale individuelle des LED serait inférieure à celle du multiplex droit du MAX7219.

Certaines vidéos YouTube pourraient vous intéresser.


  • Conception de composants discrets, registres à décalage, extenseurs IO, bandes LED coupables avec contrôleurs individuels, et bien d'autres ...

Ce sont toutes des approches qui ont été utilisées avec différents niveaux de simplicité et de succès. Ce sont des implémentations plus complexes que les 3 approches ci-dessus, donc pas plus détaillées. La recherche sur le Web fournirait des guides utiles pour ces approches, si nécessaire.

Un irritant clé avec de telles conceptions est le besoin de résistances de contrôle de courant sur chaque LED ou chaîne de LED. Les appareils spécialement conçus pour la conduite de LED n'en ont généralement pas besoin.

Je n'ai pas d'expérience personnelle avec ce dernier ensemble d'options, donc je ne peux pas aider beaucoup.


Footnote: Après avoir répondu à cette question, j'ai trouvé une question plus ancienne , qui a des réponses détaillant et discutant plusieurs des approches dans ma dernière section. Ce fil rend "la lecture approfondie comme devoirs" intéressante.


Anindo Ghosh
la source
1
Registres à décalage bon marché comme 74HC595?
Thomas E
De plus, comment le Max5951 fournit-il un "contrôle LED individuel" - il ne semble avoir qu'un contrôle à 7 segments (8 broches pour 8 chiffres), non?
Thomas E
Ouaip, ceux-là aussi. Besoin de beaucoup de résistances pour protéger les LED, puis le complexe de câblage par rapport aux circuits intégrés spécialement conçus.
Anindo Ghosh
@ThomasE No: "Le MAX6950 pilote jusqu'à cinq chiffres à 7 segments ou 40 LED discrètes. Le MAX6951 gère jusqu'à huit chiffres à 7 segments ou 64 LED discrètes.". On connecte simplement des groupes de 8 LED chacun à une ligne de cathode, comme décrit dans la section MAX7219 de ma réponse.
Anindo Ghosh
2
@starblue Overkill v / s facilité de mise en œuvre du bricolage : pour un effort ponctuel ou de loisirs, le TLC5940 (3,78 $ en quantités uniques chez DigiKey) ne resterait-il pas la solution la plus simple , en raison des bibliothèques Arduino et du support actif au sein de la communauté Arduino? Sauf s'il existe d'autres parties tout aussi bien prises en charge, comme vous l'avez souligné, que les forums Arduino adorent.
Anindo Ghosh