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

VISUALIZZA L'ALBUM

Pag: (167)  < ...  72   73   74   [75]   76   77   78  ...>    (Ultimo Msg)


FinePagina

scinty

Avatar
GigaWatt


Utente
Msg:734

Stato:



Inviato il: 30/01/2015 07:55:35

stai ancora sbagliando la sinusoide campione te lo fatta fare con un valore di picco inferiore ai 255 per poter comparare il feedback, metti caso che dal feedback hai 240V il feedback risulterà più di 255 distorcendo l'onda se invece il capione è 200 con 255 di feedback il micro si accorge della sovratenzione e corregge eliminando l'errore
cmq dai un'occhiata al codice qui ti darà una dritta su come creare le semionde direttamente dal registro invece che dall'analogwriteLINK



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

 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 30/01/2015 08:01:39

Ok Scinty quindi io devo arrivare a 200 quando sono a 5v? Ma i grafici sono giusti?Si io la campionatura l'avevo copiata prorio da quel link che mi ai postato, (ma cosi no faccio strada), io voglio proprio capire la teoria della campionatura.



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


 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 30/01/2015 08:33:40

Vediamo se ho capito ho ancora sto sbagliando..

byte onda1 [256] = {0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,24,25,27,28,29,31,
33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,
102,105,108,111,115,118,121,124,127,130,133,136,139,143,146,149,
152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,
203,205,208,210,212,215,217,219,221,223,225,227,228,
231,233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252,252,
253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,
247,245,244,243,242,240,239,238,236,234,233,231,228,227,225,223,221,219,217,215,
212,210,208,205,203,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,
146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,28,27,25,23,21,20,19,18,16,15,
14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,
};

byte onda2 [256] = {0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,24,25,27,28,29,31,
33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,
102,105,108,111,115,118,121,124,127,130,133,136,139,143,146,149,
152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,
203,205,208,210,212,215,217,219,221,223,225,227,228,
231,233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252,252,
253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,
247,245,244,243,242,240,239,238,236,234,233,231,228,227,225,223,221,219,217,215,
212,210,208,205,203,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,
146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,28,27,25,23,21,20,19,18,16,15,
14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,
};



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


 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 30/01/2015 09:51:45

Scusatemi ancora, ora ho trovato questo codice tuo (scinty), solo che è trifase, io ora ho fatto una piccola modifica ho cancellato il timer2 è ho lasciato invariato il timer1 (PIN 9,10).L'unica cosa che non sto capendo da questo codice, cosa sono le variabili OFFSET?


#include "avr/pgmspace.h"
#include "avr/io.h"
// table of 256 sine values / one sine period / stored in flash memory
PROGMEM prog_uchar sine256[] =
{
0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,
18,20,21,23,25,27,29,31,33,35,37,39,42,44,46,49,51,54,56,59,
62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,
121,124,127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,
181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,
229,231,233,234,236,238,239,240,242,243,244,245,247,248,249,249,250,251,252,252,
253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,
247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,221,219,217,215,
212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,
158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,
96,93,90,87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,46,44,
42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,
7,6,5,5,4,3,2,2,1,1,1,0,0,0,0
};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define PWM_OUT_2 10 // PWM output on pin 10
#define PWM_OUT_3 9 // PWM output on pin 9
#define LED_PIN 13 // LED status on pin 13
#define POTEN_IN 0 // Potentiometer on pin 0
#define OFFSET_1 85 // Offset for second-phase
#define OFFSET_2 170 // Offset for third-phase
double dfreq;
const double refclk = 31376.6; // measured
const uint64_t twoTo32 = pow(2, 32); // compute value at startup and use as constant
// variables used inside interrupt service declared as voilatile
volatile uint8_t icnt; // var inside interrupt
volatile uint8_t icnt1; // var inside interrupt
volatile uint8_t c4ms; // counter incremented every 4ms
volatile uint32_t phase_accum; // pahse accumulator
volatile uint32_t tword_m; // dds tuning word m
//******************************************************************
void setup()
{
pinMode(LED_PIN, OUTPUT); // sets the digital pin as output
Serial.begin(115200); // connect to the serial port
Serial.println("DDS Test");
pinMode(PWM_OUT_2, OUTPUT); // PWM output / frequency output
pinMode(PWM_OUT_3, OUTPUT); // PWM output / frequency output
// Setup the timers
setup_timer1();


// disable interrupts to avoid timing distortion
cbi (TIMSK0, TOIE0); // disable Timer0 !!! delay() is now not available
sbi (TIMSK1, TOIE1); // enable Timer1 Interrupt
dfreq = 50.0; // initial output frequency = 50.0 Hz
tword_m = twoTo32 * dfreq / refclk;
}
//******************************************************************
void loop()
{
if (c4ms > 250) // timer / wait for a full second
{
c4ms = 0;
dfreq = analogRead(POTEN_IN); // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz
cbi (TIMSK1, TOIE1); // disble Timer1 Interrupt
tword_m = twoTo32 * dfreq / refclk;
sbi (TIMSK1, TOIE1); // enable Timer1 Interrupt
Serial.print(dfreq);
Serial.print(" ");
Serial.println(tword_m);
}
}
//******************************************************************
// timer1 setup
// set prscaler to 1, PWM mode to phase correct PWM, 16000000/512 = 31.25kHz clock
void setup_timer1(void)
{
// Timer1 Clock Prescaler to : 1
sbi (TCCR1B, CS10);
cbi (TCCR1B, CS11);
cbi (TCCR1B, CS12);
// Timer0 PWM Mode set to Phase Correct PWM
cbi (TCCR1A, COM1A0); // clear Compare Match
sbi (TCCR1A, COM1A1);
cbi (TCCR1A, COM1B0); // clear Compare Match
sbi (TCCR1A, COM1B1);
sbi (TCCR1A, WGM10); // Mode 1 / Phase Correct PWM
cbi (TCCR1A, WGM11);
cbi (TCCR1B, WGM12);
cbi (TCCR1B, WGM13);
}
//******************************************************************

// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER1_OVF_vect)
{
phase_accum += tword_m; // soft DDS, phase accu with 32 bits
icnt = phase_accum >> 24; // use upper 8 bits for phase accu as frequency information
OCR1A = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_1));
OCR1B = pgm_read_byte_near(sine256 + (uint8_t)(icnt + OFFSET_2));
if (icnt1++ == 125) // increment variable c4ms every 4 milliseconds
{
c4ms++;
icnt1 = 0;
}

}


Per aggiungere la retroazione bisogna fare cosi:?
const byte RETROAZIONE = A1;
int feedback=0;
void setup() {

}

void loop(){
feedback=RETROAZIONE;
byte valore = map(analogRead(RETROAZIONE),0,1023,0,255);

}

e in base alla tensione in uscita dovra incrementare e decrementare la variabile sine256? Spero che non vi sto annoiando



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


 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 30/01/2015 10:10:48

CITAZIONE (scinty, 30/01/2015 08:33:40 ) Discussione.php?55031252&75#MSG1138

stai ancora sbagliando la sinusoide campione te lo fatta fare con un valore di picco inferiore ai 255 per poter comparare il feedback, metti caso che dal feedback hai 240V il feedback risulterà più di 255 distorcendo l'onda se invece il capione è 200 con 255 di feedback il micro si accorge della sovratenzione e corregge eliminando l'errore
cmq dai un'occhiata al codice qui ti darà una dritta su come creare le semionde direttamente dal registro invece che dall'analogwriteLINK


Beh basta lavorare a 10 bit e il problema è risolto. Puoi così arrivare a 1024 valori. L'ADC di quel micro, se non sbaglio, lavora proprio a 10 bit. Il problema non è questo, il problema è che, facendo così non correggi le distorsioni, e non campioni il feedback che ti arriva.
Il feedback nel tuo caso dipende da una tensione continua, che deve essere livellata da un ponte di diodi e condensatori. Questo introduce un ritardo, che ti farà avere in casa variazioni di tensioni al variare dei carichi, questo perchè il feedback arriva in ritardo a causa dei condensatori. La cosa migliore, è far arrivare sul micro direttamente le due semionde separate e adattate con un partitore. Il micro effettua una campionatura su queste semionde, e analizzandole sa come comportarsi andando a ricalcolare la sinusoide in uscita. Intendevo questo per "ricalcolare e moltiplicare per una variabile".

I grafici vanno anche bene (a patto di lavorare a 10 bit), ma se usi più punti hai una risoluzione migliore, sia sui Volt in uscita che sulla qualità dell'onda. Ora ad esempio sei a circa 2 Volt di risoluzione in uscita, se lavori invece a 10 bit (1024 punti massimi) puoi utilizzare ad esempio a 628 punti totali (314 su ogni semiperiodo), ed avere risoluzioni migliori. Ma questi sono dettagli che poi affronterai, ora devi pensare alle fondamenta!

Saluti Kekko



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 30/01/2015 10:44:31

Ok grazie Kekko sei molto chiaro. Si intanto vediamo se riesco a combinare qualcosa con 256 periodi (mangiando mangiando verrà l'appetito).Ma le 2 semionde da dove le prendo dai gate del ponte h? O direttamente dall'uscita dei pin 9 e 10?Quindi dovrò usare 2 variabile differenti (1 variabile per semionda)?



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


 

xardas

Avatar
KiloWatt


Utente
Msg:126

Stato:



Inviato il: 30/01/2015 13:15:45

Ciao Ragazzi
ieri sera, andando a curiosare su Integrati PWM, ho notato che è possibile utilizzare un SG3524 che genera un onda quadra positiva all'uscita dei sui pin 11 - 14...

Tale segnale può essere modulato in frequenza con un opportuno circuito R - C...Il segnale così prodotto, viene indirizzato a degli Half Bridge Driver che ho accuratamente trovato e cioè IR.2111.

La mia domanda è: questo integrato può essere usato per progettare un homemade inverter?
Per rendere l'onda quadra una sinusoide cosa devo andare a modificare nel mio circuito?



---------------



 

BellaEli

Avatar
GigaWatt


MODERATORE
Msg:3286

Stato:



Inviato il: 30/01/2015 17:20:36

Ciao inverter90,

allora proviamo a spiegare qualche concetto (anche per i non addetti)...
Partiamo dal presupposto che un segnale PWM è un onda quadra a frequenza fissa: nel nostro caso diciamo 15 kHz.

http://www.energialternativa.info/public/newforum/ForumEA/D/atmega168a_pwm_02_lrg.jpg



Il nostro periodo ("Period", nell'immagine) è formato da una parte alta (Pulse Width) e una parte bassa. La parte alta è una percentuale che va 0...100% dell'intero periodo.

In un microcontrollore con PWM a 8 bit, come l'Atmega 328, il valore PWM 0..254 corrisponde a un "Pulse Width" che va da 0...100%.
In un microcontrollore con PWM a 10 bit, come l'Atmega 32 usato da Kekko, il valore PWM 0..1023 corrisponde a un "Pulse Width" che va da 0...100%.

Ora bisogna considerare che, per tutta una serie di considerazioni, è conveniente pilotare l'avvolgimento del trasformatore con un ponte ad H (Scinty perdonami ma l'HV per scopo didattico non è indicata...).
Quindi la sinusoide a 50 Hz sarà divisa in due: le semionde positive saranno mandate a 2 finali del ponte, quelle negative agli altri 2 finali.

http://www.energialternativa.info/public/newforum/ForumEA/D/ponteh2.jpg



Per fare questo si utilizzano 2 pin separati del microcontrollore, diciamo Pin 1 e Pin 2.
Il ciclo è strutturato in due fasi:
Fase 1) Pin 1 Modula in PWM, mentre il Pin 2 è a 0;
Fase 2) Pin 2 Modula in PWM mentre Pin 1 è a 0;

Se guardiamo l'immagine, ipotizziamo che il Pin 1 è collegato all'ingresso A, il Pin 2 all'ingresso B.

Fase 1) L'ingresso B, collegato al Pin 2 è a 0, quindi Q1 è in conduzione, Q4 in interdizione.
L'ingresso A, collegato al Pin 1, viene pilotato dal PWM, quindi quando è a 0, Q2 è in conduzione ma la corrente non può andare da nessuna parte perchè sia Q3 che Q4 sono in interdizione.
Quando è a 1, Q2 si interdice, mentre Q3 entra in conduzione: in questo caso la corrente scorrerà attraverso Q1, l'avvolgimento del trasformatore (indicato con Motor nell'immagine) e Q3.

Fase 2) Il contrario, ovvero l'ingresso A, collegato al Pin 1 è a 0, quindi Q2 è in conduzione, Q3 in interdizione.
L'ingresso B, collegato al Pin 2, viene pilotato dal PWM, quindi quando è a 0, Q1 è in conduzione ma la corrente non può andare da nessuna parte perchè sia Q3 che Q4 sono in interdizione.
Quando è a 1, Q1 si interdice, mentre Q4 entra in conduzione: in questo caso la corrente scorrerà attraverso Q2, l'avvolgimento del trasformatore (indicato con Motor nell'immagine) e Q4.

Osservando la descrizione del funzionamento si nota che Q3 e Q4 sono finali che lavorano in PWM, mentre Q1 e Q2 vengono accesi alternativamente e seguono un funzionamento in cui Q1 è sempre ON nella semionda positiva e Q2 è sempre ON nella seminonda negativa.

Per avere un controllo più granulare e migliorare le prestazioni del ponte si pilotano Q1 e Q2 direttamente, con una onda quadra a 50 Hz, tramite un apposito Pin del Microcontrollore secondo il seguente schema:

http://www.energialternativa.info/public/newforum/ForumEA/D/PWM_Ponte_H.jpg



C’è da considerare che i finali non sono ideali, quindi quando si accendono o spengono non lo fanno istantaneamente, ma con un certo ritardo.
Per questo motivo, nell’intersezione tra lo spegnimento di Q1 e l’accensione di Q2 si inserisce un certo ritardo (Dead Time, come scritto da Scinty, dai 300ns per igbt veloci, fino ad arrivare anche a un paio di microsecondi per igbt molto lenti) per evitare che quando all’inizio della seconda sinusoide Q4 entra in conduzione Q1 non si sia ancora acceso, mandando in corto l’alimentazione.

In questo caso, il nuovo ponte sarà qualcosa del genere:

http://www.energialternativa.info/public/newforum/ForumEA/D/Ponte_H.jpg



Ipotizzando di utilizzare i Pin 3 e 4 del microcontrollore per pilotare i finali del ponte a 50 Hz, il nuovo ciclo, quindi, sarà composto di quattro fasi:
Fase 1) Pin 1 = PWM, Pin 2 = 0, Pin 3 = 0, Pin 4 = 1;
Fase 2) Dead Time, tutti i Pin a 0;
Fase 3) Pin 1 = 0, Pin 2 = PWM, Pin 3 = 1, Pin 4 = 0;
Fase 4) Pausa come Fase 2



Assodato il meccanismo per pilotare il ponte veniamo al discorso feedback, un po’ più complicato…

Ipotizziamo di realizzare un onda con la seguente sequenza (per semplicità ho ipotizzato semplici incrementi di 15 punti, ma sono valori inventati):

http://www.energialternativa.info/public/newforum/ForumEA/D/Onda_PWM.jpg



In viola ci sono i valori del PWM impostato, in azzurro si vede l’uscita del Micro, in rosso la forma dell’onda dopo il filtro.

Ipotizziamo che la semi-sinusoide rossa è il valore della tensione in uscita al trasformatore, quindi con il valore di picco a 311 V (in corrispondenza del valore PWM 254, vale a dire a 90°) e, quindi, un valore efficace di 311 * rad2 = 311 * 1,414 = 220 Vac.

Ora ipotizziamo di applicare un carico al trasformatore di uscita del nostro inverter: per una serie di motivazioni la sinusoide sarà attenuata, il suo valore di picco non sarà più 311 V, ma diciamo 280 V, che corrisponde ad un valore efficace di circa 200 Vac.

Come facciamo a riportare il valore ai 220 desiderati ??? E’ semplice, dobbiamo allargare gli impulsi del PWM di un fattore legato in qualche modo alla differenza 220 – 200 = 20 V.

Quindi il nostro PWM potrebbe essere qualcosa del tipo PWM * k_Feedback.

Ipotizzando un Valore di k_FeedBack di 1,1, i valori dell’onda disegnata di modificherebbero da:
0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 254, ……
a
0, 16, 33, 49, 66, 82, 99, 115, 132, 148, 165, 181, 198, 214, 231, 247, 264, 279, ……

Come si può vedere, negli ultimi due numeri della sequenza abbiamo superato il limite di 254, quindi in questo caso l’onda sarebbe tosata nel picco superiore, quindi distorta.

E’ per questo che Scinty ti ha proposto una sequenza con il suo picco massimo di 200 punti, in modo che applicando il feedback sei comunque nell’intervallo 0..254, come, ad esempio, nella figura seguente:

http://www.energialternativa.info/public/newforum/ForumEA/D/PWM_Onda_2.jpg



Per ora mi fermo qui, per dare spazio a domande, correzioni, approfondimenti, se necessario riprendiamo il mini-tutorial.


P.S. Tucco ciò che ho scritto in questo post sono deduzioni basate sullo studio personale che, per semplice hobby, mi diverto a fare nel tempo libero, non ho mai realizzato un inverter, ci potrebbero essere aspetti più o meno importanti che ho tralasciato: se così fosse sarei felice di essere corretto/istruito da chi ha affrontato tali argomenti oltre che dal punto di vista teorico anche da quello pratico.

Scinty, che dici, ho spiegato bene anche stavolta ???



Modificato da BellaEli - 30/01/2015, 18:31:28


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






 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 30/01/2015 18:37:06

Ciao Bellaeli, ottima spiegazione ora mi è molto piu chiaro (almeno credo).Allora se ho capito bene la campionatura la faccio solo su 2 pin che sarebbero quelli a 15khz cioè le 2 semionde, mentre invece sfrutto altri 2 pin a 50hz, ma il duty cycle lo si imposta al 50% fisso?cioè 127?L'unica cosa che ancora dovrei capire bene è il feedback,allora io ho una variabile di tipo byte per la campionatura, il feedback mi deve modificare questa campionatura? o va creata un'altra variabile?



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


 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 30/01/2015 18:39:51

Un'altra cosa che ancora non mi è molto chiara per le due semionde basta solo una campionatura, o vanno create 2 variabile con 2 campionature diverse,ma con gli stessi valori?



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


 

scinty

Avatar
GigaWatt


Utente
Msg:734

Stato:



Inviato il: 30/01/2015 21:06:24

non ti devi confondere sennò ti dai la zappa sui piedi da solo, quello non è il codice del mio inverter io ho una semionda campionata di ampiezza di picco di 4000 millivolt il che tradotto dal tuo micro è 200 sul comparatore pwm viene confrontata sei volte per tutte e tre sinusoidi se le sinusoidi hanno un valore superiore a quella campionata il pwm si riduce viceversa aumenta, puoi anche fare la strada sbrigativa e comparare il valore medio cioè 2800 millivolt, con un filtro passa basso, ma la reazione dell'inverter è peggiore di un vecchietto di novanta anni, a scopo didattico non pensare nemmeno al trifase perchè è vero che quasi raddoppia la potenza gestibile ma le variabili da far combaciare diventano una decina



---------------
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: 30/01/2015 21:27:37


CITAZIONE

Allora se ho capito bene la campionatura la faccio solo su 2 pin che sarebbero quelli a 15khz cioè le 2 semionde

Esatto !

CITAZIONE
sfrutto altri 2 pin a 50hz, ma il duty cycle lo si imposta al 50% fisso? cioè 127?

No, qui non ci siamo...
Solo teoricamente è un'onda quadra a 50 Hz, praticamente è un segnale di abilitazione che deve essere necessariamente sincronizzato con quello del PWM a 15 kHz e deve tener conto del DeadTime (nel tuo primo post, ricordi l'istruzione "delay ( feedback )" ???).

Più o meno come da immagine seguente...

http://www.energialternativa.info/public/newforum/ForumEA/D/PWM_Ponte_H_delay.jpg



CITAZIONE
L'unica cosa che ancora dovrei capire bene è il feedback, allora io ho una variabile di tipo byte per la campionatura, il feedback mi deve modificare questa campionatura? o va creata un'altra variabile?


Qui si inizia ad uscire dal discorso concettuale per entrare in quello applicativo... Vediamo un po'...
Il tuo vettore con i vari valori di PWM, a vuoto deve generare una semi-sinusoide per la 220 Vac.
Tale valore lo riporti (tramite un partitore resistivo) al pin analogico in lettura.

Analizziamo la situazione a vuoto e ipotizziamo di avere una situazione del genere:

http://www.energialternativa.info/public/newforum/ForumEA/D/Feedback.jpg



e facciamo l'analisi al centro della semi-sinusoide, dove il valore del PWM è 170, il valore del Feedback è 4 V.

Ora ipotizziamo che tu applichi un carico all'inverter, cosa succederà ???

L'onda si attuenerà e, quindi, il valore del PWM è sempre di 170, perchè è un valore in uscita dal Micro, il valore del feedback, invece, scenderà, per esempio, a 3,8 V.

A questo punto, tu ti aspetti 4 V ma hai solo 3,8 V quindi il firmware deve aumentare il valore del PWM per riportare il valore del feedback a 4 V.

Come ? Ci sono varie soluzione, ma è solo una questione di come scrivere il codice.

Come accennato nel mio post precedente, potresti moltiplicare il valore PWM (170) per una variabile legata in qualche modo al valore 4 - 3,8.
Se ci pensi, 4 è il valore che ti aspetti, 3,8 è il valore letto quindi senza carico avrò 4 - 4 = 0, man mano che il carico cresce avrò
4-3,9 = 0,1
4-3,8 = 0,2
4-3,7 = 0,3, etc.

Quindi potresti inserire una variabile di feedback chiamata k_fdb come segue:

k_fdb = 1 + (4 - Analog_Input)

Poi il valore di PWM (170) lo moltiplichi per k_fdb prima di mandarlo al Pin in uscita, per esempio

PWM_Out = PWM * k_fdb.

Ora per fare questo occorre conoscere il valore 4 che è in stretta correlazione con il 170, quindi potresti fare qualcosa del genere:

Val_Atteso = PWM / 42,5
Val_Atteso = 170 / 42,5 = 4

Quindi la tua formula finale potrebbe essere qualcosa del tipo:

PWM_Out = PWM * (1 + ((PWM / 42,5) - Analog_Input))

CITAZIONE
Un'altra cosa che ancora non mi è molto chiara per le due semionde basta solo una campionatura, o vanno create 2 variabile con 2 campionature diverse,ma con gli stessi valori?

Così ad occhio direi che ne basta 1, ma solo sviluppando il codice ti rendi conto se sono convenienti 2 vettori anzichè 1...

Tutto chiaro ???



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






 

scinty

Avatar
GigaWatt


Utente
Msg:734

Stato:



Inviato il: 30/01/2015 21:50:42

può anche funzionare senza onda quadra ma solo con i due segnali pwm l'efficienza peggiora perchè aumentano le perdite di commutazione
ma il firmware si snellisce parecchio
X bellaeli vai forte ragazzo io gli spiego come si fa tu il perchè si fa così siamo una squadra imbattibile!!



Modificato da scinty - 30/01/2015, 22:05:23


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

 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 31/01/2015 01:56:53

Complimenti a BellaEli per la spiegazione!! Non avrei saputo far di meglio!

E' vero quello che dici Scinty, ma pensaci bene, il rendimento alla fine è lo stesso (provare per credere), in quanto utilizzando il sistema con l'onda quadra, non si recuperano i picchi di extratensione che tornano indietro durante la fase di PWM, in quanto vengono cortocircuitati. Io ho provato entrambe le configurazioni, ma alla fine ho optato per il PWM su entrambi i canali, l'inverter è silenziosissimo e rende qualche punto percentuale in più. Nel caso dell'onda quadra, hai 2 IGBT che scaldano meno, ma l'inverter è più rumoroso e con qualche perdita in più a causa dei picchi cortocircuitati.

Kekko



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

inverter90

Avatar
MegaWatt


Utente
Msg:323

Stato:



Inviato il: 31/01/2015 06:33:48

Ok grandi ragazzi siete davvero una bella squadra!!!Bellaeli è una spiegazione piu che ottima!!Ora dipende da me mettere tutto in pratica(speriamo ben!)..Ci provo raga e vi farò sapere intanto grazie a tutti

ps. se ho ancora dubbi nell'atto pratico vi annoierò ancora



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


 
 InizioPagina
 

Pag: (167)  < ...  72   73   74   [75]   76   77   78  ...>    (Ultimo Msg)

Versione Completa!

Home page     TOP100-SOLAR    Home page forum