Pages: [1] 2   Go Down
Author Topic: Dimmer 220v  (Read 3903 times)
0 Members and 1 Guest are viewing this topic.
Morro D'Alba, AN, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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-grin smiley-grin smiley-grin
grazie a tutti per l'aiuto
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21270
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

« Last Edit: December 01, 2011, 02:42:48 pm by BaBBuino » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21270
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: December 01, 2011, 05:47:33 pm by uwefed » Logged

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21270
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Morro D'Alba, AN, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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???
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21270
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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
Logged

0
Offline Offline
Faraday Member
**
Karma: 30
Posts: 2905
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Morro D'Alba, AN, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se torni tra mezzora ti posto tutto.
Logged

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Edison Member
*
Karma: 40
Posts: 1960
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ecco lo sketch.

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


Code:
#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
}

Logged

Pages: [1] 2   Go Up
Jump to: