Inhoudsopgave:

Charlieplexing LED's - de theorie: 7 stappen (met afbeeldingen)
Charlieplexing LED's - de theorie: 7 stappen (met afbeeldingen)

Video: Charlieplexing LED's - de theorie: 7 stappen (met afbeeldingen)

Video: Charlieplexing LED's - de theorie: 7 stappen (met afbeeldingen)
Video: Почему Новгород называли Господином, а Киев Матерью городов Русских? 2024, Juni-
Anonim
Charlieplexing LED's - de theorie
Charlieplexing LED's - de theorie
Charlieplexing LED's - de theorie
Charlieplexing LED's - de theorie

Dit instructable is minder een build je eigen project en meer een beschrijving van de theorie van charlieplexing. Het is geschikt voor mensen met de basis van elektronica, maar niet voor complete beginners. Ik heb het geschreven als antwoord op de vele vragen die ik heb gekregen in mijn eerder gepubliceerde Instructables.

Wat is 'Charlieplexing'? Het stuurt veel LED's aan met slechts een paar pinnen. Voor het geval je je afvraagt Charlieplexing is vernoemd naar Charles Allen van Maxim die de techniek ontwikkelde. Dit kan voor veel dingen handig zijn. Mogelijk moet u statusinformatie weergeven op een kleine microcontroller, maar u heeft maar een paar pinnen over. Misschien wilt u een fraaie dot-matrix of klokweergave laten zien, maar wilt u niet veel componenten gebruiken. Enkele andere projecten die charlieplexing demonstreren die u misschien wilt bekijken, zijn: Hoe u veel LED's kunt aansturen vanaf een paar microcontroller-pinnen. door Westfw:- https://www.instructables.com/id/ED0NCY0UVWEP287ISO/ En een paar van mijn eigen projecten, het Microdot-horloge:- https://www.instructables.com/id/EWM2OIT78OERWHR38Z/ De Minidot 2-klok: - https://www.instructables.com/id/E11GKKELKAEZ7BFZAK/ Een ander cool voorbeeld van het gebruik van charlieplexing is op: https://www.jsdesign.co.uk/charlie/ De Minidot 2-klok introduceert een geavanceerd charlieplexing-schema voor vervagen/dimmen die hier niet worden besproken. UPDATE 19 augustus 2008: Ik heb een zip-bestand toegevoegd met een circuit dat mogelijk gebruik kan maken van de matrix charliplexing voor high power LED's, besproken (uitgebreid:)) in de commentarensectie. Het heeft een drukknop + positie-encoder voor een gebruikersinterface, plus circuits voor computerbesturing via USB of RS232. Elk van de hoogspanningsrails kan worden ingesteld op een van twee spanningen, bijvoorbeeld 2,2 V voor RODE LED's en 3,4 V voor groen/blauw/wit. De spanning voor de hoge bedhekken is in te stellen met de trimpot. Ik zou overwegen dat een 20-draads IDC-lintkabel op het bord wordt aangesloten en 20-pins IDC-connectoren worden toegevoegd langs de lengte van het lint, waarbij elk LED-bord links heeft naar de draden in de matrix die gewenst zijn. Het circuit is in Eagle Cad en weergegeven in de onderstaande subafbeelding. Het hoge zijcircuit wordt geïmplementeerd door optocouplers te gebruiken waarvan ik denk dat die geschikt zijn. Ik heb dit circuit niet echt getest en ook geen software geschreven vanwege tijdgebrek, maar heb het voor commentaar gesteld, ik ben vooral geïnteresseerd in de implementatie van de optocoupler. Iedereen die dapper genoeg is om het te proberen … post uw resultaten alstublieft. UPDATE 27 Augustus 2008: Voor degenen die EagleCad niet gebruiken… Hieronder is een pdf van het schema toegevoegd

Stap 1: Sommige LED-theorie

Sommige LED-theorie
Sommige LED-theorie
Sommige LED-theorie
Sommige LED-theorie

Charlieplexing steunt op een aantal nuttige aspecten van LED's en moderne microcontrollers.

Ten eerste wat er gebeurt als je een led aansluit op elektriciteit. Het hoofddiagram hieronder toont de zogenaamde If v Vf-curve van een typische 5 mm laagvermogen-LED. Als staat voor 'voorwaartse stroom' Vf staat voor 'voorwaartse spanning' De verticale as geeft met andere woorden de stroom weer die door een LED zal vloeien als je de spanning van de horizontale as over de klemmen zet. Het werkt ook andersom, als je meet dat de stroom een bepaalde waarde heeft, kun je naar de horizontale as kijken en de spanning zien die de LED over de klemmen zal presenteren. Het tweede diagram toont een schematische weergave van een LED met If en Vf gelabeld. Vanuit het hoofddiagram heb ik ook gebieden van de grafiek gelabeld die van belang zijn. - Het eerste gebied is waar de LED 'uit' is. Nauwkeuriger gezegd, de LED straalt zo zwak licht uit dat je het niet kunt zien tenzij je een soort super-duper beeldversterker had. - In het tweede gebied straalt de LED slechts een zwakke gloed uit. - Het derde gebied is waar een LED gewoonlijk wordt gebruikt en licht uitstraalt volgens de specificaties van de fabrikant. - Het vierde gebied is waar een LED buiten zijn bedrijfslimieten wordt gebruikt, gloeit waarschijnlijk heel fel, maar helaas voor slechts een korte tijd voordat de magische rook binnenin ontsnapt en het niet meer zal werken … dwz in dit gebied brandt het uit omdat er gaat te veel stroom doorheen. Merk op dat de If/Vf-curve of bedrijfscurve van de LED een 'niet-lineaire' curve is. Dat wil zeggen, het is geen rechte lijn… er zit een bocht of knik in. Ten slotte is dit diagram voor een typische rode LED van 5 mm die is ontworpen om te werken op 20 mA. Verschillende LED's van verschillende fabrikanten hebben verschillende bedrijfscurves. Bijvoorbeeld in dit diagram bij 20mA zal de voorwaartse spanning van de LED ongeveer 1,9V zijn. Voor een blauwe 5 mm LED bij 20 mA kan de voorwaartse spanning 3,4 V zijn. Voor een high power witte luxeon LED bij 350mA kan de voorwaartse spanning ongeveer 3,2V zijn. Sommige LED-pakketten kunnen meerdere LED's in serie of parallel zijn, waardoor de Vf/If-curve opnieuw wordt gewijzigd. Typisch zal een fabrikant een bedrijfsstroom specificeren die veilig is om de LED bij te gebruiken, en de voorwaartse spanning bij die stroom. Meestal (maar niet altijd) krijg je een grafiek vergelijkbaar met hieronder in de datasheet. U moet de datasheet van de LED bekijken om te bepalen wat de voorwaartse spanning is bij verschillende bedrijfsstromen. Waarom is deze grafiek zo belangrijk? Omdat het laat zien dat wanneer er een spanning over de LED staat, de stroom die zal vloeien volgens de grafiek zal zijn. Verlaag de spanning en er zal minder stroom vloeien…..en de LED zal 'uit' zijn. Dit maakt deel uit van de theorie van charlieplexing, die we in de volgende stap zullen bespreken.

Stap 2: De wetten (van elektronica)

De wetten (van elektronica)
De wetten (van elektronica)
De wetten (van elektronica)
De wetten (van elektronica)
De wetten (van elektronica)
De wetten (van elektronica)

Nog steeds niet bij de magie van charlieplexing … we moeten naar enkele basisprincipes van elektronicawetten gaan. De eerste wet van belang stelt dat de totale spanning over een reeks verbonden componenten in een elektrisch circuit gelijk is aan de som van de individuele spanningen over de componenten. Dit wordt weergegeven in het hoofddiagram hieronder. Dit is handig bij het gebruik van LED's, omdat uw gemiddelde uitgangspin van de batterij of microcontroller nooit precies de juiste spanning zal hebben om uw LED op de aanbevolen stroomsterkte te laten werken. Een microcontroller werkt bijvoorbeeld meestal op 5V en zijn uitgangspinnen staan op 5V wanneer deze is ingeschakeld. Als je gewoon een LED aansluit op de uitgangspin van de micro, zie je aan de werkingscurve op de vorige pagina dat er te veel stroom in de LED zal vloeien en deze zal heet worden en doorbranden (waarschijnlijk ook de micro beschadigen) Als we echter een tweede component in serie met de LED introduceren, kunnen we een deel van de 5V aftrekken, zodat de resterende spanning precies goed is om de LED op de juiste bedrijfsstroom te laten lopen. Dit is typisch een weerstand en wordt bij gebruik op deze manier een stroombegrenzende weerstand genoemd. Deze methode wordt heel vaak gebruikt en leidt tot wat de 'wet van ohm' wordt genoemd … zo genoemd naar de heer Ohm. De wet van Ohm volgt de vergelijking V = I * R waarbij V de spanning is die over een weerstand R zal verschijnen wanneer een stroom I door de weerstand stroomt. V is in volt, I is in ampère en R is in ohm. Dus als we 5V te besteden hebben, en we willen 1,9V over de LED om deze op 20mA te laten werken, dan willen we dat de weerstand 5-1.9=3.1 heeft V eroverheen. Dit zien we in het tweede schema. Omdat de weerstand in serie staat met de LED, zal er dezelfde stroom door de weerstand vloeien als de LED, namelijk 20mA. Dus als we de vergelijking herschikken, kunnen we de weerstand vinden die we nodig hebben om dit te laten werken. tot nu toe … cool. Kijk nu naar diagram 3. Het heeft de LED ingeklemd tussen twee weerstanden. Volgens de eerste hierboven genoemde wet hebben we dezelfde situatie bij het tweede diagram. We hebben 1,9 V over de LED, dus het werkt volgens het specificatieblad. We hebben ook dat elke weerstand 1,55 V aftrekt (voor een totaal van 3,1). Als we de spanningen bij elkaar optellen, hebben we 5V (de microcontroller-pin) = 1,55V (R1) + 1,9V (de LED) + 1,55V (R2) en alles komt in evenwicht. Met behulp van de wet van ohm vinden we dat de weerstanden elk 77,5 ohm moeten zijn, dat is de helft van de hoeveelheid berekend op basis van het tweede diagram. In de praktijk zou het natuurlijk moeilijk zijn om een weerstand van 77,5 ohm te vinden, dus je zou gewoon de dichtstbijzijnde beschikbare waarde vervangen, zeg 75 ohm en eindigen met een beetje meer stroom in de LED of 82ohm om veilig te zijn en iets minder te hebben. Waarom zouden we in hemelsnaam deze weerstand moeten doen om een eenvoudige LED aan te sturen … nou als je één LED hebt, is het allemaal een beetje dom, maar dit is een instructable over charlieplexing en het is handig voor de volgende stap.

Stap 3: Introductie van 'complementaire drive'

Introductie van 'complementaire drive'
Introductie van 'complementaire drive'

Een andere naam die 'charlieplexing' beter omschrijft, is 'complementaire drive'.

In je gemiddelde microcontroller kun je in firmware de micro vertellen om een uitgangspin in te stellen als een '0' of een '1', of om een 0V-spanning aan de uitgang of een 5V-spanning aan de uitgang te presenteren. Het onderstaande diagram toont nu de ingeklemde LED met een omgekeerde partner … of een complementaire LED, dus complementaire aandrijving. In de eerste helft van het diagram voert de micro 5V uit naar pin A en 0V naar pin B. De stroom zal dus van A naar B vloeien. Omdat LED2 achterwaarts naar LED1 is gericht, zal er geen stroom doorheen vloeien en zal het niet gloed. Dat heet reverse biased. We hebben het equivalent van de situatie op de vorige pagina. In principe kunnen we LED2 negeren. Pijlen geven de huidige stroom weer. Een LED is in wezen een diode (vandaar Light Emitting Diode). Een diode is een apparaat dat stroom in de ene richting laat stromen, maar niet in de andere. Het schema van een LED laat dit zien, de stroom zal in de richting van de pijl vloeien … maar wordt de andere kant op geblokkeerd. Als we de micro instrueren om nu 5V uit te voeren naar pin B en 0V op pin A, hebben we het tegenovergestelde. Nu is LED1 omgekeerd bevooroordeeld, LED2 is voorwaarts bevooroordeeld en zal stroom laten vloeien. LED2 zal oplichten en LED1 zal donker zijn. Nu is het misschien een goed idee om te kijken naar de schema's van de verschillende projecten die in de inleiding zijn genoemd. Je zou een heleboel van deze complementaire paren in een matrix moeten zien. Natuurlijk sturen we in het onderstaande voorbeeld twee LED's aan met twee microcontroller-pinnen … je zou kunnen zeggen waarom je je druk maakt. Welnu, in het volgende gedeelte komen we bij het lef van charlieplexing en hoe het een efficiënt gebruik maakt van de uitgangspinnen van een microcontroller.

Stap 4: Eindelijk… een Charlieplex Matrix

Eindelijk….een Charlieplex Matrix
Eindelijk….een Charlieplex Matrix
Eindelijk….een Charlieplex Matrix
Eindelijk….een Charlieplex Matrix

Zoals vermeld in de inleiding, is charliplexing een handige manier om veel LED's aan te sturen met slechts een paar pinnen op een microcontroller. Op de vorige pagina's hebben we echter niet echt pinnen opgeslagen, twee LED's aangestuurd met twee pinnen ….big whoop!

Welnu, we kunnen het idee van complementaire drive uitbreiden tot een charlieplex-matrix. Het onderstaande diagram toont de minimale charlieplex-matrix bestaande uit drie weerstanden en zes LED's en met slechts drie microcontroller-pinnen. Zie je nu hoe handig deze methode is? Als je op de normale manier zes LED's wilt aansturen… heb je zes microcontroller-pinnen nodig. In feite kun je met N-pinnen van een microcontroller potentieel N * (N - 1) LED's aansturen. Voor 3 pinnen is dit 3 * (3-1) = 3 * 2 = 6 LED's. Dingen stapelen zich snel op met meer pinnen. Met 6 pinnen kun je 6 * (6 - 1) = 6 * 5 = 30 LED's aansturen….wauw! Nu naar het charlieplexing-bit. Kijk naar het onderstaande schema. We hebben drie complementaire paren, één paar tussen elke combinatie van micro-uitgangspinnen. Eén paar tussen A-B, één paar tussen B-C en één paar tussen A-C. Als je pin C voor nu zou loskoppelen, zouden we dezelfde situatie hebben als voorheen. Met 5V op pin A en 0V op pin B, zal LED1 oplichten, LED2 is omgekeerd voorgespannen en zal geen stroom geleiden. Met 5V op pin B en 0V op pin A zal LED2 oplichten en LED1 is omgekeerd voorgespannen. Dit volgt voor de andere micro-pinnen. Als we pin B loskoppelen en pin A op 5V zetten en pin C op 0V, dan zou LED5 gaan branden. Omkeren zodat pin A 0V is en pin C 5V is, dan zou LED6 gaan branden. Hetzelfde geldt voor het complementaire paar tussen pinnen B-C. Wacht even, hoor ik je zeggen. Laten we het tweede geval wat nader bekijken. We hebben 5V op pin A en 0V op pin C. We hebben pin B (de middelste) losgekoppeld. OK, er vloeit dus een stroom door LED5, er vloeit geen stroom door LED6 omdat deze in tegengestelde richting is voorgespannen (en dat geldt ook voor LED2 en LED4)… maar er is ook een pad voor de stroom die moet worden genomen van pin A, via LED1 en LED3 is er niet? Waarom branden deze LED's niet zo goed? Hier is het hart van het charlieplexing-schema. Er vloeit inderdaad een stroom door zowel LED1 als LED3, maar de spanning over beide gecombineerd zal slechts gelijk zijn aan de spanning over LED5. Meestal zouden ze de helft van de spanning over hen hebben die LED5 heeft. Dus als we 1,9 V hebben over LED5, dan zal slechts 0,95 V over LED1 zijn en 0,95 V over LED3. Uit de If/Vf-curve die aan het begin van dit artikel is genoemd, kunnen we zien dat de stroom bij deze halve spanning veel lager is dan 20mA… en die LED's zullen niet zichtbaar oplichten. Dit staat bekend als huidige stelen. Het grootste deel van de stroom zal dus door de LED vloeien die we willen, het meest directe pad door het minste aantal LED's (dwz één LED), in plaats van een seriecombinatie van LED's. Als je kijkt naar de huidige stroom voor elke combinatie van het plaatsen van 5V en 0V op twee aandrijfpinnen van de charlieplex-matrix, zie je hetzelfde. Er zal slechts één LED tegelijk branden. Kijk als oefening naar de eerste situatie. 5V op pin A en 0V op pin B, ontkoppel pin C. LED1 is de kortste route om de stroom te nemen en LED 1 gaat branden. Er zal ook een kleine stroom door LED5 gaan en dan een back-up van LED4 naar pin B… maar nogmaals, deze twee LED's in serie kunnen niet genoeg stroom overhevelen in vergelijking met LED 1 om helder te gloeien. Zo wordt de kracht van charlieplexing gerealiseerd. Zie het tweede diagram dat het schema is voor mijn Microdot-horloge … 30 LED's, met slechts 6 pinnen. Mijn Minidot 2-klok is in feite een uitgebreide versie van de Microdot … dezelfde 30 LED's in een array. Om een patroon in de array te maken, wordt elke LED die moet worden verlicht kort ingeschakeld, waarna de micro naar de volgende gaat. Als het moet worden verlicht, wordt het voor korte tijd weer ingeschakeld. Door snel genoeg door de LED's te scannen, zal een principe dat 'persistentie van het zicht' wordt genoemd, een reeks LED's een statisch patroon laten zien. Het Minidot 2-artikel heeft een beetje uitleg over dit principe. Maar wacht … ik heb schijnbaar een beetje verdoezeld in de bovenstaande beschrijving. Wat is dat voor 'ontkoppel pin B', 'ontkoppel pin C'. Volgende sectie alstublieft.

