Ottenere un gran numero di (~ 100) segnali di uscita digitale da Arduino


19

Vorrei poter controllare circa 100 LED indipendenti usando un Arduino. Il problema è che Arduino non ha abbastanza pin che possono essere configurati per questo. Quale sarebbe un modo per risolvere questo problema? Esiste un chip in grado di demuxare un segnale più complesso dall'Arduino che potrebbe quindi controllare i LED? O c'è un'altra soluzione?


quali sono i requisiti di frequenza di aggiornamento? quanta corrente assorbita per LED?
vicatcu,

frequenza di aggiornamento di circa 1 secondo. pensando a 8ma per LED. Sarebbe alimentato da un adattatore esterno - non da Arduino
Alexis K,

Esistono molte soluzioni di demultiplazione. Ma considera la complessità del tuo compito; l'algoritmo di cui hai bisogno per generare i dati si adatta ai vincoli della MCU di Arduino? Alcune attività lo faranno, altre non si adatteranno o si adatteranno solo attraverso la creazione di progetti che possono essere abbastanza soddisfacenti da creare ma possono rendere difficile la manutenzione del codice.
Chris Stratton,

Risposte:


22

Prima di tutto, un Arduino non può pilotare direttamente 100 LED, poiché la corrente combinata che il dispositivo deve alimentare o affondare supererà di gran lunga sia il microcontrollore che il regolatore di tensione sulla scheda Arduino. Uno scudo Arduino personalizzato con una propria fonte di alimentazione e regolamento potrebbe adattarsi al conto, però.

Esistono diversi approcci facili, l'approccio più semplice è dettagliato di seguito:


  • Driver LED a corrente costante TLC5940 in configurazione a cascata:

TLC5940 aziona 16 LED per CI, controllati dall'ingresso seriale attraverso una leggera variante di un'interfaccia SPI. È possibile collegare in cascata fino a 40 dispositivi TLC5940, ma 7 di questi saranno sufficienti per pilotare i 100 LED nella domanda.

Esistono almeno un paio di librerie Arduino ( 1 , 2 ) per TLC5940.

Frequenze di clock suggerite da inviare da Arduino e frequenza di aggiornamento corrispondente:

  • GSClk da 1 MHz usando il codice in questo thread .
  • 330 KHz SCLK (orologio dati seriale)
  • In tal modo, frequenza di aggiornamento dei dati LED 244 Hz

Questo si basa sulle formule del foglio dati:

f (GSCLK) = 4096 * f (aggiornamento)
f (SCLK) = 193 * f (aggiornamento) * n
dove:
f (GSCLK): frequenza minima necessaria per GSCLK
f (SCLK): frequenza minima necessaria per SCLK e SIN
f ( aggiornamento): frequenza di aggiornamento dell'intero sistema a cascata
n: numero in cascata dei dispositivi TLC5940

Il TLC5940 è un dissipatore di corrente costante , quindi gli anodi dei LED sarebbero legati a una tensione di un paio di volt maggiore del LED Vf, o circa 7 volt, a seconda di quale sia inferiore, alimentato indipendentemente dai pin di alimentazione dell'Arduino. Questa sorgente di tensione deve essere in grado di fornire 100 * (qualunque sia la corrente a cui si accendono i LED), ma può essere una sorgente non regolata.

I catodi LED vanno alle linee di trasmissione dei rispettivi circuiti integrati TLC5940.

Lo stesso TLC5940 consuma fino a Icc = 60 mA per dispositivo durante la scrittura dei dati, quindi l'alimentazione di 7 di questi dall'Arduino non funzionerà, richiederà un Vcc regolato indipendente da 3,3 a 5 volt da fornire, idealmente lo stesso valore del Vcc dell'Arduino in uso, e le tracce del terreno devono ricollegarsi al terreno dell'Arduino, ovviamente. L'uso delle parti TLC a una tensione diversa da quella dell'Arduino comporterebbe la necessità di una conversione di livello del segnale seriale, quindi è meglio evitarlo.

Diversi video di YouTube dimostrano l'utilizzo di Arduino con circuiti integrati TLC5940 in cascata.


Sebbene questi circuiti integrati siano stati progettati per pilotare display a LED numerici a 7 segmenti, forniscono un controllo LED individuale, quindi possono essere utilizzati per un massimo di 64 LED per circuito integrato. Due di questi possono essere collegati in cascata per pilotare i 100 LED richiesti. La pagina 13 del foglio dati mostra una configurazione a cascata.

I LED dovrebbero essere collegati elettricamente come gruppi di un massimo di 8 LED ciascuno condividendo una linea catodica (catodo comune), per questo progetto.

MAX7219 / 7221 sono driver LED multiplexing, quindi la luminosità massima dei LED sarà inferiore rispetto a un driver LED statico come la sezione precedente.

Ecco un'utile libreria e guida a matrice di LED che utilizza MAX7219.

Alcuni video pertinenti di YouTube ( 1 , 2 ) potrebbero essere di interesse.


Ancora una volta, questi circuiti integrati sono stati progettati per pilotare display LED numerici a 7 segmenti, forniscono un controllo LED individuale, quindi possono essere utilizzati per un massimo di 40/64 LED per circuito integrato. Due / tre di essi possono essere collegati su un bus SPI Arduino per pilotare i 100 LED richiesti.

Le note di progettazione rimangono le stesse della sezione precedente. Inoltre, la luminosità massima dei singoli LED sarebbe inferiore rispetto al design multiplex dritto del MAX7219.

Ci sono alcuni video di YouTube che potrebbero essere di interesse.


  • Design discreto dei componenti, registri a scorrimento, espansori IO, strisce LED tagliabili con controller individuali e molti altri ...

Questi sono tutti approcci che sono stati utilizzati con vari livelli di semplicità e successo. Sono implementazioni più complesse rispetto ai 3 approcci di cui sopra, quindi non dettagliate ulteriormente. La ricerca sul Web fornirebbe utili guide per questi approcci, se necessario.

Un fattore irritante chiave per tali progetti è la necessità di resistori di controllo attuali su ogni LED o stringa LED. I dispositivi appositamente progettati per la guida a LED in genere non ne hanno bisogno.

Non ho esperienza personale con quest'ultima serie di opzioni, quindi non posso fare molto.


Nota a piè di pagina: dopo aver risposto a questa domanda, ho trovato una domanda più vecchia , che ha le risposte che descrivono in dettaglio e discutono alcuni degli approcci nella mia ultima sezione. Quella discussione rende interessante "ulteriori letture come compiti a casa".



1
Registri a scorrimento economici come 74HC595?
Thomas E

Inoltre, in che modo Max5951 fornisce il "controllo LED individuale" - sembra avere solo un controllo a 7 segmenti (8 pin per 8 cifre), no?
Thomas E

Sì, anche quelli. Sono necessari molti resistori per proteggere i LED, quindi il complesso del cablaggio rispetto ai circuiti integrati appositamente progettati.
Anindo Ghosh

@ThomasE No: "Il MAX6950 guida fino a cinque cifre a 7 segmenti o 40 LED discreti. Il MAX6951 guida fino a otto cifre a 7 segmenti o 64 LED discreti.". Uno collega solo gruppi di 8 LED ciascuno a una linea di catodi, come descritto nella sezione MAX7219 della mia risposta.
Anindo Ghosh

2
@starblue Overkill v / s facilità di implementazione fai -da- te : per uno sforzo una tantum o per hobby, il TLC5940 ($ 3,78 in singole quantità su DigiKey) non rimarrebbe la soluzione più semplice , a causa delle librerie Arduino e del supporto attivo all'interno della comunità Arduino? A meno che non ci siano altre parti altrettanto ben supportate come hai sottolineato, che i forum di Arduino adorano.
Anindo Ghosh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.