Condensatori

I Condensatori sono dei piccoli accumulatori di cariche elettriche. In altre parole diciamo che si tratta di minuscole batterie, ed il loro ciclo di carica/scarica può essere molto veloce; anche miliardi di volte al secondo.
Vediamo come possono rendersi utili.

Questo articolo fa parte di una piccola serie che tratta di componenti elettronici discreti e di come usarli, in base alla mia esperienza con Arduino e piattaforme MCU in generale.
Non ha la pretesa di essere una guida onnicomprensiva o di sostituire un corso di elettronica; tocchiamo gli argomenti più comuni per le architetture con MCU, ma troviamo anche informazioni utili per sviluppare ulteriormente il soggetto in modo autonomo, tramite test e ragionamento.

I Condensatori si possono visualizzare come due piastre metalliche che si fronteggiano senza toccarsi: su queste piastre si schierano cariche elettriche positive e negative, ma non c’è nessun contatto elettrico tra le due: in regime di corrente continua, i due poli di un condensatore sono isolati, la resistenza è (virtualmente) infinita.
E’ quando la tensione ai due poli cambia, che cominciano a succedere delle cose interessanti: infatti se in continua un condensatore non conduce, quando la tensione ai capi cambia con regolarità, la fluttuazione del campo elettrico tra le due piastre li fa diventare dei protagonisti.

Di insostituibile utilità nella circuiteria analogica, nel mondo digitale hanno meno applicazioni, ma quelle che hanno sono importanti; qui vedremo solo quelle che servono a noi:

  • Ripulire un segnale da disturbi indesiderati
  • Ricordare per un tempo (limitato) un determinato stato fisico
  • Stabilizzare una tensione dalle fluttuazioni
  • Tenere una piccola riserva di energia per quando la richiesta ha un picco
  • Disaccoppiare (isolare) circuiti in corrente continua

I parametri fondamentali di un condensatore sono:

  • Capacità, espressa in Farad (da Michael Faraday)
  • Tensione operativa, espressa in Volt

I Resistori come valore di base hanno l’Ohm, che è un valore piuttosto basso ed infatti si usano spesso multipli. Con i Condensatori, è il contrario: la capacità di 1 Farad è sproporzionata e poco pratica da utilizzare, quindi si utilizzano sottomultipli:

  • milli (10^-3) simbolo: mF
  • micro (10^-6) simbolo: μF
  • nano (10^-9) simbolo: nF
  • pico (10^-12) simbolo: pF

Nota: μ in μF è la lettera greca mu, che tuttavia non è una lettera standard ANSI; pertanto, è convenzione usare al suo posto una u: uF

Esistono molti tipi di condensatori, ma per i nostri scopi li raggrupperemo in due soli gruppi:

  • Elettrolitici (o polarizzati)
  • Non Elettrolitici

Vediamoli

i condensatori sono contrassegnati da una C; si noti che gli elettrolitici hanno un +
da sinistra: ceramici, poliestere, 2 euro, elettrolitici e un apparentemente modesto supercap
SMD: da sinistra: 1nF 50V, 100nF 100V, 1uF 16V, 1uF 25V, 10uF 10V in diversi formati ma tutti ceramici multistrato

Gli elettrolitici, per le loro caratteristiche costruttive, hanno una capacità elevata e sono capaci di ricevere ed erogare ampie correnti, ma hanno una polarità che va rispettata; per i non elettrolitici il problema della polarità non si pone ma (salvo eccezioni) portano capacità più limitate.

La Capacità indica quanta carica elettrica il condensatore è in grado di accumulare; più capacità, più energia immagazzinata; meno capacità, più agilità nel reagire al cambio carica/scarica.

La Tensione è un dato fondamentale che non va mai ecceduto, pena la perdita del componente e della sua funzione, con possibili corti e successivo danno alla circuiteria circostante.
Nota: negli elettrolitici l’inversione di polarità porta a danni catastrofici.

In tendenza, la dimensione dà un’idea grossolana della capacità; ma anche la tensione sopportabile gioca un ruolo importante, come si nota qui:

1000uF 25V e 50V, differenza lineare

occhio però:

dimensioni identiche, ma:
uno è da 470nF 100V
l’altro da 10uF 35V

o come in questo caso:

il più piccolo è da 47uF 40V
il più grosso è solo da 1uF ma porta 450V

ed infine:

1000uF 50V (sopra) contro un supercap, che è 1 Farad di capacità (mille volte il primo) anche se porta solo 5.5V;
il supercap è circa 5mm di spessore

OK. Cosa li usiamo a fare?

Prima di procedere dobbiamo parlare dei circuiti RC, ovvero Resistore-Condensatore.
Abbiamo detto che un condensatore è un piccolo accumulatore di energia; questa energia la possiamo dosare lentamente: il resistore serve a limitare il flusso di energia.

un semplice circuito RC

Se applichiamo ad esempio 5 Volt, inizialmente la differenza tra Vin e Vout sarà piena.
La legge di Ohm ci dice che, nel momento iniziale (t0) la corrente è:

I = V / R = 5 / 220000 = 0.0000227 A = 22.7uA (microAmpere)

Ma già da subito il condensatore inizia a caricarsi, la sua tensione cresce, la differenza di potenziale ai capi del resistore diminuisce, e a conseguenza di ciò, diminuisce pure la corrente, quindi il flusso di carica.
Quindi il caricamento non sarà costante, ma seguirà una curva (curva di carica), come si vede qui:

clicca per ingrandire

Verde è la tensione raggiunta dal condensatore, rosso è la corrente; come si vede, più aumenta la prima, più diminuisce la seconda.

Esiste ovviamente una formula per calcolare il tempo, ed esistono circa un milione di siti dove si può trovare, ma per il nostro uso pratico è più facile utilizzare un calcolatore online. Facciamo finta di voler “ritardare” un segnale in ingresso ad Arduino.
Sappiamo che il minimo livello fisico di tensione perché Arduino consideri un piedino a livello logico 1 sono 3V.
Ladyada ci mette a disposizione questo calcolatore che fa esattamente quello che ci serve: data una tensione di ingresso ed i valori della coppia R-C, ci dice dopo quanto tempo una soglia verrà raggiunta.

Nel nostro caso ci vorranno poco più di 200ms.
Vogliamo un intervallo più lungo? Aumentiamo il resistore o il condensatore.

La curva di scarica segue le stesse regole: la corrente più alta è all’inizio della scarica, e man mano si attenua fino ad arrivare a zero quando il condensatore è completamente scarico.

Una cosa della quale possiamo essere assolutamente certi è che, a parità di condizioni iniziali, la curva di carica o di scarica sarà sempre esattamente uguale, garantendo così la regolarità e riproducibilità dei cicli.

Nota: Ovviamente, avendo un Arduino a disposizione, la generazione di ritardi e timer è molto più semplice da fare via software.
Comunque ci sono ancora casi in cui questa caratteristica può tornare utile; più avanti ne parliamo.

Funzioni Utili

Riprendiamo i punti elencati sopra

Pulire un segnale da disturbi indesiderati

Ai circuiti digitali i segnali piacciono puliti. Ma il mondo reale è un’altra cosa. Finché accendi due LED nel tuo laboratorio va tutto bene, ma quando il tuo progetto lo finalizzi, lo inscatoli, e poi lo installi senza volere vicino a un motore elettrico, a quel punto il mondo si divide in due tipi di persone: quelli che visto che funziona se ne dimenticano, e quelli che battono la capa contro al muro perché in laboratorio è tutto OK e invece lì fa cose strane.

Nota: questo è solo un accenno, ma è un inizio per capire cosa possono fare i condensatori per noi: un componente da 3 millesimi di euro ci può risparmiare severi mal di testa.

Ipotizziamo di avere un segnale sinusoidale da 100Hz, cui ad un certo istante si sovrappone un segnale, sempre sinusoidale, da 10KHz. Ho ristretto nel tempo l’azione del segnale ad alta frequenza per poter notare la differenza. Questa è la cosa che ci troviamo ad affrontare:

segnale puro e con interferenza
dettaglio dell’inizio dell’interferenza a 10KHz

A seconda della situazione e dei punti di vista, il disturbo potrebbe indifferentemente essere:

  • siamo infastiditi dall’oscillazione a 100Hz: un’alimentazione instabile, apparecchi elettrici nelle vicinanze che interferiscono; ci aspettiamo un segnale liscio a 10kHz da mezzo Volt, e lo troviamo, certo, ma cavalcante sulle onde del mare;
  • ci disturba l’oscillazione a 10KHz: segnali spurii interni o esterni, interferenze elettromagnetiche, “antenne” non desiderate (e qui ne avrei da raccontare); ci aspettiamo le onde del mare, e le troviamo, ma c’è anche la schiumina sopra;

Per ognuno dei due casi, abbiamo il filtro adatto.

Sono tre circuiti diversi che condividono lo stesso GND. Ogni circuito ha i propri generatori, in modo che non si disturbino l’un l’altro.

  • Clean è il circuito che genera i segnali senza filtri
  • Lowpass è un filtro passa-basso, che serve per attenuare le frequenze alte; il circuito è un R-C dimensionato adeguatamente per attenuare il disturbo a 10KHz
  • Highpass è un filtro passa-alto, che attenua le frequenze basse, lasciando passare quasi indisturbate quelle alte; il circuito mette semplicemente in serie al carico un condensatore, anche qui dimensionato adeguatamente per le frequenze dell’esempio

Quando lo facciamo partire, otteniamo questo:

output dei tre circuiti

o, più in dettaglio:

dettaglio dove inizia la componente 10KHz

Verde è il segnale senza filtri, rosso è dopo il passa-basso, violetto è dopo il passa-alto.

Come si può vedere, l’attenuazione mirata è notevole, mentre il segnale che ci interessava è rimasto; a seconda di quale fosse il nostro “disturbo”, gli abbiamo dato una buona ripulita.

Vediamo adesso un esempio molto più consono alle nostre applicazioni digitali. Riceviamo in ingresso un segnale digitale, sotto forma di onda quadra, che dobbiamo interpretare e farci dei ragionamenti.

segnale digitale con orribile disturbo

Il segnale è bello e pulito, 0V minimo, 5V massimo; tuttavia, c’è un disturbo: un picco importante sul fronte ON; la circuiteria che ce lo fornisce evidentemente non lo filtra. Nota: 6V di picco spurio su 5V di segnale; l’aggettivo più adeguato è “devastante”. Comunque posso assicurare che si è visto di molto peggio.

E’ vero che tante situazioni si possono correggere col software, ma se su un piedino disegnato per gestire segnali da 5V ce ne butto 11, magari funziona per un po’ (cioè, qualche millisecondo), ma poi il danno diventa irreparabile, e qui c’è proprio da buttare via l’ATMega.

Come pariamo il fondoschiena dell’Arduino?
Ci sono diversi metodi, ma questo è fatto per durare: se consideriamo questi picchi come il disturbo ad alta frequenza di prima, ci basta un filtro passa-basso. Utilizzeremo lo stesso di prima: R da 330Ohm e C da 330nF. Ecco il risultato:

verde: segnale sporco, rosso: segnale ripulito

Ricordare per un tempo (limitato) un determinato stato fisico

A volte, certe memorie, è più pratico esercitarle fuori dall’Arduino; con due componenti in più si risparmiano codice e risorse. Per adesso diciamo che se qualcosa cambia stato all’esterno, e l’Arduino a questo cambio di stato deve reagire, le caratteristiche che lo stato/segnale deve avere sono:

  • deciso
  • consistente
  • inequivocabile

Se queste condizioni non sono soddisfatte, il software potrebbe fare delle scelte sbagliate.
L’esempio più lampante, di cui parleremo presto in un altro articolo, è la gestione di un interruttore, o pulsante. Quando pigi un pulsante, un contatto (che per quanto protetto probabilmente è contaminato da polvere, grassi, e ragnatele se non lo pigi spesso) viene sospinto verso un altro, spinto o trattenuto da un meccanismo elastico che per sua natura (elastico) col passare dei microsecondi potrebbe toccare, rimbalzare, e così via fino a stabilizzarsi finalmente, ma non prima di aver mandato impulsi tutt’altro che puliti.
Questa cosa si chiama “bouncing” o, tradotto sportivamente: “rimbalzamento”.
Esempio catturato all’oscilloscopio:

Questo non soddisfa nessuna delle tre caratteristiche sopra. L’arduino sentirà 4 pressioni del pulsante e penserà che è passato a schiacciarlo Flash Gordon. Per prevenire questa cosa si usa una tecnica che si chiama “debouncing”.

E questo è un altro momento in cui l’umanità si divide in due: i sostenitori del debouncing software e il partito dell’hardware. E’ come romanisti e laziali: non ci sarà mai modo di farli andare d’accordo. Riguardo a me, penso che sia chiaro qual è il sistema che preferisco, comunque ne parleremo più approfonditamente in altra sede.

Stabilizzare una tensione dalle fluttuazioni

Arduino va alimentato, su questo credo siamo d’accordo. In alcune applicazioni già gestiamo carichi di potenza che necessitano di alimentazione esterna: perché usare due alimentatori? approfittiamo dell’energia generata per il carico, sottraendone una piccola parte per l’Arduino.
Maaaaaa.. ci fidiamo di quello che un alimentatore manda fuori?
Se alimentiamo Arduino tramite il barrel-jack il problema non si pone: c’è un regolatore di tensione che tosa tutto quello che arriva sopra i 5V; finisce in calore e stressa il componente, ma per una mezza soluzione si può usare. Uguale per l’USB.

In alternativa, se alimentiamo Arduino direttamente sul piedino 5V, non usiamo il regolatore, non facciamo accrocchi strani con una USB saldata per l’occasione, ma dobbiamo essere certi di dargli da mangiare solo roba buona.

E’ quindi sempre consigliabile associare un condensatore elettrolitico di discreta capacità in parallelo all’alimentazione, in modo che scenari di questo tipo non debbano mai accadere

verde: filtrato
rosso: non filtrato

Il dimensionamento dipende molto dalle circostanze, ma per un Arduino che gestisce solo logica (magari pilota carichi, ma non li alimenta) normalmente mi sento sicuro con un 220-470uF.

Tenere una piccola riserva di energia per quando la richiesta ha un picco

Un uso piuttosto frequente invece, quando si parla di elettromeccanica, è per stabilizzare la fornitura di energia a quelle parti che ne richiedono, specialmente quando si tratta di forniture non statiche come ad esempio motori stepper o PWM.
Quando un motore parte, la corrente di spunto è più alta di quella nominale; un condensatore elettrolitico con adeguata capacità aiuta ad appiattire il picco e far sì che la tensione non si abbassi al punto da far entrare Arduino (o comunque l’elettronica di controllo) in brown-out, che è quella condizione in cui la tensione c’è ma non è abbastanza per garantire la funzionalità della MCU; un brown-out può portare a comportamenti instabili e non più controllabili: in pratica, Arduino ha una ottima probabilità di impallarsi e dover essere resettato. Facciamo un esempio.

A 50ms parte un motore, e lo spunto si fa sentire:

botta di spunto non trattata

Anche se per un nullesimo di secondo, la tensione scende a 3V, il che potrebbe mandare Arduino in brownout.

Con il condensatore, adeguatamente dimensionato in base alla corrente del carico ed allo spunto previsto, succede questo:

molto meglio

Il picco si spalma su un tempo molto più lungo, ma il condensatore ha compensato istantaneamente con la sua carica, e la tensione è scesa solo a 4.85 Volt (al culmine) che nominalmente permette ad Arduino di sopravvivere e continuare il suo lavoro.

Disaccoppiare (isolare) circuiti in corrente continua

Il condensatore è fatto da due piastre che si guardano, ma che sono elettricamente isolate. In corrente continua, quindi, è come un interruttore aperto, che però si attiva quando entra nell’equazione l’alternata. Questo permette di scremare la componente continua da un segnale alternato. Vediamo:

disaccoppiamento

risultato:

tutto tace

Va = 5V
corrente sul resistore: 0mA
E’ come se il circuito fosse aperto.

Aggiungiamo in input un segnale alternato, che però si appoggia su una componente continua (come si vede, lo zero è a 5V):

unz! unz! unz!

Il verde è il segnale alternato con una componente continua; il rosso è ripulito ed oscilla intorno a 0V.
Nota: la forma d’onda non è perfetta ma per aver buttato nel circuito di test un condensatore senza fare calcoli particolarmente sofisticati (leggasi: “a naso”), ci ho tirato vicino.

Questa è la ragione per cui spesso gli altoparlanti dello stereo sono disaccoppiati: la componente continua provocherebbe uno spostamento indesiderato nell’avvolgimento del cono dell’altoparlante, che invece dovrebbe spostarsi solo avanti o indietro rispetto al suo punto di riposo, che è a 0 Volt.

Proviamo adesso con degli impulsi digitali:

Anche qui non dobbiamo preoccuparci della tensione dalla quale partono gli impulsi (5V base, +4V di impulso) poiché li riceviamo puliti su una base GND.

Appendice

Leggere il Valore

I Condensatori ad oggi raramente hanno codici colore; nel caso consultare l’articolo sui Resistori: storicamente hanno sempre avuto dimensioni sufficienti a stampigliare il valore su una delle superfici. Riguardo ai valori standard, seguono regole simili ai resistori.
Infatti le combinazioni di base (E12) sono:

10
12
15
18
22
27
33
39
47
56
68
82

ed anche nel caso dei condensatori sono studiate in modo da poter ottenere nel modo più agevole qualunque valore che non è nella lista, semplicemente aggiungendo condensatori in serie o in parallelo.

Numeri

Nel caso dei condensatori più grandi la leggibilità è garantita, ed i valori sono scritti per esteso.

Sui componenti più piccoli, si ricorre ai numeri stampigliati; la logica è la stessa dei resistori, con una differenza: siccome abbiamo detto che Farad è un valore molto grande, il riferimento di base è il picoFarad e si va di multipli. Quindi

472 => 47 * 10^2 = 47 più 2 zeri = 4700pF = 4.7nF
104 => 100000pF = 100nF
223 => 22000pF = 22nF

Se i valori sono direttamente in pF, vengono indicati con una p; esempio:

33p = 33pF
ceramico 100nF (100000pF)

I poliestere hanno spazio, sono molto più espliciti, ma occhio:

poliestere 100nF (0.1uF)

0.1K sembra che significhi 100, che sarebbero 100pF, ma i poliestere vanno da 1 nF in su; infatti -per convenzione- quando è indicato il punto decimale, il valore è espresso in uF per cui .1 = 0.1uF = 100nF
il K non indica un moltiplicatore, bensì la tolleranza, come da questa tabella

Importante!
Nel dubbio, prima di saldare, o di piazzare un componente che se di valore molto diverso farebbe danni, il tester è sempre nostro grande amico. Sempre che abbia il capacimetro.

Combinazioni di Condensatori

I condensatori, come i resistori, possono essere combinati in parallelo e serie.
Tuttavia il loro comportamento è opposto: in parallelo la capacità aumenta, mentre in serie la capacità complessiva diventa minore della più bassa capacità presente nella serie.

La formula per calcolare il parallelo è la semplice somma delle capacità:

Cf = C1 + C2 + C3 ..

Mentre la formula per la serie è:

Cf = 1 / ((1 / C1) + (1 / C2) + (1 / C3) + [...])

Nel caso dei condensatori applicati all’elettronica digitale, questo argomento non ha bisogno di grandi approfondimenti poiché la finezza nella scelta di un valore non è fondamentale; nel caso di riserva di energia, se il condensatore calcolato è da 775uF, si tratta certamente di un valore minimo, ed uno standard 1000uF non fa male, anzi; per quanto riguarda invece le altre applicazioni elencate, sono certo che nella gamma E12 si trova tutto quello che serve.

Il vantaggio di usarli in parallelo, ed aumentare proporzionalmente la capacità, può essere utile per ottimizzare il disegno della PCB, ma personalmente ne ho avuto bisogno solo per ridondanza in casi molto speciali, ovvero quando il fallimento catastrofico di un condensatore potrebbe portare a danni seri, e dividere la responsabilità tra due o più componenti nega il “single point of failure”.

Il vantaggio della serie lo vedo solo se la tensione da gestire è talmente alta che un condensatore tra quelli disponibili, da solo, non la può gestire. Ciò, comunque, al costo di perderci in capacità. Questo è un caso che non mi è mai capitato, ma d’altra parte è anche vero che non ho mai lavorato con generatori di Van De Graaff.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.