Stap 5: Tri-states (geen driewielers)

Driestaten (geen driewielers)
Driestaten (geen driewielers)
Driestaten (geen driewielers)
Driestaten (geen driewielers)

In de vorige stap vermeldden we dat een microcontroller kan worden geprogrammeerd om een 5V-spanning of een 0V-spanning uit te voeren. Om de charlieplex-matrix te laten werken, selecteren we twee pinnen in de matrix en ontkoppelen we eventuele andere pinnen.

Natuurlijk is het handmatig loskoppelen van de pinnen een beetje moeilijk om te doen, vooral als we dingen heel snel scannen om het persistentie van het zichteffect te gebruiken om een patroon te laten zien. De uitgangspinnen van een microcontroller kunnen echter ook worden geprogrammeerd als invoerpinnen. Wanneer een micro-pin is geprogrammeerd als een ingang, gaat deze in wat 'hoge impedantie' of 'tri-state' wordt genoemd. Dat wil zeggen, het biedt een zeer hoge weerstand (in de orde van megaohm of miljoenen ohm) tegen de pin. Als er een zeer hoge weerstand is (zie diagram), kunnen we de pin in wezen als losgekoppeld beschouwen, en dus werkt het charliplex-schema. Het tweede diagram toont de matrixpinnen voor elke mogelijke combinatie om elk van de 6 LED's in ons voorbeeld te verlichten. Typisch wordt een drietoestand aangeduid met een 'X', 5V wordt weergegeven als een '1' (voor logische 1) en 0V als een '0'. In de microfirmware voor een '0' of '1' zou je de pinnen programmeren als een uitvoer en de status ervan is goed gedefinieerd. Voor tri-state programmeer je het als een invoer, en omdat het een invoer is, weten we eigenlijk niet wat de status kan zijn … vandaar de 'X' voor onbekend. Hoewel we een pin kunnen toewijzen als tri-state of een invoer, hoeven we deze niet te lezen. We profiteren gewoon van het feit dat een ingangspin op een microcontroller een hoge impedantie heeft.

Stap 6: Enkele praktische zaken

De magie van charlieplexing berust op het feit dat de individuele spanning die over meerdere LED's in serie wordt gepresenteerd altijd lager zal zijn dan die over één enkele LED wanneer de enkele LED parallel staat met de seriecombinatie. Als de spanning lager is, dan is de stroom lager en hopelijk is de stroom in de seriecombinatie zo laag dat de LED niet gaat branden. Dit is echter niet altijd het geval. Stel dat u twee rode LED's had met een typische voorwaartse spanning van 1,9 V in uw matrix en een blauwe LED met een voorwaartse spanning van 3,5 V (bijvoorbeeld LED1=rood, LED3=rood, LED5=blauw in ons voorbeeld met 6 LED's). Als je de blauwe LED zou laten branden, zou je eindigen met 3,5/2 = 1,75V voor elk van de rode LED's. Dit kan zeer dicht bij het gedimde werkgebied van de LED liggen. Het kan zijn dat de rode LED's zwak gaan branden als de blauwe brandt. Het is daarom een goed idee om ervoor te zorgen dat de voorwaartse spanning van alle verschillend gekleurde LED's in uw matrix ongeveer hetzelfde is bij de bedrijfsstroom, of gebruik anders dezelfde gekleurde LED's in een matrix. In mijn Microdot/Minidot-projecten hoefde ik me hier geen zorgen over te maken, ik gebruikte hoogrenderende blauw/groene SMD-LED's die gelukkig vrijwel dezelfde voorwaartse spanning hebben als de rood/gele kleuren. Als ik echter hetzelfde zou implementeren met 5 mm LED's, zou het resultaat problematischer zijn. In dit geval zou ik een blauw/groene charlieplex-matrix en een rood/gele matix afzonderlijk hebben geïmplementeerd. Ik had meer pinnen moeten gebruiken … maar daar ga je. Een ander probleem is om te kijken naar je huidige trekking van de micro en hoe helder je de LED wilt hebben. Als u een grote matrix heeft en deze snel scant, brandt elke LED slechts een korte tijd. Hierdoor zal het relatief zwak lijken in vergelijking met een statisch scherm. U kunt vals spelen door de stroom door de LED te verhogen door de stroombegrenzende weerstanden te verminderen, maar slechts tot een punt. Als je te lang te veel stroom van de micro trekt, beschadig je de uitgangspinnen. Als u een langzaam bewegende matrix heeft, bijvoorbeeld een status- of cycloondisplay, kunt u de stroom op een veilig niveau houden, maar toch een helder LED-display hebben omdat elke LED langere tijd brandt, mogelijk statisch (in het geval van een statusindicator). Enkele voordelen van charlieplexing: - gebruikt slechts een paar pinnen op een microcontroller om veel LED's te besturen - vermindert het aantal componenten omdat u niet veel driverchips / weerstanden enz. nodig hebt Enkele nadelen: - uw microfirmware moet de instelling afhandelen zowel de spanningstoestand als de ingangs-/uitgangstoestand van de pinnen - wees voorzichtig met het mengen van verschillende kleuren - PCB-lay-out is moeilijk, omdat de LED-matrix complexer is.

Stap 7: Referenties

Er zijn veel referenties over charlieplexing op het web. Naast de links aan de voorkant van het artikel, zijn er enkele: Het originele artikel van Maxim, dit heeft veel te zeggen over het aansturen van 7 segment displays, wat ook mogelijk is. https://www.maxim-ic.com/appnotes.cfm/appnote_number/1880A wiki-itemhttps://en.wikipedia.org/wiki/Charlieplexing

Aanbevolen: