Vraag:
Een groot aantal (~ 100) digitale uitgangssignalen van Arduino krijgen
Alexis K
2012-11-02 09:13:27 UTC
view on stackexchange narkive permalink

Ik zou graag ongeveer 100 onafhankelijke LED's willen aansturen met een Arduino. Het probleem is dat de Arduino lang niet genoeg pinnen heeft die hiervoor kunnen worden geconfigureerd. Wat zou een manier zijn om dit probleem op te lossen? Is er een chip die een complexer signaal van de Arduino kan demuxen dat dan de leds kan aansturen? Of is er een andere oplossing?

wat zijn uw vereisten voor vernieuwingsfrequentie? hoeveel stroomafname per led?
verversingssnelheid van ongeveer 1 seconde. denken rond 8mA per LED. Zou worden aangedreven door een externe adapter - niet de Arduino
Er zijn veel oplossingen voor demultiplexen. Maar overweeg de complexiteit van uw taak; past het algoritme dat je nodig hebt om de gegevens te genereren binnen de beperkingen van de Arduino's mcu? Sommige taken zullen, andere niet of alleen passen bij het maken van ontwerpen die behoorlijk bevredigend kunnen zijn om te maken, maar het onderhoud van de code een uitdaging kunnen maken.
Een antwoord:
Anindo Ghosh
2012-11-02 11:00:24 UTC
view on stackexchange narkive permalink

Ten eerste kan een Arduino niet rechtstreeks 100 LED's aansturen, omdat de gecombineerde stroom die het apparaat moet genereren of zinken, zowel de microcontroller als de spanningsregelaar op het Arduino-bord ver zal overtreffen. Een aangepast Arduino Shield met zijn eigen stroombron en regeling zou echter wel kunnen passen.

Er zijn verschillende gemakkelijke benaderingen, de eenvoudigste benadering wordt hieronder beschreven:


  • TLC5940 constante stroom LED-driver in trapsgewijze configuratie:

De TLC5940 stuurt 16 LED's per IC aan , bestuurd door seriële invoer via een kleine variant van een SPI-interface. Er kunnen maximaal 40 TLC5940-apparaten in cascade worden geplaatst, maar 7 daarvan zijn voldoende om de 100 LED's in de vraag aan te sturen.

Er zijn minstens een paar Arduino-bibliotheken ( 1, 2) voor de TLC5940.

Voorgestelde kloksnelheden voor verzending vanaf de Arduino, en bijbehorende vernieuwingsfrequentie:

  • 1 MHz GSClk met code in deze thread.
  • 330 KHz SCLK (seriële dataklok)
  • Daarbij, LED-gegevensverversingssnelheid 244 Hz

Dit is gebaseerd op de formules uit de datasheet:

f (GSCLK) = 4096 * f (update)
f (SCLK) = 193 * f (update) * n
waarbij:
f (GSCLK): minimum frequentie nodig voor GSCLK f (SCLK): minimumfrequentie nodig voor SCLK en SIN
f (update): updatesnelheid van het hele cascadesysteem
n: aantal gecascadeerde TLC5940-apparaten

De TLC5940 is een constante stroom sink , dus de anodes van de LED's zouden worden gekoppeld aan een spanning die een paar volt hoger is dan de LED Vf, of ongeveer 7 volt, afhankelijk van wat is lager, onafhankelijk van de stroompinnen van de Arduino gevoed. Deze spanningsbron moet 100 * kunnen leveren (ongeacht de stroom waarop je de LED's laat draaien), maar kan een ongereguleerde bron zijn.

De LED-kathodes gaan naar de aandrijflijnen van de respectievelijke TLC5940 IC's.

De TLC5940 zelf verbruikt tot Icc = 60 mA per apparaat tijdens het schrijven van gegevens, dus 7 van hen voeden via de Arduino werkt niet, er is een onafhankelijke 3.3 tot 5 volt gereguleerde Vcc voor nodig, idealiter dezelfde waarde als de Vcc van de Arduino die wordt gebruikt, en de grondsporen moeten natuurlijk weer verbinding maken met de aarde van de Arduino. Het gebruik van de TLC-onderdelen op een andere spanning dan de Arduino zou een niveauregeling van het seriële signaal met zich meebrengen, en kan daarom het beste worden vermeden.

Verschillende YouTube-video's demonstreren het gebruik van Arduino met TLC5940 IC's.


Hoewel deze IC's zijn ontworpen voor het aansturen van numerieke LED-displays met 7 segmenten, bieden ze individuele LED-besturing, zodat ze kunnen worden gebruikt voor maximaal 64 LED's per IC. Twee van hen kunnen in cascade worden geplaatst om de vereiste 100 LED's aan te sturen. Pagina 13 van de datasheet toont een cascadeconfiguratie.

