Pitanje:
Upravljanje 500 LED dioda pomoću PWM-a
littlebirdceo
2009-12-21 13:17:25 UTC
view on stackexchange narkive permalink

Razmišljam o tome da preuzmem projekt koji bi uključivao pojedinačno obraćanje 500 LED-a, optimalno s PWM podrškom za svaku.

Planiram koristiti Arduino s obzirom da ga već imam, ali otvoren sam za prijedloge ako netko misli da bi drugačija platforma bolje odgovarala.

Shift registri bi se treba zaposliti. Što je dobar registar smjena za upotrebu u ovoj situaciji? Ako PWM ovaj projekt znatno poskupi, u redu sam i bez njega. Želim pokušati potrošiti manje od 100 USD. Skupno bih kupio 500 LED dioda s ebaya.

Kakvo je vaše mišljenje o najboljem načinu upravljanja tako velikim brojem LED-a? Također, kako bih se bavio pružanjem energije? Bila bih zahvalna na bilo kakvoj pomoći. Prilično sam iskusan s elektronikom, jednostavno nikada nisam radio ništa tako veliko.

Petnaest odgovori:
#1
+14
ElcoJacobs
2012-08-10 03:09:16 UTC
view on stackexchange narkive permalink

Ja sam autor knjižnice ShiftPWM i upravo sam ažurirao dokumentaciju tako da uključuje sheme i puno općenitijih informacija za normalne LED diode, LED trake i LED diode velike snage.

Vjerojatno ste već započeli svoj projekt , no budući da ova stranica ima puno posjetitelja, volio bih dati detaljan odgovor.

Ako želite kontrolirati 500 LED-a pomoću ShiftPWM-a, možete dobiti oko 64 razine svjetline po LED-u pri 60 Hz. Koristili biste 64 registra smjena. Namjenski hardverski PWM upravljački programi pružit će vam više razina svjetline, ali bit će i malo skuplji. Mislim da je glavna prednost moje knjižnice jednostavnost upotrebe, jer uključuje RGB i HSV funkcije i puno primjera.

Osobno bih odabrao TLC5916 od TLC5917 umjesto uobičajenih registara pomaka, jer oni imaju ugrađeni LED upravljački program s konstantnom strujom. Ovo će vam uštedjeti puno lemljenja jer vam ne trebaju otpornici.

Na mojoj web stranici ( http://www.elcojacobs.com/shiftpwm) imam još informacije o tome kako spojiti LED diode i kako se nositi s dugačkim signalnim žicama s Arduinom pri velikim brzinama.

Ako imate još pitanja, pitajte.

Jeste li pogledali moj odgovor u nastavku? Iako tehnika koju opisujem koristi dodatni hardver, isti bi se pristup vjerojatno mogao koristiti za znatno poboljšanje brzine vaše knjižnice. Nisam programirao Arduino, tako da nisam upoznat s vremenima njegovih uputa, ali u najjednostavnijem obliku možete smanjiti opterećenje CPU-a na ono što bi bilo potrebno za jednostavno izbacivanje bitova SPI-a (ako trenutno imate 5 ciklusa po bitu, a vaš SPI traje 16 ciklusa po bajtu, to bi bilo 2,5 puta brže). Možda ćete čak moći raditi i neke sofisticiranije stvari dok još uvijek trčite tom brzinom.
Na primjer, pretpostavimo da želite imati osam razina svjetline koje predstavljaju potpuno uključene, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 i 1/128. Ako Arduino može izvesti operaciju "I" ili "ILI" na vrijednosti dohvaćenoj iz pokazivača i povećati taj pokazivač za manje od četiri ciklusa, vjerojatno biste mogli koristiti tri bita po pikselu za pohranu podataka o svjetlini i još uvijek postići brzinu prijenosa od 16 ciklusa po 8 LED dioda.
Izračunavanje vrijednosti PWM preklapa se s izlazom SPI u mojoj knjižnici. Izvodim SPI na 4MHz i izračuni traju malo duže od SPI izlaza. Potrebna su 43 takta po bajtu, dakle na 8 izlaza. Ovo je dovoljno brzo za većinu postavki. Možete postići veću brzinu pomoću modulacije bitnog koda, gdje imate 8 razdoblja ažuriranja, svako sljedeće razdoblje upola manje od prethodnog. Napisao sam BCM verziju, ali osjetljiviji je na trenutak kada ažurirate postavku svjetline. Može prouzročiti treperenje kada je pogrešno poravnato. Vjerojatno ću ga koristiti u matričnoj verziji.
BCM ima prednost vašeg pristupa što možete iskoristiti vremensko mjerenje 1 / 2,1 / 4 ..., ali i dalje uzima samo jedan pin po LED-u. Ako imate pozadinu informatike, možda će vam biti zanimljivo kako Izračunavaju se SPI bajtovi. Primam radni ciklus iz memorije (2 sata) i napravim usporedbu (1 sat). Rezultat usporedbe pohranjen je u nošenju, tako da ga mogu prebaciti u bajt okretanjem preko nosača (1 sat). Učinite to 8 puta, sve rezultate usporedbe stavlja u jedan bajt koji je spreman za slanje SPI-u.
#2
+13
Axeman
2009-12-21 13:21:13 UTC
view on stackexchange narkive permalink

Samo kopirajte :-)

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

Danas smo ' objavljujemo ažuriranje našeg projekta „Peggy“ s otvorenim izvorom LED Pegboard. Peggy verzija 2 redizajnirana je od temelja. I izgleda ... gotovo potpuno isto. Promjene ispod haube su ipak značajne i mislimo da je to veliko poboljšanje na mnogo načina.

Prvo i najvažnije, Peggy 2.0 i dalje radi istu vražju stvar: pruža učinkovitu snagu za 25 x 25 nizova LED lokacija. Peggy je dizajnirana da ukloni dio uboda, složenosti i nereda iz igre sa LED diodama. To je svestrani i snažni pegboard koji emitira svjetlost koji vam omogućuje učinkovit pogon stotina LED-a u bilo kojoj konfiguraciji koja vam se sviđa, bez toliko izračunavanja otpora jednog opterećenja. Možete instalirati bilo gdje od jedne do 625 LED dioda, a Peggy će ih upaliti za vas.


Peggy 2.0 je sada također kompatibilan s Arduino: podržava programiranje putem USB-TTL kabel, koristeći popularno softversko okruženje Arduino.

Predivan link! Označeno. Nisam planirao raditi na ovakvom projektu, ali moram to napraviti sada kad sam vidio taj mali video :-)
@NicolaeSurdu Nije slomljen. Upravo sam ga otvorio.
Iako ovo može teoretski odgovoriti na pitanje, [bilo bi poželjno] (http://meta.stackexchange.com/q/8259) ovdje uključiti bitne dijelove odgovora i dati vezu za referencu.
#3
+6
davr
2009-12-21 15:09:54 UTC
view on stackexchange narkive permalink

U kojem rasporedu želite LED diode? Možete uštedjeti puno posla ako kupite neke LED matrice, možete dobiti jednobojne 8x8 LED matrice (64 LED) za novac ili dvije.

Nećete dobiti pravi PWM s AVR-om i registrima pomaka na ovoliko LED-a, ali možda ćete moći stisnuti 2-4 razine svjetline. Morali biste pokrenuti brojeve i vidjeti što je moguće.

Allegro izrađuje neke priručne registre za pomicanje sudopera s konstantnom strujom posebno dizajnirane za upravljanje nizovima LED-a, tako da ne morate trebaju dodatni otpornici, koji će i stvari učiniti jednostavnijima. Možda nećete moći pokretati LED diode izravno s AVR izlaza ako ne može pružiti dovoljno energije, pa ćete morati koristiti tranzistore. Možete ih dobiti u nizovima u jednom IC-u, što štedi i dio posla.

sve vrlo dobre bodove!
#4
+5
Len Holgate
2009-12-21 17:49:47 UTC
view on stackexchange narkive permalink

Nemam pojma o opsegu PWM-a koji vam treba za LED, ali radio sam na 64-kanalnom PWM kontroleru za aplikaciju servo upravljanja koja mi može dati impulse između 600us i 2,4ms. To koristi CD74HCT238E (3-8-linijski demultipleksori) za generiranje 64 kanala iz 8 I / O pinova na ATMega168 i njime se može upravljati jednostavnim serijskim naredbama. Pretpostavljam da biste mogli povezati više verzija modificirane verzije ovog kontrolera u serijsku liniju i obratiti se na svih 500 LED-a ... Vjerojatno biste mogli koristiti verziju kontrolera ATTiny2313 jer bi vaši zahtjevi za firmverom bili jednostavniji.

Moj blog sadrži izvor montaže i sheme te detalje postupka dizajniranja.

#5
+5
David Brenner
2009-12-21 21:57:17 UTC
view on stackexchange narkive permalink

Pogledajte IC-ove "LED upravljačkog programa" na mouser / digikey. TI, na primjer, izrađuje hrpu upravljačkih programa s raznim sučeljima (I2C, SPI) koja bi zasigurno zadovoljila vaše potrebe. Većina ovih upravljačkih programa dizajnirani su za lančano povezivanje, tako da se serijski izlaz iz jednog dovodi u serijski ulaz drugog.

Na primjer, nešto poput TLC5940 nudi 16-kanalnu PWM kontrolu. U osnovi, to je konstantni trenutni 16-bitni pomični registar s 12-bitnom PWM kontrolom u sivim tonovima. Mogu preporučiti taj IC, jer sam s njim pomogao dizajnirati zaslon veličine 80x16.

#6
+4
Lepton
2010-07-29 11:09:17 UTC
view on stackexchange narkive permalink

Mondomatrix izrađuje neke serijske (rs-485) adresirane LED upravljačke ploče, a zasnovan je na Arduino platformi: http://www.displayduino.com/ Možda ćete moći sastaviti sustav koji prilično lako koristi taj hardver

#7
+4
supercat
2011-03-16 22:38:26 UTC
view on stackexchange narkive permalink

Ako ne želite previše bitova PWM kontrole za svaku LED diodu i želite izbjeći da se procesor petlja sa 500 LED dioda u svakom PWM ciklusu, možete upravljati 8 LED dioda s N bitova svjetline pomoću N 74HC595 ili ekvivalentni čipovi. Spojite izlaze svih N čipova zajedno i spojite opskrbu na neke sklopove koji će omogućiti samo jedan po jedan s prikladnim vremenom. Uredite tako da prvi čip bude omogućen pola vremena, drugi će biti omogućen za pola ostatka itd.

Svako ponovno učitavanje registara smjene treba biti sinkronizirano sa brzinom PWM-a, kako bi se smanjilo alias efekti (npr. ako se razina svjetline brzo prebacivala između 0111 i 1000, točka u PWM ciklusu kada je došlo do prekida mogla bi trenutno promijeniti prividnu svjetlinu).

Iako je za svaku LED trebalo koristiti više izlaza 74HC595 može biti dosadan, ovaj je pristup vjerojatno najjednostavniji koji bi mogao održavati različite razine svjetline bez trajne intervencije CPU-a.

#8
+3
Ricardo
2013-12-12 18:57:24 UTC
view on stackexchange narkive permalink

Ovo ne odgovara izravno na pitanje, ali još jedan aspekt koji ćete možda trebati razmotriti je moguća varijabilnost svjetline među LED-ima u vašoj seriji 500. To je osobito važno ako su ove LED diode postavljene jedna blizu druge, poput matrice ili 7-segmentnih zaslona. Pogledajte ovaj odgovor za više detalja o tome kako riješiti ovaj problem, posebno korištenjem korekcije točkica kako biste nadoknadili razlike u svjetlini LED diode.

Ovaj sam problem doživio kad sam dobio 200 crvenih LED dioda od 1 mm za niz velikih 7-segmentnih zaslona koje sam gradio. Moje jeftino rješenje za rješavanje problema podrazumijevalo je sljedeće:

  1. Ugradio sam LED ispitivač u ploču za razvrstavanje setova LED u različite kategorije osvjetljenja
  2. Montirao sam svaki segment koristeći LED diode u istoj kategoriji (u mom dizajnu svaki se segment sastojao od 5 LED dioda montiranih u seriju)
  3. Kompenzirao sam razliku u svjetlini svakog segmenta koristeći različite otpornike za ograničavanje struje. Na primjer, za segment sa svjetlijim LED-ima upotrijebio bih otpor od 100 ohma, dok bih za drugi segment s prigušenim LED-ima koristio otpore od 120 ohma.
Važeća točka, ali ne odgovara na pitanje.
@MattYoung Dogovoreno. Na pitanje uglavnom odgovaraju svi ostali odgovori. Samo sam želio nadopuniti te odgovore, obraćajući se sporednom pitanju koje bi moglo utjecati na dizajn OP-a.
#9
+2
x4mer
2011-09-17 22:47:29 UTC
view on stackexchange narkive permalink

Predlažem upotrebu tehnike binarne kutne modulacije opisane u ovom članku http://www.artisticlicence.com/WebSiteMaster/App%20Notes/appnote011.pdf

Ili provjerite ShiftPWM knjižnica http://www.elcojacobs.com/shiftpwm/

Iako ovo može teoretski odgovoriti na pitanje, [bilo bi poželjno] (http://meta.stackexchange.com/q/8259) ovdje uključiti bitne dijelove odgovora i dati vezu za referencu.
#10
+1
Leon Heller
2009-12-21 22:36:52 UTC
view on stackexchange narkive permalink

XMOS koristi Macroblock MBI5026 sa svojim LED pločicama. Mislim da se koriste u većini drugih profesionalnih sustava.

Leon

#11
+1
XTL
2010-07-28 18:52:59 UTC
view on stackexchange narkive permalink

Namjenski upravljački čipovi sa serijskim sučeljima doista će vjerojatno biti najbolja ruta. Suočavanje s pojedinačnim registrima smjena vjerojatno će značiti vrlo složen krug. Bar Maxim i TI čine neke. Ne sjećam se ima li i jedan model posebno prikladan za toliko.

I dalje će trebati puno hardvera.

Što se tiče snage, programiranja i sabirnica, tablica podataka jer će svaki vozač vjerojatno imati najviše informacija koje će vam trebati.

#12
+1
supercat
2012-08-13 21:19:11 UTC
view on stackexchange narkive permalink

Unutar softverskog područja, ako broj različitih postavki svjetline koje trebate nije prevelik, možda će biti korisno pohraniti podatke u "bit-planarnom" formatu (kao što je opisano u mom drugom odgovoru utemeljenom na hardveru) i onda neka izlazne rutine koriste logičke operatore da djeluju na 8 piksela odjednom. Za maksimalnu učinkovitost, ovo će zahtijevati više zasebnih izlaznih rutina, koje se koriste za različite dijelove PWM ciklusa; na primjer, ako se želi koristiti 4-bitne vrijednosti svjetline, koristilo bi se osam rutina oblika:

 movf bit0Comp, w; Trebao bi biti 00 ili FF, ovisno o bitu 0 usporedbe (FF ako je jasan) iorwf POSTINCF, w; Bit 0 podataka; uvijek koristite IORWF iwf POSTINCF, w; Bit 1 podataka; koristite IORWF ako je postavljen bit 1 usporedbe; ANDWF ako je jasno andwf POSTINCF, w; Bit 2 podataka; Koristite IORWF ako je postavljen bit 1 usporedbe; ANDWF ako je jasno andwf POSTINCF, w; Bit 2 podataka; Koristite IORWF ako je postavljen bit 1 usporedbe; ANDWF ako je jasno movwf SPIREG; Spremite rezultirajući bajt (bitovi postavljeni ako je> = comparand) 

Koristio bi se različitim kombinacijama IORWF i ANDWF, ovisno o vrijednosti usporedbe. Imajte na umu da se korištenjem ovog pristupa kao što je ilustrirano, vrijednosti svjetline piksela mogu ažurirati u bilo kojoj točki ciklusa PWM-a bez treperenja, pod uvjetom da su sva četiri bita zapisana između poziva na rutinu pomicanja zaslona ili ako rutina ažuriranja piksela odredi hoće li sljedeća smjena će iznijeti "1" ili "0" za piksel, ili postavljanjem ili brisanjem svih bitova piksela (koja god operacija bude učinila da čini sve što je ionako namjeravao učiniti), a zatim zapisivanjem bilo kojeg bita čija bi vrijednost trebala biti suprotno. Također imajte na umu da se proizvoljne nelinearne skale svjetline mogu postići mijenjanjem vremena ažuriranja zaslona ili korištenjem nekih usporednih vrijednosti više puta u PWM ciklusu. Nelinearne skale svjetline često su korisne sa LED diodama, jer je razlika u svjetlini između 1/128 i 2/128 duty obično vidljivija od razlike između 127/128 i 128/128 (ili čak između 7/8 8/8).

#13
+1
Carl
2012-08-15 02:25:06 UTC
view on stackexchange narkive permalink

FPGA ili CPLD mogu biti dobri za takve zadatke jer nude mnogo I / O pinova. Idite na najjednostavnije i najjeftinije. Ako jedan nije dovoljan, upotrijebite par.

Možete li nam dati još nekoliko detalja o tome zašto je ovo dobra opcija, trenutno znam za to, ali znam koje su mogućnosti i koje su predložene tehnologije koje navodite, Origial Poster (OP) vjerojatno nema takve pozadinu.
Nisam siguran da je to najbolja opcija, ali želio sam da se to spominje zbog cjelovitosti. Ako se na ovaj ili onaj način kontrolira 500 LED dioda pomoću PWM-a, na kraju je potrebno 500 pojedinačno upravljanih žica. Teško je pronaći mikrokontroler s toliko izlaznih pinova. Postoji mnogo načina da se to još uvijek koristi pomoću mikrokontrolera, ali jedan ili nekoliko jeftinih CPLD-ova / FPGA-a lako bi mogli dati te izlazne pinove.
#14
+1
Rocketmagnet
2012-08-15 05:35:08 UTC
view on stackexchange narkive permalink

To gotovo sigurno možete učiniti pomoću PSoC3 ili PSoC5.

PSoC čipovi su mikrokontroleri koji sadrže digitalni hardver koji se može ponovo konfigurirati, pomalo poput FPGA ili CPLD. To znači da možete napraviti složene sklopove za izvođenje neobičnih stvari poput vožnje 500 LED dioda s PWM-om. Štoviše, cijelu stvar vjerojatno možete implementirati pomoću rekonfigurabilnih digitalnih blokova, što znači da CPU dio čipa treba samo upisati željene LED svjetline u niz.

504 LED diode stanu u pravokutnik 21 x 24. Ako imate 24 PWM kanala i 21 GPIO, mogli biste ovo raditi. Pogodi što? PSoC ima i više od toga.

Možete lako postaviti 24 PWM kanala na PSoC i konfigurirati 21 drugu pinovu da bude dio registra smjene. Dalje, konfigurirajte neke DMA kanale za upumpavanje bajtova iz memorije u PWM izlaze i vi se smijete. Sve što CPU sada treba je generirati grafiku. PSoC3 ima 8-bitnu 8051 jezgru, dok PSoC5 ima 32-bitnu ARM. Izaberi. Jedini vanjski IC-ovi koji će vam trebati su neki ULN2803s koji osiguravaju veliku pogonsku struju za redove. PWM izlazi trebali bi imati dovoljno trenutnog pogona za pojedinačne LED diode.

Ovo je potpuno pretjerano za vožnju LED diodama. Postoje namjenski, jeftini, unaprijed dizajnirani LED upravljački programi napravljeni za ulančavanje velikih količina poput ovog koji se cijelo vrijeme koriste za divovske zaslone. Nema potrebe za ponovnim izmišljanjem svega toga i za veće troškove.
@nemik - Zapravo, ukupni trošak čipova (skupog Farnella) iznosi samo 6,80 funti.
#15
  0
nemik
2012-08-14 09:54:08 UTC
view on stackexchange narkive permalink

Iskoristite ekonomiju razmjera. Kineske web stranice poput Aliexpressa prodaju LED žice temeljene na WS2811 po cijeni od ~ 15 dolara po 50 LED dioda. Mogu se pojedinačno adresirati, svijetli su, obično su vodootporni i imaju PWM za osvjetljenje. Nema registra za lemljenje ili pomicanje s kojima biste se zafrkavali. Ako sve ovo napravite sami, kladim se da ćete koštati više, oduzeti puno više vremena i biti vrlo frustrirajući. Osim toga, nalazite se u Ozu, pa isporuka iz Kine neće biti preskupa.

Oni su stvoreni za izradu divovskih LED zaslona, ​​tako da su prilično jeftini. Samo osigurajte ponovno ubrizgavanje snage na otprilike svakih 50 LED-a za najbolje performanse.

Postoje i Arduino knjižnice kako bi ih učinili jednostavnim za upotrebu.

15 dolara za 50 LED? Dakle, za 500 LED dioda to iznosi 150 USD? I imaš petlje da mi kažeš da je moje rješenje skupo? -1
Također, molim vas, možete li dati vezu na ovo. WS801 ne gugla dobro, niti se uključuje u pretraživanje [Aliexpress] (http://www.aliexpress.com/wholesale?SearchText=WS801&catId=0&manual=y)
Žao mi je, mislio sam na WS2811, poput ovih http://www.aliexpress.com/store/product/WS2811-LED-pixel-node-DC5V-input-full-color-RGB-string-50pcs-a-string-IP68- rated / 701799_581805567.htmlor, bez PWM zatamnjenja, ovi http://www.aliexpress.com/store/product/DC5V-input-Square-type12mm-led-string-light-RGB-color-50pcs-a-string/701799_605976057 .html
Jedan serijski signal za pogon 50 LED dioda s PWM prigušivanjem.Hvala, upravo ovo tražim.No, standardni pomični registar pruža pin "zasun" za kopiranje baferiranih podataka na izlaze nakon što se prenese puni kadar.Ovdje nema zasuna pa očekujem primjetnu buku pri visokim brzinama osvježavanja.Čipovi podržavaju 400 Kbps podataka s 15 bita po pikselu, tako da će zaslon prikazivati gluposti 1,9 milisekundi dok se okvir ažurira.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 2.0 licenci pod kojom se distribuira.
Loading...