Charlieplexing-LED: Teorien
Retrieved from Get Up! And DIY (http://gdiy.com)

Dette er mindre ' en bygge din egen ' prosjektet og mer en beskrivelse av teorien om charlieplexing. Det er egnet for personer med grunnleggende av elektronikk, men fullført ikke nybegynnere. Jeg har skrevet det svar på mange spørsmål jeg har fått i min tidligere publiserte prosjekter.

Hva er 'Charlieplexing'? Det kjører masse lysdioder med bare et par PIN-koder. I tilfelle du lurer er Charlieplexing oppkalt etter Charles Allen på Maxim som utviklet teknikken.

Dette kan være nyttig for mange ting. Du må kanskje vise informasjon om status på en liten microcontroller, men bare har noen få pins overs. Du vil kanskje vise en fancy matriseskriver eller klokke vise, men vil ikke bruke masse komponenter.

Noen andre prosjekter demonstrere charlieplexing kan du se på er:


Minidot 2-klokken introduserer en avansert charlieplexing ordningen ved filtrert/dimming som ikke vil bli diskutert her.

OPPDATERINGEN 19 August 2008: Jeg har lagt en zip-fil med en krets som kanskje kunne utnytte matrix-charliplexing for høy strøm-LED diskutert (på lengden:)) i kommentarfeltet delen. Den har en Trykkstrømbryter + Plasser encoder som gjør et brukergrensesnitt, pluss krets for USB- eller RS232 datamaskin-kontroll. Hver av høy side spenning rails kan settes til én av to spenninger, sier 2.2V for rød LED-lys og 3.4V for grønn, blå, hvit. Spenningen for høy side rails kan angis av trimpot. Jeg vil forutse at en 20wire IDC flatkabelen plugges inn i styret, og 20pin IDC koblinger legges sammen lengden på båndet, hvert FØRTE styret har lenker til uansett ledninger i matrisen er ønskelig. Krets er i Eagle Cad og gjengitt i sub-bildet nedenfor. Høy side-krets er implementert ved hjelp av optocouplers som jeg tror kan være passende.

Jeg faktisk ikke har testet denne kretsen heller skrevet programvare på grunn av mangel på tid, men har satt opp kommentar, jeg er spesielt interessert i implementeringen av optocoupler. Noen modige nok til å gi den en gå... kan du legge inn dine resultater.

OPPDATERINGEN 27 August 2008: For de som ikke bruker EagleCad...., legges til under er en pdf av skjematisk

Charlieplexing er avhengig av en rekke nyttige aspekter av lysene og moderne microcontrollers.

Først hva skjer når du kobler en LED til elektrisitet.

Den viktigste diagrammet nedenfor viser det som kalles hvis v Vf kurve av en typisk 5 mm lav strømlampe.

Hvis står for 'videre gjeldende'
VF står for 'videresende spenning'
Den loddrette aksen i otherwords viser gjeldende skal flyte gjennom en LED Hvis du plasserer den vannrette aksen spenningen over det er terminaler. Det fungerer omvendt også, hvis du måle at gjeldende er av noen verdi, kan du se ut over den vannrette aksen og se spenning LED vil presentere over det er terminaler.
Det andre diagrammet viser en skjematisk fremstilling av en LED med hvis og Vf merket.

Fra viktigste diagrammet har jeg også merket områder av diagrammet som er av interesse.
  • Det første området er der LED er "off". Mer nøyaktig er LED emitting lys så svakt du ikke vil kunne se det med mindre du hadde noen slags super-duper bilde forsterker.
  • Det andre området har LED bare litt emitting en svak glød.
  • Det tredje området er der en LED drives vanligvis og emitting lyset på produsentene vurdering.
  • Det frem området er der en LED drives utover sin operasjonelle grense, er sannsynligvis glødende veldig sterkt, men alas bare en kort stund før magiske røyk inne løser, og det vil ikke fungere igjen...... ie i dette området det brenner fordi for mye gjeldende renner gjennom byen.

Legg merke til at hvis / Vf kurve eller operasjonelle kurve LED-lampen er en 'ikke-lineære' kurve. Det vil si at det er ikke en rett linje... det har en bue eller kink i den.