De LED's zouden voor dit ontwerp elektrisch moeten worden verbonden als groepen van maximaal 8 LED's die elk één kathodelijn (gemeenschappelijke kathode) delen.

De MAX7219 / 7221 zijn multiplexing LED-stuurprogramma's, daarom zal de maximale helderheid van LED's lager zijn dan voor een statische LED-driver zoals in de vorige sectie.

Hier is een handige LED matrixbibliotheek en gids met behulp van de MAX7219.

Sommige relevante YouTube-video's ( 1, 2) kunnen interessant zijn.


Nogmaals, deze IC's zijn ontworpen voor het aansturen van numerieke LED-displays met 7 segmenten, ze bieden individuele LED-besturing en kunnen dus worden gebruikt voor maximaal 40/64 LED's per IC. Twee / drie van hen kunnen worden aangesloten op een Arduino SPI-bus om de 100 vereiste LED's aan te sturen.

Ontwerpnotities blijven hetzelfde als in de vorige sectie. Ook zou de maximale helderheid van individuele LED's lager zijn dan voor het rechte multiplexontwerp van de MAX7219.

Er zijn enkele YouTube-video's die mogelijk interessant zijn.


  • Discrete componentontwerpen, schuifregisters, IO-uitbreidingen, snijdbare LED-strips met individuele controllers, en nog veel meer ...

Dit zijn allemaal benaderingen die zijn gebruikt met verschillende niveaus van eenvoud en succes. Het zijn complexere implementaties dan de 3 bovenstaande benaderingen, en daarom niet verder gedetailleerd. Zoeken op internet zou indien nodig nuttige handleidingen voor deze benaderingen opleveren.

Een belangrijke irritatie bij dergelijke ontwerpen is de behoefte aan stroomregelweerstanden op elke LED- of LED-string. Apparaten die specifiek zijn ontworpen voor LED-rijden hebben dit doorgaans niet nodig.

Ik heb geen persoonlijke ervaring met deze laatste reeks opties, dus kan ik niet veel helpen.


Voetnoot: nadat ik op deze vraag had gereageerd, vond ik een oudere vraag, met antwoorden die een aantal van de benaderingen in mijn laatste sectie beschrijven en bespreken. Die draad maakt interessant "verder lezen als huiswerk".


Voordelige schuifregisters zoals 74HC595?
En hoe biedt de Max5951 "individuele LED-besturing" - het lijkt slechts 7-segmentbesturing te hebben (8 pinnen voor 8 cijfers), niet?
Ja, die ook. Veel weerstanden nodig om de LED's te beschermen, en dan is de bedrading complex in vergelijking met de speciaal gebouwde IC's.
@ThomasE No: "De MAX6950 stuurt maximaal vijf 7-segmentcijfers of 40 discrete LED's aan. De MAX6951 stuurt maximaal acht 7-segmentcijfers of 64 discrete LED's aan." Je sluit gewoon groepen van 8 LED's aan op één kathodelijn, zoals beschreven in het MAX7219-gedeelte van mijn antwoord.
Dus dan zou het gegroepeerde besturing van de 8 LED's samen zijn, nietwaar? Ik vraag het omdat ik dat aannam en deze chip doorgaf toen ik hem eerder tegenkwam
Aha - Charlieplexing. Laat maar!
@ThomasE Nee, elke individuele LED kan worden aangestuurd door de MAX6950 / 6951 - dat is sowieso een voorwaarde voor charlieplexing. In feite kunnen deze IC's in feite geen meercijferige displays besturen (hoewel de datasheet een tijdelijke oplossing suggereert), aangezien ze individuele toegang tot elke LED nodig hebben voor Charlieplex-scanning.
Dat is genoteerd. Uitgebreid antwoord hierboven, trouwens.
De TLC5940 is overdreven als je de helderheid van de leds niet hoeft te veranderen, hij is ietwat duur. Hoewel als je zijn 12 bit PWM wilt, het erg leuk is, zijn er variant IC's voor maximaal 48 LED's.
@starblue * Overkill versus gemak van DIY-implementatie *: voor een eenmalige of hobby-inspanning, zou de TLC5940 ($ 3,78 in enkele hoeveelheden bij DigiKey) niet de ** eenvoudigste ** oplossing blijven, vanwege de Arduino-bibliotheken en actieve ondersteuning binnen de Arduino-gemeenschap? Tenzij er andere, even goed ondersteunde onderdelen zijn zoals je hebt aangegeven, waar de Arduino-forums dol op zijn.
Ik heb onlangs veel succes gehad met 16 LED's met behulp van twee 595 schuifregisters .. maar zoals anderen hebben gezegd dat je meer vermogen nodig hebt om 100 te rijden (en meer schuifregisters als je die route aflegt ...)


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...