Uzyskiwanie dużej liczby (~ 100) cyfrowych sygnałów wyjściowych z Arduino

19

Chciałbym móc kontrolować około 100 niezależnych diod LED za pomocą Arduino. Problem polega na tym, że Arduino nie ma prawie wystarczającej liczby pinów, które można by do tego skonfigurować. Jaki byłby sposób rozwiązania tego problemu? Czy istnieje układ, który może demultipleksować bardziej złożony sygnał z Arduino, który mógłby następnie sterować diodami LED? A może jest inne rozwiązanie?

Alexis K.
źródło
jakie są twoje wymagania dotyczące częstotliwości odświeżania? ile prądu pobiera na diodę LED?
vicatcu
częstotliwość odświeżania około 1 sekundy. około 8ma na diodę LED. Byłby zasilany przez zewnętrzny adapter - nie Arduino
Alexis K
Istnieje wiele rozwiązań demultipleksowania. Ale weź pod uwagę złożoność swojego zadania; czy algorytm potrzebny do wygenerowania danych mieści się w granicach mcu Arduino? Niektóre zadania będą, inne nie będą lub będą pasować tylko poprzez tworzenie projektów, których tworzenie może być całkiem satysfakcjonujące, ale może utrudniać konserwację kodu.
Chris Stratton,

Odpowiedzi:

22

Po pierwsze, Arduino nie może bezpośrednio zasilać 100 diod LED, ponieważ łączny prąd, który urządzenie musi uzyskać lub zrzucić, znacznie przekroczy zarówno mikrokontroler, jak i regulator napięcia na płycie Arduino. Jednak niestandardowa tarcza Arduino z własnym źródłem zasilania i regulacją może pasować do rachunku.

Istnieje kilka łatwych podejść, najprostsze podejście opisano szczegółowo poniżej:


TLC5940 steruje 16 diodami LED na układ scalony, sterowanymi przez wejście szeregowe poprzez niewielki wariant interfejsu SPI. Można połączyć kaskadowo do 40 urządzeń TLC5940, ale 7 z nich wystarczy do sterowania 100 diodami LED w pytaniu.

Istnieje co najmniej kilka bibliotek Arduino ( 1 , 2 ) dla TLC5940.

Sugerowane częstotliwości taktowania do wysłania z Arduino i odpowiadająca im częstotliwość odświeżania:

  • 1 MHz GSClk przy użyciu kodu w tym wątku .
  • 330 KHz SCLK (zegar danych szeregowych)
  • Tym samym częstotliwość odświeżania danych LED 244 Hz

Jest to oparte na formułach z arkusza danych:

f (GSCLK) = 4096 * f (aktualizacja)
f (SCLK) = 193 * f (aktualizacja) * n
gdzie:
f (GSCLK): minimalna częstotliwość wymagana dla GSCLK
f (SCLK): minimalna częstotliwość wymagana dla SCLK i SIN
f ( aktualizacja): częstotliwość aktualizacji całego systemu kaskadowego
n: liczba kaskadowo urządzeń TLC5940

TLC5940 jest prąd stały umywalka , tak anody diod byłyby związane z napięciem kilka woltów większej niż Vf LED, lub około 7 woltów, jeżeli jest ona mniejsza, zasilany niezależnie kołków napędowych Ciężki jest. To źródło napięcia musi być w stanie dostarczyć 100 * (niezależnie od prądu, w którym uruchamiane są diody LED), ale może być źródłem nieregulowanym.

Katody LED idą do linii napędowych odpowiednich układów scalonych TLC5940.

Sam TLC5940 zużywa do Icc = 60 mA na urządzenie podczas zapisu danych, więc zasilanie 7 z nich z Arduino nie będzie działać, będzie wymagało dostarczenia niezależnego regulowanego Vcc 3,3 do 5 V, idealnie tej samej wartości co Vcc używanego Arduino i ślady gruntu muszą oczywiście połączyć się z ziemią Arduino. Praca części TLC przy innym napięciu niż Arduino spowodowałaby potrzebę konwersji poziomu sygnału szeregowego, dlatego najlepiej tego uniknąć.

Kilka filmów z YouTube demonstruje użycie Arduino z kaskadowymi układami scalonymi TLC5940.


Chociaż te układy scalone zostały zaprojektowane do obsługi 7-segmentowych numerycznych wyświetlaczy LED, zapewniają indywidualne sterowanie diodami LED, dlatego można je stosować z maksymalnie 64 diodami LED na układ scalony. Dwie z nich można kaskadowo zasilać wymaganymi 100 diodami LED. Strona 13 arkusza danych pokazuje konfigurację kaskadową.

W tym projekcie diody LED musiałyby być połączone elektrycznie jako grupy do 8 diod LED, każda dzieląca jedną linię katodową (wspólna katoda).

MAX7219 / 7221 to multipleksujące sterowniki LED, stąd maksymalna jasność LED będzie niższa niż w przypadku statycznego sterownika LED, jak w poprzednim rozdziale.

Oto przydatna biblioteka matryc LED i przewodnik przy użyciu MAX7219.

Niektóre odpowiednie filmy z YouTube ( 1 , 2 ) mogą być interesujące.


Ponownie, te układy scalone zostały zaprojektowane do obsługi 7-segmentowych numerycznych wyświetlaczy LED, zapewniają indywidualne sterowanie diodami LED, więc można je stosować z maksymalnie 40/64 diodami LED na układ scalony. Dwie / trzy z nich można podłączyć do magistrali Arduino SPI, aby zasilić wymagane 100 diod LED.

Uwagi do projektu pozostają takie same jak w poprzednim rozdziale. Ponadto maksymalna jasność poszczególnych diod LED byłaby niższa niż w przypadku prostej multipleksowej konstrukcji MAX7219.

Niektóre filmy z YouTube mogą być interesujące.


  • Dyskretne projekty elementów, rejestry przesuwne, ekspandery IO, cięte paski LED z indywidualnymi sterownikami i wiele innych ...

Są to wszystkie podejścia, które zostały zastosowane z różnym poziomem prostoty i powodzenia. Są to bardziej złożone implementacje niż 3 powyższe podejścia, dlatego nie są szczegółowo omawiane. W razie potrzeby przeszukanie sieci przyniosłoby przydatne przewodniki dotyczące tych podejść.

Jednym z kluczowych czynników drażniących w takich konstrukcjach jest zapotrzebowanie na rezystory sterujące prądem na każdej diodzie LED lub ciągu diod LED. Urządzenia specjalnie zaprojektowane do jazdy diodami LED zazwyczaj tego nie potrzebują.

Nie mam osobistego doświadczenia z tym ostatnim zestawem opcji, więc nie mogę wiele pomóc.


Przypis: Po udzieleniu odpowiedzi na to pytanie znalazłem starsze pytanie , które zawiera odpowiedzi szczegółowo opisujące i omawiające kilka podejść w mojej ostatniej części. Ten wątek stanowi ciekawe „dalsze czytanie jako zadanie domowe”.


Anindo Ghosh
źródło
1
Niedrogi rejestr przesuwny, taki jak 74HC595?
Thomas E
W jaki sposób Max5951 zapewnia „indywidualne sterowanie diodami LED” - wydaje się, że ma tylko 7-segmentowe sterowanie (8 pinów na 8 cyfr), nie?
Thomas E
Tak, te też. Potrzebujesz dużo rezystorów do ochrony diod LED, a następnie kompleksu okablowania w porównaniu do specjalnie zbudowanych układów scalonych.
Anindo Ghosh,
@ThomasE No: „MAX6950 napędza do pięciu cyfr 7-segmentowych lub 40 dyskretnych diod LED. MAX6951 napędza do ośmiu 7-segmentowych cyfr lub 64 dyskretnych LED.”. Po prostu podłączamy grupy 8 diod LED każda do jednej linii katodowej, jak opisano w sekcji MAX7219 mojej odpowiedzi.
Anindo Ghosh
2
@starblue Overkill v / s łatwość implementacji DIY : czy dla jednorazowego lub hobbystycznego wysiłku TLC5940 (3,78 USD w pojedynczych ilościach w DigiKey) nie pozostanie najprostszym rozwiązaniem z powodu bibliotek Arduino i aktywnego wsparcia w społeczności Arduino? Chyba że istnieją inne równie dobrze obsługiwane części, takie jak zauważyłeś, że fora Arduino uwielbiają.
Anindo Ghosh,