Sterowanie 500 diodami LED za pomocą PWM

26

Rozważam podjęcie projektu, który wymagałby indywidualnego adresowania 500 diod LED, optymalnie z obsługą PWM dla każdej z nich.

Planuję używać Arduino, ponieważ już go mam, ale jestem otwarty na sugestie, jeśli ktoś myśli, że inna platforma byłaby lepsza.

Konieczne byłoby zastosowanie rejestrów zmianowych. Jakiego rejestru przesuwnego należy używać w tej sytuacji? Jeśli PWM sprawia, że ​​ten projekt jest znacznie droższy, to mogę się bez niego obejść. Chcę spróbować wydać mniej niż 100 USD. Kupiłbym masowo 500 diod LED w serwisie eBay.

Jak oceniasz najlepszy sposób kontrolowania tak dużej liczby diod LED? Ponadto, jak bym poszedł o dostarczaniu mocy? Byłbym wdzięczny za wszelką pomoc. Mam dość duże doświadczenie z elektroniką, nigdy nie robiłem nic na tak dużą skalę.

littlebirdceo
źródło

Odpowiedzi:

14

Jestem autorem biblioteki ShiftPWM i właśnie zaktualizowałem dokumentację, aby zawierała schematy i wiele innych ogólnych informacji na temat normalnych diod LED, pasków LED i diod LED dużej mocy.

Prawdopodobnie już rozpocząłeś swój projekt, ale ponieważ ta strona ma wielu odwiedzających, nadal chciałbym udzielić szczegółowej odpowiedzi.

Jeśli chcesz kontrolować 500 diod LED za pomocą ShiftPWM, możesz uzyskać około 64 poziomów jasności na diodę przy częstotliwości 60 Hz. Użyłbyś 64 rejestrów zmianowych. Dedykowane sprzętowe sterowniki PWM zapewniają wyższy poziom jasności, ale będą nieco droższe. Myślę, że główną zaletą mojej biblioteki jest łatwość użycia, ponieważ zawiera ona funkcje RGB i HSV oraz wiele przykładów.

Osobiście wybrałbym TLC5916 z TLC5917 zamiast zwykłych rejestrów przesuwnych, ponieważ mają one wbudowany sterownik prądu stałego LED. Pozwoli ci to zaoszczędzić dużo lutowania, ponieważ nie potrzebujesz rezystorów.

Na mojej stronie internetowej ( http://www.elcojacobs.com/shiftpwm ) mam więcej informacji na temat podłączania diod LED i radzenia sobie z prowadzeniem długich przewodów sygnałowych z Arduino przy dużych prędkościach.

Jeśli masz więcej pytań, zadaj je.

ElcoJacobs
źródło
Czy spojrzałeś na moją odpowiedź poniżej? Chociaż opisywana przeze mnie technika wykorzystuje dodatkowy sprzęt, prawdopodobnie można by zastosować to samo podejście, aby znacznie poprawić szybkość swojej biblioteki. Nie zaprogramowałem Arduino, więc nie znam jego czasów instrukcji, ale w najprostszej formie możesz zmniejszyć obciążenie procesora do tego, co byłoby wymagane, aby po prostu wystrzelić SPI (jeśli obecnie masz 5 cykli) na bit, a twój SPI zajmuje 16 cykli na bajt, co byłoby przyspieszeniem 2,5x). Możesz nawet być w stanie robić bardziej wyrafinowane rzeczy, wciąż pracując z tą prędkością.
supercat,
Załóżmy na przykład, że chcesz mieć osiem poziomów jasności reprezentujących pełne włączenie, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 i 1/128. Jeśli Arduino może wykonać operację „ORAZ” lub „LUB” dla wartości pobranej ze wskaźnika i przyrostu tego wskaźnika w mniej niż czterech cyklach, prawdopodobnie można użyć trzech bitów na piksel do przechowywania informacji o jasności i nadal osiągać prędkość transferu 16 cykli na 8 diod LED.
supercat,
Obliczanie wartości PWM nakłada się na wyjście SPI w mojej bibliotece. Pracuję z SPI przy 4MHz, a obliczenia zajmują nieco więcej czasu niż wyjście SPI. Zajmuje 43 cykli zegara na bajt, więc na 8 wyjść. Jest to wystarczająco szybkie dla większości konfiguracji. Możesz uzyskać większą prędkość, stosując modulację kodu bitowego, w której masz 8 okresów aktualizacji, każdy kolejny okres o połowę krótszy od poprzedniego. Napisałem wersję BCM, ale jest ona bardziej wrażliwa na moment, w którym zaktualizujesz ustawienie jasności. Może powodować migotanie, gdy jest źle wyrównany. Prawdopodobnie użyję go w wersji matrycowej.
ElcoJacobs,
Zaletą BCM jest to, że możesz skorzystać z taktowania 1 / 2,1 / 4 ..., ale nadal wymaga tylko jednego pinu na diodę LED. Jeśli masz wykształcenie informatyczne, interesujące może być obliczanie bajtów SPI. Otrzymuję cykl pracy z pamięci (2 zegary) i robię porównanie (1 zegar). Porównywany wynik jest przechowywany w przeniesieniu, dzięki czemu mogę przenieść go do bajtu za pomocą funkcji obracania nad przeniesieniem (1 zegar). Wykonanie tego 8 razy powoduje umieszczenie wszystkich wyników porównania w jednym bajcie, który jest gotowy do wysłania do SPI.
ElcoJacobs,
13

Po prostu skopiuj :-)

http://www.evilmadscientist.com/article.php/peggy2

Dzisiaj udostępniamy aktualizację naszego projektu Pegboard typu open source „Peggy” LED. Wersja Peggy 2 została przeprojektowana od podstaw. I wygląda… prawie dokładnie tak samo. Zmiany pod maską są jednak znaczne i uważamy, że jest to duża poprawa na wiele sposobów.

Przede wszystkim Peggy 2.0 robi to samo, do cholery: zapewnia wydajne zasilanie 25 x 25 tablic LED. Peggy została zaprojektowana tak, aby zabrać trochę użądlenia, złożoności i bałaganu podczas zabawy z diodami LED. To wszechstronna i wydajna pegboard emitujący światło, który pozwala skutecznie napędzać setki diod LED w dowolnej konfiguracji, bez obliczania pojedynczego rezystora obciążenia. Możesz zainstalować w dowolnym miejscu od jednej do 625 diod LED, a Peggy zapali je dla Ciebie.


Peggy 2.0 jest teraz również kompatybilny z Arduino: obsługuje programowanie za pomocą kabla USB-TTL, przy użyciu popularnego środowiska oprogramowania Arduino.

Axeman
źródło
Cudowny link! Zakładka Nie planowałem pracować nad takim projektem, ale muszę to zrobić teraz, widziałem to małe wideo :-)
Wouter Simons
@NicolaeSurdu Nie zepsuty. Właśnie to otworzyłem.
Axeman
3
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
6

W jakim układzie chcesz mieć diody LED? Możesz zaoszczędzić dużo pracy, jeśli kupisz niektóre matryce LED, możesz uzyskać jednokolorowe matryce LED 8x8 (64 diody LED) za grosze lub dwie .

Nie uzyskasz prawdziwego PWM z AVR i rejestrami przesuwnymi na wielu diodach LED, ale możesz być w stanie wycisnąć 2-4 poziomy jasności. Musiałbyś uruchomić liczby i zobaczyć, co jest możliwe.

Allegro tworzy kilka przydatnych rejestrów przesuwnych prądu stałego, specjalnie zaprojektowanych do kontrolowania układów diod LED, dzięki czemu nie potrzebujesz dodatkowych rezystorów, co również uprości sprawę. Być może nie będziesz mógł sterować diodami LED bezpośrednio z wyjścia AVR, jeśli nie może zapewnić wystarczającej mocy, więc musisz użyć tranzystorów. Możesz umieścić je w tablicach w jednym układzie scalonym , co również oszczędza trochę pracy.

davr
źródło
wszystkie bardzo dobre punkty!
Jason S
5

Nie mam pojęcia, jaki zakres PWM potrzebujesz do diody LED, ale pracowałem nad 64-kanałowym kontrolerem PWM do aplikacji serwosterowania, która może dać mi impulsy między 600us a 2.4ms. Wykorzystuje CD74HCT238E (demultipleksery 3-8 linii) do generowania 64 kanałów z 8 pinów I / O na ATMega168 i można nim sterować za pomocą prostych poleceń szeregowych. Wydaje mi się, że możesz połączyć wiele wersji zmodyfikowanej wersji tego kontrolera razem na linii szeregowej i zaadresować wszystkie 500 diod LED ... Prawdopodobnie możesz użyć wersji kontrolera ATTiny2313, ponieważ wymagania dotyczące oprogramowania układowego byłyby prostsze.

Mój blog zawiera źródło montażu oraz schematy i szczegóły procesu projektowania.

Len Holgate
źródło
5

Sprawdź układy scalone „LED driver” na mouser / digikey. Na przykład TI tworzy grupę sterowników z różnymi interfejsami (I2C, SPI), które z pewnością zaspokoją Twoje potrzeby. Większość tych sterowników zaprojektowano tak, aby były połączone szeregowo, dzięki czemu szeregowy sygnał wyjściowy z jednego jest wprowadzany do szeregowego drugiego.

Na przykład coś takiego jak TLC5940 oferuje 16-kanałową kontrolę PWM. Zasadniczo jest to 16-bitowy rejestr przesuwny o stałym natężeniu z 12-bitową kontrolą PWM w skali szarości. Mogę polecić ten konkretny układ scalony, ponieważ pomogłem zaprojektować z nim wyświetlacz 80x16.

David Brenner
źródło
4

Mondomatrix produkuje szeregowe, adresowalne tablice sterowników LED i jest oparty na platformie Arduino: http://www.displayduino.com/ Możesz być w stanie złożyć system przy użyciu tego sprzętu dość łatwo


źródło
4

Jeśli nie chcesz zbyt wielu bitów kontroli PWM dla każdej diody LED i chcesz uniknąć konieczności manipulowania procesorem z 500 diodami LED w każdym cyklu PWM, możesz kontrolować 8 diod LED o N bitach jasności za pomocą N 74HC595 lub równoważnych układów . Połącz wyjścia wszystkich N układów scalonych razem i połącz zezwól z niektórymi obwodami, które umożliwią tylko jeden na raz z odpowiednim taktowaniem. Rozmieść tak, aby pierwszy chip był włączony do połowy czasu, drugi do połowy pozostałej części itp.

Każde przeładowanie rejestrów przesuwnych powinno być zsynchronizowane z szybkością PWM, aby zminimalizować efekty aliasingu (np. Jeśli poziom jasności zmieniał się gwałtownie między 0111 a 1000, punkt w cyklu PWM, w którym nastąpiło przełączenie, może chwilowo zmienić jasność pozorną ).

Chociaż korzystanie z wielu wyjść 74HC595 dla każdej diody LED może być denerwujące, to podejście jest prawdopodobnie najprostsze, które może utrzymać różne poziomy jasności bez ciągłej interwencji CPU.

supercat
źródło
3

To nie odpowiada bezpośrednio na pytanie, ale kolejnym aspektem, który możesz wziąć pod uwagę, jest możliwa zmienność jasności wśród diod LED w 500 partii. Jest to szczególnie ważne, jeśli te diody LED są montowane blisko siebie, jak na matrycy lub w wyświetlaczach 7-segmentowych. Zobacz tę odpowiedź aby uzyskać więcej informacji na temat rozwiązania tego problemu, w szczególności za pomocą korekcji kropek w celu kompensacji zmian jasności diod LED.

Ten problem wystąpił, kiedy dostałem 200 1mm czerwonych diod LED dla zestawu dużych 7-segmentowych wyświetlaczy, które budowałem. Moje tanie rozwiązanie problemu polegało na:

  1. Zbudowałem tester LED w płytce ściekowej, aby sklasyfikować zestawy diod LED w różnych kategoriach jasności
  2. Każdy segment zamontowałem za pomocą diod LED tej samej kategorii (w moim projekcie każdy segment składał się z 5 diod LED zamontowanych szeregowo)
  3. Różnicę jasności każdego segmentu skompensowałem za pomocą różnych rezystorów ograniczających prąd. Na przykład, dla segmentu z jaśniejszymi diodami LED, użyłbym rezystora 100 omów, podczas gdy dla innego segmentu z ściemniającymi diodami LED użyłbym rezystorów 120 omów.
Ricardo
źródło
1
Ważny punkt, ale nie odpowiada na pytanie.
Matt Young,
1
@MattYoung Zgoda. Odpowiedzi na pytanie w dużej mierze udzielają wszystkie pozostałe odpowiedzi. Chciałem tylko uzupełnić te odpowiedzi, rozwiązując boczny problem, który może wpłynąć na projekt PO.
Ricardo
1

XMOS używa Macroblock MBI5026 z ich zestawami płytek LED. Myślę, że są one używane w większości innych profesjonalnych systemów.

Leon

Leon Heller
źródło
1

Dedykowane układy sterownika z interfejsami szeregowymi rzeczywiście będą prawdopodobnie najlepszą drogą. Radzenie sobie z poszczególnymi rejestrami przesuwnymi będzie prawdopodobnie oznaczało bardzo złożony obwód. Przynajmniej robią to Maxim i TI. Nie pamiętam, czy któryś z nich ma do tego szczególnie odpowiedni model.

Nadal zajmie dużo sprzętu.

Jeśli chodzi o zasilanie, programowanie i magistrale, arkusz danych dla każdego sterownika będzie prawdopodobnie zawierał najwięcej informacji, których potrzebujesz.

XTL
źródło
1

W dziedzinie oprogramowania, jeśli liczba potrzebnych różnych ustawień jasności nie jest zbyt duża, pomocne może być przechowywanie danych w formacie „bit-planar” (jak opisano w mojej innej odpowiedzi sprzętowej), a następnie procedury wyjściowe używają operatorów logicznych do działania na 8 pikseli jednocześnie. Aby uzyskać maksymalną wydajność, będzie to wymagało posiadania wielu oddzielnych procedur wyjściowych, używanych dla różnych części cyklu PWM; na przykład, jeśli chce się użyć 4-bitowych wartości jasności, użyłby się ośmiu procedur postaci:

  movf bit0Comp, w; Powinien wynosić 00 lub FF w zależności od bitu 0 porównania (FF, jeśli jest czysty)
  iorwf POSTINCF, w; Bit 0 danych; zawsze używaj IORWF
  iwf POSTINCF, w; Bit 1 danych; użyj IORWF, jeśli ustawiony jest bit 1 porównania; ANDWF, jeśli jest czysty
  iwf POSTINCF, w; Bit 2 danych; Użyj IORWF, jeśli ustawiony jest bit 1 porównania; ANDWF, jeśli jest czysty
  iwf POSTINCF, w; Bit 2 danych; Użyj IORWF, jeśli ustawiony jest bit 1 porównania; ANDWF, jeśli jest czysty
  movwf SPIREG; Przechowuj wynikowy bajt (zestaw bitów, jeśli> = porównanie)

Można stosować różne kombinacje IORWF i ANDWF, w zależności od wartości porównania. Zauważ, że stosując to podejście, jak pokazano, można aktualizować wartości jasności pikseli w dowolnym punkcie cyklu PWM bez migotania, pod warunkiem że wszystkie cztery bity są zapisywane między wywołaniami procedury przesunięcia wyświetlania lub poprzez procedurę aktualizacji pikseli określającą, czy następne przesunięcie wyświetli „1” lub „0” dla piksela i albo ustawi lub usunie wszystkie bity piksela (dowolna operacja sprawi, że zrobi to, co zamierzał zrobić i tak), a następnie zapisze wszystkie bity, których wartość powinna być odwrotnie. Należy również zauważyć, że można osiągnąć dowolną nieliniową skalę jasności, zmieniając czas aktualizacji wyświetlacza lub stosując niektóre wartości porównania więcej niż raz w cyklu PWM.

supercat
źródło
1

Układy FPGA lub CPLD mogą być przydatne do takich zadań, ponieważ oferują wiele styków we / wy. Wybierz najprostszy i najtańszy. Jeśli jedno nie wystarczy, użyj pary.

Carl
źródło
Czy możesz podać nam kilka dodatkowych szczegółów na temat tego, dlaczego jest to dobra opcja, teraz już o tym wiem, ale wiem, jakie są opcje i jakie sugerowane technologie wymieniasz, plakat pierwotny (OP) prawdopodobnie nie ma takich tło.
Kortuk
Nie jestem pewien, czy jest to najlepsza opcja, ale chciałem, aby była o niej wspomniana dla kompletności. Jeśli kontrolujesz 500 diod LED za pomocą PWM, w taki czy inny sposób, w końcu potrzebnych jest 500 indywidualnie sterowanych przewodów. Trudno znaleźć mikrokontroler z tyloma pinami wyjściowymi. Jest wiele sposobów na obejście tego przy użyciu mikrokontrolerów, ale jeden lub kilka tanich CPLD / FPGA może z łatwością dać tym pinom wyjściowym.
Carl
1

Prawie na pewno możesz to zrobić z łatwością za pomocą PSoC3 lub PSoC5 .

Układy PSoC to mikrokontrolery, które zawierają rekonfigurowalny sprzęt cyfrowy, trochę podobny do FPGA lub CPLD. Oznacza to, że możesz tworzyć złożone obwody do wykonywania nietypowych czynności, takich jak sterowanie 500 diodami LED za pomocą PWM. Co więcej, prawdopodobnie możesz wszystko zaimplementować przy użyciu ponownie konfigurowalnych bloków cyfrowych, co oznacza, że ​​część procesora układu musi tylko zapisać pożądane jasności LED w tablicy.

504 diody LED pasują do prostokąta 21 x 24. Jeśli miałbyś 24 kanały PWM i 21 GPIO, to możesz zacząć działać. Zgadnij co? PSoC ma więcej.

Możesz łatwo skonfigurować 24 kanały PWM na PSoC i skonfigurować 21 innych pinów, aby były częścią rejestru przesuwnego. Następnie skonfiguruj niektóre kanały DMA, aby pompowały bajty z pamięci do wyjść PWM, i się śmiejesz. Procesor musi teraz tylko wygenerować grafikę. PSoC3 ma 8-bitowy rdzeń 8051, a PSoC5 ma 32-bitowy ARM. Wybierz. Jedyne zewnętrzne układy scalone, których potrzebujesz, to niektóre ULN2803, aby zapewnić wysoki prąd napędu dla rzędów. Wyjścia PWM powinny mieć wystarczającą ilość prądu dla pojedynczych diod LED.

Rocketmagnet
źródło
Jest to całkowita nadwyżka w sterowaniu diodami LED. Istnieją dedykowane, tanie, wstępnie zaprojektowane sterowniki LED przeznaczone do łączenia takich dużych ilości, które są używane przez cały czas do gigantycznych wyświetlaczy. Nie trzeba tego wszystkiego od nowa wymyślać, aby uzyskać większy koszt.
nemik
@nemik - W rzeczywistości całkowity koszt żetonów (od drogiego Farnell) to tylko 6,80 £.
Rocketmagnet
0

Wykorzystaj korzyści skali. Chińskie witryny takie jak Aliexpress sprzedają nici LED oparte na WS2811 za ~ 15 USD za 50 diod LED. Są indywidualnie adresowalne, jasne, zwykle wodoodporne i mają PWM do jasności. Żadnych rejestrów lutowania ani shiftów, które mogłyby zepsuć oba. Zrobię to wszystko sam, założę się, że będzie cię to kosztować więcej, zajmie ci więcej czasu i będzie bardzo frustrujące. Plus jesteś w Oz, więc wysyłka z Chin nie będzie zbyt droga.

Są one stworzone do tworzenia gigantycznych wyświetlaczy LED, więc wydają się być dość tanie. Upewnij się, że ponownie wstrzykujesz energię co około 50 diod LED, aby uzyskać najlepszą wydajność.

Istnieją również biblioteki Arduino, aby były łatwe w użyciu.

nemik
źródło
1
15 USD za 50 diod LED? Czyli 500 diod LED to 150 USD? I masz odwagę powiedzieć, że moje rozwiązanie jest drogie? -1
Rocketmagnet
Proszę również podać link do tego. WS801 Google nie dobrze, i ani nie pojawiają się na poszukiwaniu Aliexpress
Rocketmagnet
Przepraszam, miałem na myśli WS2811, takie jak te aliexpress.com/store/product/… lub, bez przyciemniania PWM, te aliexpress.com/store/product/…
nemik 16'12
Jeden sygnał szeregowy do sterowania 50 diodami LED z przyciemnianiem PWM. Dzięki, właśnie o to mi chodzi. Ale standardowy rejestr przesuwny zapewnia pin „zatrzaskowy” do kopiowania buforowanych danych na wyjścia po przesłaniu pełnej klatki. Nie ma tu zatrzasku, więc spodziewam się zauważalnego hałasu przy wysokich częstotliwościach odświeżania. Układy obsługują dane 400 Kb / s przy 15 bitach na piksel, więc ekran będzie wyświetlał bzdury przez 1,9 milisekundy podczas aktualizacji ramki.
nialsh,