Op zoek naar 36 kanalen PWM-besturing voor LED-sculptuur

Ik ben een beeldhouwer, geen EE, maar ik probeer regelbare LED's op te nemen in een stuk waar ik aan werk, en ik zou wat advies kunnen gebruiken om een ​​praktische benadering uit te werken. Ik zou graag 12 afzonderlijke kanalen (het stuk is een dodecaëder) van RGB-strips willen kunnen bedienen, en dat betekent dat ik 36 PWM-outs nodig heb, wat meer is dan waar ik toegang toe heb op een Arduino. Voor zover ik weet, heb ik een schild nodig, zoiets als TLC5940 Breakout - hoewel dat alleen geeft me 16 PWM's, dus ik moet er drie van elkaar koppelen, waarvan ik weet dat het kan worden gedaan, maar ik zou graag willen weten welke problemen dit kunnen veroorzaken. Iets als Brilldea LED Painter kan ook een oplossing zijn, maar ik heb relatief veel tijd nodig, dus iets pre -gemonteerd zou een leuk extraatje zijn.

Ik ben hier nieuw voor, dus ik ben niet zeker van de juistheid van wat ik net heb gezegd, maar hopelijk kunnen sommigen van jullie mij vertellen wat een redelijke benadering zou kunnen zijn. Bedankt voor je hulp.

5
Het is een kunstproject, dus ik "hoef" niets te doen. Maar ja, in een ideaal scenario (en het klinkt alsof het een realistisch scenario is), kan ik elke strip onafhankelijk besturen om de effecten te creëren die ik wil. Terugschalen beperkt de visualisaties die ik kan maken.
toegevoegd de auteur Reign of Error, de bron
Maar je moet echt alle strips en alle kleuren onafhankelijk van elkaar besturen? Als u een regel vindt die het aantal variabelen vermindert, kunt u het eenvoudiger maken.
toegevoegd de auteur clabacchio, de bron

7 antwoord

There is a fancy Arduino library for doing PWM through shift registers, called ShiftPWM. It was developed more or less specifically for what you are wanting to do (control lots of RGB LEDs with an Arduino). I saw this on Hack-a-Day several months ago. It looks very cool and boasts the potential to control 768 LEDs (or 256 RGB LEDs) at 5-bits (i.e. 32 brightness levels) per color channel (i.e. >32000 possible colors). I'm looking forward to using this library at some point myself. And it's only going to take up three pins on your Arduino - for serial, clock, and latch to the initial shift register (in the chain). This library is meant to drive something like the 74HC595 shift register, which is hell of a lot cheaper than the TLC5940.

6
toegevoegd
De TLC5940 is niet "een stuk duurder" dan de schuifregisters van de 3 74HC595 (gekocht in kleine hoeveelheden) die u zou moeten vervangen, en de TLC5940 gebruikt hetzelfde aantal pinnen en neemt veel timingbeperkingen op van de microcontroller.
toegevoegd de auteur Ron Harlev, de bron
Om 256 helderheidsniveaus te krijgen, moet je de shifters 256 keer per frame voeden? Sommige andere benaderingen lijken het mogelijk te maken om met een stuk minder rond te komen.
toegevoegd de auteur firedfly, de bron
Ik vind dit een goed idee, maar ik heb voldoende financiële steun dat de kosten van de TLC5940 niet zo'n groot probleem mogen zijn. Ik zou ook graag 256 levels hebben, terwijl ik een programma aan het schrijven ben dat beweging omzet (het zal data van een Kinect converteren) naar een kleur, dus met een groter bereik is het algoritme interessanter. Maar toch bedankt. Misschien nog steeds nuttig.
toegevoegd de auteur Reign of Error, de bron

Naar mijn mening klinkt jouw aanpak bij het gebruik van dit breakout-bord door sparkfun echt goed :)

