Se sei già registrato           oppure    

Orario: 07/05/2024 12:21:23  

 

Energia Alternativa ed Energia Fai Da Te > Applicazioni E Realizzazioni Pratiche

VISUALIZZA L'ALBUM

Pagine: (167)  < ...  80   81   82   83   84   85   86   87   88   89   [90]   91   92   93   94   95   96   97   98   99   100  ...>    (Ultimo Msg)


Homemade Inverter "modulo DC/AC"
FinePagina

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 16/03/2015 15:43:51

Ok BellaEli si si vai tranquillo io anche continuo a sperimentare..

Grazie del consiglio, ma fa conto che sono quasi 8 ore al giorno a contatto con tensioni monofase e trifase (sarebbe il colmo per un elettricta morire in casaFaccine/punk.gif) comunque sempre massima prudenza...



---------------
Il niente è impossibile finchè non ci provi!!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 16/03/2015 16:03:31

int t=1; //tempo di campionamento


BellaEli secondo me è anche questo il problema, come faccio a dirgli al programma che la variabile t è un secondo? Devo scrivere 1 o 1000?



---------------
Il niente è impossibile finchè non ci provi!!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 17/03/2015 07:05:33

CITAZIONE (ElettroshockNow, 16/03/2015 16:03:31 ) Discussione.php?55031252&88#MSG1345



Quindi 15665/50 = 313 ....

Un'onda completa a 50Hz sarà composta da 313 periodi della frequenza pwm a 15665Hz ....



Elettro scusami ancora, ma mi sfugge quest'altro particolare. Tu con 313 periodi intendi dire una tabella che vada da 0 a 200 suddivisa in 313 punti?



---------------
Il niente è impossibile finchè non ci provi!!!

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 17/03/2015 08:18:09

No intendo da 0 a 313 ....

In pratica ad ogni periodo della 15Khz si cambia il duty secondo la tabella .
E se la tabella varia in sinusoidale in 313 passi avrai in uscita 50Hz sinusoidali (in continua)

Così facendo possiamo usare il solo Timer1 , ma ci obbliga una frequenza fissa (ma a noi ).

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 17/03/2015 09:12:43

Elettro so che con tutte queste domande inizio a scocciare, ma sono un po tonto...

Creo una tabella che invece di arrivare a 200 deve arrivare a 313(qui la mia prima confusione, molti post indietro mi ricordavo che il massimo che si puo arrivare è 256, ma di rimanere a 200 per avere la possibilità di variare in base al feedback senza distorcere l'onda).. Ok sempre se ho capito bene creando la tabella da 313 passi si ha la possibilità di usare un solo timer1, quindi non potrò piu usare timer0 per gl'interrupt(dovro trovare un'altro sistema per ricreare gl'interrupt?).

Se invece lascio cosi comè timer0 per gl'interrupt e timer1 per il pwm quanti passi massimi nella tabella posso raggiungere?



---------------
Il niente è impossibile finchè non ci provi!!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 17/03/2015 10:25:34

Stavo facendo un po di calcoli,vedendo il tuo video tu ai un campionamento di 250microse, quidi se il calcolo è giusto 40ms/0,250 = 160 periodi circa nella semionda positiva e altri 160 in quella negativa è giusto?



---------------
Il niente è impossibile finchè non ci provi!!!

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 17/03/2015 11:30:34

CITAZIONE (inverter90, 17/03/2015 10:25:34 ) Discussione.php?55031252&90#MSG1372

Elettro so che con tutte queste domande inizio a scocciare, ma sono un po tonto...

Creo una tabella che invece di arrivare a 200 deve arrivare a 313(qui la mia prima confusione, molti post indietro mi ricordavo che il massimo che si puo arrivare è 256, ma di rimanere a 200 per avere la possibilità di variare in base al feedback senza distorcere l'onda).. Ok sempre se ho capito bene creando la tabella da 313 passi si ha la possibilità di usare un solo timer1, quindi non potrò piu usare timer0 per gl'interrupt(dovro trovare un'altro sistema per ricreare gl'interrupt?).

Se invece lascio cosi comè timer0 per gl'interrupt e timer1 per il pwm quanti passi massimi nella tabella posso raggiungere?



La tabella è un Array o vettore (Sul sito di Arduino ci sono diversi esempi).

Esempio:

Di seguito il vettore sine256 avente 10 elementi (numero step)

PROGMEM prog_uchar sine256[] =
{
1,2,3,4,5,6,7,8,9,10)


Ma possono essere 100 ... 200 ... 313 .....ecc .. ecc ...ecc

e contenere quello che a te serve (valori duty)

PROGMEM prog_uchar sine256[] =
{
0,100,200,250,200,100,7,8,200,150)



Il numero di elementi (200 o 313 o quello che ti pare) determina la campionatura dell'onda ,cioè di quante fette vuoi tagliare la tua onda.
Di conseguenza devi cadenzare gli step per ottenere una frequenza.

Se la cadenzi a 100microS e la tabella di un'onda intera è composta da 200 elementi otterai 200*0.0001 = 0.02 Sec ==== 1/0.02= 50Hz

In questo caso dovrai necessariamente usare un secondo timer per creare la cadenza di 100microS


La mia proposta invece è :
-visto che abbiamo la possibilità di avere un interrupt di OVF dal timer che già usiamo e vale circa 1/15655 = 64microS
allora possiamo usarlo per cadenzare la variazione di duty ...
Ma se lascio la tabella composta da 200 step (elementi) otterrei in uscita una frequenza di : 1/(0.000064*200)= 78Hz

Allora la soluzione sarebbe una tabella da 313Step e quindi:
1/(0.000064*313)= 50Hz


Chiarito il discorso numero elementi ...andiamo a cosa sono gli elementi..

All'interno della tabella devi inserire l'andamento dell'onda
esempio:
int onda[] = {0,0,200,200};

Ho creato un vettore composto da 4 elementi che mi consentiranno di avere 4 step e un andamento a forma quadra

int onda[] = {0,200,0,200};
Anch'esso creerà una forma quadra ...

I valori al suo interno devono essere compatibili con il tipo di gestiono pwm .


Se ad esempio usi il classico Arduino l'istruzione:

analogWrite(pin, valore) dovrai usare un valore compreso da 0 a 255 (vedi LINK )

Se invece usi un Fast Pwm 9bit potrai usare valori compresi da 0 a 9bit .... quindi da 0 a 511 ...
Se invece usi un Pwm a 10bit potrai usare valori da 0 a 10bit ...quindi da 0 a 1023 ..

la mia potrebbe essere cosi'
int onda[] = {0,500,0,500}; ... perchè uso un pwm a 9 bit

Spero di averti chiarito ...

Sperimenta codici più semplici per prendere dimestichezza con la programmazione.
Collega un led e fallo lampeggiare giocando con i timer e le tabelle ...

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 17/03/2015 11:31:37

CITAZIONE (inverter90, 17/03/2015 11:30:34 ) Discussione.php?55031252&90#MSG1373

Stavo facendo un po di calcoli,vedendo il tuo video tu ai un campionamento di 250microse, quidi se il calcolo è giusto 40ms/0,250 = 160 periodi circa nella semionda positiva e altri 160 in quella negativa è giusto?


20ms/0,250 = 80 periodi campionamenti ,di cui 40 nella semionda positiva e 40 nella negativa

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 17/03/2015 11:50:44

Grazie grazie con queste risposte mi ai pienamente chiarito il concetto della campionatura......



---------------
Il niente è impossibile finchè non ci provi!!!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 18/03/2015 14:31:58

Ciao a tutti, avrei qualche domanda per Elettro:

nelle ultime 2/3 pagine hai scritto dei post che all'inizio mi sono parsi poco comprensibili, in seguito hai chiarito alcuni miei dubbi aggiungendo ulteriori dettagli.

Per esempio in prima battuta non avevo afferrato il concetto dei 313 elementi, chiarito poi nei post successivi.

Tuttavia c'è un post che mi è rimasto oscuro, lo riporto:


CITAZIONE

...
Se si analizzano i modi di funzionamento dei timer (tabelle postate da Inverter90) possiamo vedere che il timer si resetta ad un valore preimpostato o scelto dall'utente.

Nel caso "pwm, phase correct 9bit " il valore e' 511 (0x1FF) , ma in altri è OCR ....

Significa che la frequenza in uscita (o il timer) avrà una frequenza pari a :16000000/prescaler/OCR (il diviso 2 non va' messo se il timet si resetta solo sul fronte di salita) .

A questo punto si sceglie il prescalet giusto per avvicinarsi ai 50Hz e si fa' una regolazione fine con l'OCR ....

La risposta alla tua domanda è OCR , oppure fat ripetere uno step pwm o saltare uno step pwm, ottenendo appunto una variazione di fase di 1/200esimo di periodo.

Differenza tra i due metodi di rifasamento:
-nel primo caso non introduco distorsione ,ma vario la frequenza
-nel secondo introduco distorsione , ma non vario la frequenza .

Quale sia il migliore ?
Bo!!!!
...


Continuo a non capire a quale funzionamento si riferiscono i due metodi e, in ogni caso, perchè mai uno dovrebbe utlizzare il secondo visto che non varia la frequenza ed introduce distorsione !!!

Inoltre, ipotizzando di utilizzare un vettore di 313 elementi, non mi sembra che hai menzionato un metodo per poter aumentare/diminuire la frequenza dei 50 Hz di qualche decimo di Hz...



P.S. inverter90, nell'ultimo post, l'"h" ci voleva !!!


A presto, Eligio.



Modificato da BellaEli - 18/03/2015, 14:35:53


---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 18/03/2015 15:00:21

I 50Hz li possiamo ottenere :
-Utilizzando due timer e un vettore a scelta (100 200 300) , sarà il secondo timer che cadenza il cambio di duty
-Utilizzando un timer , ma con l'obbligo di usare una tabella in funzione della frequenza pwm (nel caso dei 15Khz 313 elementi)


In entrambi i casi otteniamo in uscita 50Hz , ma nel secondo sfruttiamo al massimo la modulazione perché ad ogni periodo della 15Khz modifichiamo il duty (piccolo punto a favore)

Se dobbiamo a questo punto sincronozzare la nostra onda con quella della rete abbiamo due strade:
-si modifica leggermente la fequenza e su attende la fase
-si fanno saltare qualche elemento al vettore e si aspetta la fase

La variazione di frequenza senza inserire distrorsione è possibile solo nel primo caso , modificando OCR.

Invece saltare un elemento del vettore è possibile sia nel caso di due timer che di uno.

Personalmente preferisco il più completo e versatile , quindi il due timer

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 18/03/2015 17:16:06

E si BellaEli quando è da mettere l'h non la metto ..
Comunque Elettro facendo la prova con i led mi sto rendendo conto che non funziona niente ..
Questo è il codice maledetto

#include "avr/pgmspace.h"
#include "avr/io.h"
#include
PROGMEM prog_uchar sine256[] =
{
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,
72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,
132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,
186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,
240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,
294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,
348,351,354,357,360,363,366,369,372,375,378,381,384,387,390,393,396,399,
402,405,408,411,414,417,420,423,426,429,432,435,438,441,444,447,450,453,456,
459,462,465,465,462,459,456,453,450,447,444,441,438,435,432,429,426,423,420,
417,414,411,408,405,402,399,396,393,390,387,384,381,378,375,372,369,366,363,
360,357,354,351,348,345,342,339,336,333,330,327,324,321,318,315,312,309,306,
303,300,297,294,291,288,285,282,279,276,273,270,267,264,261,258,255,252,249,
246,243,240,237,234,231,228,225,222,219,216,213,210,207,204,201,198,195,192,
189,186,183,180,177,174,171,168,165,162,159,156,153,150,147,144,141,138,135,
132,129,126,123,120,117,114,111,108,105,102,99,96,93,90,87,84,81,78,75,72,
69,66,63,60,57,54,51,48,45,42,39,36,33,30,27,24,21,18,15,12,9,6,3,0
};



void setup() {


pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
TCCR1A = (1 << COM1A1) | (1 << COM1B1)| (1 << COM1B0) | (1 << WGM11);
TCCR1B = (1 << CS10);

TCCR2A = 0x00;
TCCR2B = (1 << CS21) | (1 << WGM21);
OCR2A = 64; //conta 32 microsecondi
TIMSK2 = (1 << OCIE2A);
sei();
}

void loop() {


}

ISR (TIMER2_COMPA_vect){


OCR1A = pgm_read_byte_near(sine256);
delay(10);
OCR1B = pgm_read_byte_near(sine256);
delay(10);




}

Praticamente il led rimane fisso senza eseguire i valori duty della tabella.

Altra cosa i led ne funziona solo uno cioè pin 10. Il collegamento è pin 10/gnd e fin qui ci siamo, la cosa strana è che pin9/gnd non va,ma se metto pin9/5v funziona quindi al contrario.
Ricapitolando controllo pwm assente, pin 9 al posto di avere +5v ho gnd e l'istruzione delay non funziona.
Se Hai ancora pazienza di spiegarmi l'errore ti sarei ancora una volta grato...



---------------
Il niente è impossibile finchè non ci provi!!!

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 18/03/2015 18:46:36


CITAZIONE

Se Hai ancora pazienza di spiegarmi l'errore ti sarei ancora una volta grato...


No, no, nessun errore, l'"h" ci voleva...



Il problema è che ci sono troppi errori nel tuo codice, va rivisto tutto non solo un'istruzione...

Sto leggendo la guida indicata da Elettro, sono arrivato a pagina 30, fammi finire in modo che posso districarmi con i Timer e tutto il codice lo rivediamo insieme...



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 18/03/2015 19:07:40

Ok BellaEli io sono arrivato a pag.62, ma dai rusultati ottenuti misa che non ciò capito niente.. Toccherà ripartire da pag.1..
Si c'e poco da fare ti aspetto con grande ansia a presto allora



---------------
Il niente è impossibile finchè non ci provi!!!

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 20/03/2015 17:34:04

Una domanda per Elettro o BellaEli. Ho bisogno di togliermi questo dubbio.è normale avere sul pin 9 il positivo e sul pin 10 il negativo?Vuol dire che il timer sta funzionando bene?



---------------
Il niente è impossibile finchè non ci provi!!!

 
 InizioPagina
 

Pagine: (167)  < ...  80   81   82   83   84   85   86   87   88   89   [90]   91   92   93   94   95   96   97   98   99   100  ...>    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum