Applicazioni E Realizzazioni Pratiche
Homemade Inverter "modulo DC/AC"

VISUALIZZA L'ALBUM

Pag: (167)  < ...  115   116   117   [118]   119   120   121  ...>    (Ultimo Msg)


FinePagina

BellaEli

Avatar
GigaWatt


MODERATORE
Msg:3286

Stato:



Inviato il: 21/04/2015 14:48:28


CITAZIONE

Ci siamo, ci siamo...se mi abbassi il valore a 20 elementi ottengo un errore bassissimissimo!!!


Ho usato 20 elementi solo per pigrizia !!!

Comunque per soli 54 byte l'errore è troppo grande !!!


Per farti contento, ho provato a rendere dinamiche le due variabili SOGLIA e PICCO_MASSIMO con le seguenti formule:

ICR1 = (320000 / CAMPIONAMENTI_SINUSOIDE) - 1

PICCO_MASSIMO = int (float (ICR1) * 70,0 / 100,0)

Totalmente incomprensibile a chiunque non abbia letto il topic ma funzionano.

Solo che, non bisogna dimenticare che più si diminuiscono i campionamenti più si abbassa la frequenza del PWM e più si aumenta la risoluzione del PWM stesso e viceversa.


Spiegazione:

Tempo_Campionamento (Tc) = Periodo Sinusoide 50 Hz / Numero Campionamenti = 0,02 / 320

Tempo_Ciclo_Clock (Ck) = 1 / Frequenza_Clock = 1 / 16.000.000

ICRI = (Tc / Ck) - 1 = (0,02 / (1 / 16.000.000)) - 1 = 0,02 * 16.000.000 / 320 - 1 = 320.000 / 320 - 1 = 999

Il picco massimo, invece, al momento è settato semplicemente al 70% del valore massimo raggiungibile dal PWM (ovvero ICR1) per gestire il feedback. Su tale valore, eventualmente, ci torniamo successivamente...


Che dici le mettiamo nel Setup o le lasciamo come costanti #define ?



Modificato da BellaEli - 21/04/2015, 14:51:39


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






 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 21/04/2015 14:55:40

Dimmi la verità...vuoi vedere se sto attento...
Allora, con 20 elementi ho un errore massimo del 4 per mille (linearizzo rispetto il 20esimo elemento)...questo è il grafico...ho fatto anche due distribuzioni per andare oltre e compensare l'errore (27esimo). Provare per credere:

http://www.energialternativa.info/public/newforum/ForumEA/E/ErroreDistribuzioneSinusoide.jpg



Un errore espresso in millesimi è decisamente inferiore alla tolleranza del PWM del processore. Se non ti ho convinto...possiamo andare oltre...ma conviene concentrarsi sull'ottimizzare il resto dei vettori.

Cmq con un errore del 5 per mille possiamo spingerci fino al 29esimo elemento del vettore e risparmiamo altri 58 byte. Spiego meglio a tutti il concetto, nella speranza di essere capito: la pendenza è ottenuta dal 26esimo elemento che vale 330 diviso 25 (che non sono altro che le parti che crea)...quindi il rapporto incrementale vale 13,2 ...cioè sommando ad ogni elemento 13.2 otteniamo i primi 29 elementi della sinusoide, ovviamente viene fatta una operazione di moltiplicazione. Chiaramente ora sto procedendo con i valori, nel codice ci saranno gli indici e tutto sarà indipendente dalla lunghezza del vettore...perchè l'errore non cambia.

Questa è la tabella dei primi 29 elementi del vettore con i valori che si ottengono mediante la retta (o anche con una semplice moltiplicazione) con i relativi errori. Si può trovare , probabilmente una distribuzione ancora più ottimale...mi occorre tempo per implementare la serie...ma il concetto è questo:
se va bene una tolleranza del 5 per mille...si risparmiano altri 58 byte, quindi nel caso specifico invece di 160 elementi se ne utilizzano solo 51 !


Questa è la tabella dei 29 elementi:

http://www.energialternativa.info/public/newforum/ForumEA/E/ErroreDeiPrimi29Elementi.jpg


Accendiamo?
Se avete dubbi fate un fischio!




CITAZIONE
Che dici le mettiamo nel Setup o le lasciamo come costanti #define ?

ops...cosa sono questi trabocchetti? sei tu il capo progetto!



Modificato da NonSoloBolleDiAcqua - 21/04/2015, 15:39:42


---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 21/04/2015 15:59:38

Madò quanti messaggi!!
comunque dobbiamo decidere quanti elementi usare per il vettore,perche si sta creando molta confusione.. Bolle dice 51 elementi vanno bene, ma Kekko dice che per il nostro metodo (free) meglio abbondare sui 600 elementi e in conclusione secondo me dobbiamo trovare un punto d'incontro se no non ne veniamo piu a capo...



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


 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 21/04/2015 16:34:50


CITAZIONE

CITAZIONE
Ecco la domanda che ti ho fatto l'altro giorno BellaEli (se i timer con prescaler a 1 erano indipendenti) era per questo, dato che l'atmega 2560 a piu timer a 16bit, pensavo se fosse possibile ad esmpio utilizzare timer1 per i pwm (in modalità fast pwm 10bit) e timer3 (sempre a 16bit) con la tua impostazione modalità ICR per richiamare la ISR si avrebbero vantaggi?Magari fare un vettore da 640 elementi (come quello di kekko +/-) con valori da 0 a 1023 (con margine per il feedback).
Quindi sarebbe (20/640)=31,25us; e ICR3 conterebbe (31,25/0,0625)=500 impulsi;
Che ne pensate?


L'idea è corretta, c'è solo una considerazione da fare: se campioni ogni 31,25 uS, il Timer impiegherà 500 impulsi di clock per arrivare a 500, quindi qualsiasi risoluzione di PWM scegli non puoi superare questo valore. Non ha senso utilizzare un PWM a 10 Bit (1024 valori), con 31,25 uS il Timer del PWM non ci arriverebbe mai.


non mi torna una cosa BellaEli, forse mi sono spiegato male. La mia idea è quella di utilizzare 2 timer, quindi il primo timer(timer1) in modalità fast pwm 10 bit per i pwm e il secondo timer(timer3) in modalità fast pwm ICR per gl'interrupt. Se ICR sarà di 500 impulsi non influirà con timer1 perhe timer3 servirà solo per richiamare gl'interrupt, ma pensandoci bene forse non ha senso utilizzare timer3 in modalità fast pwm ICR,ma pensavo a una soluzione del genere

-TOP CODE-

-BOTTOM CODE-


Timer1 lo lasciamo cosi com'è e si occuperà solo dei pwm, ma per gl'interrupt si occuperà timer3 con la stessa identica impostazione di timer1.. Può funzionare?



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


 

BellaEli

Avatar
GigaWatt


MODERATORE
Msg:3286

Stato:



Inviato il: 21/04/2015 17:19:06


CITAZIONE

Accendiamo? Se avete dubbi fate un fischio!


Ma fammi capire, tu vorresti ridurre onda_rif a 51 elementi e modificare la funzione GiveMeValSine che dovrebbe effettuare una moltiplicazione per i primi 29 elementi, una lettura diretta dal vettore per i restanti 51 elementi, il tutto per risparmiare solo 58 byte ??? Ancora non mi convinci !!!

CITAZIONE
ops...cosa sono questi trabocchetti? sei tu il capo progetto!


Si ma tu sei il mio braccio destro, quindi devi suggerire !!!

CITAZIONE
Bolle dice 51 elementi vanno bene, ma Kekko dice che per il nostro metodo (free) meglio abbondare sui 600 elementi


Ehi aspetta un attimo, va bene arrotondare ma tu esageri !!!

Kekko dice 628, Bolle, al momento, dice 320 !

Il 51 è un valore che si ottiene "zippando" (lasciatemi passare il termine) il vettore per risparmiare memoria !!!

CITAZIONE
non mi torna una cosa BellaEli, forse mi sono spiegato male.


No, no, ti sei spiegato bene, devi solo allargare le vedute.

Un Timer che genera un PWM per conto proprio sarà comunque formato da un contatore che si incrementa al massimo ogni 62,5 nS (quarzo a 16 MHz) e una soglia che andrà da 0 a X.

Ora se tu metti una X che vale 1.000, il contatore impiegherà comunque: 1.000 * 62,5 nS = 62,5 uS per raggiungere il valore 1.000.

Quindi per avere una escursione di 10 bit, ovvero 1024 valori, non puoi avere un periodo per la PWM minore di: 1024 / 62,5 nS = 64 uS !

Ok ???



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






 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 21/04/2015 18:06:41


CITAZIONE

Ehi aspetta un attimo, va bene arrotondare ma tu esageri !!!

Kekko dice 628, Bolle, al momento, dice 320 !

Il 51 è un valore che si ottiene "zippando" (lasciatemi passare il termine) il vettore per risparmiare memoria !!!


A ok avevo capito 51 elementi...

CITAZIONE
No, no, ti sei spiegato bene, devi solo allargare le vedute.

Un Timer che genera un PWM per conto proprio sarà comunque formato da un contatore che si incrementa al massimo ogni 62,5 nS (quarzo a 16 MHz) e una soglia che andrà da 0 a X.

Ora se tu metti una X che vale 1.000, il contatore impiegherà comunque: 1.000 * 62,5 nS = 62,5 uS per raggiungere il valore 1.000.

Quindi per avere una escursione di 10 bit, ovvero 1024 valori, non puoi avere un periodo per la PWM minore di: 1024 / 62,5 nS = 64 uS !

Ok ???


ok ok la ISR in ogni caso deve essere in stretta correlazione con il valore del pwm..

CITAZIONE
ma pensavo a una soluzione del genere


comunque pensavo male anche qua!ho provato con arduino mega,ma non funziona, mi funziona solo in modalità CTC!



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


 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 21/04/2015 20:00:26

CITAZIONE (BellaEli, 21/04/2015 18:06:41 ) Discussione.php?55031252&118#MSG1811


Ancora non mi convinci !!!

Si tratterebbe di aggiungere una sola linea di codice nella funzione GiveMeValSine :

if (tic<30) return 330/25 * tic; // Qualcosa del genere...qualcuno vuole provarci a scrivere il codice?


...il resto della funzione e della dichiarazione andrebbero ovviamente cambiate ...ma roba di una manciata di secondi!

Se poi mettiamo tutto sotto #ifdef OTTIMIZZAZIONE_MEMORIA_VARIABILI si può settare oppure lasciare come è ora.

E se invece di 51...si arrivasse a Cinquanta...si, si, come scritto nella mia firma?

E dai ...e dai...accendiamo? Faccine/Smileys_0017.gif


-TOP CODE-

-BOTTOM CODE-

Faccine/Smileys_0056.gif


CITAZIONE
Bolle, al momento, dice 320!

In uno dei softwarini che ho fatto, si vede chiaramente che, con una ricostruzione di 160 elementi per semi-sinusoide si è ben oltre ogni più florida aspettativa...inseguire la sinusoide con una precisione maggiore di 62us, per me, non ha nessun senso. Non è per non fiducia ma queste affermazioni andrebbero giustificate in modo tecnico, come ad esempio fare un'analisi dell'errore fra i casi 320 e 628 verificando la 'distorsione' a livello teorico. Si può seguire la falsariga degli ultimi esempi che ho fatto...qualcuno vuole provarci?



Modificato da NonSoloBolleDiAcqua - 21/04/2015, 20:12:04


---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

scinty

Avatar
GigaWatt


Utente
Msg:734

Stato:



Inviato il: 21/04/2015 20:22:27

Bolle mi sorprende ogni giorno! quando gli tirerai l'asso a bella eli? è una settimana che ce l'hai in mano ...



---------------
14 pannelli mono da 250Wp 24 pannelli amorfi Sharp da 130Wp banco batterie 48V 225Ah survoltore 5000...

 

BellaEli

Avatar
GigaWatt


MODERATORE
Msg:3286

Stato:



Inviato il: 22/04/2015 03:29:21

Allora Bolle, visto che sembri il mio miglior alievo ( ) ho apportato 2 modifiche tutte per te:

1. Ho rimosso le #define SOGLIA e PICCO_MASSIMO, ora calcolate nel setup in base al numero di campionamenti scelti. A tal proposito ho inserito una piccola tabellina riepilogativa dei valori ammessi con i relativi dettagli.

2. Ho inserito una nuova #define ONDA_RIF_COMPRESS che sta ad indicare di quanti valori si desidera comprimere il vettore onda_rif, quindi andrà da 0 a 30.

Ho lavorato solo sul codice, che sebbene si compila, deve necessariamente essere testato...

Tuttavia non mi piace la forma che sta prendendo il codice...
Parametrizzandolo troppo si rende indecifrabile...

Faccio fatica io stesso a capire cosa succede in alcuni punti...

La nuova funzione GiveMeValSine secondo me non la capisce nemmeno il micro !!!

Vediamo cosa ne pensi...

Notte !!!

Scarica allegato

Inverter.ino ( Numero download: 238 )



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






 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 22/04/2015 04:42:18

CITAZIONE (BellaEli, 22/04/2015 03:29:21 ) Discussione.php?55031252&118#MSG1815


Vediamo cosa ne pensi...

E' come sempre eccellente, se funzicasse anche sarebbe meraviglioso!!!!

CITAZIONE (BellaEli, 22/04/2015 03:29:21 ) Discussione.php?55031252&118#MSG1815
Faccio fatica io stesso a capire cosa succede in alcuni punti...

Scrivere o leggere codice è una questione di allenamento mentale, è evidente che sono un professionista del settore... è stato il mio lavoro per anni. Ora sono vecchio e rimbambito, ai bei tempi , quando ero giovane e bello (a dire il vero bello lo sono ancora :P), mi muovevo in dei codici (anche non scritti da me) composti da 100/200 mila linee ...ora ho un po preso questa elasticità, considera che riuscivo anche a capire chi avesse scritto parti di sorgente...e ti assicuro che a volte ci lavoravano sopra decine di persone....quindi cosa vuoi che siano una manciata di linee scritte in c?
Se dovessi scrivere il tuo codice lo stravolgerei ma le persone comuni non ci capirebbero più nulla, anche se ai miei occhi sarebbe bellissimo
Lo scopo del forum è quello di divulgare ma anche quello di far crescere le persone da un punto di vista tecnico...non trovo abbia molto senso far vedere le proprie realizzazioni se poi non si dice altro, per la serie guardate cosa ho fatto, guardate come sono figo
Ora veniamo a te....hehehehe....si vede lontano un miglio che sei una persona preparata, una delle persone più preparate che sia mai capitata da queste parti...ti mancheranno alcune conoscenze specifiche,che gli 'esperti' avranno acquisito,ma sarà solo una questione di tempo...hai le capacità per coordinare un progetto complesso come questo e portarlo a termine.

CITAZIONE (scinty, 22/04/2015 04:42:18 ) Discussione.php?55031252&118#MSG1814
quando gli tirerai l'asso a bella eli? è una settimana che ce l'hai in mano ...

non ho capito ...giuro!Senti ma...posso farti delle domande tecniche spintarelle sull'inverter che hai realizzato?

Giorno!!!



Modificato da NonSoloBolleDiAcqua - 22/04/2015, 04:52:23


---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 22/04/2015 06:40:11


CITAZIONE

GiveMeValSine

Si cosa serve questa istruzione?

BellaEli si a parte GiveMeValSine che non so a cosa servi, il codice sta venendo da dio e al momento grazie al tuo ordine maniacale è molto comprensivo!!

CITAZIONE
Scrivere o leggere codice è una questione di allenamento mentale, è evidente che sono un professionista del settore...


Bolle di dove sei?Mi fai un corso accellerato di C!
Altrimenti apriamo una nuova discussione intitolata corso C dilettanti per i non addetti come me!(sarebbe un successo )



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


 

ElettroshockNow

Avatar
GigaWatt


Utente
Msg:4656

Stato:



Inviato il: 22/04/2015 06:50:49


CITAZIONE


Bolle di dove sei?Mi fai un corso accellerato di C!
Altrimenti apriamo una nuova discussione intitolata corso C dilettanti per i non addetti come me!(sarebbe un successo )

Eccomi come secondo Alievo

 

mismaett
Watt


Utente
Msg:60

Stato:



Inviato il: 22/04/2015 08:00:41

cari amici,

da un anno seguo l'argomento, e ho anche praticamente realizzato un inverter a mosfet con il modulino eg8010 (vedi la prima pagina dei post): funzionava ma troppi mosfet in parallelo scoppiamo prima o poi con carichi elevati, come kekko e elettroshock hanno affermato.

Ora ho in mano degli igbt tipo quelli da 1200 600 a semikron trifase, e sto ultimando la realizzazione del circuito stampato che utilizzera' dei FOD8333 per driver degli igbt.

nel ྒ smanettai con l'AIM65.. chissa' lo ha mai visto.

Non vi seguo molto da vicino, ma continuate in questa maniera


VIVA LA CONOSCENZA CONDIVISA!!!!!!!!

ciao

 

ElettroshockNow

Avatar
GigaWatt


Utente
Msg:4656

Stato:



Inviato il: 22/04/2015 08:13:46

Messa in fase eseguita con successo .
Oggi pom faccio un video con le luci disco .

Sembrava una passeggiata ,invece ho trovato non poche difficoltà.
Ho risolto con una interrupt Rising con priorità più alta del pwm.
Ogni volta che viene richiamata calcola la frequenza di rete misurando il tempo trascorso dalla precedente interrupt.
Se la frequenza rientra nelle tolleranze imposte (circa 2Hz) controlla in che passo della sinusoide prodotta ci troviamo.
Se siamo all'inizio imposto OCR2A (uso il doppio timer ) alla frequenza calcolata altrimenti se in anticipo imposto una frequenza di 0.25Hz più alta oppure se in ritardo 0.25Hz più bassa.
Il tutto si traduce in poche linee digerite velocemente dal piccolino .

Gli ho tirato 2Kw con solo 150uF di Condensatori di livellamento ....
Faccine/Smileys_0212.gif

 

ElettroshockNow

Avatar
GigaWatt


Utente
Msg:4656

Stato:



Inviato il: 22/04/2015 08:17:25

Ciao Mismaett ...
Io ho riscontrato il motivo della morte prematura al poco deadtime del EG e dai driver piccolini per pilotare IGBT o multi finali importanti .

 
 InizioPagina
 

Pag: (167)  < ...  115   116   117   [118]   119   120   121  ...>    (Ultimo Msg)

Versione Completa!

Home page     TOP100-SOLAR    Home page forum