De grote voordelen zijn dat dit board 16 PWM-kanalen biedt die programmeerbaar zijn via een serie seriële seriële interface, alle led-ingangen zijn gemakkelijk toegankelijk en gemakkelijk bij te houden.

Ook - u weet waarschijnlijk al, als u van plan bent om Arduino te gebruiken, een bibliotheek die u zal helpen je manipuleert de driver al bestaat.

Als dat niet het geval is, moet je ook hun project naar huis gaan

Omdat je zei dat je onder druk staat, denk ik dat deze oplossing je in staat stelt om snel en gemakkelijk te werken om die leds te laten werken zoals je wilt - Veel succes met je project! :)

4
toegevoegd
De LED-schilder ziet er perfect uit voor zijn project.
toegevoegd de auteur Ron Harlev, de bron
De belangrijkste reden om elke kleur op zijn eigen TLC5940 aan te sturen, is om elke kleur met een andere hoeveelheid stroom te laten rijden (alle gelijkstroomputten op een enkele TLC5940 zuigen dezelfde hoeveelheid stroom). Het is niet moeilijker om op de een of andere manier te programmeren.
toegevoegd de auteur Ron Harlev, de bron
(deel1): Ja, je hebt gelijk, de LED-schilder splitst RGB tussen de drie TLC's, maar er is geen reden waarom je de breakout-borden niet op dezelfde manier kunt gebruiken, sterker nog, ik denk dat dit een heel goed idee is. Afgezien van het breakout-bord weet je waarschijnlijk al dat in de foto's de aansluitingen van 0,1,2 ... 15 precies zo zijn als die voor RC-servoverbindingen. Eén GROND, één BATTERIJ (+ 5 V) en één PWM-uitvoer. Tijdens de bedrading zult u alleen de PWM-uitgang en natuurlijk de GROND van één kaart moeten gebruiken (op voorwaarde dat GEMUND gemeenschappelijk is voor alle 3 de kaarten).
toegevoegd de auteur Jorge Alves, de bron
(part2): over voor- en nadelen ... Ik denk dat het opsplitsen van de kleuren je toestaat om veel meer geagraniseerd te werken en dat is echt een goede zaak, zowel vanuit software- als hardware-oogpunt, anders dan dat, kan ik niet denken over iets te zeggen als "dit is veel beter omdat ..." Finnaly, het splitsen van RGB over de 3 TLC's, lijkt met behulp van de breakout-boards de manier om te gaan vanuit mijn oogpunt. LED-schilder is ook geweldig, maar ze zijn niet op voorraad :)
toegevoegd de auteur Jorge Alves, de bron
Bedankt, ik hou van het uiterlijk van de TLC5940. In feite gebruikt de LED-schilder er eigenlijk drie (NT, in tegenstelling tot RHB bij de uitbraak). Zo goed als ik kan zien, deelt de schilder de kleuren over de drie drivers, terwijl bij de breakout de kanalen niet verdeeld zijn. Kun je me vertellen of er nadelen zijn voor beide benaderingen, en nog belangrijker, wat zou moeilijker te programmeren zijn? Bedankt voor alle hulp!
toegevoegd de auteur Reign of Error, de bron

U hebt geen PWM nodig. Elke output (IO) pin op een microcontroller zal werken.

Met een PWM kunt u een duty-cycle (aan/uit-tijd) instellen en deze vervolgens oneindig herhalen, wat resulteert in een variabele helderheid. IO-pinnen kunnen worden in- en uitgeschakeld op basis van een timer om hetzelfde resultaat te bereiken. De PWM is technisch nauwkeuriger en kan sneller veranderen dan de IO-pennen, maar het menselijk oog kan het verschil niet zien. Het resultaat is precies hetzelfde.

U hebt dus een microcontroller met 36 IO-pinnen nodig.

3
toegevoegd
Als u externe hardware probeert te vermijden, moet deze ook voldoende stroom kunnen laten zinken om die 36 LED's aan te sturen ...
toegevoegd de auteur Ron Harlev, de bron
@the_koo: Arduinos zijn vrij klein - misschien kun je ruimte vinden om in 3 of 4 Arduino's te knijpen, die elk een paar RGB-strips besturen. Of misschien een upgrade naar een Arduino Mega 2560 met 54 uitgangspennen.
toegevoegd de auteur Jeremy Ruten, de bron
Ja, 100 Hz of zo zou voldoende snel zijn om geen zichtbaar flikkeren te produceren. De klok op een Arduino draait op 8.000.000 Hz, dus je kunt dit in software doen.
toegevoegd de auteur Orangecrush, de bron
Dat is handig om te weten, maar mijn Arduino heeft nog steeds geen 36 uitvoerpinnen, dus ik moet nog steeds de beste manier bedenken om al die pinnen aan elkaar te rijgen. Toch bedankt!
toegevoegd de auteur Reign of Error, de bron

(Excuses voor het plaatsen van advertenties, maar konden geen enkele manier zien om rechtstreeks contact op te nemen met de gebruiker) Ik produceer een 48-kanaals DMX-dimmer die ontworpen is om LED-strips aan te sturen, wat u een standaardoplossing kan bieden. email mij via whitewing.co.uk

1
toegevoegd

Een andere optie die u misschien wilt overwegen, is:

http://thingm.com/products/blinkm

Ik heb geen connecties met dit bedrijf, ik heb zojuist het product gebruikt.

1
toegevoegd

Ik zou willen voorstellen om schuifregisters met geregelde stroom te gebruiken en de stroombesturingsdraad CPU gestuurd te laten zijn (mogelijk door een of meer niet-stroomgestuurde schakelaars in de ketting op te nemen en ze te voorzien van besturingsweerstandverdelers). Als u 6-bits helderheidsregeling en een maximale herlaadsnelheid van 10 keer de PWM-snelheid wilt hebben (bijv. Max. Één reload per milliseconde om een ​​framesnelheid van 100 Hz te bereiken), zou ik voorstellen dat de zes bits van elke PWM-waarde worden verdeeld onder zes verschuivingsbuffers (dus bit N van buffer B zou bit B zijn van de helderheid van LED N). Vervolgens zou elke 10 cycli het herlaadpatroon zijn:

Cycle 0: Load all shifters with buffer 5, full current
Cycle 1-3: Keep same data in shifters
Cycle 4: Load all shifters with buffer 4, full current
Cycle 5: Keep same data in shifters
Cycle 6: Load all shifters with buffer 3, full current
Cycle 7: Load all shifters with buffer 2, half current
Cycle 8: Load all shifters with buffer 1, quarter current
Cycle 9: Load all shifters with buffer 0, 1/8 current

Met deze benadering kan de gemiddelde stroom worden ingesteld van 1/80 van de maximale piekwaarde tot 63/80 van de maximale piek, in eenheden van 1/80, met een herlaadsnelheid die slechts 10x de framesnelheid is. Als men 256 helderheidsniveaus wil, kan men reloads toevoegen op 1/16 en 1/32 stroom (12 reloads per frame in plaats van 10). Hierdoor zou de gemiddelde stroom kunnen worden ingesteld van 1/384 tot 255/384 met slechts een bescheiden toename van de herlaadsnelheid.

0
toegevoegd

Deze http://www.adafruit.com/products/306 zou een optie kunnen zijn. Het heeft 32 RGB-adresseerbare lEDS per strip en je kunt de strip knippen (gebruik hiervoor een tutorial) zodat je ze plaatst

0
toegevoegd
Hoewel dit in theorie de vraag zou kunnen beantwoorden, zou het de voorkeur verdienen om de essentiële delen van het antwoord hier op te nemen en de link te verstrekken als referentie.
toegevoegd de auteur Orangecrush, de bron
Ik probeer geen individuele LED's op één strip aan te pakken. Ik moet een hele reeks afzonderlijke strips adresseren.
toegevoegd de auteur Reign of Error, de bron