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: Smartphone Control RGB Scrolling Text Display LED Matrix 2024, Studeni
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 bilo istražiti interakcije dizajna hardvera i softvera kako bi se nešto proizvelo, te proizvesti konačni proizvod u urednoj PCB-u s upravljačkim programom koji će mi omogućiti da privučem "LED zaslon" pomoću visoke razine konstrukcije (npr. crtanje crte za razliku od postavljanja specifičnih piksela). Ovaj mi je dio bio važan, budući da su mnogi upravljački programi LED matrice golih kostiju 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 da biste morali raditi više puta od projekta do projekta.

Zato sam krenuo ostvariti svoju viziju. Prvi korak bio je dizajn hardvera. To mi je vjerojatno bio najveći izazov, budući da mi je pozadina više softver. Opet, bilo je mnogo unaprijed ispečenih dizajna i svakako sam ih koristio za inspiraciju, ali htio sam 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. No, napravio sam hardverski dizajn koji je uspio, što mi je zauzvrat omogućilo početak razvoja upravljačkog programa.

Odabrao sam Arduino kao platformu za upravljačke programe jer je široko dostupan i ima mnogo referenci na internetu. Iako mi je iskustvo u karijeri omogućilo 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 dokumentira 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 također nisam želio potrošiti mnogo novca. Pristup na koji sam se odlučio bio je upotreba registara pomaka 74HC595 za upravljanje LED diodama. 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 stupce. Za matricu 4x4, shema kruga 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 učiniti ako su sve željene LED diode uključene u isto vrijeme. Na primjer, matrica ne može istodobno osvijetliti dvije LED diode koje su dijagonalne jedna od druge jer će napajanje i redaka i stupaca 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 ovdje pokušati replicirati.

Budući da koristim uobičajene anodne LED diode, to znači da redovi pružaju pozitivnu snagu, a stupci tone na tlo. 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 izravnog napajanja retka, 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. Kad bismo koristili zajedničku katodnu LED, tranzistor za prebacivanje bio bi NPN. Imajte na umu da s korištenjem PNP tranzistora za vožnju redak postavka registra pomaka za njegovo uključivanje sada postaje niska jer PNP tranzistoru treba uključiti negativni napon između emitera i baze, što će omogućiti protok pozitivne struje u red.

Još jedna stvar koju treba uzeti u obzir je željeni raspored bitova registara pomaka. To jest, među registrima pomaka, koji bitovi kontroliraju koje retke ili stupce u matrici. Dizajn s kojim sam poslao je mjesto gdje prvi bit, ili "najznačajniji bit", poslan u registre pomaka s lančanicima, kontrolira stupac LED dioda crvenim elementom, drugi bit kontrolira zeleni element prvog stupca, treći bit kontrolira prvi stupac plavi element, četvrti bit kontrolira crveni element drugog stupca, … ovaj se obrazac ponavlja preko stupaca slijeva nadesno. Zatim sljedeći poslani bit kontrolira posljednji ili donji red, sljedeći drugi do posljednji red,… to 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čun 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. Pa sam počeo gledati 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 ohma 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 - Oglasna ploča

Konstrukcija hardvera - Oglasna ploča
Konstrukcija hardvera - Oglasna ploča
Konstrukcija hardvera - Oglasna ploča
Konstrukcija hardvera - Oglasna ploča

Prva faza konstruktora hardvera bila je ukrcaj za kruh. Ovdje sam napravio matricu 4x4 s RGB LED diodama. Ova matrica bi zahtijevala 16 bitova za kontrolu, 12 za RGB stupce i 4 za svaki redak. Dva registra pomaka 74HC595 mogu podnijeti sve. Prvo sam istraživao i dizajnirao sklop za koji sam mislio da će funkcionirati, a zatim sam ga izgradio na ploči.

Vjerojatno najveći izazov izgradnje matične ploče bilo je upravljanje svim žicama. Uzeo sam 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 spajanje na Arduino ploču. Odnosno, umjesto da povezujete pinove na Arduinu izravno s različitim IC pinovima na ploči, posvetite nekoliko redaka na ploči kao točku povezivanja za Arduino, a zatim u te redove spojite odgovarajuće ID pinove. Za ovaj projekt trebate samo pet veza s Arduinom: +5V, uzemljenje, prijenos podataka, sat i zasun.

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

Korak 3: Dizajn softvera upravljačkog programa

Image
Image

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

  • Omogućite API visoke razine za programsko stvaranje slika i animacija. Većina vozača koje sam vidio bili su više usredotočeni na slike s teškim kodiranjem. Također, budući da sam po zanimanju programer C ++, želio sam koristiti dobar objektno orijentirani dizajn za implementaciju i upravljanje aktivnostima crtanja na LED matricu.
  • Za upravljanje slikom na ekranu koristite pristup s dvostrukim međuspremnikom. 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 potpuno prikazati sljedeće ažuriranje okvira za zaslon 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 s bilo kojim mehanizmom za uključivanje/isključivanje stila registra 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 stupaca i 74HC595 čip za kontrolu redaka.

Ako želite izravno pogledati kod upravljačkog programa, možda ćete ga pronaći na GitHubu ovdje.

Prva iteracija mog upravljačkog programa bila je pomalo krivulja učenja o mogućnostima Arduino platforme. Najočitije 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 opterećenja memorije objekata. Međutim, smatrao sam da ako je 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čivanja bilo koje od LED dioda. Ako je jedan red LED dioda stalno uključen dulje vrijeme od ostalih, tijekom multipleksiranja će izgledati svjetlije. To može dovesti do neujednačene svjetline u matrici ili povremenog strobiranja matrice u cjelini (to se događa kada jedan ciklus ažuriranja traje dulje od ostalih).

Budući da mi je trebao dosljedan vremenski mehanizam kako 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 kad se brzina paljbe mjerila u mikrosekundama. Razlog tome je što ako su mi radila dva odbrojavanja, jedna od njihovih radnji često je trajala dovoljno dugo da se druga radnja aktivira kasnije nego što je željeno.

Otkrio sam da je rješenje ovog problema korištenje Arduinovog izvornog mehanizma za prekid sata. Ovaj mehanizam omogućuje vam pokretanje male količine 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 da na ekranu dođe do ažuriranja 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. Kad korisnik ažurira sliku matrice, te se operacije događaju u međuspremniku za upisivanje. Kada se te operacije dovrše, prekidi se privremeno obustavljaju (to znači da se prekid sata ne može aktivirati), a međuspremnik za pisanje zamjenjuje se s prethodnim međuspremnikom za čitanje, a to nije novi međuspremnik za čitanje, tada se tumači ponovno omogućuju. Zatim, kad 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 tijekom prekida sata, što bi moglo oštetiti informacije poslane u registre pomaka.

Dizajniranje ostatka vozača bio je relativno jednostavan slučaj objektno orijentiranog dizajna. Na primjer, stvorio sam objekt za upravljanje bitnom slikom registra pomaka za bilo koje stanje zaslona. Inkapsuliranjem koda koji se odnosi na upravljanje bitnom slikom, stvaranje gore spomenutog pristupa dvostrukim međuspremnicima bilo je sama po sebi jednostavna vježba. Ali nisam napisao ovaj Instructable kako bih veličao vrline objektno orijentiranog 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 zaslon, dobivaju se informacije o boji kako bi se pokazalo kako "bijeli" pikseli trebaju biti obojeni. RGB slika je slika na kojoj svaki piksel ima svoje podatke o boji.

Pozivam vas da pregledate primjere skica Arduino 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 -a u matrici koji svijetli kada nije poželjan, obično vrlo smanjene razine. Moj izvorni hardverski dizajn bio je osjetljiv na duhove, ponajviše u posljednjem redu. Uzrok tome su dvije stvari: tranzistori se ne isključuju odmah i parazitski kapacitet u RGB LED diodama.

Dok skeniramo kroz retke, zbog činjenice da se tranzistori ne isključuju odmah, prethodni redak u ciklusu skeniranja još uvijek se djelomično napaja kad se uključi sljedeći redak. Ako se dani stupac koji je bio isključen u prethodnom retku ponovno uključi kad se novi redak napaja, LED dioda tog stupca u prethodnom retku će svijetliti 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 bazi tranzistora. To uzrokuje da se put tranzistor kolektor-emiter nastavi provoditi kada se struja ukloni s baze, barem dok se zasićenje ne rasprši. S obzirom na to da naš ciklus ažuriranja multipleksiranja uzrokuje namjerno uključivanje redaka u vremenskom razdoblju mjerenom u mikrosekundama, količina vremena u kojoj zasićeni tranzistor prethodnog reda ostaje vodljiv može biti zamjetan dio toga. Kao rezultat toga, vaše oko može percipirati ono vrlo malo vremena dok je LED prethodnog reda uključen.

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 na bazu 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 s 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 podložne su drugom fenomenu koji se naziva parazitski kapacitet. Glavni uzrok tome je činjenica da svaka od tri LED boje u RGB LED jedinici ima različite napone prema naprijed. Ta razlika u naponima naprijed može uzrokovati učinak električnog kapacitivnosti između svake pojedinačne boje LED -a. Budući da se u LED jedinici tijekom napajanja 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 je učinak lijepo objašnjen u ovom članku. Rješenje je dodati put pražnjenja za ovaj parazitski naboj, osim kroz samu LED, a zatim dati LED vremenu 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 da se tijekom napajanja reda napaja više struje, ali osigurava pražnjenje za parazitski kapacitet kada se red ne napaja.

Vrijedi napomenuti 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 otpornika neobavezno. Učinak vremena usporenja za zasićene tranzistore mnogo je jači i uočljiv. Bez obzira na to, ako pregledate tri fotografije navedene u ovom odjeljku, možete vidjeti da otpornici u potpunosti uklanjaju sve duhove koji se još 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 stvaranje tiskane ploče (PCB). Koristio sam open source program Fritzing za dizajn svoje PCB -a. Iako je bilo potrebno mnogo ponavljajućih zadataka za postavljanje 100 LED dioda na ploču 10x10, zapravo mi 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, upotrijebio 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 visokoj razini, ponajviše pomicanje teksta.
  2. Izradite veće matrične dizajne, poput 16x16 ili čak 16x32.
  3. Istražite pomoću MOSFET -ova umjesto BJT -ova za prebacivanje snage reda
  4. Za prebacivanje stupca istražite pomoću upravljačkih programa konstantne struje DM13A umjesto 74HC595s
  5. Izradite upravljačke programe za druge platforme za mikro upravljanje, kao što su Teensy, ODROID C2 ili Raspberry Pi.

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

Preporučeni: