Gestione carichi AC con Arduino o RaspberryPI
Guida alla gestione dell'accoppiamento microcontrollore - relay per la gestione di vari carichi
La seguente guida vuole permettere a tutti di dimensionare e gestire un piccolo circuito di comando che permetta di far interagire tra loro un microcontrollore e un carico ad elevati assorbimenti (DC o AC) mediante un relay. Tale necessità è causata della bassa corrente erogata da un microcontrollore (ad esempio, nel caso dell’ATMEGA328PU, la massima corrente erogabile dai pin output è di 40mA) chiaramente insufficiente per gestire un relé.
La soluzione è abbastanza ovvia a livello teorico/pratico: il microcontrollore dovrà pilotare un transistor (tipicamente BJT o mosfet) che a sua volta piloterà un relè o un’altro circuito di gestione relè. Dato che un relay non può esser pilotato ad alte frequenze (essendo un componente meccanico necessita di un certo tempo di apertura e un certo tempo di chiusura del contatto) possiamo sfruttare un transistor BJT .
Esaminiamo un caso pratico: si vuole gestire un lampeggio di una lampadina 60W alimentata a 230Vac. Il lampeggio dovrà essere gestito da intervalli di 3 secondi e l’intero sistema deve essere gestito da un microcontrollore.
Esempio progettazione:
- Scegliere tutte le specifiche del circuito e selezionare un relé che permetta la gestione del carico (ovvero 230V 60W). Tale scelta è molto importante poiché il valore resistivo della bobina è il punto di partenza per un corretto dimensionamento. Tipicamente i valori sono compresi tra 200Ω e 500Ω per i relay da pcb 10A 230Vac. In seguito tale valore lo chiameremo Rrelay e nel nostro caso vale 200Ω.
alimentazione circuito comando Vcc = 9V
resistenza interna bobina relè Rrelay = 200Ω
2. Scegliere un transistor idoneo per sistemi switching nella fascia di tensione che si vuole adottare (se le tensioni di alimentazioni sono inferiori a 24 V e la frequenza di commutazione non è elevatissima la scelta ricade sui BJT come ad esempio il 2N2222. Nel nostro esempio l’alimentazione sarà si 9Vdc e il transistor utilizzato sarà un BC547.
NB. La scelta specifica del transistor è dettata dalla corrente che lo attraversa (Ic) tipicamente calcolabile approssimativamente con il calcolo Vcc/Rrelay (nel nostro caso 9/200 = 45mA). Per un’analisi migliore è necessario considerare il parametro Vce(sat).
3. Per procedere con il dimensionamento della base è necessario conoscere la corrente Ic che scorre nel collettore. Nel nostro caso Ic = 45mA. è possibile calcolare la corrente di base sfruttando il parametro di guadagno statico hfe tramite la relazione:
\(Ib = \frac{Ic}{hfe_minimo} = \frac{0,045}{110} = 0,000409 A = 0,409 mA\)
Ib_sat = Ib * 3 = 1,227 mA
Sapendo che l’output del microcontrollore è 5Vdc e che Vbe_sat ha valore 0,7V (vedere datasheet) è facilmente calcolabile la resistenza di base Rb:
\(Rb = \frac{Vbb – Vbesat}{Ibsat} = \frac{5 – 0,7}{0,001227} = 3,5k\Omega \)
Nel caso si voglia utilizzare la scheda RaspberryPI basterà considerare una Vbb di 3,3V anziché 5V.
Infine, l’ultimo componente da dimensionare è Rpulldown che deve essere maggiore di Rb. Tipicamente si sceglie in modo arbitrario con valori compresi tra 10k e 100k. Nel nostro caso sceglieremo 100k poiché disponibili.
A questo punto il circuito è dimensionato correttamente e funzionante, ma vi è un’ultima precisazione da fare: il diodo d (detto anche diodo di ricircolo) è necessario per smorzare le sovratensioni induttive generate dall’improvvisa mancanza di alimentazione della bobina del relay.
Giunti a questo punto basterà gestire il lampeggio lato software tramite Arduino o RaspberryPI