Adruino + DMX512 + daug 74HC595 + dar daugiau LED (ir ne tik)

13 02 2013

Temos pavadinimui lygybės ženklo nedėjau nes dar neaišku kaip visa tai pavadinti. Didelio kiekio individualių LED’ų jungimas prie DMX sistemos nėra labai naudingas dalykas, bet tai tik pradžia, bet apie viska iš eilės.

Kas yra DMX?

Tai komunikacijos metodas/standartas skirtas daugelio įrenginiu valdymui. Šis standartas gimė siekiant sujungti scenos apšvietimo irenginius į viena grandinę tam kad nebereiktu atskiro valdymo pulto kiekvienai apšvietimo rūšiai (RGB šviesoms, strobams, dimmeriams ir t.t.). Iki to laiko skirtini apšvietimo elementai turėdavo skirtingus valdymo įrenginius nes skirėsi visų ju tiek techniniai tiek programiniai valdymo protokolai.

Techniškai DMX kanalas yra RS485 atmaina kuri veikia tam tikru nestandartiniu dažniu bei vidiniu protokolu. Pvz. DMX512 veikia 250k dažniu ir šiuo kanalu pastoviai siunčiamos 512 kanalų esamos reikšmės. Visi valdomi įrenginiai yra jungiami prie vienos bendros kabeliu poros ir gauna visų siunčiamų kanalų informacija, tačiau reaguoja tik į savo kanalų parametrus. Įrenginys radęs sau skirtu atnaujinimu vykdo pakeitimus savo technikoje. Tau nebereikia tiesti atskiru laidu į kiekviena įrenginį. Taip pat laimime gana dideli apretuma – RS485 gali dirbti net su 1,5KM ilgio signalo laidu.

DMX512 tai DMX atmaina skirta grandinėje valdyti iki 512  parametrų (nebutinai įrenginių, nes kartais lempos turi keleta kontroliavimo veiksnių ir kiekvienas ju užsima po atskira kanalą). Kiekvienas iš 512 kanalų gauna 8bitus informacijos pagal kuria privalo atitinkamai šviesti, suktis, duminti ar dar kažką panašaus.

DMX siuntėjas ir visi gavėjai sujungiami panašiu budu:

373143401866

Kaip matome valdomieji įrenginiai gali būti vienas, du ar keli, o valdantieji taip pat keli. Pagrindinis pliusas – visi jie yra viename tinkle.

Kodėl 74HC595

Tarkime turime įdėja pajungti net 512 vienetų LED ar kokių kitokių įrenginių prie DMX512. Tokiu atveju galime jungti tiek DMX gavėjų moduliu kad susidarytu norimas išėjimų kiekis. Paprastai kiekvienas modulis valdo 8-20 kanalų, ty galime pajungti tik 8-20 LED, o norint sujungti net 512 reikia atitinkamo kiekio ir moduliu.

74HC595 mikroschema gali valdyti 9 kanalus informacijos, bet paaukojus viena iš jų galime prie 74HC595 prijungti antra tokią mikroschemą ir gautume jau 8+9 išėjimų. Taip jungti galime be galo daug 74HC595 mikroschemų ir valdomų LED kiekis gali nesunkiai išaugti iki 1000 ar net daugiau. Tačiau apie tiek negalvokime – atnaujinti toki kieki informacijos reiktu tiek laiko tiek resursu, o svarbiausias limitas – DMX512 galima jungti tik 512 kanalų. Taigi susjungus nuosekliai 64 vienetus 74HC595 turime 512 valdomus kanalus.

Sekančioje schemoje matosi kaip nesunkiai galime pajungti 64 vnt. LED’ų panaudojus 8 vienetus 74HC595:

ledmatrix

Žinoma galima būtų pajungti net 64 Led’us nuo dviejų 74HC595 matricos principu, bet kodėl taip nedarome paaiškinsiu vėliau.

Visų 74HC595 valdymas vyksta iš nuosekliai: Pirmasis gauna viena signalą ir jis permikruoja per visus likusius.

Pliusai:

Vienas didžiausių pliusu yra tai, kad valdymui tereikia 3 mikrokontrolerio skaitmeninių išėjimų norint valdyti daugybe išėjimų.

Taip pat grįškime prie to kodėl naudojame viena DMX įrengini su daug 74HC595 sujungtų nusekliai vietoje keliolikos DMX įrenginiu po 8-12 išėjimų – ty kainos. Tarkime norime valdyti maksimalu 512 išėjimų skaičių:

1) Gaminant iš DMX moduliu kiekvienas jų gali valdyti tarkime 8 išėjimus. Kiekvienas modulis reikalauja tokių komponentu kai SN75176 (minimaliai), Attiny2313 (minimaliai), srovės reguliatoriaus 7805 ir išėjimų vadiklio (tarkime to pačio 75hc595, nors tai gali buti ir uln2003). Taigi šie komponentai 8 išėjimams suvalgo mačiausiai 20 litų įskaitant papildomus rezistorius, kondensatorius, lizdus ir dar kelias papildomas elektrodetales. Dar šiui atveju nepriskaičiuoju jėgos grandinės dalies (rėlių, tristorių ir t.t.) nes ši dalis privalo būti ir mano gaminalu atveju. Mes skaičiuojame tik valdymo dalių kainas. Šiuo atveju gauname kad valdymo plokščiu reikia 64 vienetų o tai sudaro kaina 20 x 64 = 1280LT. PCB šiuo atveju reikė 64 vientų.

2) Mano atveju su nuseklia 74HC959 grandine turime naudoti tik po viena prieš tai paminėtų komonentų, Attiny2313 pakeičiant Atmega328. Dar skirtumas tas, kad kas 8 išėjimus dedame po viena paplidoma 74HC595. Taigi valdymo dalis kainuoja ~25 litus bendra dalis + 64 vienetai 74HC595. Kadangi pastarieji kainuoja apie 1 litą sumoje gauname 25 + 64 = 89 LT. Deja šiuo atveju reikės 65 PCB nes valdymo dalį perkėlėme į atskira dalį.

Kainos skirtumas tikrai stulbinantis. Žinoma jėgos dalis ir PCB nėra įtraukta, o jų kaina nepriklausomai yra gana didelė. Ji abiem atvėjais, pvz rėlių bloko atveju, būtų apytiksliai: 3 (rėlė) * 512 + 2 (uln2003) * 64 +5 (kontaktai ir kiti komonentai) * 64 + 20LT (PCB) *64 = 2754 LT. Tai yra daug ir tai neišvengiama tačiau vien ant valdančiosios dalies mes turime sutaupymą iki 1200LT.

Minusai:

O viena blogybių yra ta, kad 74HC595 siunčia grynai loginę informacija į valdomus įrenginius, tad jie turi veikti arba pilna galia arba neveikti (bet tai mes išpręsime).

Taip pat orginaliai 74HC595 negali buti valdomas tiesiogiai iš DMX512 tinklo. Tam reikia juos jungti prie mikrokontrolerio, pvz. Arduino. Bet mes tau nusprendėme kad kainos atžvilgiu geriau vienas Arduino (arba tiesiog Atmega328) vietoje 64 vientų kitų mikrovaldiklių.

Arduino (arba kažkas panašaus į Atmega328) visame šitame reikale

Arduino valdyti 74HC595 nėra sudetinga tačiau galima nesunkiai atlikti tokius patobulinimus, kad tam tikru dažniu atnaujinus 74HC595 reikšmes, kad jų išėjimuose gautume PWM signalą. Šis signalas leistu valdyti išėjimo stiprumą. Taip LED gali ne tik šviesti/nešviesti, bet ir buti įvairaus atspalvio. Žinoma tokios machenacijos reikalauja tiek procesoriaus galios tiek RAM, tačiau sumažinus atspaviu skaičių iki 10 ir išnaudojant visa Arduino (Atmega328) RAM galime nesunkiai užvaldyti kad ir 1000 išėjimų. Tačiau mums reikia tik 512 išėjimu, tad procesorius pilnai susidoroja ir su 200 atspalviais. Beja, būtent dėl PWM generavimo ir turėjome jungti 8 LED prie vieno 74HC595 – 64 LED’u atveju procesoriaus mums reiktu kur kas daugiau, o dėl atnaujimo dažnio stygiaus rezultatai išėjimuose gali ir nuvilti dėl pernelyg silno atnaujinimo dažnio.

DMX signalo priėmimas Arduino viduje nėra sudėtingas dalykas. Kadangi informacija RS485 linijoje atnaujinama 25000kbs tai priimti tokia informacija tikrai spėsime. Panaudojus Arduino UNO TX įėjimą juo gautus duomenis analizuojame ir atnaujinė 74HC595 RAM lentelę programai leidžiame automatiškai atnaujinti visus 512 išėjimus.

Jėgos dalis: LED? Nebutinai!

LED lemputės nėra pagrindinis dalykas kuris mums rūpi. Dėka to kad jungėme 8 išėjimus prie vieno 74HC595 dabar vietoje LED’ų mes galime dėti rėles, tristorius ar mosfetus ir taip valdyti 512vnt bet ko! Vieninetelis dalykas ką mums reikia atlikti tai prie 74HC595 pajungti atitinka energijos perdavimo mazgą ir taip galime valdyti kitokio tipo įrenginį. Kas idomiausia tai valdymo blokas nesikeičia visiškai, o programa reikia pritaikyti tik nežymiai priklausmai nuo situacijos. Pvz. jei su 74HC595 norime valdyti paprastų kaitrinių lempučių šviesumą tuomet programa turi sekti faziu pokyčius ir šviesumą signalą keisti atitinkamu metu.

Žinoma kitaip nei Ledu matricos atveju PCB dydis padidėtu, bet tokiu atveju nesunkiai galime suskirstyti kiekviena 74HC595 jei jos vadomus 8 jėgos išėjimus į modulius. Pirmasis modulis jungiams su Arduino o sekančiai sujungiamsi nuosekliai. Taip gauname gana lanksčia sistemą: Vienas valdiklis (pvz arduino) valdo nuo 1 iki 64 vientų moduliu, kurie savyje gali valdyti po 8 išėjimus. Moduliavimas leidžia rinktis norimų valdyti išėjimų skaičių taip pat lengvai kaip naudojant DMX modulius.

Pvz. kaitrinių lempučių šviesumo reguliatorius (angl. Dimmer) PCB įtraukus Arduino reikalinga faziu atpažinimą:

bulbmatrix

Reiktu pastebėti tai kad fazių atpažinimo dalis reikalingas tik pirmame jėgos mudulyje, o kituose šios dalies galima nebeintegruoti. Konkrečiai šis modulis gali iįmaitinti kaitrines lemputes nuo 40W iki 100W galingumo.

Norint valtyti tik yrenginių veiką galima naudoti pigesnį varianta – rėles:

relay

Apibedrinimas

Aprašyta sistema galime pavadinti vienu DMX512 moduliu, kuris gali sutaupyti nemažai pinigų norint valdyti gausybę vieno tipo įrenginių. Nors nebutunai – rėlių ir tristoriu modulius juk galime maišyti, tik tokiu atveju DMX512 sugnale rėlių modulius vadyti privalome kaip junglikius (t.y. arba 0, arba 100 procento PWM signalu).

Video kaip šis sistema veikia valdant 64 vienetus LED matrica (išrakto pasiteisinu kad kelis LED įlitavau perdegusius bet aš esu nekantrus ir tingėdamas perlituoti padėjau ekspermentus taip):

Panaudojus savadarbi FTDI USB į RS485 konverteri pasinaudojus Freestyler programine įranga galime vadyti visu 512 DMX išėjimų (na ir kas kad turime tik 64 LED) 😀

Truputi perfokusave matrica atrodo taip (taip veiksmo nėra nes nelabai moku naudotis šita PC programine įranga):

Keletas kadru tokio LED įtaiso. FTDI adapteris:

img8947tj

Arduino priedas (kuris praktikoje daugiau funkciju turi kaip DMX siuntejas nei DMX priėmėjas, bet darbam tai netrukdo):

img8948e

Ir galiausiai LED matrica su 8 vienetais 74HC595:

img8949m

img8950lh

Deja kaitriniu lempučiu valdymas per rėlę ar tristoriu panaudojant minėtus modulius bandžiau tik maketavimo plokštėje bet PCB pilno produkti netestavau dėl pernelyg brangios jėgos dalies.

Kas toliau?

Netolimoje dalyje laukite detalesnių įrašų apie visas sudedamasias tokio DMX512 modulio dalis:

  1. Arduino arba ATmega328 paremtas valdiklis (DMX receicer) skirtas priimti DMX512 signalą ir jo duomenis pateikti į 74HC595 registorius.
  2. Kaitrinių lempučių valdymo jėgos modulis (tristoriai, fazės persivertimo fiksavimas ir t.t.) skirtas 220V valdymui su Dimming funkcija.
  3. Rėlių jėgos modulis skirtass bet kokiai srovėi įjungti/išjungti;
  4. Arduino arba ATmega328 paremtas DMX512 šaltinis (DMX transmiter) skirtas transliuoti SD kortelės skriptą DMX moduliams.

Veiksmai

Information

8 responses

13 02 2013
giedriuszzz

Man kvepia 8×8 LED cube 🙂

14 02 2013
mindogas

Ne, tokių planų nėra, nors tai tikrai įmanoma.

12 08 2013
Egidijus Narkus

Gera ideja su 74HC595. O as tai tiesiai nuo atmegu i tranzus… Is vienos atmea328 paimdavau 15-18 outputu su 100Hz. pwm.

27 03 2014
Camp

can you upload the arduino code please?

27 03 2014
mindogas

Unfortunately I can’t. This project went as some sort of commercial thing so i can’t share source. Anyway I could share my knowledge with you if you have any questions.

24 04 2014
Campa

In how to run it on DMX but with RGB leds, thanks.

24 04 2014
mindogas

RGB leds are practically the same, the only different is that the count of outputs must be trippled and each led is controlled throw tree channels. And this is a problem – only 170 RGB leds could be controlled totally trow DMX512

8 05 2014
Campa

Would you help me with the code? Thanks

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: