Përmbajtje:

Matrica LED RGB: 5 hapa
Matrica LED RGB: 5 hapa

Video: Matrica LED RGB: 5 hapa

Video: Matrica LED RGB: 5 hapa
Video: LED-матрицы для видео-экранов 2024, Korrik
Anonim
Image
Image
Dizajni i harduerit
Dizajni i harduerit

Kërko Instructable, dhe mund të gjesh shumë projekte të matricës LED. Asnjëra prej tyre nuk ishte ajo që doja, e cila ishte të eksploroja ndërveprimet e dizajnit të harduerit dhe softuerit për të prodhuar diçka, dhe të prodhoja produktin përfundimtar në një PCB të pastër me një drejtues që më lejoni të tërheq në "ekranin LED" duke përdorur nivel të lartë konstrukte (p.sh., vizatimi i një linje në krahasim me vendosjen e pikselave të veçantë). Kjo pjesë ishte e rëndësishme për mua, pasi shumë nga drejtuesit e matricës LED janë kocka të zhveshura dhe nuk ofrojnë shumë në krijimin e një imazhi ose animacioni në mënyrë programore. Kjo nuk do të thotë që ju nuk mund të krijoni imazhe dhe animacione me drejtuesit e tjerë, vetëm se do të duhet të bëni më shumë punë të përsëritura nga projekti në projekt.

Kështu u nisa për të realizuar vizionin tim. Hapi i parë ishte dizajnimi i harduerit. Kjo ishte ndoshta më sfiduese për mua, pasi prejardhja ime është më shumë softuer. Përsëri, kishte shumë modele të para-pjekura, dhe sigurisht që i përdori për frymëzim, por doja të mësoja duke bërë, kështu që prototipova një matricë 4x4 në një dërrasë buke. Mësova shumë përmes atij procesi, pasi përsëritjet e mia të para nuk funksionuan. Por, unë bëra dizajnimin e harduerit që funksionoi, i cili nga ana tjetër më lejoi të filloja të zhvilloja një shofer.

Zgjodha Arduino si platformën time të shoferit sepse është gjerësisht i disponueshëm dhe ka shumë referenca në internet. Ndërsa përvoja e karrierës më lejoi të arrija në një version pune të një shoferi më të shkëlqyeshëm sesa përpjekjet e mia në harduer, kishte akoma shumë përsëritje ndërsa optimizova performancën e shoferit për mikrokontrolluesin ATMega dhe zhvillova një API programimi që më pëlqente.

Ky udhëzues dokumenton modelin dhe disa mësime kryesore nga projekti im. Më shumë informacion në lidhje me këtë projekt mund të gjenden në faqen time në internet, duke përfshirë komplete të plota që mund të blini për të ndërtuar matricën tuaj RGB LED.

Hapi 1: Dizajni i harduerit

Qëllimi kryesor i dizajnit tim të harduerit ishte krijimi i një sërë LED RGB që mund t'i programoja, por gjithashtu nuk doja të shpenzoja shumë para. Qasja në të cilën u vendosa ishte përdorimi i regjistrave të ndërrimit 74HC595 për të kontrolluar LED -të. Për të minimizuar numrin e regjistrave të nevojshëm të ndërrimit, i rregullova LED -të RGB në një plan matricë ku anodat e zakonshme ishin të lidhura së bashku në rreshta dhe prizat e kuqe, jeshile dhe blu të lidhura së bashku në kolona. Për matricën 4x4, diagrami i qarkut dukej si diagrami i bashkangjitur i qarkut.

Një gjë që do të vini re menjëherë është se duke pasur parasysh qarkun e matricës, ka disa konfigurime të ndriçimit LED që nuk mund të bëhen me të gjitha LED -et e dëshiruara të ndezura në të njëjtën kohë. Për shembull, matrica nuk mund të ndezë njëkohësisht dy LED që janë diagonale nga njëra -tjetra sepse fuqizimi i rreshtave dhe kolonave do të bëjë që dy LED të kundërta të ndizen në diagonale pingul me LED -të e dëshiruar. Për të punuar rreth kësaj, ne do të përdorim multipleximin për të skanuar çdo rresht. Ka shumë burime në internet që mbulojnë teknikën e multipleximit, nuk do të përpiqem t'i replikoj këtu.

Meqenëse jam duke përdorur LED të zakonshëm të anodës, kjo do të thotë që rreshtat japin fuqi pozitive dhe kolonat zhyten në tokë. Lajmi i mirë është se regjistrat e ndërrimit 74HC595 mund të burojnë dhe të fundosin energjinë, por lajmi i keq është se ata kanë një kufi në sasinë e energjisë që mund të burojnë ose të fundosen. Kunjat individuale të 74HC595 kanë një tërheqje maksimale aktuale prej 70 mA, por është më mirë të mbani më pak se 20 mA. Ngjyrat individuale në LED -et tona RGB secila kanë një barazim prej 20 mA. Kjo do të thotë që 74HC595 nuk mund të fuqizojë drejtpërdrejt një rresht të tërë të LED -ve nëse dëshiroj t'i ndez të gjitha.

Pra, në vend që të ndizet rreshti drejtpërdrejt, 74HC595 në vend të kësaj do të drejtojë një transistor për secilën rresht, dhe tranzistori do të ndezë ose fikë rrymën që furnizon rreshtin. Meqenëse dizajni po përdor një LED të zakonshëm të anodës, tranzistori kalues do të jetë PNP. Nëse do të ishim duke përdorur një LED katodë të zakonshëm, tranzistori kalues do të ishte NPN. Vini re se me përdorimin e një tranzistori PNP për të drejtuar një rresht, cilësimi i regjistrit të ndërrimit për ta ndezur atë tani bëhet i ulët pasi një transistor PNP ka nevojë për një tension negativ midis emetuesit dhe bazës për t'u ndezur, i cili do të lejojë që rryma pozitive të rrjedhë në rresht.

Një gjë tjetër që duhet marrë parasysh është paraqitja e bitit të dëshiruar të regjistrave të ndërrimit. Kjo është, në mesin e regjistrave të zhvendosjes, të cilat kontrollojnë bitët cilat rreshta ose kolona në matricë. Dizajni me të cilin dërgova është aty ku biti i parë, ose "biti më domethënës", i dërguar në regjistrat e ndërrimit të zinxhirëve të zinxhirit kontrollon kolonën e elementit të kuq LED, biti i dytë kontrollonte elementin jeshil të kolonës së parë, biti i tretë kontrollon kolonën e parë elementi blu, biti i katërt kontrollon elementin e kuq të kolonës së dytë,… ky model përsëritet nëpër kolonat nga e majta në të djathtë. Pastaj pjesa tjetër e dërguar kontrollon rreshtin e fundit, ose të poshtëm, tjetri rreshtin e dytë në të fundit,… kjo përsëritet deri sa biti i fundit i dërguar, ose "biti më pak i rëndësishëm", kontrollon rreshtin e parë ose të sipërm në matricë Me

Më në fund, më duhej të përcaktoja se çfarë rezistence do të përdorja për secilën prej LED -ve në LED RGB. Ndërsa mund të përdorni formulën standarde që kombinon tensionin përpara dhe rrymën e dëshiruar për të llogaritur rezistencën e kërkuar, zbulova se vendosja e rrymës së secilës LED në 20 miliamps rezultoi në një ngjyrë të bardhë kur të gjitha LED-të e kuqe, jeshile dhe blu ishin ndezur Me Kështu fillova ta shikoja me sy. Shumë e kuqe në të bardhë nënkuptonte rritjen e ohmeve të rezistencës së LED të kuqe për të zvogëluar rrymën. Përsërita ndërrimin e rezistorëve me ohma të ndryshëm derisa gjeta një kombinim që prodhonte një ngjyrë të bardhë mendova se ishte e drejtë. Kombinimi përfundimtar ishte 180 Ω për LED të kuq, 220 Ω për LED të gjelbër dhe 100 Ω për LED blu.

Hapi 2: Ndërtimi i Pajisjeve - Breadboard

Ndërtimi i Pajisjeve - Breadboard
Ndërtimi i Pajisjeve - Breadboard
Ndërtimi i Pajisjeve - Breadboard
Ndërtimi i Pajisjeve - Breadboard

Faza e parë e konstruktorit të harduerit ishte konvikti i bukës. Këtu kam bërë një matricë 4x4 me LED RGB. Kjo matricë do të kërkonte 16 bit për tu kontrolluar, 12 për kolonat RGB dhe 4 për secilën rresht. Dy regjistra ndërrimi 74HC595 mund t'i trajtojnë të gjitha. Fillimisht hulumtova dhe projektova një qark që mendova se do të funksiononte, pastaj e ndërtova në dërrasën e bukës.

Ndoshta sfida më e madhe e ndërtimit të bordit të bukës ishte menaxhimi i të gjitha telave. Mora një çantë teli të paraformuar për dërrasat e bukës, por ngjarja atëherë ishte pak e rëndë. Një mashtrim që më dukej i dobishëm ishte krijimi i një "porti" për t'u lidhur me bordin Arduino. Kjo do të thotë, në vend që të lidhni kunjat në Arduino drejtpërdrejt me kunjat e ndryshme të IC në dërrasën e bukës, kushtoni disa rreshta në dërrasën e bukës për të qenë pika e lidhjes për Arduino, dhe pastaj lidhni kunjat përkatëse të ID me ato rreshta. Për këtë projekt, ju nevojiten vetëm pesë lidhje me Arduino: +5V, toka, të dhëna, ora dhe shul.

Pasi të përfundonte ndërtimi i pjatës, më duhej ta provoja. Sidoqoftë, pa një lloj drejtuesi për të dërguar sinjalet e duhura në regjistrat e ndërrimit, unë nuk isha në gjendje të testoja për të parë nëse paraqitja e harduerit funksiononte.

Hapi 3: Dizajni i Softuerit të Shoferit

Image
Image

Duke pasur parasysh përvojën time në karrierë me zhvillimin e softuerit, kjo ishte pjesa e projektit që unë kam qenë ndoshta më e qartë në rrugën që duhet të marr. Kam anketuar shumë nga drejtuesit e tjerë të matricës LED me bazë Arduino. Ndërsa sigurisht që ka shoferë të mirë në dispozicion, asnjë nuk kishte modelin që doja. Qëllimet e mia të projektimit të shoferit ishin:

  • Siguroni një API të nivelit të lartë për të qenë në gjendje të krijoni në mënyrë programore imazhe dhe animacione. Shumica e shoferëve që pashë ishin më të fokusuar në imazhe të koduara. Gjithashtu, meqenëse jam programues C ++ nga profesioni, doja të përdorja një dizajn të mirë të orientuar drejt objekteve për të zbatuar dhe menaxhuar aktivitetet e vizatimit në matricën LED.
  • Përdorni një qasje me buffer të dyfishtë për të menaxhuar imazhin në ekran. Një tampon është ajo që tërhiqet programërisht, ndërsa tjetra përfaqëson gjendjen e pikselëve të matricës në çdo moment të caktuar. Avantazhi i kësaj qasjeje është se nuk ju kërkohet të bëni plotësisht përditësimin e kornizës tjetër për ekranin midis cikleve të azhurnimit të multipleximit.
  • Përdorni PWM për të lejuar më shumë se shtatë ngjyrat primitive që një RGB mund të japë përmes kombinimeve të thjeshta të elementeve të kuq, jeshil dhe blu.
  • Shkruani drejtuesin në mënyrë që "thjesht të funksionojë" me matrica RGB LED me madhësi të ndryshme që ndoqën qasjen time të përgjithshme të dizajnit të matricës. Vini re se ndërsa dizajni im i harduerit përdor regjistrat e ndërrimit 74HC595, unë do të prisja që shoferi im të punonte me çdo mekanizëm të ndezjes/fikjes të regjistrit të ndërrimit që është paraqitur duke përdorur një plan urbanistik të ngjashëm si dizajni im i harduerit. Për shembull, do të prisja që shoferi im të punonte me një dizajn harduerik që përdorte çipat DM13A për të kontrolluar kolonat dhe një çip 74HC595 për të kontrolluar rreshtat.

Nëse doni të shkoni drejt shikimit të kodit të shoferit, mund ta gjeni në GitHub këtu.

Përsëritja e parë e shoferit tim ishte një kurbë mësimi mbi aftësitë e platformës Arduino. Kufizimi më i dukshëm është RAM, i cili është 2K bajt për Arduino Uno dhe Nano. Përdorimi i objekteve C ++ në një skenar të tillë shpesh nuk këshillohet për shkak të kujtesës së lartë të objekteve. Sidoqoftë, u ndjeva nëse bëhej mirë, përfitimi i objekteve në C ++ tejkalonte koston e tyre (në RAM).

Sfida e dytë kryesore ishte të kuptonim se si të zbatojmë modulimin e gjerësisë së pulsit përmes regjistrave të ndërrimit, në mënyrë që të krijoj më shumë se shtatë ngjyrat primitive të LED RGB. Duke qenë i programuar për shumë vite në platformat Linux, unë isha mësuar të përdor konstrukte si fije për të menaxhuar proceset që kërkojnë kohë të qëndrueshme. Koha e funksionimit të azhurnimit të regjistrit të ndërrimit përfundon të jetë mjaft kritike kur bëni një drejtues për një matricë LED që përdor shumëfishim. Arsyeja është se edhe pse multipleximi po ndodh aq shpejt sa sytë tuaj nuk mund të shohin që LED -të individuale të ndizen dhe fiken, ajet tuaja mund të marrin dallime në kohën totale totale që ndizet ndonjë prej LED -ve. Nëse një rresht LED është vazhdimisht i ndezur për një periudhë më të gjatë kohore se të tjerat, do të duket më i ndritshëm gjatë shumëfishimit. Kjo mund të çojë në shkëlqim të pabarabartë në matricë ose goditje periodike të matricës në tërësi (kjo ndodh kur një cikël përditësimi zgjat më shumë se të tjerët).

Meqenëse më duhej një mekanizëm i qëndrueshëm i kohës për të bërë që pëlqimi i përditësimeve të regjistrit të ndërrimit, por Arduino nuk e mbështet formalisht fijen, më duhej të krijoja mekanizmin tim të ngjashëm me fijet. Përsëritja ime e parë e kësaj ishte thjesht krijimi i një kohëmatësi të lakut që varej nga funksioni i lakut Arduino () dhe do të ndizte një veprim kur të ketë kaluar një kohë e caktuar që nga hera e fundit që veprimi u qëllua. Kjo është një formë e "multitasking bashkëpunues". Tingëllon mirë, por në praktikë kjo doli të ishte jokonsistente kur shkalla e qitjes u mat në mikrosekonda. Arsyeja për këtë është se nëse do të kisha dy nga këta kohëmatës të lakut, një prej veprimeve të tyre shpesh merrte mjaft kohë për të bërë që veprimi i dytë të ndizte më vonë se sa dëshirohej.

Kam gjetur se zgjidhja për këtë problem është përdorimi i mekanizmit të ndërprerjes së orës vendase të Arduino. Ky mekanizëm ju lejon të ekzekutoni një pjesë të vogël të kodit në intervale shumë të qëndrueshme. Kështu që unë hartova kodin e drejtuesit rreth elementit të projektimit të përdorimit të një ndërprerje të orës për të shkaktuar kodin për dërgimin e regjistrave të ndërrimit të matricës përditësimi tjetër në ciklin multiplex. Për ta bërë këtë dhe për të lejuar që azhurnimet të shfaqen në imazhin e ekranit për të mos ndërhyrë në një hedhje aktive në regjistrat e ndërrimit (diçka që ne do ta quanim "kushti i garës"), kam përdorur një qasje për të pasur tamponë binjakë për bitët e regjistrit të ndërrimit, një për të shkruar dhe një për të lexuar. Kur përdoruesi po përditëson imazhin e matricës, këto operacione i ndodhin tamponit të shkrimit. Kur ato operacione janë të plota, ndërprerjet pezullohen përkohësisht (kjo do të thotë që ndërprerja e orës nuk mund të ndizet) dhe tamponi i shkrimit ndërrohet me tamponin e mëparshëm të leximit dhe nuk është tamponi i ri i leximit, atëherë interpretimet riaktivizohen. Pastaj, kur ora ndërpret ndezjen duke treguar se është koha për të dërguar konfigurimin e bitit tjetër në regjistrat e ndërrimit, ai informacion lexohet nga tamponi aktual i leximit. Në këtë mënyrë, asnjë shkrim nuk i ndodh kurrë një tamponi që mund të lexohet aktualisht gjatë një ndërprerje të orës, e cila mund të prishë informacionin e dërguar në regjistrat e ndërrimit.

Projektimi i pjesës tjetër të drejtuesit ishte një rast relativisht i drejtpërdrejtë i dizajnit të orientuar drejt objekteve. Për shembull, unë krijova një objekt për të menaxhuar imazhin e bitit të regjistrit të zhvendosjes për çdo gjendje të caktuar të ekranit. Duke përfshirë kodin që i përket menaxhimit të imazhit të bitit, krijimi i qasjes së sipërpërmendur të tamponëve binjakë ishte në vetvete një ushtrim i drejtpërdrejtë. Por unë nuk e kam shkruar këtë Instructable për të lartësuar virtytet e dizajnit të orientuar drejt objekteve. Elemente të tjera të projektimit përfshijnë konceptin e një Glyph dhe një RGB Image. Një Glyph është një strukturë themelore e imazhit që nuk ka informacion të lindur të ngjyrave. Mund ta mendoni si një imazh bardh e zi. Kur Glyph tërhiqet në ekranin LED, informacioni i ngjyrave jepet për të treguar se si duhet të ngjyrosen pikselët "e bardhë". Një imazh RGB është një imazh ku çdo piksel ka informacionin e vet të ngjyrave.

Ju inkurajoj të rishikoni shembujt e skicës Arduino dhe të rishikoni dokumentacionin e titullit të drejtuesit për t'u njohur me mënyrën e përdorimit të drejtuesit për të krijuar imazhe dhe animacione në një matricë LED RGB.

Hapi 4: LED Ghosting

Ghosting LED
Ghosting LED
Ghosting LED
Ghosting LED

Në një matricë LED, "ghosting" është fenomeni i një LED në matricën që shkëlqen kur nuk është e dëshiruar, zakonisht një nivel shumë i reduktuar. Dizajni im origjinal i harduerit ishte i ndjeshëm ndaj ghosting, më së shumti në rreshtin e fundit. Shkaku i kësaj është për shkak të dy gjërave: transistorët nuk fiken menjëherë dhe kapaciteti parazitar në LED -të RGB.

Ndërsa skanojmë nëpër rreshta, për shkak të faktit se tranzistorët nuk fiken menjëherë, rreshti i mëparshëm në ciklin e skanimit akoma fuqizohet pjesërisht kur rreshti tjetër ndizet. Nëse një kolonë e caktuar që ishte e fikur në rreshtin e mëparshëm ndizet rishtazi kur rreshti i ri të fuqizohet, LED i asaj kolone në rreshtin e mëparshëm do të ndriçojë për pak kohë ndërsa tranzistori kalues i rreshtit të mëparshëm është ende në proces kthimi fikur Ajo që bën që tranzistori të marrë një kohë të dukshme për t'u fikur është ngopja në bazën e tranzistorit. Kjo bën që shtegu i kolektorit-emiterit të tranzistorit të vazhdojë të përçojë kur rryma të hiqet nga baza, të paktën derisa ngopja të shpërndahet. Duke pasur parasysh që cikli ynë i azhurnimit të shumëfishtë bën që rreshtat të vendosen qëllimisht për një periudhë kohore të matur në mikrosekonda, sasia e kohës që transistori i ngopur i rreshtit të mëparshëm mbetet përçues mund të jetë një pjesë e dukshme e asaj. Si rezultat, syri juaj mund të perceptojë atë sasi shumë të vogël kohe që LED i rreshtit të mëparshëm është ndezur.

Për të rregulluar problemin e ngopjes së tranzistorit, një diodë Schottky mund t'i shtohet transistorit midis bazës dhe kolektorit për të shkaktuar një rrymë të vogël mbrapa në bazë kur tranzistori është i ndezur, duke parandaluar që transistori të ngopet. Kjo nga ana tjetër do të bëjë që tranzistori të fiket më shpejt kur të hiqet rryma nga baza. Shihni këtë artikull për një shpjegim të thelluar të këtij efekti. Siç mund ta shihni nga fotografia në këtë seksion, pa diodë fantazma është mjaft e dukshme, por shtimi i diodës në qark për secilën rresht heq dukshëm fantazmën.

LED -të RGB janë të ndjeshëm ndaj një fenomeni tjetër të quajtur kapaciteti parazitar. Shkaku kryesor i kësaj është fakti se secila nga tre LED -të me ngjyra në njësinë RGB LED secila ka tensione të ndryshme përpara. Ky ndryshim në tensionet e përparme mund të shkaktojë efektin e kapacitetit elektrik midis secilës prej ngjyrave individuale LED. Meqenëse një ngarkesë elektrike krijohet në njësinë LED kur aktivizohet, kur energjia hiqet, kapaciteti parazitar duhet të shkarkohet. Nëse kolona LED është ndezur ndryshe për ndezjen e një rreshti tjetër, ngarkesa parazitare do të shkarkohet përmes asaj kolone LED dhe do të bëjë që ajo të shkëlqejë për pak kohë. Ky efekt shpjegohet bukur në këtë artikull. Zgjidhja është shtimi i një rruge shkarkimi për këtë ngarkesë parazitare, përveçse përmes vetë LED -it, dhe pastaj dhënia e kohës LED për t'u shkarkuar para se kolona të ndizet përsëri. Në modelin tim të harduerit, kjo arrihet duke shtuar një rezistencë në linjën e energjisë të çdo rreshti që lidh forcën me tokën. Kjo do të bëjë që të tërhiqet më shumë rrymë me fuqinë e rreshtit, por siguron një rrugë shkarkimi për kapacitetin parazitar kur rreshti nuk është i fuqizuar.

Vlen të theksohet, megjithatë, se në praktikë unë mendoj se efekti i kapacitetit parazitar është mezi i dukshëm (nëse e kërkoni, mund ta gjeni), dhe kështu e konsideroj shtimin e këtij rezistori shtesë si opsional. Efekti i ngadalësimit të kohës për transistorët e ngopur është shumë më i fortë dhe i dukshëm. Sidoqoftë, nëse inspektoni tre fotot e dhëna në këtë seksion, mund të shihni që rezistorët heqin plotësisht çdo fantazmë që ndodh akoma përtej kohës së ngadalshme të fikjes së tranzistorit.

Hapi 5: Prodhimi përfundimtar dhe hapat e ardhshëm

Image
Image

Faza përfundimtare e këtij projekti ishte që unë të krijoja një tabelë qarku të shtypur (PCB). Kam përdorur programin me burim të hapur Fritzing për të hartuar PCB -në time. Ndërsa kishte shumë detyra të përsëritura për të realizuar për të vendosur 100 LED në një tabelë 10x10, unë në fakt e gjeta këtë fazë të projektit çuditërisht të kënaqshme. Të kuptosh se si do të shtrohej secila rrugë elektrike ishte si një enigmë, dhe zgjidhja e atij enigme krijoi një ndjenjë të arritjes. Meqenëse nuk jam krijuar për të prodhuar bordet e qarkut, kam përdorur një nga burimet e shumta në internet që bëjnë funksionime të vogla të PCB -ve të personalizuara. Bashkimi i pjesëve së bashku ishte mjaft i drejtë përpara pasi dizajni im përdorte të gjitha pjesët përmes vrimës.

Në kohën e shkrimit të këtij Instructable, unë kam planet e mëposhtme për projektet e mia RGB LED Matrix:

  1. Vazhdoni të përmirësoni drejtuesin në shtresën API për të mundësuar më shumë funksionalitet të nivelit të lartë për programuesin, më së shumti lëvizjen e tekstit.
  2. Krijoni modele më të mëdha matricash, të tilla si 16x16 apo edhe 16x32.
  3. Eksploroni duke përdorur MOSFET në vend të BJT për ndërrimin e rreshtit të energjisë
  4. Eksploroni duke përdorur drejtues të rrymës konstante DM13A dhe jo 74HC595 për ndërrimin e kolonave
  5. Krijoni drejtues për platforma të tjera mikro kontrolli, të tilla si Teensy, ODROID C2 ose Raspberry Pi.

Vini re se si dizajni i harduerit ashtu edhe shoferi janë lëshuar nën licencën e burimit të hapur GPL v3 në këtë depo GitHub. Për më tepër, megjithëse edhe pse prodhuesit e PCB bëjnë "vrapime të vogla" të modelit tim të PCB, unë prapë marr shumë më tepër sesa më nevojitet personalisht. Kështu që unë jam duke shitur komplete të plota për modelet e mia të ndryshme RGB LED (PCB dhe të gjitha pjesët e përfshira) nga faqja ime e internetit këtu.

Recommended: