Cerca

modulo attività

modulo tecnica

Pilotare un TRIAC con Arduino/Genuino?

Facilissimo! basta sincronizzare Arduino con la rete a corrente alternata e mandare impulsi al gate con il ritardo che ci piace.

 

Arduino deve essere messo in grado di individuare l'istante in cui la tensione di rete passa per lo zero senza che si presentino pericoli per la scheda e per le persone che manipolano il circuito.

Per questo scopo è stato realizzato il circuito presentato nell'articolo ENA: controllo di fase con TRIAC.

Con un circuito di zero-crossing si invia un impulso al pin D2 che provoca un interrupt sul fronte di discesa (vedi Michele Maffucci: interrupts).

Con il valore letto sull'ingresso analogico A0 si determina il ritardo in microsecondi facendo attenzione a non invadere il semiperiodo successivo (nota 1)

 

Lo script TRIAC_test_03 realizza quanto desiderato:

mentre un loop "legge" il potenziometro sul pin A0 e calcola il valore di teta che è l'angolo del ritardo di fase desiderato
test03

a- arriva il segnale di zero-crossing, che è un impulso positivo di breve durata,  al pin D2

b- il software del loop viene interrotto dal fronte di discesa dell'impulso

c- l'interruzione forza Arduino ad eseguire la procedura "generaImpulso" 

d- che produce un impulso di durata fissa pari a 100µs sul pin D9 ritardato del valore teta (nota 2) in microsecondi rispetto all'istante di attivazione della procedura.

La durata dell'impulso è decisamente più breve della durata dell'impulso di zero crossing (600µs) per cui è facilmente evitabile lo sconfinamento nel semiperiodo successivo (nota 1)

 

Per impostare Arduino in modo che riconosca e gestisca un interrupt si usa l'istruzione di riga 21 che definisce il pin D2 (con il primo parametro uguale a 0) come pin su cui deve essere rilevato il fronte di discesa (falling) dell'impulso. Al fronte di discesa Arduino chiama, interrompendo ogni altra attività di calcolo, la procedura di gestione dell'interrupt qui con etichetta "generaImpulso".

La procedura "genera impulso" attende un tempo pari a teta (nota 3), produce un gradino positivo LOW-HIGH, attende 100µs e produce un gradino negativo HIGH-LOW. Risultato: un impulso di durata 100µs.

Il loop, che può contenere molte altre istruzioni, viene utilizzato per calcolare teta che dipende dalla posizione del potenziomentro letta tramite la tensione sull'ingresso analogico A0 e serve a regolare il ritardo della generazione dell'impulso.

Per approfondimenti consiglio la lettura di Michele Maffucci: interrupts.

 

 

 

 

 

Una versione adatta a carichi molto induttivi deve prevedere impulsi che terminano alla fine del semiperiodo.

Lo script TRIAC_test_04 realizza la nuova funzione.

test04

 

Alla riga 27 viene impostato Arduino per attivarsi sul fronte di salita dell'impulso, cioè quando il semiperiodo è alla fine.

 

ll fronte di discesa abilita l'impulso di gate che viene prodotto col ritardo teta microsecondi dopo lo zerocrossing e produce il gradino positivo LOW-HIGH mentre il fronte di salita produce il gradino negativo HIGH-LOW al termine del semiperiodo. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In laboratorio sono state realizzate delle misurazioni con l'uso di Arduino:

LB: TRIAC con Arduino, misurazioni 1

LB: TRIAC con Arduino, misurazioni 2

 

note 

nota 1: l'impulso deve comunque terminare prima del successivo zero-crossing altrimenti si presenta come un impulso intempestivo che accende subito il TRIAC appena la tensione ha attraversato lo zero pregiudicandone la funzione di controllo del carico.

nota 2: teta è un ritardo in microsecondi che deve rapportarsi alla durata del semiperiodo che in Europa vale 10ms ovvero 10.000µs. L'avvio con teta di 7500µs serve ad avere all'accensione una tensione sul carco prossima a zero per l'elevato rutardo imposto. Con questo script interviene subito il potenziomentro a fissarne il valore ma possono esserci casi in cui si debba attendere la chiusura di un interruttore allora è meglio che il tutto sia fissato al minimo.

nota 3: più un breve intervallo fisso di 50µs resosi necessario per stabilizzare empiricamente il funzionamento complessivo