Sadržaj:

RGB LED matrica: 5 koraka
RGB LED matrica: 5 koraka

Video: RGB LED matrica: 5 koraka

Video: RGB LED matrica: 5 koraka
Video: 28 Band Spectrum Analyzer Part.5 | Acrylic Tower | HOW IT'S MADE 2024, Novembar
Anonim
Image
Image
Dizajn hardvera
Dizajn hardvera

Pretražite Instructable i možete pronaći mnoge LED matrične projekte. Nijedan od njih nije baš ono što sam želio, a to je da istražim interakcije dizajna hardvera i softvera kako bih nešto proizveo i proizveo konačni proizvod u urednoj PCB-u sa upravljačkim programom koji će mi omogućiti da privučem "LED ekran" koristeći visoki nivo konstrukcije (npr. crtanje linije za razliku od postavljanja specifičnih piksela). Ovaj dio mi je bio važan, budući da su mnogi upravljački programi LED matrice gole kosti i ne pružaju mnogo u načinu programskog stvaranja slike ili animacije. To ne znači da ne možete stvarati slike i animacije s drugim upravljačkim programima, samo biste morali raditi više puta od projekta do projekta.

Zato sam krenuo da ostvarim svoju viziju. Prvi korak je bio dizajn hardvera. Ovo mi je vjerovatno bilo najveći izazov, jer je moja pozadina više softver. Opet, bilo je mnogo unaprijed ispečenih dizajna i svakako sam ih koristio za inspiraciju, ali sam želio učiti kroz rad, pa sam prototipirao matricu 4x4 na ploči. Puno sam naučio kroz taj proces, jer prvih nekoliko ponavljanja nisu uspjeli. Ali, radio sam hardverski dizajn koji je funkcionirao, što mi je zauzvrat omogućilo da počnem razvijati upravljački program.

Izabrao sam Arduino kao platformu za upravljačke programe jer je široko dostupan i ima mnogo referenci na mreži. Iako mi je iskustvo u karijeri dopustilo da lagodnije dođem do radne verzije upravljačkog programa od hardverskih napora, bilo je još dosta ponavljanja dok sam optimizirao performanse upravljačkog programa za mikrokontroler ATMega i razvio programski API koji mi se svidio.

Ovaj Instructuctable dokumentuje dizajn i neka ključna saznanja iz mog projekta. Više informacija o ovom projektu možete pronaći na mojoj web stranici, uključujući komplete koje možete kupiti za izradu vlastite RGB LED matrice.

Korak 1: Dizajn hardvera

Primarni cilj mog hardverskog dizajna bio je stvoriti niz RGB LED dioda koje bih mogao programirati, ali isto tako nisam želio potrošiti mnogo novca. Pristup na koji sam se odlučio bio je upotreba registara pomaka 74HC595 za kontrolu LED dioda. Kako bi se smanjio broj potrebnih registara pomaka, RGB LED diode sam rasporedio u matrični raspored gdje su zajedničke anode povezane u redove, a crveni, zeleni i plavi katodni vodiči povezani u kolone. Za matricu 4x4, shema kola izgledala je kao priložena shema spoja.

Jedna stvar koju ćete odmah primijetiti je da s obzirom na matrični krug, postoje neke konfiguracije LED rasvjete koje se ne mogu izvesti dok su sve željene LED diode uključene u isto vrijeme. Na primjer, matrica ne može istovremeno paliti dvije LED diode koje su dijagonalne jedna od druge jer će napajanje i redova i kolona uzrokovati da dvije suprotne LED zasvijetle na okomitoj dijagonali na željene LED diode. Da bismo to zaobišli, upotrijebit ćemo multipleksiranje za skeniranje kroz svaki redak. Na webu postoji mnogo izvora koji pokrivaju tehniku multipleksiranja, neću ih pokušati ovdje replicirati.

Budući da koristim uobičajene anodne LED diode, to znači da redovi pružaju pozitivnu snagu, a stupovi tone u zemlju. Dobra vijest je da registri smjera 74HC595 mogu izvoriti i poništiti napajanje, ali loša vijest je da imaju ograničenje količine energije koju mogu nabaviti ili potopiti. Pojedinačni pinovi 74HC595 imaju maksimalnu struju od 70 mA, ali najbolje je zadržati manje od 20 mA. Pojedinačne boje u našim RGB LED diodama imaju približno 20 mA izlaza. To znači da 74HC595 ne može izravno napajati cijeli red LED dioda ako ih želim uključiti.

Dakle, umjesto da napaja red izravno, 74HC595 će umjesto toga pokretati tranzistor za svaki red, a tranzistor će uključiti ili isključiti struju koja napaja red. Budući da dizajn koristi zajedničke anodne LED diode, preklopni tranzistor bit će PNP. Ako bismo koristili zajedničku katodnu LED diodu, preklopni tranzistor bi bio NPN. Imajte na umu da s korištenjem PNP tranzistora za pokretanje reda, postavke registara pomaka za njegovo uključivanje sada postaju niske jer PNP tranzistoru treba negativan napon između emitera i baze da se uključi, što će omogućiti da pozitivna struja teče u red.

Još jedna stvar koju treba uzeti u obzir je željeni raspored bitova registara pomaka. To jest, među registrima pomaka, koji bitovi kontrolišu redove ili kolone u matrici. Dizajn s kojim sam poslao je mjesto gdje prvi bit, ili "najznačajniji bit", poslan u registar pomaka s lančanicima, kontrolira kolonu LED dioda crvenog elementa, drugi bit kontrolira zeleni element prve kolone, treći bit kontrolira prve stupce plavi element, četvrti bit kontrolira crveni element druge kolone, … ovaj uzorak se ponavlja preko stupaca slijeva nadesno. Zatim sljedeći poslani bit kontrolira posljednji ili donji red, sljedeći drugi do posljednji red,… ovo se ponavlja sve dok posljednji poslani bit, ili „najmanji bit“, kontrolira prvi ili gornji red u matrici.

Konačno, morao sam odrediti koje ću otpornike koristiti za svaku od LED dioda u RGB LED. Iako ste mogli koristiti standardnu formulu koja kombinira napon naprijed i željenu struju za izračunavanje potrebnog otpornika, otkrio sam da je postavljanje struje svake LED diode na 20 miliampera rezultiralo prljavo bijelom bojom kada su sve crvene, zelene i plave LED diode bile uključene. Tako da sam počeo da ga gledam u oči. Previše crvene boje u bijeloj boji značilo je povećanje oma otpornika crvene LED diode kako bi se smanjila struja. Ponavljao sam zamjenu otpornika različitih oma sve dok nisam našao kombinaciju koja je proizvela bijelu boju za koju sam smatrao da je ispravna. Konačna kombinacija bila je 180 Ω za crvenu LED, 220 Ω za zelenu LED i 100 Ω za plavu LED.

Korak 2: Konstrukcija hardvera - Breadboard

Konstrukcija hardvera - iverica
Konstrukcija hardvera - iverica
Konstrukcija hardvera - iverica
Konstrukcija hardvera - iverica

Prva faza konstruktora hardvera bila je ukrcavanje kruha. Ovdje sam napravio matricu 4x4 sa RGB LED diodama. Ova matrica bi zahtijevala 16 bitova za kontrolu, 12 za RGB kolone i 4 za svaki red. Dva registra pomaka 74HC595 mogu sve obraditi. Prvo sam istraživao i dizajnirao sklop za koji sam mislio da će raditi, a zatim sam ga izgradio na osnovnoj ploči.

Vjerovatno najveći izazov izgradnje matične ploče bilo je upravljanje svim žicama. Uzeo sam već pripremljeni komplet žica za ploče, ali tada je to bilo malo nezgrapno. Trik za koji sam smatrao da je od pomoći bio je stvoriti "port" za povezivanje s Arduino pločom. Odnosno, umjesto da povezujete pinove na Arduinu izravno s različitim IC pinovima na matičnoj ploči, posvetite nekoliko redova na matičnoj ploči kao točku povezivanja za Arduino, a zatim u te redove spojite odgovarajuće ID pinove. Za ovaj projekt potrebno vam je samo pet veza s Arduinom: +5V, uzemljenje, podaci, sat i zasun.

Kad je izgradnja matične ploče završena, morao sam je testirati. Međutim, bez nekakvog upravljačkog programa za slanje pravih signala u registre pomaka, nisam mogao testirati da vidim da li hardverski raspored radi.

Korak 3: Dizajn softvera upravljačkog programa

Image
Image

S obzirom na moje iskustvo u karijeri s razvojem softvera, ovo je bio dio projekta koji mi je vjerojatno bio najjasniji put kojim ću krenuti. Pregledao sam mnoge druge upravljačke programe za LED matrice zasnovane na Arduinu. Iako svakako postoje dobri drajveri, nijedan nije imao dizajn koji sam želio. Moji dizajnerski ciljevi vozača bili su:

  • Omogućite API na visokom nivou da biste mogli programski stvarati slike i animacije. Većina vozača koje sam vidio bili su više fokusirani na slike kodirane u kodu. Takođe, budući da sam po zanimanju programer na C ++, htio sam koristiti dobar objektno orijentisan dizajn za implementaciju i upravljanje aktivnostima crtanja na LED matricu.
  • Koristite pristup s dvostrukim međuspremnikom za upravljanje slikom na ekranu. Jedan tampon je ono što se programski uvlači, dok drugi predstavlja stanje piksela matrice u bilo kojem trenutku. Prednost ovog pristupa je u tome što ne morate u potpunosti prikazati sljedeće ažuriranje okvira za ekran između ciklusa ažuriranja multipleksiranja.
  • Koristite PWM za dopuštanje više od sedam primitivnih boja koje RGB može prikazati jednostavnim kombinacijama crvenih, zelenih i plavih elemenata.
  • Napišite upravljački program tako da bi "samo radio" s RGB LED matricama različitih veličina koje su slijedile moj opći pristup dizajnu matrica. Imajte na umu da, iako moj hardverski dizajn koristi registre pomaka 74HC595, očekivao bih da će moj upravljački program raditi sa bilo kojim mehanizmom za uključivanje/isključivanje registara pomaka koji je postavljen koristeći sličan raspored bitova kao i moj hardverski dizajn. Na primjer, očekivao bih da će moj upravljački program raditi s hardverskim dizajnom koji koristi DM13A čipove za kontrolu kolona i čip 74HC595 za kontrolu redova.

Ako želite direktno pogledati kod upravljačkog programa, možete ga pronaći na GitHub -u ovdje.

Prva iteracija mog upravljačkog programa bila je pomalo krivulja učenja o mogućnostima Arduino platforme. Najočiglednije ograničenje je RAM, koji je 2K bajta za Arduino Uno i Nano. Korištenje C ++ objekata u takvom scenariju često se ne preporučuje zbog zauzetosti memorije objekata. Međutim, smatrao sam da ako je sve učinjeno kako treba, korist od objekata u C ++ nadmašuje njihovu cijenu (u RAM -u).

Drugi veliki izazov bio je zamisliti kako implementirati modulaciju širine impulsa putem registara pomaka kako bih mogao generirati više od sedam primitivnih boja RGB LED. Budući da sam godinama programirao na Linux platformama, navikao sam koristiti konstrukcije poput niti za upravljanje procesima koji zahtijevaju dosljedno vrijeme. Vrijeme operacije ažuriranja registra pomaka završava prilično kritičnim pri izradi upravljačkog programa za LED matricu koja koristi multipleksiranje. Razlog je u tome što, iako se multipleksiranje događa tako brzo da vaše oči ne mogu vidjeti kako pojedinačne LED diode trepere i gase, vaše oči mogu uočiti razlike u ukupnom ukupnom vremenu uključenosti bilo koje od LED dioda. Ako je jedan red LED dioda stalno uključen duži vremenski period od ostalih, izgledat će svjetlije tijekom multipleksiranja. To može dovesti do neujednačene svjetline matrice ili periodičnog strobovanja matrice u cjelini (to se događa kada jedan ciklus ažuriranja traje duže od ostalih).

Budući da mi je trebao dosljedan vremenski mehanizam da bi ažuriranja registra pomaka bila pristanak, ali Arduino formalno ne podržava nit, morao sam stvoriti vlastiti mehanizam sličan niti. Moja prva iteracija ovoga bila je jednostavno stvaranje mjerača petlje koji je ovisio o funkciji Arduino loop () i pokrenuo bi radnju nakon što je prošlo određeno vrijeme od posljednjeg pokretanja akcije. Ovo je oblik "kooperativnog multitaskinga". Zvuči dobro, ali u praksi se to pokazalo nedosljednim kada se brzina paljbe mjerila u mikrosekundama. Razlog za to je što ako su mi radila dva ova mjerača petlje, jedna od njihovih radnji često je trajala dovoljno dugo da izazove da se druga akcija aktivira kasnije nego što je željeno.

Otkrio sam da je rješenje ovog problema korištenje Arduino -ovog izvornog mehanizma za prekid sata. Ovaj mehanizam vam omogućava da pokrenete mali dio koda u vrlo dosljednim intervalima. Tako sam dizajnirao kod upravljačkog programa oko elementa dizajna korištenja takta prekida za pokretanje koda za slanje matričnih pomaka registrira sljedeće ažuriranje u ciklusu multipleksa. Da bih to učinio i omogućio ažuriranje slike na ekranu kako ne bi ometao aktivni ispis u registre pomaka (nešto što bismo nazvali "uvjetom utrke"), koristio sam pristup s dvostrukim međuspremnicima za bitove registra pomaka, jedan za pisanje i jedan za čitanje. Kada korisnik ažurira sliku matrice, ove operacije se dešavaju u međuspremniku za pisanje. Kada se te operacije završe, prekidi se privremeno obustavljaju (to znači da se prekid sata ne može aktivirati) i bafer za pisanje se zamjenjuje s prethodnim međuspremnikom za čitanje, a to nije novi bafer za čitanje, tada se tumačenja ponovno omogućuju. Zatim, kada se prekid sata aktivira, što ukazuje na to da je vrijeme za slanje sljedeće konfiguracije bita u registre pomaka, te se informacije čitaju iz trenutnog međuspremnika za čitanje. Na ovaj način, u me uspremnik nikada ne dolazi upis iz kojeg se trenutno može čitati tokom prekida sata, što bi moglo oštetiti informacije poslane u registre pomaka.

Dizajniranje ostatka vozača bio je relativno jednostavan slučaj objektno orijentisanog dizajna. Na primjer, stvorio sam objekt za upravljanje bitnom slikom registra pomaka za bilo koje stanje ekrana. Inkapsuliranjem koda koji se odnosi na upravljanje bitnim slikama, stvaranje gore spomenutog pristupa dvostrukim međuspremnicima je sama po sebi bila jednostavna vježba. Ali nisam napisao ovaj Instructable kako bih veličao vrline objektno orijentisanog dizajna. Drugi elementi dizajna uključuju koncept glifa i RGB slike. Glif je osnovni konstrukt slike koji nema urođene informacije o boji. Možete to zamisliti kao crno -bijelu sliku. Kada se simbol uvuče na LED ekran, dobivaju se informacije o boji koje ukazuju na to kako bi "bijeli" pikseli trebali biti obojeni. RGB slika je slika na kojoj svaki piksel ima svoje podatke o boji.

Predlažem vam da pregledate primjere Arduino skica i pregledate dokumentaciju zaglavlja upravljačkog programa kako biste se upoznali s načinom korištenja upravljačkog programa za stvaranje slika i animacija na RGB LED matrici.

Korak 4: LED Ghosting

LED Ghosting
LED Ghosting
LED Ghosting
LED Ghosting

U LED matrici "ghosting" je fenomen LED diode u matrici koja svijetli kada nije željena, obično vrlo smanjenog nivoa. Moj originalni dizajn hardvera bio je podložan stvaranju duhova, posebno u posljednjem redu. Uzrok tome su dvije stvari: tranzistori se ne isključuju odmah i parazitski kapacitet u RGB LED diodama.

Dok skeniramo kroz redove, zbog činjenice da se tranzistori ne isključuju odmah, prethodni red u ciklusu skeniranja još uvijek se djelomično napaja kada se uključi sljedeći red. Ako se dana kolona koja je bila isključena u prethodnom redu ponovo uključi kada se novi red napaja, LED dioda te kolone u prethodnom redu će zasvijetliti nakratko dok je tranzistor za uključivanje prethodnog reda još uvijek u procesu okretanja isključeno. Ono što uzrokuje da tranzistoru treba značajno vrijeme da se isključi je zasićenje u osnovi tranzistora. To uzrokuje nastavak provođenja tranzistorskog kolektora-emitera putem uklanjanja struje iz baze, barem dok se zasićenje ne rasprši. S obzirom na to da naš ciklus ažuriranja multipleksiranja uzrokuje namjerno uključivanje redova u vremenskom periodu mjerenom u mikrosekundama, količina vremena u kojoj zasićeni tranzistor prethodnog reda ostaje provodljiv može biti zamjetan dio toga. Kao rezultat toga, vaše oko može opaziti ono vrlo malo vremena dok se LED prethodnog reda uključuje.

Kako bi se riješio problem zasićenja tranzistora, na tranzistor se može dodati Schottkyjeva dioda između baze i kolektora kako bi uzrokovala malu povratnu struju prema bazi kada je tranzistor uključen, sprječavajući da tranzistor postane zasićen. To će zauzvrat uzrokovati brže isključivanje tranzistora kada se struja ukloni iz baze. Detaljno objašnjenje ovog učinka potražite u ovom članku. Kao što možete vidjeti sa slike u ovom odjeljku, bez diode je pojavljivanje duhova prilično uočljivo, ali dodavanje diode u krug za svaki red značajno uklanja duhove.

RGB LED diode su podložne drugom fenomenu koji se naziva parazitski kapacitet. Osnovni uzrok tome je činjenica da svaka od tri LED boje u RGB LED jedinici ima različite napone naprijed. Ova razlika u naponima naprijed može uzrokovati učinak električnog kapacitivnosti između svake od pojedinačnih LED boja. Budući da se u LED jedinici pri napajanju stvara električni naboj, kada se napajanje isključi, potrebno je isprazniti parazitski kapacitet. Ako je taj LED stupac inače uključen za napajanje drugog reda, parazitski naboj će se isprazniti kroz LED tog stupa i uzrokovati da na kratko zasvijetli. Ovaj učinak je lijepo objašnjen u ovom članku. Rješenje je dodavanje putanje pražnjenja za ovaj parazitski naboj, osim kroz samu LED, a zatim davanje vremena LED -u da se isprazni prije ponovnog napajanja kolone. U mom hardverskom dizajnu to se postiže dodavanjem otpornika u liniju napajanja svakog reda koji povezuje snagu sa uzemljenjem. To će uzrokovati izvlačenje veće struje s napajanjem reda, ali osigurava put pražnjenja za parazitski kapacitet kada se red ne napaja.

Vrijedi napomenuti, međutim, da u praksi smatram da je učinak parazitskog kapaciteta jedva primjetan (ako ga tražite, možete ga pronaći), pa smatram da je dodavanje ovog dodatnog otpornika opcionalno. Učinak vremena usporavanja za zasićene tranzistore je mnogo jači i uočljiv. Ipak, ako pregledate tri fotografije navedene u ovom odjeljku, možete vidjeti da otpornici u potpunosti uklanjaju sve duhove koji se i dalje pojavljuju izvan vremena usporenog tranzistora.

Korak 5: Konačna proizvodnja i sljedeći koraci

Image
Image

Završna faza ovog projekta bila je za mene da napravim štampanu ploču (PCB). Koristio sam open source program Fritzing za dizajn svoje PCB. Iako je trebalo izvršiti mnogo ponavljajućih zadataka za postavljanje 100 LED dioda na ploču 10x10, meni je ova faza projekta bila neobično zadovoljavajuća. Shvatiti kako će svaki električni put biti postavljen bilo je poput zagonetke, a rješavanje te zagonetke stvorilo je osjećaj postignuća. Budući da nisam namješten za proizvodnju ploča, koristio sam jedan od mnogih internetskih resursa koji rade male serije prilagođenih PCB -a. Spajanje dijelova zajedno bilo je prilično jednostavno jer je moj dizajn koristio sve dijelove kroz rupe.

U vrijeme pisanja ovog uputstva imam sljedeće planove za svoje projekte RGB LED matrice:

  1. Nastavite poboljšavati upravljački program na API sloju kako biste programeru omogućili više funkcionalnosti na visokom nivou, prije svega pomicanje teksta.
  2. Kreirajte veće matrične dizajne, poput 16x16 ili čak 16x32.
  3. Istražite koristeći MOSFET -ove umjesto BJT -ova za prebacivanje napajanja u red
  4. Istražite pomoću DM13As upravljačkih programa konstantne struje umjesto 74HC595s za prebacivanje stupca
  5. Kreirajte upravljačke programe za druge platforme za mikro upravljanje, poput Teensy, ODROID C2 ili Raspberry Pi.

Imajte na umu da su i dizajn hardvera i upravljački program objavljeni pod GPL v3 licencom otvorenog koda u ovom GitHub spremištu. Nadalje, budući da proizvođači PCB -a rade "male serije" mog dizajna PCB -a, i dalje dobivam daleko više nego što mi lično treba. Stoga prodajem kompletne setove za različite dizajne RGB LED matrica (PCB i svi uključeni dijelovi) sa svoje web stranice ovdje.

Preporučuje se: