| inverter90
| Inviato il: 23/04/2015 06:51:36
|
CITAZIONE
Eccomi ... caricato oggi pom su youtube ... poi dritto a vedere Avengers con i nani ..
Come al solito sai stupirci sempre di piu!!
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | inverter90
| Inviato il: 23/04/2015 06:58:01
|
CITAZIONE
Ora però dobbiamo prendere una decisione: andiamo avanti o continuiamo ad ottimizzare ?
Si non dovrebbe essere sbagliata nessuna delle due ipotesi,(so che non riesco a contribuire con soluzioni ecc.. ) ma se andiamo avanti magari le ottimizzazioni verrano da se in un secondo momento.. Io direi di stabillire un sistema per il sincro, perche ancora non ho capito come dobbiamo fare..Che ne dite? Metodo Elettro sembra fantastico..Elettro nel dettaglio quanti ms impega per mettersi in fase?
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | ElettroshockNow
| Inviato il: 23/04/2015 08:22:16
|
Grazie a tutti è un onore far parte di questa squadra.
CITAZIONE
Elettro nel dettaglio quanti ms impega per mettersi in fase?
Nel peggior delle ipotesi 2 Sec,poi una volta in fase si riduce a 0.
Forse non c'è bisogno di questa precisione di fase ,ma son due righette e non ci costano nulla e un giorno quando bisognerà fare il cambio di sorgente lo faremo con un semplice relè senza la paura di una doppia semionda
Per rendere più chiaro la routine di messa in fase descrivo il mio pwm.
La mia onda sinusoidale è composta da 200 campionamenti totali.
L'indice di questi campionamenti l'ho chiamato pos (posizione).
Con indice 0 (pos 0) mi trovo ad inizio sinusoide ,a 50 mi trovo nel picco superiore ,a 100 all'inversione di polarità e 150 nel picco inferiore.
Quindi cosa ho fatto.
Ho misurato il periodo (dato presente anche nel loop principale ed utile per visualizzare la frequenza di rete) e calcolato il valore OCR2A in maniera tale da ottenere la stessa frequenza in uscita.
Guarda caso è una divisione per 100 che casualità.
Infatti una sinusoide a 50Hz ha un periodo da 20000uS che diviso 100 = 200 ... Con OCR2A=200 e un timer 2 impostato con prescaler 8 e un'onda composta da 200 campionamenti ottengo = 200*0.5uS*200 = 20mS
Una volta calcolata con precisione la frequenza di rete e il giusto valore di OCR2A per riprodurla ho semplicemente comparato le due sinusoidi.
L'interrut viene chiamato ogni volta inizia la semionda positiva ,quindi mi aspetto che per essere in fase anche l'inverter deve trovarsi nell'indice (pos) 0 oppure nell'indice 100.
Ho scelto 100 per ridurre l'if .
Se l'onda generata è in anticipo (valore inferiore a 100) allora imposto in uscita la frequenza di rete -0.25Hz ,se in ritado accellero di 0.25 ....
Altrimenti mi trovo in perfetta fase e quindi imposto la stessa frequenza.
E' chiaro che ci sarà sempre un inseguimento perchè non avremo mai con queste tolleranze la stessa frequenza .
W EA,W i pazzoidi
ElettroshockNow | | | | NonSoloBolleDiA...
| Inviato il: 23/04/2015 11:23:37
|
CITAZIONE
nuovi problemi che ci potrebbero costringere a cambiar logica annullando, di fatto, tutti gli sforzi impiegati...
forse, e fai bene ad occuparti del progetto...io invece mi occupo principalmente di divulgare :la retta della sinusoide ne è un esempio anche perchè la trovo una delle pochissime applicazioni informatiche applicate di sin(x)/x.
CITAZIONE
Per la storia delle visioni sei stato troppo vago, qui è uno di quei punti in cui fastar scriverebbe "indizi sottratti" !
Per quanto riguarda il discorso delle visioni non sto sottraendo nulla anzi tento proprio di far imboccare a questa discussione ad una inversione di rotta cercando di far alzare la qualità e l'eccellenza del progetto tentando di dare strumenti a chi non ne ha.
CITAZIONE
In Italia ??? Spero tante, altrimenti cambio mestiere !!! O sbaglio ?
Sbagli,purtroppo poche e sono sempre meno...
CITAZIONE
Non mi tenere fermo senza sapere cosa vuoi fare.
Non mi sono spiegato bene? Ok, vediamo di passare ad un linguaggio tecnico:per ottimizzare gli altri due vettori l'idea è quella di fare una coda circolare semaforica perchè SEMBREREBBE inutile una matrice bidimensionale. Se non si è capito una pippa...è normale che sia così!
CITAZIONE
W EA,W i pazzoidi
Evvaiii...io mi prendo lo scettro!
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...
| | | | inverter90
| Inviato il: 23/04/2015 20:11:40
|
CITAZIONE
Ho lavorato solo sul codice, che sebbene si compila, deve necessariamente essere testato...
BellaEli stavo facendo qualche prova con i pochi strumenti a disposizione,ma misa che c'e qualche problema forse di duty cycle troppo basso. ma per confermare occorre testare con l'oscilloscopio
--------------- Il niente è impossibile finchè non ci provi!!!
| | | | danye
| Inviato il: 23/04/2015 21:45:25
|
Elettro sei fantastico!
--------------- 1x185Wp poli direzione sud
1xRegolatore MPPT EpSolar Tracer 3015
7x batterie auto da recup...
| | | | xardas
| Inviato il: 23/04/2015 22:29:30
|
Ciao Elettro.
Volevo farti infiniti complimenti per il progetto Inverter 5KW.
Inoltre voglio capire se sei UMANO O SEMPLICEMENTE UN DOCENTE UNIVERSITARIO..
Ciao e grazie per i bei video che ci regalano emozioni vere..
---------------
| | | | BellaEli
| Inviato il: 24/04/2015 02:22:20
|
Elettro grazie per la spiegazione che, come ogni volta, è semplice e chiara.
CITAZIONE
forse, e fai bene ad occuparti del progetto...io invece mi occupo principalmente di divulgare
Se scrivi questa frase e ti assecondo su tutto, va finire che il nostro progetto non sarà mai completato !
Su ogni linea di codice possiamo aprire un intero topic e parlare di come sia possibile stravolgerla, ma il nostro obiettivo attuale è comunque quello di realizzare un firmware open-source per realizzare un inverter sinusoidale puro.
Sono contentissimo che ti sei unito al gruppo, che ci stravolgi le idee, il codice e ci fai scoprire tecniche avanzate di programmazione ma, come capo progetto, non posso dimenticare il punto di arrivo.
Quindi va bene ogni miglioria, ma non dobbiamo mai dimenticare che abbiamo un inverter da realizzare, ok ?
CITAZIONE
tento proprio di far imboccare a questa discussione ad una inversione di rotta cercando di far alzare la qualità e l'eccellenza del progetto
Concordo su ogni lettera !
CITAZIONE
per ottimizzare gli altri due vettori l'idea è quella di fare una coda circolare semaforica perchè SEMBREREBBE inutile una matrice bidimensionale. Se non si è capito una pippa...è normale che sia così!
Ero abituato ad altri tipi di semafori...
Comunque ora va meglio: subito al sodo, frasi che sono chiare, che permettono, anche a chi non sa, di imparare nuove possibilità.
Per capire riporto uno spezzone di Wikipedia:
Il problema del produttore-consumatore è un esempio classico di sincronizzazione tra processi.
Il problema descrive due processi, uno produttore ed uno consumatore, che condividono un buffer comune, di dimensione fissata.
Compito del produttore è generare dati e depositarli nel buffer in continuo.
Contemporaneamente, il consumatore utilizzerà i dati prodotti, rimuovendoli di volta in volta dal buffer.
Il problema è assicurare che il produttore non elabori nuovi dati se il buffer è pieno, e che il consumatore non cerchi dati se il buffer è vuoto.
Tale concetto potrebbe essere utilizzato al posto delle nostre matrici dimensionali, risparmiando, forse, anche più del 50% della memoria !
Tuttavia mi sembra uscire fuori tema...
Mi fai capire come pensi di procedere ?
Ha senso implementare una coda semaforica se, forse, stiamo a meno del 10% del codice ?
Sicuramente sarai più esperto di me a scrivere programmi ma, non puoi negare, che si parte da un diagramma di flusso per poi arrivare al codice.
Perchè ti stai spingendo così tanto col primo blocco del diagramma di flusso ?
Sai sicuramente più di me che, implementare un meccanismo del genere adesso, otre a diminuire il consumo di memoria, porrà dei paletti per tutto il codice che deve essere ancora scritto...
Mi dai una motivazione oggettivamente ineccepibile che mi convinga a parlare di un buffer anzichè discutere sulla sincronizzazione, sul feedback, sulle protezioni e su tutto ciò che manca ???
Una raccomandazione: non rispondere che ti metti in panchina a fare l'osservatore, il mio post non vuole assolutamente produrre un simile risultato, vuole semplicemente "sbloccare i lavori" per consentire al progetto di andare avanti...
Che ne pensi ?
CITAZIONE
BellaEli stavo facendo qualche prova con i pochi strumenti a disposizione,ma misa che c'e qualche problema forse di duty cycle troppo basso. ma per confermare occorre testare con l'oscilloscopio
Non ho avuto tempo di fare debug e prove, ho del lavoro da consegnare...
Tuttavia sicuramente ci sono problemi, parametrizzando e ottimizzando il codice si creano molti problemi non visibili "a occhio"...
Appena riesco faccio qualche prova e ti aggiorno.
A presto, Eligio.
Modificato da BellaEli - 24/04/2015, 02:26:26
--------------- C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!
| | | | NonSoloBolleDiA...
| Inviato il: 24/04/2015 04:16:02
|
CITAZIONE (xardas, 24/04/2015 02:22:20 )
Inoltre voglio capire se sei UMANO O SEMPLICEMENTE UN DOCENTE UNIVERSITARIO..
E' semplicemente un FENOMENO!
CITAZIONE (xardas, 24/04/2015 02:22:20 )
...si parte da un diagramma di flusso per poi arrivare al codice.
ho smesso tanto tempo fa
CITAZIONE (xardas, 24/04/2015 02:22:20 )
Perchè ti stai spingendo così tanto col primo blocco del diagramma di flusso ?
Perchè hai finito la memoria a disposizione...e...
CITAZIONE (xardas, 24/04/2015 02:22:20 )
Mi fai capire come pensi di procedere ?
La tua architettura si poggia su un vettore bidimensionale, prende in considerazione metà di questo in attesa che l'altro venga riempito...cioè 'locki' metà di questo, la riempi per poi passare all'altra metà. Sto semplicemente dicendo che basta trasformare il tuo vettore in una coda circolare (più o meno già fai una cosa del genere) , fai scorrere un indice su questa coda (il tuo semaforo) 'lokkando' un solo elemento e non metà vettore. Se l'altro processo necessita di quell'elemento (visto che è sotto semaforo) prendi l'ultimo valore valido che salverai in una apposita variabile. Tutto questo ti permetterà il dimezzamento della memoria e svincolerai i due processi in modo asincrono: la coda circolare (cioè la funzione loop) procederà con i tempi di lettura del convertitore a/d, mentre l'altro processo analizzerà i valori retroazionandoli.
CITAZIONE (xardas, 24/04/2015 02:22:20 )
Ha senso implementare una coda semaforica se, forse, stiamo a meno del 10% del codice ?
Ok, mi hai convinto...
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...
| | | | kekko.alchemi
| Inviato il: 24/04/2015 16:33:59
|
CITAZIONE (xardas, 24/04/2015 04:16:02 )
Inoltre voglio capire se sei UMANO O SEMPLICEMENTE UN DOCENTE UNIVERSITARIO..
Niente di tutto ciò, è semplicemente un !!
E' una delle persone, anzi degli alieni, più preparati (e probabilmente il più) che conosco in ambito elettronico.
CITAZIONE (NonSoloBolleDiAcqua, 24/04/2015 04:16:02 )
cioè 'locki' metà di questo...
Ma intendi Loki il fratello di Thor?
Tornando al nostro inverter, ripeto che secondo me state procedendo in maniera errata. Dovete partire dall'Hardware, definendo solo a livello filosofico il firmware, definirlo in tutti i suoi componenti, realizzarlo, e solo dopo iniziare a stendere il firmware.
Dico questo perchè è quasi sicuro, che arrivati alla fine della scrittura del firmware, quando lo andrete ad utilizzare fisicamente nell'Hardware, dovrete cancellarne gran parte e riniziare da capo... non ha molto senso questo no?
Sarà che io sono abituato a scrivere i firmware senza diagramma di flusso, e procedere per blocchi/step, provandoli realmente passo passo.
A volte ci sbatto la testa, e a forza di sbatterla lo risolvo, ma un conto è sapere dove sbatterla (dove è cioè il problema), e un conto è procedere poi alla cieca alla ricerca del problema, che spesso così facendo, è un equazione a due o più variabili/problemi.
Alla fine ottengo un firmware sicuramente funzionante e sicuramente ottimizzabile. L'ottimizzazione però, in caso di anomalie, può essere retrocessa per tornare alla condizione funzionante, affrontando quindi un problema alla volta. Così invece scrivendo tutto da zero senza un riscontro pratico sull'Hardware (carichi applicati sull'inverter, distorsione effettiva, feedback...) si rischia di perdere un sacco di tempo. Uomo avvisato...
Posso aggiungere una cosa, senza scoraggiare nessuno?
Cosa direste se ci fosse un metodo (molto ma molto semplice) per fare un inverter sinusoidale puro senza microcontrollore, completamente analogico ("quattro pezzi"), con prestazioni e versatilità superiori (e di gran lunga) a qualsiasi firmware gestito da un micro?? Sarebbe davvero un inverter alla portata di tutti, anche per un bambino. Ma non voglio distogliervi... è solo una cosa che a volte sognamo con il grande Elettro...
Kekko
Modificato da kekko.alchemi - 24/04/2015, 16:40:32
--------------- L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
| | | | scinty
| Inviato il: 24/04/2015 18:40:18
|
sono daccordo con kekko anche se in passato l'avevo già detto cerco di andare a parole più semplici...
io non uso il feedback di uscita ma bensì il feedback di ingresso inseguendo un valore pulsante a 150hz campionato con 254 valori così riesco a inseguire le tre sinusoidi prima ancora che si distorcano e la possibilità di disconnettere il lato AC o il lato DC senza che si inneschino archi!! è un sistema unico nel suo genere e questo mi spinge alla misterite...
per l'inverter analogico con soli 4 componenti anchio l'avevo nominato a suo tempo ma eravate distratti(irs2092 2mosfet e induttanza di filtro).
nel frattempo sto facendo credere all'arduinverter che è un inverter mppsolar e a farlo comunicare tramite porta seriale con il software di Jarod e con raspberry con un server CMS caricato. da prime prove funzica ma ho un problema: il software di Jarod richiede stringhe da 92 byte mentre il buffer seriale del micro che state usando ha un buffer di 64 byte, qualcuno sa come aiutarmi??
--------------- 14 pannelli mono da 250Wp 24 pannelli amorfi Sharp da 130Wp banco batterie 48V 225Ah survoltore 5000...
| | | | farstar1965
| Inviato il: 24/04/2015 19:21:04
|
Potrebbe servire ?
LINK
Grazie. Marco.
--------------- Più impari più ti rendi conto di quanto sei ignorante.
| | | | kekko.alchemi
| Inviato il: 24/04/2015 20:39:13
|
Sono contento che siamo d'accordo Scinty!! La proposta che avevi fatto dell'inverter analogico mi era proprio sfuggita, altrimenti te l'avrei appoggiata subito! Per me, sarebbe quello il vero inverter EA alla portata di tutti, con prestazioni che anche un micro a 2 GHz se le sogna! Lo vogliamo provare a fare insieme?
Kekko
Modificato da kekko.alchemi - 25/04/2015, 00:39:38
--------------- L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
| | | | | | | NonSoloBolleDiA...
| Inviato il: 25/04/2015 07:01:38
|
CITAZIONE (farstar1965, 24/04/2015 22:48:25 )
Potrebbe servire ?
LINK
Grazie. Marco.
decisamente utile la funzione freeMemory() che può dire se e quando avviene lo sfondamento della memoria...può essere una protezione, occorre far girare il SW (anche a' vuoto') e verificare cosa accade alla memoria, oppure lanciare il debug sul compilatore:esiste? cioè lo fa la piattaforma?
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...
| |
| | |
|
Versione Completa!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|