Dimmer per lampada con PIC
Moderatori:
carloc,
g.schgor,
BrunoValente,
IsidoroKZ
0
voti
magistrale.
Però adesso, se non mi mandi al diavolo
, mi mandi una schermata dell'oscilloscopio così:
Canale 1: gate del moc
Canale 2: sinusoide lampada
il tutto al nuovo ritardo massimo.
Così ti calcolo la tabella e ti scrivo magari anche uno snippet di codice.
Ciao,
Pietro.
Però adesso, se non mi mandi al diavolo
Canale 1: gate del moc
Canale 2: sinusoide lampada
il tutto al nuovo ritardo massimo.
Così ti calcolo la tabella e ti scrivo magari anche uno snippet di codice.
Ciao,
Pietro.
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
1
voti
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Però adesso, se non mi mandi al diavolo, mi mandi una schermata dell'oscilloscopio così:
Canale 1: gate del moc
Canale 2: sinusoide lampada
il tutto al nuovo ritardo massimo.
Non ti preoccupare, è il minimo che posso fare visto l'aiuto che mi stai dando.
Comunque ecco la schermata:
Grazie
Marcello
0
voti
ricello9, puoi mostrare il setup del timer2
Per il setup del timer2 uso questi valori:
- Codice: Seleziona tutto
PR2=25; //all'incirca equivale a 100 uS
IPR1bits.TMR2IP=0; // Abilito le interruzioni del Timer2 come bassa priorità
T2CONbits.T2CKPS0=1; // Prescaler 16
T2CONbits.T2CKPS1=1;
T2CONbits.TMR2ON =1; //Abito il timer 2
PIE1bits.TMR2IE=1; //abilito l'interrupt sul timer2
? Altra domanda (mi sono perso...): stai usando quale PIC? Con quale valore di FOSC?
Sto usando un PIC18F26K22 con l'oscillatore interno a 16MHz.
Grazie
Marcello
0
voti
credo tu mi abbia mandato il ritardo minimo, che continua ad essere sui 2ms.
Avrei bisogno del ritardo massimo, a lampada praticamente spenta.
Grazie
Ciao
P
Avrei bisogno del ritardo massimo, a lampada praticamente spenta.
Grazie
Ciao
P
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
0
voti
credo tu mi abbia mandato il ritardo minimo, che continua ad essere sui 2ms.
Avrei bisogno del ritardo massimo, a lampada praticamente spenta.
Hai ragione, questa è la misura con il ritardo massimo impostato a 7,5mS.
Ho dovuto rifare la scheda perché questa mattina ho sbagliato un collegamento è ho portato il 220 V al micro, è finito tutto nel cestino.
Dalla precedente scheda a quest'ultima ho perso un millisecondo di ritardo massimo impostabile.
Infatti da 7,6mS sono dovuto passare a 7,5mS per far spegnere completamente la lampada.
Grazie
Marcello
0
voti
0.1ms
Adesso sono di corsa, stasera mi metto a fare qualche conto.
ciao,
Pietro.
Adesso sono di corsa, stasera mi metto a fare qualche conto.
ciao,
Pietro.
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
2
voti
Allora allora...
Il ritardo minimo che riusciamo a dare è 1.6ms, che corrisponde (come dicevo) ad una luminosità massima del 95.6%. Non male e probabilmente nemmeno visibile ad occhio nudo.
Il ritardo massimo, dalle foto che ho visto, è praticamente 9.8ms.
Su questo punto devo dire che siamo arrivati a limare al massimo, perché se l'impulso di eccitazione del TRIAC è 0.2ms non possiamo aspettarci davvero di più senza scavalcare lo zero crossing ed eccitare il TRIAC nella semionda successiva.
Mi è quindi chiaro che se imposti il contatore a 0 abbiamo un ritardo di 1.6ms, mentre se imposti il contatore a 7.5ms abbiamo un ritardo di 9.8ms.
Quindi il ritardo che imposti, programmando il contatore per 7.5ms vale 7.5ms+1.6ms=9.1ms
Qui non mi torna completamente, perché dato che il ritardo reale vale 9.8ms (misurato dalle tue foto), il tuo contatore risente di un errore pari a 700 microsecondi.
Non è poco.
Comunque sia sono imprecisioni che alla vista non si vedono, anche se io andrei a vedere come mai questo avviene.
Anyway, se voglio partire da una luminosità pari a quella che ottengo con un ritardo di 1.6ms e voglio arrivare fino a 9.8ms devo riscalare la tabella, che quindi vale:
Devi implementare una variabile che valga 0 quando vuoi la luminosità minima e valga 255 quando vuoi la luminosità massima (per esempio due pulsanti, un trimmer su un canale dell'ADC e così via).
Quel valore lo dai alla tabella qui sopra e lei ti restituisce un ritardo tra 0 e 255.
0 significa che il tuo ritardo varrà 1.6ms, che è quello che avresti ottenuto mettendo a zero il tuo contatore,
255 significa che il tuo ritardo varrà 9.8ms, che è quello che avresti ottenuto mettendo a 7.5ms il tuo contatore.
La legge di compensazione è già implementata nella tabella, non devi fare nulla se non usarla.
Ciao,
Pietro.
Il ritardo minimo che riusciamo a dare è 1.6ms, che corrisponde (come dicevo) ad una luminosità massima del 95.6%. Non male e probabilmente nemmeno visibile ad occhio nudo.
Il ritardo massimo, dalle foto che ho visto, è praticamente 9.8ms.
Su questo punto devo dire che siamo arrivati a limare al massimo, perché se l'impulso di eccitazione del TRIAC è 0.2ms non possiamo aspettarci davvero di più senza scavalcare lo zero crossing ed eccitare il TRIAC nella semionda successiva.
Mi è quindi chiaro che se imposti il contatore a 0 abbiamo un ritardo di 1.6ms, mentre se imposti il contatore a 7.5ms abbiamo un ritardo di 9.8ms.
Quindi il ritardo che imposti, programmando il contatore per 7.5ms vale 7.5ms+1.6ms=9.1ms
Qui non mi torna completamente, perché dato che il ritardo reale vale 9.8ms (misurato dalle tue foto), il tuo contatore risente di un errore pari a 700 microsecondi.
Non è poco.
Comunque sia sono imprecisioni che alla vista non si vedono, anche se io andrei a vedere come mai questo avviene.
Anyway, se voglio partire da una luminosità pari a quella che ottengo con un ritardo di 1.6ms e voglio arrivare fino a 9.8ms devo riscalare la tabella, che quindi vale:
- Codice: Seleziona tutto
const unsigned char DelayCorrection[]=255,199,191,185,181,177,174,171,169,166,164,162,161,159,157,156,154,153,151,150,149,148,146,145,144,143,142,141,140,139,138,137,136,135,135,134,133,132,131,130,130,129,128,127,126,126,125,124,124,123,122,121,121,120,119,119,118,117,117,116,116,115,114,114,113,112,112,111,111,110,109,109,108,108,107,107,106,105,105,104,104,103,103,102,102,101,101,100,100,99,98,98,97,97,96,96,95,95,94,94,93,93,92,92,91,91,90,90,89,89,88,88,87,87,86,86,85,85,84,84,83,83,82,82,81,81,81,80,80,79,79,78,78,77,77,76,76,75,75,74,74,73,73,72,72,71,71,70,70,70,69,69,68,68,67,67,66,66,65,65,64,64,63,63,62,62,61,61,60,60,59,59,58,58,57,57,56,56,55,55,54,54,53,53,52,52,51,51,50,50,49,48,48,47,47,46,46,45,45,44,44,43,42,42,41,41,40,40,39,38,38,37,37,36,35,35,34,33,33,32,31,31,30,29,29,28,27,27,26,25,24,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,2,1,0};
Devi implementare una variabile che valga 0 quando vuoi la luminosità minima e valga 255 quando vuoi la luminosità massima (per esempio due pulsanti, un trimmer su un canale dell'ADC e così via).
Quel valore lo dai alla tabella qui sopra e lei ti restituisce un ritardo tra 0 e 255.
0 significa che il tuo ritardo varrà 1.6ms, che è quello che avresti ottenuto mettendo a zero il tuo contatore,
255 significa che il tuo ritardo varrà 9.8ms, che è quello che avresti ottenuto mettendo a 7.5ms il tuo contatore.
La legge di compensazione è già implementata nella tabella, non devi fare nulla se non usarla.
Ciao,
Pietro.
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
0
voti
Quindi il ritardo che imposti, programmando il contatore per 7.5ms vale 7.5ms+1.6ms=9.1ms
Qui non mi torna completamente, perché dato che il ritardo reale vale 9.8ms (misurato dalle tue foto), il tuo contatore risente di un errore pari a 700 microsecondi.
Non è poco.
Ho verificato le impostazione del timer2 e ho un impulso ogni 104uS e non 100uS, questo può portare ad un errore di 75*4= 300uS. Il resto dell'errore non saprei da dove salta fuori.
Devi implementare una variabile che valga 0 quando vuoi la luminosità minima e valga 255 quando vuoi la luminosità massima (per esempio due pulsanti, un trimmer su un canale dell'ADC e così via).
Quel valore lo dai alla tabella qui sopra e lei ti restituisce un ritardo tra 0 e 255.
0 significa che il tuo ritardo varrà 1.6ms, che è quello che avresti ottenuto mettendo a zero il tuo contatore,
255 significa che il tuo ritardo varrà 9.8ms, che è quello che avresti ottenuto mettendo a 7.5ms il tuo contatore.
Dimmi se sto sbagliando il ragionamento:
Prima avevo una variabile che andava da un valore di 0 a un massimo di 75, questa variabile la gestivo con l'overflow del timer2 che corrispondeva a 100us.
Di conseguenza al massimo valore della variabile (75) corrispondeva un ritardo di 7,5mS (75x100uS).
Adesso devo ampliare il range del mio contatore per andare da un minimo di 0 ad un massimo di 255, quindi devo diminurie il valore del timer2 in modo che ha 255 abbia un ritardo di 7,5mS. In pratica devo impostare l'overflow del timer2 a circa 29uS.
Giusto?
- Codice: Seleziona tutto
if(!timer_delay) //RITARDO PER L'ACCENSIONE DEL TRIAC
{
trigger=0;
timer_delay=DelayCorrection[incremento];
GATE=1;
}
if(!timer_delay_2) //TEMPO PER PASSARE DAL MINIMO AL MASSIMO
{
if(inversione==0)
incremento=incremento--;
if(inversione==1)
incremento=incremento++;
timer_delay_2=lettura_canale_AN ; // timer_delay_2=1000 equivale a 30 secondi
}
In pratica il software va a leggere il valore dal canale analogico e regola la velocità della lampada per passare dal minimo al massimo della luce.
Infatti maggiore sarà il valore del timer_delay_2 più sarà lento l'incremento o il decremento della variabile "incremento" (scusa il gioco di parole) e viceversa; che andrà ad influire sul ritardo dell'accensione del Gate del triac.
Grazie
Marcello
Chi c’è in linea
Visitano il forum: Nessuno e 56 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

pigreco]=π