| BellaEli
| 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 !!!
| | | | | | | inverter90
| 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
| 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
| 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
| 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...
| Inviato il: 21/04/2015 20:00:26
|
CITAZIONE (BellaEli, 21/04/2015 18:06:41 )
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?
-TOP CODE-
-BOTTOM CODE-
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
| 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
| 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 !!!
--------------- C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!
| | | | NonSoloBolleDiA...
| Inviato il: 22/04/2015 04:42:18
|
CITAZIONE (BellaEli, 22/04/2015 03:29:21 )
Vediamo cosa ne pensi...
E' come sempre eccellente, se funzicasse anche sarebbe meraviglioso!!!!
CITAZIONE (BellaEli, 22/04/2015 03:29:21 )
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 )
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
| 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
| 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
| 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
| 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 . | |
| | |
|
Versione Completa!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|