Dimmer 220v

ciao a tutti
vi voglio chiedere informazioni su un'argomento molto discusso in rete a cui ancora nonn ho trovato risposta.
Voglio pilotare un carico sui 200W con l'arduino utilizzando o l'uscita analogica o il PWM. Quali componenti devo utilizzare??? I relè a stato solido sono troppo costosi, pensavo ad un fotoaccoppiatore con un TRIAK ma in rete non ho trovato niente che mi spieghi bene come fare...

PS non mi rimandate a pagine in inglese...non ci capisco niente e google traduci è peggio di me :smiley: :smiley: :smiley:
grazie a tutti per l'aiuto

Caio morro

  1. Un PWM non funziona per regolare un utenza 230V alternata perché un Triac puoi accenderlo ma non spegnerlo (c'é un sistema ma con un bel po di impegno circuitale). Avresti' utenza sempe accesa tra il 80% e 100% in modo incontrollabile.
  2. se incominci a dire che un SSR Ti costa troppo Ti rispondo di lasciar stare il Tuo progetto perché un SSR é il modo piú semplice di garantire un impianto che rispetta le necessitá di isolazione di un dispositivo che lavora con 230V.

Le possibilitá per fare un dimmer sono 2:

  • Accendi il Triac con un certo ritardo rispetto al inizio della semionda. Per questo devi rilevare il passaggio zero della sinusoidale. Per questo Ti serve un trasformatore e un po di elettronica.
  • Treni di impulsi. praticamente fai passare delle onde sinusoidali intere intervallate da pause. Se usi un SSR zero cross il pilotaggio non é critico come momento di accensione.

Ciao Uwe

L'ho realizzato da poco per dimmerare le luci di casa in un progetto domotico.

Per prima cosa i serve il segnale a 50Hz della rete, da usare come sincronismo per il PWM.

In pratica ogni volta che la tensione della sinusoide passa per lo zero (zero crossing detection) deve partire il contatore che "sfasa" l'accensione del TRIAC.

Un'onda sinusoidale a 50Hz ha un periodo di 20 milliSec, ma in realtà sono 10, perchè devi considerare che sono 100 semionde, comprese in 50 cicli (50 positive + 50 negative).

Quindi, al passaggio per lo zero, devi aspettare un tempo X, che produrrà anche il valore medio della tensione che arriverà al carico.

Se accendi subito il TRIAC, questi rimarrà acceso per tuta la semionda (poi con lo zero si "sgancia" e si spegne da solo). Se lo accendi dopo 5 milliSec, avrai una tensione media di circa la metà.

Se lo accendi dopo 7-8milliSec, avrai una tensione media molto bassa, perchè dopo soli 2-3 millisec arriva lo zero e il TRIAC sgancia.

Quindi un codice del genere:

Funzione zeroCross ()

Cont = x \ valore compreso tra 0 (Luce max o V max in uscita) e 8 (oppure usi delayMicros() con valori da 0 a 800-900

se zeroCross = 1, fai partire il contatore delay(Cont) e dopo acendi il piedino 4 (uno a caso)
delay 10-15microsecondi // devi lasciarlo ON un poco se no non riesce ad accendersi
spegni il piedino 1

Non esagerare con il ritardo, perchè se ti avvicini troppo allo zero cross successivo, rischi che il TRIAC dia i numeri con accensioni semi-casuali.

in questa immagine si capisce bene il principio:

Quello che BaBBuino ha spiegato é una possibilitá che avevo segnalato prima (e di cui non so il nome italiano) Il svantaggio é un alto potenziale di interferenze e disturbi perché si taglia la semionda e in questo modo si producono tante armoniche.

L' altenativa é :

Dove il vantaggio é che ci sono meno disturbi perché si lasciano sempre passare un onda intera e il secondo é che non serve sicronizzarle con l' alternata.

Tutte 2 i circuiti non si possono usare su trasformatori e su lampade a flurescenza o LED.
La seconda possibilitá puó dare problemi su lampade a incandescenza se sono pilotate a un basso valore perché si potrebbe vedere un ocillazione della luminositá.

Ciao Uwe

Si, i disturbi da commutazione ci sono, ma possono essere smorzati notevolmente da una rete RC o Snubber, in parallelo al Triac.

UWe Il secondo esempio è interessante, ma non vedo come si possa fare a meno di sincronizzarsi all'alternata.

Il BaBBuino deve vedere quando inizia e quando finisce, per sapere quante onde ha fatto passare, a meno che di non voler fare un timer ON/OFF che fa passare a babbo per un certo tempo tutto quello che passa, senza curarsi a che punto è l'onda, ma allora (se il taglio è fuori sincronismo) si torna al problema dei transienti di commutazione.

BaBBuino:
Il BaBBuino deve vedere quando inizia e quando finisce, per sapere quante onde ha fatto passare, a meno che di non voler fare un timer ON/OFF che fa passare a babbo per un certo tempo tutto quello che passa, senza curarsi a che punto è l'onda, ma allora (se il taglio è fuori sincronismo) si torna al problema dei transienti di commutazione.

Se fai la premessa che vuoi far passare sempre un onda intera (un semionda positiva seguita da una negativa o viceversa) percui fai passare da tensione al utenza a blocchi di 20msec. Per regolare la potenza varii il numero di onde intere applicate al carico e il numero di pause.

Per avere il triac o SSR in conduzione esattamente per 20 msec basta usare un optocoler o SSR zero cross e dare un segnale di pilotaggio lungo 20 msec cosí garantisci che indipendentemente dal momento di pilotaggio del SSR rispetto alla fase della alternata avrai sempre 2 semionde consecutive.
Poi per regolare varii il rapporto on off. (1 onda on e 10 off, 1 on e 8 off, ... 5 on e 5 off ... )

Ciao Uwe

Si, scusa. Mi ero dimenticato degli OptoDiac con Zero Crossing.

GRAZIE a tutti che avete risposto!!!
io opterei per il metodo con lo zero crossing, TRIAK e fotoaccoppiatore!
Ho già utilizzato fotoaccoppiatori e triak per comandare grossi carichi ma mai abbinato all'arduino... potreste postare la parte circuitale???

Ho già utilizzato fotoaccoppiatori e triak per comandare grossi carichi ma mai abbinato all'arduino... potreste postare la parte circuitale???

Se fai questa domanda dimostri di non aver le idee chiare di elettronica e Ti rispondo: usa un SSR.
Ciao Uwe

Se fai questa domanda dimostri di non aver le idee chiare di elettronica e Ti rispondo: usa un SSR.
Ciao Uwe

Si, in effetti, trafficare con 220 se non si hanno le idee chiare è rischio.

Io le idee chiare c'è li ho, ma anche io non ho mai implentato con arduino la tecnica della parzializzazione di fase.
Come si è detto è necessario comunicare al micro il momento in cui l'onda passa per lo zero, per fare questo è necessario un circuito zero cross detect. In pratica il circuito deve fornire in uscita un segnale HIGH, quando la tensione della sinusoide scende sotto un livello da considerare zero volts.

Così a naso si può usare un comparatore (operazionale) con tensione di soglia di 0.7 volts ottenuta grazie ad un diodo. mmmm..... facccio notare che ci sono semionde negative e positive, il circuito scatta solo quando la tensione è di 0.7 Volts positivi quindi durante la semionda negativa lo scatto avviene dopo aver passato il valore di 0Volts risalendo fino a 0.7Volts.

Ora al comparatore dobbiamo fornire la tensione proveniente da un trasformatore usato per alimentare il circuito, nel caso di alimentatori switching of line la tensione deve essere presa dalla rete 220 portantola ad un valore di circa 10-12 volts tramire rete passiva CR-R o tramite minitrasformatore da 1-2 mA. Sarebbe preferibile prenderla dalla 220 direttamente e usare la rete passiva CR-R specie se c'è unp switching che è in grado di fare lavorare l'intero circuito anche se la tensione di rete raggiunge i 280 VAC, se si verifica ciò il minitrasformatore va in fumo, mentre la rete passiva no. In più si può fare ricorso ai varisistor a bassa tensione per rendere immune il circuito dagli sbalzi di tensione.

A me serve fare questo per pilatare un Motore AC a spazzole con eccitazione serie da circa 600W.

Ciao.

Su questo argomento ho le idee un po confuse ed è per questo che chiedo informazioni 8)
Smannico parecchio di elettronica...vi assicuro che non è la prima volta che "traffico" con la 220 :wink:

Se torni tra mezzora ti posto tutto.

Questo è lo schema dello zero Crossing, che collegherai al piedino 2 di Arduino.

Il piedino 2 è obbligatorio perchè quello è disponibile per l'Interrupt esterno.

Il fotoaccoppiatore è un 4N25 o un comune CNY17.
Il diodo è un 1N4007
Il transistor è un generico BC237 o BC 337, o 2N2222 o quello che vuoi.

Le resistenze sono più critiche. Se colleghi il fotoaccoppiatore alla 220V diretta, metti una resistenza da 33K verso il piedino 2, e un'altra uguale (33K) sull'altro filo della 220V, che va al piedino 1, in modo che non hai la 220 diretta sui piedini dell'OC.

Io ho utilizzato l'alternatat che esce da un trasfomatorino da 9V e ho messo UNA sola resistenza da 10K tra il trasformatore e il piedino 1.

La resistenza sul collettore del transistor è sempre da 10.000 Ohm.

Questa è la parte di comando a 220V

R1= 330 Ohm
R2= 330 Ohm
R3= 470 Ohm
R4= 39 Ohm - mezzo Watt
R5= non utilizzata
C1= 47nF / 630Vdc
C1= 10nF / 630Vdc
Oc1= uno qualsiasi con fotoDiac MA NON con zero crossing.

Io ho utilizzato il Kit di Nuova elettronica LX1584, che ha già tutto compreso.

Ecco lo sketch.

Ho commentato il codice in modo che sia il più chiaro possibile:

#include <TimerOne.h>           // Da scaricare da:  http://www.arduino.cc/playground/Code/Timer1

volatile int i=0;               // Variable da usare come contatore
volatile boolean zero_cross=0;  // Valore Boolean che ci dice se c'è stato il crossed zero
int AC_pin = 10;                // Output verso l'Opto Triac
int Dimmer_pin = 0;             // Potenziometro per variare la luce 
int LED = 3;                    // LED di Test
int dim = 0;                    // Dimming level (0-100)  0 = on, 100 = 0ff
int freqStep = 85;    // setta il ritardo tra lo zero crossing e la partenza dell'impulsino
                     
void setup() {                                     
 pinMode(AC_pin, OUTPUT);                          // Setta il pin per il TRIAC come output
 pinMode(LED, OUTPUT);                             // Set il pin per il LED come output
 attachInterrupt(0, zero_cross_detect, FALLING);   // Attacca un Interupt al Pin 2 (interupt 0) per lo Zero Cross Detection
 Timer1.initialize(freqStep);                      // Initializza TimerOne 
 Timer1.attachInterrupt(dim_check, freqStep);      // Usa la TimerOne Library per attaccare l'interrupt
                                                                                              
}                                                  

void zero_cross_detect() {        // funzione che parte allo zero crossing                          
   zero_cross = 1;               // setta il boolean a true per dirci che la tensione a 220V è passata per lo zero
}                  
            
void dim_check() {                   // Funzione che accende il triac
 if(zero_cross == 1) {              // Parte se zero cross = 1
   if(i>=dim) {                     
     digitalWrite(AC_pin, HIGH);    // Accende il Triac
     delayMicroseconds(10);          // lo tiene acceso per un tempo sfficiente
     digitalWrite(AC_pin, LOW);     // Spegne il Triac, che in realtà rimane acceso fino al successivo passaggioper lo zero
     i = 0;                         // azzero il contatore
     zero_cross = 0;                // azzero il Boolean zero_cross per il prossimo ciclo    
   } else {
     i++;                           
   }                                // Fine dim check
 }                                  // Fine zero_cross check
}                                    // Fine dim_check function

void loop() {                        
dim = analogRead(Dimmer_pin) / 8;  // Legge il valore del potenziometro
 analogWrite(LED, dim);             // scrive il valore all'uscita per il lED
}

BaBBuino so che hai buone intenzioni ma fai casino che non aiuti.

Per primo nel immagine non c'é transistore percui non va consigliato un transistor.
Devi dire che le resistenze R1a e R1b in Entrata del fotoaccoppiatore riscaldano tanto e percui servono con una potenza da 1W ciascuna.
Il valore 2 volte 33kOhm é troppo grande. Sono malappena 5mA a tensione massima di 325 V picco. Non polarizza il transistore di uscita. Cosí non rilevi il pasaggio zero ma da qualche parte in mezzo alla semionda.

Con un trasformatore da 9V ( 12,6 oicco) e 10kOhm hai una corrente di 1,2mA. L' optocopler non funzionerá.

Questa è la parte di comando a 220V

Nello schema non si capisce dove deve essere collegato i 230V e dove il carico.

Inoltre non perdi una parola sulla pericolositá: Tanti modello di Triac hanno la lamella di rafreddamento collegato con uno dei piedini e percui ci sono sempre 230V!!!

Ciao Uwe

I dettagli che citi sono giusti in parte, perchè l'oggetto che ho postato è nelle mie mani e perfettamente funzionante, questo al di là dei calcoli.

Vediamo punto per punto:

  1. Hai ragione! Intendevo il trensistor DENTRO l'optoaccopiatore, e mi sono confuso con un altro schema che prevedeva un transistor e un ponte di diodi per triggerare i 100Hz, non i 50 come lo schema postato! (poi ci arrivo).

  2. Le resistenze sono da 1/2 W ma ho dato per scontato che uno che ha già lavorato con elettronica di potenza e la 220V lo sapesse, così come è impossibile che, se ha lavorato con triac in TO220 o TO3 con la 220V, non sapesse che l'anodo 2 (A2) del triac, quindi l'aletta o corpo metallico del componente, è sotto tensione 220V.

  3. Le due resistenze da 33K funzionano perchè... funziona!

  4. L'optoaccoppiatore con trasformatore 9V (ho ricontrollato con Tester) in realtà è a 15V, e con 10K sta funzionando. Cmq si, per 9V andrebbe riarrangiata la R ad un valore più basso.

  5. Nello schema non si capisce dove è il carico, ma chi ha lavorato con TRIAC sa benissimo dove mettere la 220 e dove sta il carico, visto che il TRIAC interrompe alla stregua di un interruttore, un filo.

  6. sei troppo pignolo! :smiley:

C'è poi un errore nello sketch, per quanto riguarda l'Interrupt di Zero crossing.

Nello sketch è erroneamente indicato l'opzione FALLING, che era studiata per il primo circuitino (più complicato circuitalmente) che attraverso un ponte a doppia semionda, mi forniva lo zero-crossing a 100Hz.

Adesso, con il nuovo circuito di rilevamento, attraverso fotoaccoppiatore a una semionda, bisogna modificare il parametro da FALLING (ovvero dal solo fronte di discesa) a CHANGE, in modo che la funzione si attivi ad ogni cambiamento di stato, diversamente si dimmera solo una semionda, mentre l'altra va persa.

BaBBuino:
6) sei troppo pignolo! :smiley:

Non credo.
Presumi che chi chiede abbia le idee chiare con i Triac e con i 230V , ma é proprio questo che dubito visto che é stato fatto la domanda.
Anche se l' autore della domanda avesse le conoscenze che presumi c'é altra gente che non lo é e che si sentono invitati dalla semplicitá delle risposte di costruirsi anche loro il circuito.

Ciao Uwe

UWE:
L'alternativa è questa:...

non avevo considerato questa possibilità, che nel mio caso certamente va bene, poichè dovrei controllare un elemento riscaldante che ha una certa "inerzia" ma non tale da usare un comune termostato on/off.

qualcuno ha qualche link da indicarmi (con o senza Arduino) con qualche esempio di un sistema di regolazione simile?
non voglio qui allungare il post nè aprire altre discussioni.
grazie comunque dell'idea.

BaBBuino mi sei stato davvero d'aiuto!!! proverò e vi farò sapere al piu presto...
comunque so benissimo come funziona un triak, so che l'aletta di raffreddamento non è quasi mai isolata e tutto ciò che di pericoloso c'è nell'utilizzare la 220!!!