Come configurare smartphone e PC. Portale informativo
  • casa
  • Programmi
  • LED RGB e Arduino. Circuito di controllo LED RGB

LED RGB e Arduino. Circuito di controllo LED RGB

Questo articolo tratta le nozioni di base sull'utilizzo di un LED RGB (rosso verde blu) con un Arduino.

Usiamo la funzione analogWrite per controllare Colore RGB GUIDATO.

A prima vista, i LED RGB sembrano proprio dei normali LED, ma in realtà hanno tre LED all'interno: uno rosso, uno verde e sì, uno blu. Controllando la luminosità di ciascuno, puoi controllare il colore del LED.

Cioè, regoleremo la luminosità di ciascun LED e otterremo colore desiderato l'output è come se fosse la tavolozza di un artista o come se stessi regolando le frequenze sul tuo lettore. Per questo è possibile utilizzare resistori variabili. Ma lo schema risultante sarà piuttosto complesso. Fortunatamente Arduino ci offre la funzione analogWrite. Se utilizziamo i pin contrassegnati “~” sulla scheda, possiamo regolare la tensione fornita al LED corrispondente.

Nodi richiesti

Per realizzare il nostro piccolo progetto, avremo bisogno di:

1 LED RGB 10 mm

3 resistori 270 Ω (strisce rosse, viola, marroni). È possibile utilizzare un resistore con una resistenza fino a 1 kOhm, ma non dimenticare che all'aumentare della resistenza, il LED inizia a brillare meno intensamente.


Le sei cifre del numero corrispondono a tre coppie di numeri; la prima coppia è la componente rossa del colore, le due cifre successive sono la componente verde e l'ultima coppia è la componente blu. Cioè l'espressione #FF0000 corrisponde al colore rosso, poiché questo sarà massima luminosità LED rosso (FF è 255 V sistema esadecimale), e le componenti rossa e blu sono pari a 0.

Prova ad accendere un LED utilizzando, ad esempio, una tonalità indaco: #4B0082.

Le componenti rossa, verde e blu dell'indaco sono rispettivamente 4B, 00 e 82. Possiamo usarli all'interno della funzione "setColor" con riga successiva codice:

setColor(0x4B, 0x0, 0x82); // indaco

Per i tre componenti, utilizziamo una notazione che prefissa ciascuno un carattere "0x" iniziale.

Mentre giochi con diverse tonalità del LED RGB, non dimenticare di impostare il "ritardo" dopo averle utilizzate.

PWM e Arduino

Latitudinale modulazione degli impulsi(PWM (PWM in inglese)) è uno dei metodi di gestione dell'energia. Nel nostro caso, il PWM viene utilizzato per controllare la luminosità di ogni singolo LED.

La figura seguente mostra schematicamente il segnale proveniente da uno dei pin PWM di Arduino.


Ogni 1/500 di secondo l'uscita PWM genera un impulso. La lunghezza di questo impulso è controllata dalla funzione "analogWrite". Cioè, "analogWrite(0)" non genererà alcun impulso, ma "analogWrite(255)" genererà un segnale che durerà fino all'inizio di quello successivo. Cioè, sembrerà che venga inviato un impulso continuo.

Quando specifichiamo un valore compreso tra 0 e 255 all'interno della funzione analogWrite, generiamo un impulso di una certa durata. Se la lunghezza dell'impulso è del 5%, forniremo il 5% della potenza massima disponibile all'uscita Arduino specificata e sembrerà che il LED non sia alla massima luminosità.

Lascia i tuoi commenti, domande e condividi esperienza personale sotto. Spesso dalle discussioni nascono nuove idee e progetti!

Tra gli altri dettagli nel pacco c'era questa borsa con un interessante tricolore LED RGB.


Il nome LED RGB deriva dall'abbreviazione di tre colori primari: R (rosso), G (verde) e B (blu). Il LED RGB è quindi un LED tricolore combinato, il cui alloggiamento ospita in realtà tre LED colori differenti. La luminosità di ciascun colore può essere controllata separatamente modificando la corrente attraverso il diodo corrispondente. teoricamente, modificando il rapporto di luminosità possiamo ottenere qualsiasi colore, compreso il bianco.

La figura mostra il pinout di un LED RGB con catodo comune.


In genere, un LED a tre colori ha quattro terminali. Un pin è comune per tutti e tre i componenti del colore e tre pin separati per la gestione separata del colore. A seconda di quali elettrodi LED sono collegati insieme all'interno di un alloggiamento comune, un LED RGB può essere un catodo comune (CC) o un anodo comune (CA). Questo deve essere tenuto presente quando si collega un LED a una fonte di alimentazione. Ho ricevuto LED con un catodo comune.

Per utilizzare tale LED è sufficiente collegarlo alla sorgente corrente continua attraverso tre resistori limitatori di corrente. Modificando la resistenza dei resistori, è possibile modificare la luminosità dei componenti del colore e selezionare la tonalità desiderata del bagliore del diodo. è necessario assicurarsi che la corrente attraverso il LED non superi il massimo consentito, altrimenti il ​​LED semplicemente si brucerà.

Il LED RGB è comodo da usare come indicatore multifunzionale. Uno di questi diodi può visualizzare diversi stati o modalità operative di un dispositivo, risparmiando così spazio sul cruscotto. Ad esempio, quando si utilizza tale indicatore in caricabatterie, il rosso può indicare il processo di ricarica, il verde indica la fine della ricarica e il blu indica un malfunzionamento della batteria.


Il massimo interesse rappresenta il controllo di tale LED da un microcontrollore utilizzando modulazione dell'ampiezza dell'impulso(PWM o PWM). PWM è un metodo per controllare la potenza del carico modificando il ciclo di lavoro (larghezza) degli impulsi elettrici a frequenza costante. Utilizzando PWM, il microcontrollore può modificare dinamicamente la luminosità dei componenti del diodo RGB, creando diversi effetti di luce a seconda dato programma. È possibile modificare dinamicamente sia la luminosità complessiva del bagliore sia ottenere eventuali sfumature di colore. Tutto dipende solo dalla tua immaginazione e dal compito da svolgere. Ad esempio, utilizzando filtri e analogici - convertitore digitale microcontrollore, è molto semplice creare un'indicazione di colore e musica per l'amplificatore frequenza audio.

Per illustrare il funzionamento di un LED RGB controllato da PWM, ho assemblato questo diagramma semplice basato su un piccolo microcontrollore Microchip PIC12F629 economico.

LED1, LED2 e LED3 sono rispettivamente i componenti rosso, verde e blu del nostro LED RGB. Il terminale del catodo comune è collegato al negativo dell'alimentazione. I LED sono collegati ai pin del microcontrollore tramite resistori limitatori di corrente R1..R3 con una resistenza di 240 Ohm. il resistore R4 con una resistenza di 1...10 kiloohm collega l'uscita MCLR del controller al positivo di alimentazione. Questo è necessario per operazione appropriata programmi. Utilizzando il pulsante S1 è possibile misurare sequenze di effetti luminosi. (Vedi sotto)

Ho caricato il firmware sul microcontrollore utilizzando il mio programmatore fatto in casa, un clone del marchio PicKit2. Questo design sempliceè stato assemblato su una breadboard senza saldatura di tipo breadboard cinese. questo è quello che sembra:

La parte software del progetto è stata presa in prestito da un sito web britannico in lingua inglese dedicato all'elettronica radiofonica. . Il firmware per PIC12F629 è scritto in assembler in MPLAB IDE v7.31. scarica il firmware e il suo codici sorgente Puoi seguire il link alla fine dell'articolo. Inoltre, ho incluso nell'archivio un progetto per il simulatore Proteus 8.6

Controllo LED.

Il controllo viene effettuato utilizzando il pulsante S1 (vedi schema) collegato alla porta GP5 del microcontrollore (pin 2 del microcircuito).

Pressione singola del pulsante. Metti in pausa o continua la sequenza corrente.
Puoi premere S1 in qualsiasi momento per interrompere la sequenza corrente e congelare il colore LED corrente. Un'altra stampa continuerà il programma.

Doppio tocco- selezione della sequenza successiva.
Premere il pulsante due volte a meno di 0,5 secondi di distanza. come fai tu" doppio click" mouse del computer. Questa azione consente di cambiare le sequenze disponibili nel firmware. In questo caso tutti i valori PWM vengono reimpostati su 0, ovvero il LED si spegne e inizia la sequenza successiva. Quando segui tutte le sequenze, tornerai alla primissima. Il raggiungimento dell'ultima sequenza è indicato da tre brevi lampeggi dei LED blu e verdi

Tenere premuto per più di 1,2 secondi. - passare alla modalità sospensione. Stato attuale Il LED e il programma vengono scritti nella memoria EEPROM non volatile e il circuito entra nello stato di “sospensione”. Una successiva pressione prolungata riaccende il circuito e la sequenza continua.

Questo articolo discuterà i meccanismi pratici per formare e modificare i parametri del colore Lampada a LED, i problemi che si presentano e i modi per risolverli. Tutto ciò che viene descritto nell'articolo è la mia esperienza di lavoro con la luce durante la realizzazione del progetto.

Come si forma il colore utilizzando i LED.

Cominciamo dall'inizio: determiniamo come si forma il colore, in generale, nella vita (tutti lo sanno, ma per ogni evenienza...). Qualsiasi sfumatura di colore si forma utilizzando tre colori primari. Nel nostro caso, quando il colore è formato da sorgenti luminose (sintesi additiva) è:
— R rosso rosso
— Sol verde verde
— B blu

Combinando solo tre colori primari in proporzioni diverse è possibile ottenere qualsiasi sfumatura di colore. Probabilmente tutti hanno visto la seguente immagine: trasmette l'essenza di quanto sopra

Di conseguenza, affinché una lampada possa creare qualsiasi sfumatura di colore, deve avere anche almeno tre fonti di colori primari. In pratica questo è vero. Ad esempio, qualsiasi LED RGB è, in effetti, tre LED separati (cristalli che emettono) in un unico alloggiamento.

Per Controllo RGB-Il microcontrollore LED deve controllare separatamente ciascuno dei tre colori primari e averne tre uscite separate per ogni colore.

Controllando i LED con segnale digitale(abilitato/disabilitato) puoi ottenere un totale di 7 colori:
— tre colori primari (quando è illuminato un solo colore primario)
— tre colori compositi (quando sono illuminati due colori primari)
— colore bianco (tutti e tre i colori primari sono illuminati)

Per ottenere una varietà di sfumature di colore, è necessario controllare l'intensità del bagliore di ciascuno dei colori primari. Per controllare l'intensità del bagliore, viene utilizzata la modulazione della larghezza di impulso di un segnale digitale (PWM o PWM). Modificando il ciclo di lavoro del segnale, si crea per l'occhio l'illusione di cambiare la luminosità del LED. Per evitare che l'occhio si accorga della commutazione del LED, la frequenza del segnale PWM deve essere almeno 50-60Hz.

Poiché nell'apparecchio di illuminazione sono presenti tre sorgenti di radiazione, l'apparecchio di illuminazione deve essere controllato di conseguenza da tre segnali PWM R, G, B. Ciascun livello PWM (e la luminosità dell'apparecchio di illuminazione) rappresenta un determinato valore del ciclo di lavoro del segnale.

Molto spesso, il valore del ciclo di lavoro è specificato da un numero di dimensioni byte - 8 bit (e utilizzeremo un byte). Queste sono 256 gradazioni di ciascuno dei colori primari e 256*256*256=16777213 sfumature di colori in generale. In realtà, questo non è del tutto vero: di seguito ti dirò perché.

Da quanto sopra arriviamo alla conclusione che il MK deve generare tre segnali PWM per una lampada a LED con una frequenza superiore a 60 Hz e una risoluzione di 256 valori (8 bit).

Applicazione Microcontrollori AVR(come, in effetti, tutti gli altri) - questo non è un problema, poiché la maggior parte di essi dispone di un numero sufficiente di shaper PWM (timer) hardware a 8 bit, che, con un consumo minimo di risorse MK, possono fornire qualsiasi frequenza di generazione PWM, fino a decine di kHz. Nel caso di utilizzo di shaper PWM software, il numero di tali shaper può essere aumentato al numero di gambe libere del MK (la frequenza di generazione PWM, in questo caso, è possibile fino a diversi kilohertz).

Parametri di controlloLampada a LED.

Decidiamo i parametri del colore che vorremmo modificare. Poiché abbiamo tre valori del ciclo di lavoro per i colori primari R, G, B, sarebbe logico regolare questi tre parametri, ovvero l'intensità dei componenti rosso, verde e blu del colore. In pratica, questo non è molto il giusto approccio, in quanto non permette di scegliere comodamente il colore della nostra lampada. Ad esempio, per ridurre la luminosità della lampada lasciando lo stesso colore del bagliore. È necessario ruotare tre regolatori contemporaneamente e da diverse angolazioni. Infatti, ogni modifica (regolazione) della nostra lampada sembrerà come impostarla da zero. È molto più naturale regolare la luminosità (o qualche altro parametro) con un solo controllo.

In generale esistono molti sistemi di controllo (selezione del colore) per diverse applicazioni

Sistema RGBè uno di questi, con tre controlli per ciascuno dei colori primari, come descritto sopra.

SistemiXYZ, LABORATORIO e altri non sono molto adatti a noi.

Cambia (imposta) in modo molto naturale i parametri di illuminazione - Sistema HSB(e simili HSL, HSV). In HSB, la tavolozza dei colori è formata dall'impostazione significati diversi parametri di base:

Tinta(tonalità di colore). Impostato in gradi da 0 a 360. 0 – colore rosso. 120 – verde, 240 – blu. Tutto nel mezzo è una miscela di colori primari.
Useremo il valoreDimensione byte tonalità (da 0 a 255).
0 – colore rosso. 85 – verde, 170 – blu.

Saturazione(saturazione). Viene impostato come percentuale da 0 a 100. 100 è la saturazione massima del colore. Quando ridotto a zero, si tratta di una perdita di colore fino al grigio.
Utilizzeremo un valore di Saturazione di dimensioni in byte (da 0 a 255).

Luminosità(luminosità). Viene impostata in percentuale da 0 a 100. 100 è la luminosità massima del colore (ma non il bianco!). Quando ridotto a zero, si verifica una perdita di luminosità fino al nero.
Utilizzeremo un valore di luminosità di dimensioni in byte (da 0 a 255).

Se usi questo sistema quando regoli il colore, tutto risulta molto conveniente. Giriamo una manopola - cambiamo la tonalità del colore (rimanendo alla stessa luminosità), giriamo l'altra - cambiamo la luminosità (senza cambiare il colore) - fantastico! Ma il sistema presenta anche degli svantaggi. Il primo è che memorizzando valori in variabili di dimensioni byte, perdiamo alcune informazioni sul colore (ad esempio, per memorizzare tutte le possibili opzioni Per Tonalità di colore abbiamo bisogno di 768 valori e stiamo cercando di inserirli tutti in 256 valori). Il secondo - comunque, alla fine, valore finale dovrebbe essere dentro Sistema RGB per l'emissione di segnali PWM ai LED. E in terzo luogo, nel caso in cui sia necessaria qualche altra conversione, sarà molto più difficile farlo con il sistema HSB che con RGB.

Nel dispositivo AAL ho deciso di implementare varie trasformazioni nel seguente modo:
1 Le informazioni sul colore sono memorizzate in tre byte R_base,G_base,B_base(sistema RGB). Ho chiamato questo valore di base. Memorizza le informazioni sul colore senza perdite.
2 Per le trasformazioni viene utilizzato il valore del valore di trasformazione (shift). Spostare dimensione in byte.
3 Trasformazione richiesta viene eseguita nelle procedure corrispondenti, i cui dati iniziali sono il valore del colore di base R_base, R_base, R_base e il valore della corrispondente trasformazione Shift. In uscita otteniamo tre valori nel sistema RGB ( R_spostare,G_spostare,B_spostare), che vengono emessi ai LED sotto forma di segnali PWM.

Con questo schema, per noi è conveniente gestirlo vari parametri luce e salviamo nel modo più accurato possibile le informazioni sul colore iniziale (base).

Implementazione delle trasformazioni di colore in un microcontrollore.

Il problema con l'implementazione della gestione del colore su un microcontrollore è che la stragrande maggioranza delle conversioni richiede la moltiplicazione del byte per un fattore di conversione frazionario (un numero compreso tra 0 e 1).
Ad esempio, riducendo la luminosità della metà:
R_shift = R_base * 0,5
G_shift = G_base * 0,5
B_shift = B_base * 0,5

Con la moltiplicazione di numeri interi nei microcontrollori AVR tutto va bene (la moltiplicazione a 8 bit viene eseguita da un operatore in soli 2 cicli di clock - fino a 10 milioni di moltiplicazioni al secondo!), ma se passiamo a un sistema di numeri in virgola mobile, lo sarà un paio di ordini di grandezza più lento e molto macchinoso. Nei casi in cui sono necessari rapidi ricalcoli grande quantità valori, il microcontrollore semplicemente non riuscirà a tenere il passo.
Il problema con la divisione è ancora peggiore (questa è un'opzione per allontanarsi dalla moltiplicazione frazionaria): semplicemente non esiste l'hardware per questo. Implementazione del software anche la divisione è piuttosto complicata.

Idealmente, tutte le trasformazioni di colore dovrebbero essere implementate utilizzando la moltiplicazione di numeri interi, spostamenti di bit, addizione e sottrazione. Generalmente non è consigliabile utilizzare la divisione.
Questo è ciò che faremo ora!

Il problema della moltiplicazione per un coefficiente frazionario è risolto in modo molto semplice! Se utilizziamo un valore di dimensioni in byte (0 – 255) come coefficiente, prendendo valore massimo byte (255) per unità, puoi cavartela solo con la moltiplicazione di numeri interi.

0 ~ 0/255 = 0
10 ~ 10/255 = 0,04
128 ~ 128/255 = 0,5
255 ~ 255/255 = 1

Ora, l'esempio precedente sarebbe simile a questo:
R_shift = (R_base * 128) / 255
G_shift = (G_base * 128) / 255
B_shift = (B_base * 128) / 255

Dopo aver moltiplicato due valori a 8 bit (R_base*128), otteniamo un risultato a 16 bit (due byte). Scartando il byte basso e utilizzando solo il byte alto, dividiamo il valore per 256.
Dividendo per 256 , invece di quelli richiesti 255 , introduciamo un piccolo errore nel risultato. Nel nostro caso, quando il risultato viene utilizzato per generare luminosità utilizzando PWM, l'errore può essere trascurato, poiché non sarà visibile alla vista.

In assembler, l'implementazione di questo metodo di moltiplicazione per un coefficiente è elementare e non causerà alcuna difficoltà (solo un paio di operatori). Nelle lingue alto livello, è necessario fare attenzione che il compilatore non crei codice ridondante.

Passiamo alle trasformazioni stesse.

Permettetemi di ricordarvi che qualsiasi trasformazione comporta:
— colore di base specificato da tre variabili Base_R, Base_G, Base_B(dimensione in byte)
- fattore di conversione Spostare(dimensione in byte)

Risultato:
— colore “spostato”, sotto forma di tre valori R_shift, G_shift, B_shift(dimensione in byte)

Le formule seguenti possono sembrare strane, ma le ho scritte in modo tale che, in primo luogo, la sequenza delle azioni fosse visibile e, in secondo luogo, per semplificare il più possibile le azioni, riducendo tutto a moltiplicazioni, addizioni, sottrazioni e a 8 bit un po' spostato.

Luminosità (luminosità)

- la trasformazione più semplice.
A:
Shift=0 LED spento
Shift=255 Il LED si accende nel colore di base.
Tutti i valori di Shift intermedi rappresentano uno scurimento del colore di base.

R_shift = (R_base * Shift) / 256
G_shift = (G_base * Shift) / 256
B_shift = (B_base * Shift) / 256

* Ti ricordo che dividere per 256 significa semplicemente scartare il byte basso del risultato di una moltiplicazione intera di 2 byte.

Alleggerimento (Tinta)

- questo valore non è compreso nel sistema HSB, ma è comodo da utilizzare nelle regolazioni. La tinta è una sorta di continuazione della regolazione della luminosità sul bianco.
A:
Shift=0 – Il LED si accende nel colore base
Shift=255 – Il LED si illumina di bianco
Tutti i valori di Shift intermedi schiariscono il colore di base.

R_shift = (R_base*(255 - Shift)) / 256 + Shift
G_shift = (G_base*(255 - Shift)) / 256 + Shift
B_shift = (B_base *(255 - Shift)) / 256 + Shift

* il coefficiente (255 - Shift) può essere implementato con un'inversione di bit dell'operatore (ovviamente, a condizione che Shift sia Byte|Char)

Luminosità (Leggerezza)

- Anche questo valore non è compreso nel sistema HSB. La regolazione si effettua dal LED spento, passando per il colore base e fino al bianco.
A:
Shift=0 – Il LED è spento
Shift=128 – Il LED si accende nel colore base
Shift =255 – Il LED si illumina di bianco.

Implementato attraverso le due trasformazioni precedenti.
Con Shift< 128 применяем Luminosità c Maiusc(per Luminosità) = Maiusc*2
Con Shift >=128 applichiamo Tinta c Maiusc(per Tinta) = (Maiusc-128)*2

Saturazione(Saturazione)

- cromaticità - transizione dal grigio al colore
A:
Shift=0 – il LED si illumina di bianco con una luminosità pari al valore medio del colore base
Shift=255 – Il LED si accende nel colore base
Tutti i valori di Shift intermedi sono una “perdita” di colore.

Media_RGB= ((R_base + B_base)/2 + G_base) / 2

* più corretto, ovviamente, è (R_base + G_base + B_base)/3, ma devi dividere per 3, e questo non può essere fatto con uno spostamento

R_shift = (R_base * Shift) / 256 + (RGB_media * (255 - Shift)) / 256
G_shift = (G_base * Shift) / 256 + (RGB_media * (255 - Shift)) / 256
B_shift = (B_base * Shift) / 256 + (RGB_media * (255 - Shift)) / 256

Cambia tono (Tinta)

Cambiamento circolare nella tonalità del colore.
Trasformazione complessa che differisce in ciascuna delle tre zone del valore di spostamento
Ad esempio, se il colore di base è rosso, allora:
Shift=0 – Il LED si illumina di rosso
Shift=85 – Il LED si illumina di verde
Shift=170 – Il LED si illumina di blu
Shift=255 – Il LED si illumina di nuovo in rosso

Con Shift< 86:
Maiusc_a= Maiusc * 3
R_shift = (G_base * Shift_a) / 256 + (R_base * (255 - Shift_a)) / 256
G_shift = (B_base * Shift_a) / 256 + (G_base * (255 - Shift_a)) / 256
B_shift = (R_base * Shift_a) / 256 + (B_base * (255 - Shift_a)) / 256

Quando Maiusc > 85 e Maiusc< 171:
Maiusc_a= (Maiusc-85) * 3
R_shift = (B_base * Shift_a) / 256 + (G_base * (255 - Shift_a)) / 256
G_shift = (R_base * Shift_a) / 256 + (B_base * (255 - Shift_a)) / 256
B_shift = (G_base * Shift_a) / 256 + (R_base * (255 - Shift_a)) / 256

Con Maiusc > 170:
Maiusc_a= (Maiusc-170) * 3
R_shift = (R_base * Shift_a) / 256 + (B_base * (255 - Shift_a)) / 256
G_shift = (G_base * Shift_a) / 256 + (R_base * (255 - Shift_a)) / 256
B_shift = (B_base * Shift_a) / 256 + (G_base * (255 - Shift_a)) / 256

Inversione (Inversione)

- rappresenta una transizione da un colore alla sua versione inversa. Ad esempio, il colore inverso del rosso è il blu.
Shift=0 – Il LED si accende nel colore base
Shift=128 – Il LED si illumina di bianco (grigio) – punto medio dell'inversione
Shift=255 – il LED si accende di un colore inverso a quello base
Tutti i valori di Shift intermedi lo sono transizioni fluide tra i fiori.

R_shift = ((255 - R_base) * Shift) / 256 + (R_base * (255 - Shift)) / 256
G_shift = ((255 - G_base) * Shift) / 256 + (G_base * (255 - Shift)) / 256
B_shift = ((255 - B_base) * Shift) / 256 + (B_base * (255 - Shift)) / 256

Per ora questi sono tutti i parametri che ho pensato di aggiustare. Se mi viene in mente qualcos'altro di interessante, lo aggiungerò qui più tardi.

C'è un altro problema che vorrei toccare nel contesto di questo articolo:

Nonlinearità della percezione PWM da parte dell'occhio umano

Si scopre che l'occhio umano percepisce la luminosità di un LED in modo non lineare. Questo problema è noto da tempo e i produttori lo hanno risolto con vari gradi di successo. attrezzature varie. Ci sono studi e formule sperimentali. Ecco, ad esempio, un grafico delle dipendenze da .

Dal grafico è chiaro che in aree iniziali regolamento, la luminosità ci sembra essere tre volte maggiore di quella misurata dal dispositivo.

Cioè, se questo fattore non viene preso in considerazione, ruotando la solita manopola del regolatore, otterremo tutti i cambiamenti nella prima metà della rivoluzione, e la seconda metà in realtà non cambierà sensibilmente lo stato attuale.

È proprio a causa dell'effetto di non linearità che ho scritto sopra che, infatti, il colore a 3 byte (24 bit) non dà affatto quei 16 milioni di sfumature, come piace scrivere a molti produttori. Tonalità piene, dentro scenario migliore, sarà un ordine di grandezza più piccolo.

Come risolvere il problema della non linearità della percezione PWM da parte dell'occhio umano?
Idealmente, è necessario utilizzare una delle formule derivate sperimentalmente, ma spesso sono troppo complesse per essere calcolate in un microcontrollore.
Puoi anche creare una tabella di valori per il ricalcolo PWM (riducendo il tempo di calcolo, ma sacrificando parte della memoria MK).
Nel nostro caso, quando non è necessaria una grande precisione nel trasmettere le sfumature della luminosità, possiamo applicare una formula semplificata per la cosiddetta potenza di radiazione:

R_PWM = (R_shift * R_shift) / 256
G_PWM = (G_shift * G_shift) / 256
B_PWM = (B_shift * B_shift) / 256

* moltiplicare il valore per se stesso e scartare il byte basso del risultato.

Questo è probabilmente tutto ciò che volevo dirti sul colore dei LED. Tutte le trasformazioni descritte nell'articolo sono state implementate da me nel dispositivo AAL. Inoltre, lo farò modulo separato Color in È possibile visualizzare una dimostrazione degli algoritmi su un LED RGB e un pixel WS2812.

(Visitato 10.683 volte, 1 visite oggi)

I LED RGB, a volte chiamati LED a 3 colori, non sono altro che diodi rossi, verdi e blu combinati in un unico pacchetto. Sapendo questo, è facile immaginare come sono progettati i LED RGB. Per ciascuno dei 3 colori c'è il proprio catodo e un altro è un anodo comune. Il cavo dell'anodo è il più lungo e i catodi sono solitamente disposti nel seguente ordine:

  • blu;
  • verde;
  • rosso.

Per far brillare il dispositivo con uno di colori specificati, è necessario applicare un segnale al catodo corrispondente. Se è necessaria un'altra tonalità, è possibile ottenerla utilizzando la modulazione dell'ampiezza dell'impulso (PWM, segnale PWM). Il numero di colori risultanti dipende da come è implementato il controllo e dalla profondità di bit PWM. Colore biancoÈ anche abbastanza semplice da ottenere: tutto quello che devi fare è accendere tutti i LED contemporaneamente.

I LED RGB possono avere anche una struttura diversa, che ne determina le caratteristiche principali (quantità sono potenti, ecc.). Nel caso di un dispositivo con catodo comune, ogni colore ha una propria soglia di accensione, separata da prossima coppia volt. I dispositivi con un "+" comune accendono il LED desiderato quando il valore è "0" sull'uscita del microcontrollore e con un "-" comune - su "1".

Il controllo dei LED RGB può essere implementato sui microcontrollori a 8 bit della famiglia Pic, AVR (ATtiny, ATmega) e modelli più potenti, il cui programma è compilato in assembler.

In teoria, i piedini dei microcontrollori dovrebbero essere progettati per una certa quantità di corrente passante, ma i LED RGB possono essere collegati tramite un resistore limitatore di corrente o un transistor PNP.

Controllo dei led rgb

Il controllo LED consiste nell'installazione valore desiderato i loro parametri. Per fare ciò, le uscite dovrebbero essere alimentate impulsi quadrati un certo ciclo di lavoro, che influenzerà il valore della corrente media e, di conseguenza, la luminosità media.

Se la frequenza degli impulsi è insufficiente, i LED lampeggeranno. Affinché brillino costantemente, la soglia di frequenza inferiore dovrebbe essere di circa 60-70 Hz (monitor dei modelli più vecchi) e idealmente almeno 100 Hz (più potenti e moderni).

A implementazione più semplice il controllo di un LED RGB richiederà 3 PWM. Il circuito in sé non è così difficile da implementare, anche se i dispositivi sono piuttosto potenti. Il compito è piuttosto corretta implementazione parte software.

I controller delle serie di fascia bassa, di norma, non hanno non solo 3 PWM, ma anche 3 timer con interruzioni (sulla base dei quali è facile implementare PWM). Si dovrebbe considerare il modo in cui verrà implementato il sistema di controllo esempi specifici, a seconda dell'architettura del dispositivo specifico.

Base teorica per l'implementazione del circuito di controllo LED RGB

Innanzitutto, dovresti ricordare cos'è il PWM. In breve, questa è la modalità operativa del dispositivo in cui il ciclo di lavoro (livello del segnale) è regolato dal microcircuito secondo specifici algoritmi.

Per implementare un canale PWM devi sapere:

  • algoritmo per determinare il fattore di riempimento (impostato dall'utente);
  • temporizzazione del segnale livello superiore;
  • tempo dell'intero impulso.

A implementazione pratica Ciò richiederà 2 contatori, che funzioneranno secondo il seguente algoritmo:

  1. Avviando i contatori, l'uscita viene impostata su “1”.
  2. Interruzione del contatore n. 1 (tempo di livello alto), l'uscita passa a “0”.
  3. Il contatore n. 1 si spegne.
  4. Interruzione del contatore n. 2 – ripetizione di tutte le operazioni dall'inizio.

Si scopre che il circuito di controllo del LED RGB, indipendentemente dalla potenza dei dispositivi, dovrebbe includere 2 contatori per il canale PWM, ovvero 6 in totale.

Anche se si rende uguale la durata dell'impulso per tutti i canali, il loro numero verrà ridotto di 2. I controller semplici non avranno 4 contatori, ma non dimenticare che il rapporto temporale è discreto.

Qui è necessario selezionare un quanto di tempo che sarà un multiplo della durata dell'impulso su ciascun canale.

T=1/(f*(2 n -1)),

n – valore del bit PWM;

f – frequenza.

Il circuito può includere 1 contatore per il conteggio dell'intervallo T. Affinché possa svolgere la funzione richiesta è necessario specificare 4 impostazioni:

  1. Numero di campioni di livello superiore per 1 canale PWM.
  2. Numero di campioni di livello superiore per il 2° canale PWM.
  3. Numero di campioni di livello superiore per il 3° canale PWM.
  4. Durata totale dell'impulso.

Altre operazioni per il contatore software (commutazione, ripristino, ecc.) vengono eseguite utilizzando gli interrupt hardware.

Questo algoritmo è solo un esempio di un circuito di controllo, il cui funzionamento può differire notevolmente a seconda del microcontrollore utilizzato e anche dell'esatto utilizzo previsto dei LED. Di più dispositivi potenti può anche lavorare Strisce LED OH.

O retroilluminazione con possibilità di commutazione colori differenti, quindi l'argomento dei driver LED è molto rilevante. Il circuito proposto di un tale dispositivo controlla i LED RGB tramite MOSFET a canale H, che consentono di controllare matrici LED o lampade fino a 5 ampere per canale senza l'utilizzo di dissipatori di calore.

Schema elettrico e descrizione

Durante il test, il controller è stato collegato a 50 W a 12 V lampadine alogene, uno per ogni canale. La temperatura dei transistor MOSFET dopo una corsa di 5 minuti era leggermente superiore a 50°C. In teoria carico totale per tutti e tre i canali RGB non deve superare i 15 amp.

Il transistor specificato STP36NF06L funziona a bassa tensione di gate. È possibile utilizzare altri canali N standard transistor ad effetto di campo, che funzionerà normalmente con correnti di carico fino a 5 ampere e non ne richiederà troppa grande segnale all'ingresso per lo sblocco completo.

Connessione a scheda a circuito stampato inoltre i cavi devono essere adatti alla corrente che trasporteranno. I LED, le strisce LED e i moduli collegati al driver devono avere un anodo comune, come mostrato nello schema sopra.

Ecco un'implementazione che utilizza 20 LED Piranha RGB. La lampada è assemblata in una scatola 25 x 50 x 1000 mm in alluminio. Successivamente è stato adattato a mensola a muro per illuminare il tavolo. La luce è molto brillante e fornisce un'illuminazione buona e uniforme senza alcun diffusore aggiuntivo.

I migliori articoli sull'argomento