Til slutt er dette diagrammet for en typisk 5 mm rød LED designet til å operere på 20mA. Ulike lysene fra forskjellige produsenter har forskjellige drifts kurver. For eksempel i dette diagrammet på 20mA vil videresende spenning lampen bli ca 1.9V. For en blå 5 mm LED på 20mA kan videresende spenning være 3.4V. For Luxeon en høy strøm hvit-LED på 350mA kan videresende spenning være rundt 3.2V. Noen LED-pakker kan være flere LED i serien eller parallelt, endre Vf / Hvis kurve på nytt.

Vanligvis angir en manufactuer en opererer gjeldende som er trygg å bruke LED på og videresende spenning på den gjeldende. Vanligvis (men ikke alltid) kan du få en graf likt nedenfor i dataarket. Du må se på dataarket for LED å avgjøre hva videresende spenning er på forskjellige drifts strømninger.

Hvorfor er denne grafen så viktig? Fordi den viser at når en spenning er over LED, gjeldende vil strømme være ifølge i diagrammet. Senker spenningen og mindre strøm flyter..... og LED vil være av. Dette er en del av teorien om charlieplexing, som vi får til i neste trinn.
Lovene (i elektronikk)
[ redigere denne seksjonen ]

Fortsatt ikke ennå på magiske av charlieplexing ennå.... trenger vi å gå til noen grunnleggende elektronikk lover.

Første lov av interesse sier at den totale spenningen på tvers av en rekke sammenkoblede komponentene i en elektrisk krets er lik summen av individuelle spenninger på tvers av komponentene. Dette er vist i viktigste diagrammet nedenfor.

Dette er nyttig når du bruker lysdioder fordi din gjennomsnittlige batteri eller microcontroller utgang pin, vil aldri være nøyaktig høyre spenningen til å kjøre din LED på anbefalte gjeldende. For eksempel en microcontroller vil vanligvis kjøre på 5V, og det er utdata pinner vil være på 5V når den er på. Hvis du bare koble en LED til utdataflytpunktet av mikro, vil du se fra operasjonelle kurven i den forrige siden for mye strøm flyter i LED og det vil bli varmt og brenne ut (sannsynligvis skade mikro så vel).

Men hvis vi introdusere en andre komponent i serie med LED vi kan trekke noen av 5V slik at spenningen venstre er bare rett til å kjøre lampen i riktig drift gjeldende.

Dette er vanligvis en motstand, og når den brukes i denne måten kalles en gjeldende begrensende motstand. Denne metoden brukes svært ofte, og fører til det som kalles "ohm loven"... så oppkalt etter Mr Ohm.

Ohm lov følger ligningen V = jeg * R hvor v er spenningen som skal vises på tvers av en motstand r når en gjeldende jeg strømmer gjennom motstand. V er i volt, jeg er i forsterkere og r er i ohm.

Så hvis vi har 5V å tilbringe, og vi vil 1.9V på tvers av LED å få det til å kjøre på 20mA deretter vi ønsker motstander ha 5-1,9 = 3.1V over den. Vi kan se dette i det andre diagrammet.

Fordi det er motstand i serie med LED, skal samme gjeldende flyte gjennom motstand som LED, ie 20mA. Så omorganisere ligningen kan vi finne motstanden vi trenger å gjøre dette arbeidet.

V = JEG * R
slik
R = V / JEG
å erstatte verdier i vårt eksempel får vi:
R = 3.1 / 0,02 = 155ohms
(Legg merke til 20mA = 0.02Amps)

Fortsatt med meg så far...cool. Nå se på diagrammet 3. Den har LED sandwiched mellom to motstander. Ifølge den første loven som er nevnt ovenfor, har vi den samme situasjonen på det andre diagrammet. Vi har 1.9V på tvers av LED slik at det kjører i henhold til det er spec ark. Vi har også hver motstand å trekke 1.55V hver (for totalt 3.1). Å legge spenninger sammen har vi
5 V (microcontroller-pin) = 1.55V (R1), 1.9V (LED) + 1.55V (R2) og alt balanserer ut.
Bruke ohm loven finner vi Motstandene må være 77,5 ohm hver, som er av den beregnet fra det andre diagrammet.

Selvfølgelig i praksis vil bli hardt presset til å finne en 77,5 ohm-motstand, så du ville bare erstatte den nærmeste tilgjengelige verdi, si 75ohms og ende opp med litt mer gjeldende i LED- eller 82ohms for å være trygg og har litt mindre.

Hvorfor på jorden skal vi gjøre dette motstand-sandwhich for å drive en enkelt LED..... vel, hvis du har én LED det er alle litt dumt, men dette er en instructable på charlieplexing og det kommer i hendig for neste trinn.

Vi presenterer 'utfyllende drive'
[ redigere denne seksjonen ]

Et annet navn som er mer presist å beskrive 'charlieplexing' er 'utfyllende drive'.

I din gjennomsnittlige microcontroller kan du i firmware fortelle mikro til å angi en utdataene pin å være enten en '0' eller en '1', eller presentere en 0V spenning ved produksjon eller en 5V spenning på utdataene.

Diagrammet nedenfor viser nå sandwiched LED med en tilbakeført partner.... eller et supplement LED, derav utfyllende stasjon.

I første halvdel av diagrammet sender mikro 5V til pin a og 0V å pin B. Gjeldende dermed flyter fra a til B. Fordi LED2 er orientert bakover til LED1 ingen gjeldende skal flyte gjennom det og det vil ikke lyser. Det er det som kalles omvendt forutinntatt. Vi har tilsvarende situasjonen i den forrige siden. Vi kan i utgangspunktet ignorere LED2. Pilene viser gjeldende flyt.

En LED er egentlig en diode (derav lys Emitting Diode). En diode er en enhet som gir strøm til flyten i én retning, men ikke i den andre. Skjematisk av en LED viser slags dette, gjeldende flyter i retning av pilen...... men er blokkert den andre veien.

Hvis vi instruere mikro for utdata nå 5V til pin b og 0V på pin a har vi motsatt. Nå LED1 er omvendt partisk, LED2 er partisk frem og gjør gjeldende flyt. LED2 vil lyse og LED1 vil være mørkt.

Nå kan være en god idé å se på skjemaer over de forskjellige prosjektene som er nevnt i innledningen. Du bør se en hel masse disse utfyllende par i en matrise. Selvfølgelig i eksemplet nedenfor vi kjører to LEDs med to microcontroller pins... du kan si hvorfor bry.

Vel er neste del der vi får tøff nok av charlieplexing og hvordan den gjør en effektiv bruk av en microcontrollers utdatastrømpunkt.
Endelig... en Charlieplex-matrise
[ redigere denne seksjonen ]

Som nevnt i innledningen, er charliplexing en praktisk måte å kjører masse lysdioder med bare noen få pins på microcontroller en. Men i den forrige siden vi har egentlig ikke lagret noen pins, kjører to lysdioder med to pins.... stor boks!

Vi kan også utvide ideen om complentary stasjon i en charlieplex matrise. Diagrammet nedenfor viser minimum charlieplex matrise som består av tre motstander og seks lysdioder og bruker bare tre microcontroller pinner. Nå ser du hvordan hendig denne metoden er? Hvis du ønsket å drive seks lysdioder på vanlig måte.... trenger du seks microcontroller pinner.

Faktisk med n kontaktstiftene en microcontroller kan potensielt stasjonen N * (N - 1) lysdioder.
For 3 pinner er 3 * (3 - 1) = 3 * 2 = 6 lysdioder.
Ting stable raskt med mer pins. Med 6 pinner kan du drive 6 * (6 - 1) = 6 * 5 = 30 lysdioder... wow!

Nå til charlieplexing-bit.

Se diagrammet nedenfor. Vi har tre utfyllende par, ett par mellom en hver kombinasjon av mikro utdatastrømpunkter. Ett par mellom A-B, ett par mellom b og c og ett par mellom A-C.

Hvis du koblet pin c for ville nå vi ha samme situasjon som før. Med 5V på pin a og 0V på pin B, LED1 vil lyse, LED2 utføres omvendt partisk og ikke vil gjennomføre pågående. Med 5V på pin utføres b og 0V på PIN-koden en LED2 vil lyse og LED1 omvendt partisk.

Dette følger etter de andre mikro pinnene.

Hvis vi koblet pin b og angi PIN-kode a til 5V og pin c til 0V ville LED5 glød. Reversere slik at pin a er 0V og PIN-kode c er 5V LED6 ville gløden.
Samme for komplementært par mellom pins B-C.

Stå på, jeg hører du sier. Kan se litt nærmere på det andre tilfellet.
Vi har 5 v på pin a og 0V på pin C. Vi har frakoblet pin B (midten den).
OK, så en gjeldende flyter gjennom LED5, gjeldende ikke er strømmer gjennom LED6 fordi det er omvendt partisk (og så er LED2 og LED4)... men det er også en bane for den gjeldende å ta fra pin A, til LED1 og LED3 er ikke det? Hvorfor er disse lysene ikke glødende samt.

Her er hjertet av charlieplexing ordningen. Faktisk er det en strøm flyter både LED1 og LED3, men spenningen på tvers av begge disse kombinert bare kommer til å være identisk med spenningen på tvers av LED5. De ville vanligvis ha halv spenning over dem som har LED5. Så hvis vi har 1.9V over LED5, blir så bare 0.95V på tvers av LED1 og 0.95V på tvers av LED3.

Fra hvis / Vf kurve som er nevnt i begynnelsen av denne artikkelen vi kan se at gjeldende på denne halv spenning er mye lavere enn 20mA..... og disse lysene ikke lyse synlig.
Dette er kjent som gjeldende stjele.

Dermed mesteparten av gjeldende vil strømme skjønt LED vi ønsker, den mest direkte banen gjennom minst antall lysdioder (ie én LED), i stedet for en serie kombinasjon av LED-lys.

Hvis du har sett på gjeldende flyt for en hvilken som helst kombinasjon av å sette 5V og 0V på alle to stasjonen kontaktstiftene charlieplex matrise, vil du se samme. Bare én LED vil gløden om gangen.
Som en øvelse, kan du se på den første situasjonen. 5V på pin a og 0V på pin B, kan du koble pin C. LED1 er den korteste ruten for gjeldende å ta, og LED 1 vil gløden. En liten gjeldende også vil passere gjennom LED5 og deretter sikkerhetskopiere LED4 til pin B.... men igjen, disse to lysdioder i serien vil ikke kunne syphon nok strøm sammenlignet med LED 1 nyanse brightly.

Dermed blir kraften i charlieplexing virkeliggjort. Se det andre diagrammet som er skjematisk for min Microdot watch.....30 Lamper, med bare 6 pinner. Min Minidot 2-klokken er i utgangspunktet en utvidet versjon av Microdot.... samme 30 lysdioder ordnet i en matrise.
For å lage et mønster i matrisen, hver smal avsats å være illuminated kort er slått på, og deretter mikro flytter til neste. Hvis det er planlagt å være illuminated det er slått på igjen for en kort tid. Ved raskt skanning via lysdioder rask nok et prinsipp kalt 'persistens visjon' vil tillate en rekke LED-lamper til å vise et statisk mønster. Minidot 2-artikkelen har en bit av en forklaring på dette prinsippet.

Men vent.....Jeg har tilsynelatende glossed over litt i beskrivelsen ovenfor. Hva er denne 'koble pin B', 'koble pin C' business. I neste del vennligst.

Tri-stater (ikke tricycles)
[ redigere denne seksjonen ]

I det forrige trinnet nevnte vi en microcontroller kan programmeres til å sende en 5V-spenning eller en 0V-spenning. For å tjene charlieplex matrise fungerer, vi velger to pinner i matrisen, og koble andre pinner.

Selvfølgelig er manuelt koble pinnene litt vanskelig å gjøre, spesielt hvis vi skanner ting veldig raskt bruke persistens visjon-effekt til å vise et mønster. Men en microcontroller utdatastrømpunkt kan også programmeres til å bli inndataflytpunkter også.

Når en mikro PIN-kode er programmert til å være en inngang, går det inn i det som kalles 'høy-impedans samsvarer' eller "tri-state". Det vil si at presenterer den en svært høy motstand (av megaohms, eller millioner av ohm) PIN-koden.

Hvis det er en svært høy motstand (se diagrammet) så vi kan egentlig hensyn PIN-koden som blir koblet fra, og så charliplex-oppsettet fungerer.

Det andre diagrammet viser matrix-pinner for hver kombinasjon av mulig å lyse opp hver av 6 lysene i vårt eksempel. Vanligvis en tri-state er merket med en "X", 5V vises som "1" (for logisk 1) og 0V som en '0'. I mikro firmware for en '0' eller '1' ville du programmere pinner å være en utdataene, og det er staten er godt definerte. For tri-state du program det å være en inngang, og fordi det er en inngang vi ikke egentlig vet hva staten kan være... derav 'X' for ukjent.

Selv om vi kan tildele en PIN-kode skal tri-state eller en inngang, trenger vi ikke å lese den. Vi dra bare nytte av en inndataflytpunkt på en microcontroller er høy impedans samsvarer.

Noen praktisk saker
[ redigere denne seksjonen ]

Magien av charlieplexing er avhengig av det faktum individuelle spenningen presentert på tvers av flere LED i serien vil alltid være mindre enn det på tvers av én enkelt LED når enkelt lyser i noen med serie-kombinasjon. Hvis spenningen er mindre, deretter gjeldende er mindre, og forhåpentligvis gjeldende i serien-kombinasjon vil være så lav at LED-lampen ikke lyser.

Dette er ikke alltid tilfelle men.

Kan si du hadde to røde lysdioder med en typisk videresende spenning av 1.9V i din matrise og en blå LEDET med en videresende spenning av 3.5V (si LED1 = red, LED3 = red, LED5 = blå i vårt 6 LED-eksempel). Hvis du lyser opp blå LED, du ville ende opp med 3,5/2 = 1 .75v for hver av de røde lysdiodene. Dette kan være veldig nær dim driftsområde LED-lampen. Du kan finne den røde LED lyser svakt når blå lyser.

Det er derfor en god idé å kontrollere at videresende spenning med noen forskjellige fargede lysdioder i din matrix er omtrent det samme på drifts gjeldende, ellers bruker samme fargede lysdioder i en matrise.
I min Microdot/Minidot-prosjekter som jeg ikke måtte bekymre deg om dette, brukte jeg høy effektivitet blå/grønn SMD lysdioder som heldigvis har mye den samme videresende spenningen som rød/gul. Men hvis jeg implementert samme med 5 mm lysdioder resultatet ville ha mer by på problemer å. I dette tilfellet ville jeg har implementert en blå/grønn charlieplex matrise og en rød/gul matix separat. Jeg ville ha behov å bruke flere dataflytpunkt... men det du går.

Et annet problem er å se på din gjeldende tegne fra mikro- og hvor lyst du LED. Hvis du har en stor matrise og rapidally skanner det, deretter lyser hver LED for bare en kort tid. Dette vises det relativt svak i forhold til en statisk visning. Du kan jukse ved å øke gjeldende gjennom LED ved å redusere gjeldende begrensende motstander, men bare til et punkt. Hvis du tegner for mye strøm fra micro for vil lenge du skade utdatastrømpunkt.
Hvis du har en sakte beveger matrise, sier en status- eller cyclon-skjerm, kan du beholde gjeldende ned til en pengeskap plan flate, men fortsatt har en lys LED-skjerm fordi hver LED på i en lengre periode, muligens statisk (i tilfelle av en statusindikator).

Noen fordeler ved charlieplexing:

  • bruker bare et par PIN-koder på en microcontroller til å kontrollere mange lysdioder
  • reduserer komponenten telle som du ikke trenger masse driveren sjetonger motstander osv.
  • Noen ulemper:
  • mikro firmware må håndtere sette både spenning tilstand og inndata/utdata-tilstand av pinnene
  • må være forsiktig med å blande forskjellige farger
  • PCB oppsett er vanskelig, fordi LED matrix er mer komplisert.

Det er mange referanser om charlieplexing på nettet.
I tillegg til koblingene på forsiden av artikkelen er noen av dem:

Den opprinnelige artikkelen fra Maxim, dette har mye å si om kjøring 7 segmentet skjermer som er også mulig.
http://www.Maxim-IC.com/appnotes.cfm/appnote_number/1880

En wiki-oppføring
http://en.wikipedia.org/wiki/Charlieplexing

Kommentarer