Sommario:

LED Charlieplexing: la teoria: 7 passaggi (con immagini)
LED Charlieplexing: la teoria: 7 passaggi (con immagini)

Video: LED Charlieplexing: la teoria: 7 passaggi (con immagini)

Video: LED Charlieplexing: la teoria: 7 passaggi (con immagini)
Video: Charlieplexing e PCB - puntata 2 2024, Giugno
Anonim
LED Charlieplexing: la teoria
LED Charlieplexing: la teoria
LED Charlieplexing: la teoria
LED Charlieplexing: la teoria

Questo istruibile è meno una build del tuo progetto e più una descrizione della teoria del charlieplexing. È adatto a persone con le basi dell'elettronica, ma non a principianti assoluti. L'ho scritto in risposta alle molte domande che ho ricevuto nei miei Instructables precedentemente pubblicati.

Che cos'è "Charlieplexing"? Sta pilotando molti LED con solo pochi pin. Nel caso ve lo stiate chiedendo, Charlieplexing prende il nome da Charles Allen di Maxim che ha sviluppato la tecnica. Questo può essere utile per molte cose. Potrebbe essere necessario visualizzare le informazioni di stato su un piccolo microcontrollore, ma avere solo pochi pin di riserva. Potresti voler mostrare una matrice di punti fantasiosa o un display orologio ma non vuoi usare molti componenti. Alcuni altri progetti che dimostrano il charlieplexing che potresti voler esaminare sono: Come pilotare molti LED da alcuni pin del microcontrollore. di Westfw:- https://www.instructables.com/id/ED0NCY0UVWEP287ISO/ E un paio dei miei progetti, l'orologio Microdot:- https://www.instructables.com/id/EWM2OIT78OERWHR38Z/ L'orologio Minidot 2: - https://www.instructables.com/id/E11GKKELKAEZ7BFZAK/ Un altro esempio interessante dell'uso di charlieplexing è su: https://www.jsdesign.co.uk/charlie/ L'orologio Minidot 2 introduce uno schema avanzato di charlieplexing per dissolvenza/attenuazione di cui non parleremo qui. AGGIORNAMENTO 19 agosto 2008: ho aggiunto un file zip con un circuito che potrebbe essere in grado di sfruttare il charliplexing a matrice per LED ad alta potenza discusso (a lungo:)) nella sezione commenti. Ha un pulsante + encoder di posizione per creare un'interfaccia utente, oltre a circuiti per il controllo del computer USB o RS232. Ciascuno dei binari ad alta tensione laterale può essere impostato su una delle due tensioni, ad esempio 2,2 V per LED ROSSI e 3,4 V per verde/blu/bianco. La tensione per le sponde laterali alte può essere impostata tramite trimpot. Prevedo che un cavo a nastro IDC a 20 fili sia collegato alla scheda e connettori IDC a 20 pin aggiunti lungo la lunghezza del nastro, ciascuna scheda LED con collegamenti a qualsiasi filo nella matrice si desideri. Il circuito è in Eagle Cad e reso nell'immagine sottostante. Il circuito high side è implementato utilizzando optoaccoppiatori che penso potrebbero essere adatti. In realtà non ho testato questo circuito né scritto alcun software a causa della mancanza di tempo, ma l'ho presentato per un commento, sono particolarmente interessato all'implementazione del fotoaccoppiatore. Chiunque sia abbastanza coraggioso da provarci… per favore pubblica i tuoi risultati. AGGIORNAMENTO 27 agosto 2008: Per chi non usa EagleCad….aggiunto di seguito è un pdf dello schema

Passaggio 1: un po' di teoria sui LED

Qualche teoria sui LED
Qualche teoria sui LED
Qualche teoria sui LED
Qualche teoria sui LED

Charlieplexing si basa su una serie di aspetti utili dei LED e dei moderni microcontrollori.

Innanzitutto cosa succede quando colleghi un LED all'elettricità. Il diagramma principale seguente mostra la cosiddetta curva If v Vf di un tipico LED a bassa potenza da 5 mm. Se sta per 'corrente diretta' Vf sta per 'tensione diretta' L'asse verticale in altre parole mostra la corrente che scorrerà attraverso un LED se si mette la tensione dell'asse orizzontale attraverso i suoi terminali. Funziona anche al contrario, se misuri che la corrente ha un certo valore, puoi guardare attraverso l'asse orizzontale e vedere la tensione che il LED presenterà attraverso i suoi terminali. Il secondo diagramma mostra una rappresentazione schematica di un LED con If e Vf etichettati. Dal diagramma principale ho anche etichettato le aree del grafico che sono di interesse. - La prima area è dove il LED è "spento". Più precisamente, il LED emette luce così fioca che non sarai in grado di vederlo a meno che tu non abbia una sorta di intensificatore di immagine super-duper. - La seconda area ha il LED che emette solo leggermente un bagliore fioco. - La terza area è dove di solito viene utilizzato un LED e sta emettendo luce secondo la valutazione del produttore. - La quarta area è dove un LED viene azionato oltre i suoi limiti operativi, probabilmente emette una luce molto intensa ma purtroppo solo per un breve periodo prima che il fumo magico all'interno fuoriesca e non funzionerà più……cioè in quest'area si brucia perché troppa corrente lo attraversa. Si noti che la curva If/Vf o curva di funzionamento del LED è una curva 'non lineare'. Cioè, non è una linea retta… ha una curva o un attorcigliamento. Infine questo diagramma è per un tipico LED rosso da 5 mm progettato per funzionare a 20 mA. LED diversi di produttori diversi hanno curve di funzionamento diverse. Ad esempio in questo diagramma a 20mA la tensione diretta del LED sarà di circa 1,9V. Per un LED blu da 5 mm a 20 mA la tensione diretta potrebbe essere 3,4 V. Per un LED luxeon bianco ad alta potenza a 350 mA, la tensione diretta potrebbe essere di circa 3,2 V. Alcuni pacchetti di LED potrebbero essere più LED in serie o in parallelo, modificando nuovamente la curva Vf/If. In genere un produttore specificherà una corrente di funzionamento a cui è sicuro utilizzare il LED e la tensione diretta a quella corrente. Di solito (ma non sempre) si ottiene un grafico simile a quello riportato di seguito nel foglio dati. È necessario esaminare la scheda tecnica del LED per determinare quale sia la tensione diretta a diverse correnti di funzionamento. Perché questo grafico è così importante? Perché mostra che quando una tensione è attraverso il LED, la corrente che fluirà sarà secondo il grafico. Abbassare la tensione e scorrerà meno corrente…..e il LED sarà 'spento'. Questo fa parte della teoria del charlieplexing, di cui parleremo nel passaggio successivo.

Passaggio 2: le leggi (dell'elettronica)

Le leggi (dell'elettronica)
Le leggi (dell'elettronica)
Le leggi (dell'elettronica)
Le leggi (dell'elettronica)
Le leggi (dell'elettronica)
Le leggi (dell'elettronica)

Non ancora alla magia di Charlieplexing ancora….dobbiamo andare ad alcune nozioni di base delle leggi dell'elettronica. La prima legge di interesse afferma che la tensione totale attraverso qualsiasi serie di componenti collegati in un circuito elettrico è uguale alla somma dei singoli tensioni tra i componenti. Questo è mostrato nel diagramma principale qui sotto. Questo è utile quando si usano i LED perché la batteria media o il pin di uscita del microcontrollore non sarà mai esattamente la tensione giusta per far funzionare il LED alla corrente consigliata. Ad esempio, un microcontrollore funzionerà in genere a 5 V e i suoi pin di uscita saranno a 5 V quando è acceso. Se colleghi semplicemente un LED al pin di uscita del micro, vedrai dalla curva di funzionamento nella pagina precedente troppa corrente passerà nel LED e si surriscalda e si brucia (probabilmente danneggiando anche il micro). Tuttavia, se introduciamo un secondo componente in serie con il LED, possiamo sottrarre parte dei 5V in modo che la tensione a sinistra sia quella giusta per far funzionare il LED alla corretta corrente di funzionamento. Questo è tipicamente un resistore e, se usato in questo modo, viene chiamato resistore di limitazione della corrente. Questo metodo è usato molto comunemente e porta a quella che viene chiamata "legge di ohm" … così chiamata da Mr Ohm. La legge di Ohm segue l'equazione V = I * R dove V è la tensione che apparirà attraverso una resistenza R quando una corrente I scorre attraverso il resistore. V è in volt, I è in ampere e R è in ohm. Quindi, se abbiamo 5 V da spendere e vogliamo 1,9 V attraverso il LED per farlo funzionare a 20 mA, allora vogliamo che il resistore abbia 5-1.9 = 3.1 V attraverso di esso. Possiamo vederlo nel secondo diagramma. Poiché il resistore è in serie con il LED, la stessa corrente scorrerà attraverso il resistore del LED, cioè 20 mA. Quindi riorganizzando l'equazione possiamo trovare la resistenza di cui abbiamo bisogno per farlo funzionare. V = I * RsoR = V / Isostituendo i valori nel nostro esempio otteniamo: R = 3,1 / 0,02 = 155 ohm (nota 20 mA = 0,02 A) Ancora con me finora… fresco. Ora guarda il diagramma 3. Ha il LED inserito tra due resistori. Secondo la prima legge sopra menzionata, abbiamo la stessa situazione nel secondo diagramma. Abbiamo 1,9 V attraverso il LED, quindi funziona secondo il suo foglio delle specifiche. Abbiamo anche ciascun resistore che sottrae 1,55 V ciascuno (per un totale di 3,1). Sommando i voltaggi abbiamo 5V (il pin del microcontrollore) = 1,55V (R1) + 1,9V (il LED) + 1,55V (R2) e tutto si bilancia. Usando la legge degli ohm troviamo che i resistori devono essere 77,5 ohm ciascuno, che è la metà dell'importo calcolato dal secondo diagramma. Ovviamente in pratica sarebbe difficile trovare un resistore da 77,5 ohm, quindi sostituiresti semplicemente il valore disponibile più vicino, diciamo 75 ohm e finiresti con un po' più di corrente in il LED o 82 ohm per essere al sicuro e avere un po 'meno. Perché mai dovremmo fare questo resistore per pilotare un semplice LED … ed è utile per il passaggio successivo.

Passaggio 3: presentazione di "Drive complementare"

Presentazione di "Drive complementare"
Presentazione di "Drive complementare"

Un altro nome più accurato per descrivere "charlieplexing" è "impulso complementare".

Nel tuo microcontrollore medio puoi nel firmware dire al micro di impostare un pin di uscita come "0" o "1" o per presentare una tensione di 0 V in uscita o una tensione di 5 V in uscita. Il diagramma seguente ora mostra il LED a sandwich con un partner invertito… o un LED complementare, quindi un azionamento complementare. Nella prima metà del diagramma, il micro emette 5V al pin A e 0V al pin B. La corrente quindi fluirà da A a B. Poiché il LED2 è orientato all'indietro rispetto al LED1 nessuna corrente scorrerà attraverso di esso e non incandescenza. È quello che si chiama polarizzazione inversa. Abbiamo l'equivalente della situazione nella pagina precedente. Possiamo sostanzialmente ignorare il LED2. Le frecce mostrano il flusso di corrente. Un LED è essenzialmente un diodo (da cui Light Emitting Diode). Un diodo è un dispositivo che consente alla corrente di fluire in una direzione, ma non nell'altra. Lo schema di un LED in qualche modo lo mostra, la corrente scorrerà nella direzione della freccia… ma è bloccata dall'altra parte. Se istruiamo il micro a emettere 5V sul pin B e 0V sul pin A, avremo l'opposto. Ora il LED1 è polarizzato inversamente, il LED2 è polarizzato direttamente e consentirà il flusso di corrente. Il LED2 si accenderà e il LED1 sarà spento. Ora potrebbe essere una buona idea dare un'occhiata agli schemi dei vari progetti citati nell'introduzione. Dovresti vedere molte di queste coppie complementari in una matrice. Ovviamente nell'esempio seguente stiamo pilotando due LED con due pin del microcontrollore … potresti dire perché preoccuparsi. Bene, la prossima sezione è dove arriviamo alle viscere di charlieplexing e come fa un uso efficiente dei pin di uscita di un microcontrollore.

Passaggio 4: finalmente… una matrice Charlieplex

Finalmente… una matrice Charlieplex
Finalmente… una matrice Charlieplex
Finalmente… una matrice Charlieplex
Finalmente… una matrice Charlieplex

Come accennato nell'introduzione, il charliplexing è un modo pratico per pilotare molti LED con solo pochi pin su un microcontrollore. Tuttavia nelle pagine precedenti non abbiamo davvero salvato alcun pin, pilotando due LED con due pin….grande whoop!

Bene, possiamo estendere l'idea di pulsione complementare in una matrice Charlieplex. Il diagramma seguente mostra la matrice charlieplex minima composta da tre resistori e sei LED e che utilizza solo tre pin del microcontrollore. Ora vedi quanto è utile questo metodo? Se volessi pilotare sei LED nel modo normale…avresti bisogno di sei pin del microcontrollore. Infatti con N pin di un microcontrollore si possono pilotare potenzialmente N* (N - 1) LED. Per 3 pin questo è 3 * (3-1) = 3 * 2 = 6 LED. Le cose si accumulano rapidamente con più pin. Con 6 pin puoi pilotare 6 * (6 - 1) = 6 * 5 = 30 LED….wow! Ora per il bit Charlieplexing. Guarda lo schema qui sotto. Abbiamo tre coppie complementari, una coppia tra ciascuna combinazione di micro pin di uscita. Una coppia tra A-B, una coppia tra B-C e una coppia tra A-C. Se scollegassi il pin C per ora avremmo la stessa situazione di prima. Con 5V sul pin A e 0V sul pin B, il LED1 si accenderà, il LED2 è polarizzato inversamente e non condurrà corrente. Con 5V sul pin B e 0V sul pin A il LED2 si accenderà e il LED1 è polarizzato inversamente. Questo segue per gli altri micro pin. Se scollegassimo il pin B e impostassimo il pin A su 5V e il pin C su 0V, il LED5 si accenderebbe. Invertendo in modo che il pin A sia 0 V e il pin C sia 5 V, il LED6 si accenderà. Stessa cosa per la coppia complementare tra i pin B-C. Aspetta, ti sento dire. Esaminiamo un po' più da vicino il secondo caso. Abbiamo 5V sul pin A e 0V sul pin C. Abbiamo scollegato il pin B (quello centrale). OK, quindi una corrente scorre attraverso il LED5, la corrente non scorre attraverso il LED6 perché è polarizzata inversamente (e così sono LED2 e LED4)… ma c'è anche un percorso per la corrente da prendere dal pin A, attraverso LED1 e LED3 non c'è? Perché anche questi LED non si accendono. Ecco il cuore dello schema charlieplexing. In effetti c'è una corrente che scorre sia sul LED1 che sul LED3, tuttavia la tensione attraverso entrambi questi combinati sarà solo uguale alla tensione attraverso il LED5. In genere avrebbero metà della tensione su di loro che ha LED5. Quindi, se abbiamo 1,9 V su LED5, solo 0,95 V su LED1 e 0,95 V su LED3. Dalla curva If/Vf menzionata all'inizio di questo articolo possiamo vedere che la corrente a questa metà tensione è molto molto inferiore a 20 mA…..e quei LED non si illuminano visibilmente. Questo è noto come furto di corrente. Quindi la maggior parte della corrente scorrerà attraverso il LED che vogliamo, il percorso più diretto attraverso il minor numero di LED (cioè un LED), piuttosto che qualsiasi combinazione di LED in serie. Se hai osservato il flusso di corrente per qualsiasi combinazione di inserimento di 5 V e 0 V su due pin di azionamento della matrice charlieplex, vedrai la stessa cosa. Si accenderà solo un LED alla volta. Come esercizio, osserva la prima situazione. 5V sul pin A e 0V sul pin B, scollegare il pin C. Il LED1 è il percorso più breve da prendere per la corrente e il LED 1 si accenderà. Una piccola corrente passerà anche attraverso il LED5, quindi farà il backup del LED4 sul pin B…..ma ancora una volta, questi due LED in serie non saranno in grado di assorbire abbastanza corrente rispetto al LED 1 per brillare intensamente. Così si realizza il potere di charlieplexing. Vedi il secondo diagramma che è lo schema del mio orologio Microdot…..30 LED, con solo 6 pin. Il mio orologio Minidot 2 è fondamentalmente una versione espansa del Microdot… gli stessi 30 LED disposti in un array. Per creare un pattern nell'array, ogni LED da illuminare viene acceso brevemente, quindi il micro passa al successivo. Se è prevista l'accensione, si riaccende per breve tempo. Scansionando rapidamente i LED abbastanza velocemente, un principio chiamato "persistenza della visione" consentirà a una serie di LED di mostrare uno schema statico. L'articolo Minidot 2 ha una piccola spiegazione su questo principio. Ma aspetta…..a quanto pare ho sorvolato un po' nella descrizione sopra. Che cos'è questa attività "scollegare il pin B", "scollegare il pin C". La prossima sezione per favore.

Passaggio 5: Tri-Stati (non Tricicli)

Tri-stati (non Tricicli)
Tri-stati (non Tricicli)
Tri-stati (non Tricicli)
Tri-stati (non Tricicli)

Nel passaggio precedente abbiamo menzionato un microcontrollore può essere programmato per emettere una tensione di 5V o una tensione di 0V. Per far funzionare la matrice charlieplex, selezioniamo due pin nella matrice e scolleghiamo qualsiasi altro pin.

Ovviamente scollegare manualmente i pin è un po' difficile da fare, in particolare se stiamo scansionando le cose molto rapidamente per usare l'effetto di persistenza della visione per mostrare uno schema. Tuttavia, i pin di uscita di un microcontrollore possono anche essere programmati come pin di input. Quando un micro pin è programmato per essere un ingresso, entra in quella che viene chiamata "alta impedenza" o "tri-stato". Cioè presenta una resistenza molto elevata (dell'ordine dei megaohm, o milioni di ohm) al pin. Se c'è una resistenza molto alta (vedi diagramma) allora possiamo sostanzialmente considerare il pin come scollegato, e quindi lo schema charliplex funziona. Il secondo diagramma mostra i pin della matrice per ogni combinazione possibile per illuminare ciascuno dei 6 LED nel nostro esempio. Tipicamente un tri-stato è indicato da una 'X', 5V viene mostrato come '1' (per logico 1) e 0V come '0'. Nel micro firmware per uno "0" o "1" programmi i pin come output e il suo stato è ben definito. Per il tri-stato lo programmi come input e poiché è un input non sappiamo effettivamente quale potrebbe essere lo stato … quindi la "X" per sconosciuto. Sebbene potremmo allocare un pin come tri-state o un input, non abbiamo bisogno di leggerlo. Approfittiamo solo del fatto che un pin di input su un microcontrollore è ad alta impedenza.

Passaggio 6: alcune questioni pratiche

La magia del charlieplexing si basa sul fatto che la tensione individuale presentata su più LED in serie sarà sempre inferiore a quella su un singolo LED quando il singolo LED è in parallelo con la combinazione in serie. Se la tensione è inferiore, la corrente è inferiore e, si spera, la corrente nella combinazione in serie sarà così bassa che il LED non si accenderà. Tuttavia, non è sempre così. Diciamo che hai avuto due LED rossi con un tipico una tensione diretta di 1,9 V nella matrice e un LED blu con una tensione diretta di 3,5 V (diciamo LED1=rosso, LED3=rosso, LED5=blu nel nostro esempio a 6 LED). Se accendi il LED blu, ti ritroverai con 3,5/2 = 1,75 V per ciascuno dei LED rossi. Questo può essere molto vicino all'area di funzionamento fioca del LED. Potresti scoprire che i LED rossi si illumineranno debolmente quando il blu è illuminato. È quindi una buona idea assicurarsi che la tensione diretta di qualsiasi LED di colore diverso nella matrice sia all'incirca la stessa alla corrente operativa, oppure utilizzare lo stesso colore LED in una matrice. Nei miei progetti Microdot/Minidot non ho dovuto preoccuparmi di questo, ho utilizzato LED SMD blu/verdi ad alta efficienza che fortunatamente hanno più o meno la stessa tensione diretta dei rossi/gialli. Tuttavia se implementassi la stessa cosa con LED da 5mm il risultato sarebbe più problematico. In questo caso avrei implementato separatamente una matrice charlieplex blu/verde e una matrice rossa/gialla. Avrei dovuto usare più pin… ma ecco fatto. Un altro problema è guardare il tuo attuale assorbimento dal micro e quanto luminoso vuoi che il LED. Se si dispone di una matrice grande e la si esegue rapidamente la scansione, ogni LED si accende solo per un breve periodo. Questo apparirà relativamente debole rispetto a un display statico. Puoi imbrogliare aumentando la corrente attraverso il LED riducendo i resistori di limitazione della corrente, ma solo fino a un certo punto. Se assorbite troppa corrente dal micro per troppo tempo, danneggerete i pin di uscita. Se si dispone di una matrice che si muove lentamente, ad esempio un display di stato o ciclone, è possibile mantenere la corrente a un livello di sicurezza ma avere comunque un display a LED luminoso perché ogni LED è acceso per un tempo più lungo, possibilmente statico (nel caso di un indicatore di stato). Alcuni vantaggi di charlieplexing: - utilizza solo pochi pin su un microcontrollore per controllare molti LED - riduce il numero di componenti in quanto non sono necessari molti chip/resistenze driver ecc. Alcuni svantaggi: - il tuo micro firmware dovrà gestire l'impostazione sia lo stato di tensione che lo stato di ingresso/uscita dei pin- devono stare attenti a mescolare diversi colori- Il layout del PCB è difficile, perché la matrice LED è più complessa.

Passaggio 7: riferimenti

Ci sono molti riferimenti su charlieplexing sul web. Oltre ai collegamenti nella parte anteriore dell'articolo, alcuni di essi sono: L'articolo originale di Maxim, questo ha molto da dire sulla guida di display a 7 segmenti che è anche possibile. https://www.maxim-ic.com/appnotes.cfm/appnote_number/1880A voce wikihttps://en.wikipedia.org/wiki/Charlieplexing

Consigliato: