Se sei già registrato           oppure    

Orario: 07/05/2024 10:58:16  

 

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

VISUALIZZA L'ALBUM

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


Homemade Inverter "modulo DC/AC"
FinePagina

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 25/03/2015 12:46:39

O appena trovato anche questo programmino può essere utile?

Scarica allegato

Smart Sine.zip ( Numero download: 237 )



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 12:51:28


CITAZIONE

per la semionda positiva, ma per la negativa dobbiamo mettere sempre nella stessa tabella -13,-200,-13?o come?


Il valore del PWM deve essere un valore positivo, non puoi utilizzare -13 o -200.

A dire il vero a me non sembra una buona idea far funzionare il piedino della semionda negativa in logica negata, mi sembra più semplice gestire alternativamente l'attivazione del PWM sul relativo piedino da codice.

E per questo che credo che basti un solo vettore, ma al momento non so risponderti...

Devo completare gli studi, crearmi una mappa mentale di ciò che voglio fare e buttare giù un po di codice per vedere qual'è la soluzione migliore...



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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 25/03/2015 12:56:53

Ok BellaEli ti ringrazio per l'impegno mostratomi. Ti aspetto perche per il momento sono bloccato è non so piu come procedere... A presto alloraa con gli aggiornamenti.......



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 13:03:12

E' simpatico il programmino linkato, fa la stessa cosa del mio foglio Excel (appena comparato i valori è sono identici) solo che si appoggia a NetFramwork.

C'è una cosa che forse è più corretta nel programma rispetto al mio foglio Excel: lui non considera l'ultimo valore della serie, poichè corrisponde all'inizio del nuovo ciclo.

Magari modificherò il file Excel...

Infine nel programma c'è anche l'offset, anche se non so a cosa possa servire, tuttavia implementarlo non è un problema...



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 13:21:19

Ecco il nuovo file aggiornato:
1) Eliminato l'ultimo valore;
2) Aggiunta gestione dell'offset.

Se c'è bisogno di altro sono qui...

Nota:
Rev. 3: Apportata piccola modifica ai titoli del grafico...

Scarica allegato

Sinusoide.Xlsx ( Numero download: 186 )



Modificato da BellaEli - 25/03/2015, 13:24:27


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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 25/03/2015 13:21:43

caspita ooo con quale semplicità risolvi le cose.. Ci avrò perso 5 giorni su you tube ed excel per riuscire a capire come fare e senza avere i risultati....



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 13:30:58

Correzione piccoli errori: Rev. 04

Scarica allegato

Sinusoide.Xlsx ( Numero download: 179 )



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 14:53:23

Aggiunta Tabellina per i Calcoli.

Rev. 05

Scarica allegato

Sinusoide.Xlsx ( Numero download: 192 )



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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 25/03/2015 15:49:45

CITAZIONE (BellaEli, 25/03/2015 14:53:23 ) Discussione.php?55031252&92#MSG1407

Aggiunta Tabellina per i Calcoli.

Rev. 05


Questo è il TOP!



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/03/2015 20:20:42

Rev. 06:
- Aggiunta Cella contenente i valori da copiare e incollare sul codice;
- Correzione piccoli errori (nelle descrizioni).

Giocherellando con il foglio, mi sono accorto che se si vogliono ottenere dei valori simmetrici occorre impostare un numero di campioni pari !

Esempio:
10 Campioni: 0, 235, 380, 380, 235, 0
11 Campioni: 0, 216, 364, 396, 302, 113 (Prossimo -113)

Come si vede, con un numero pari di campioni i primi 3 valori sono simmetrici rispetto ai secondi 3.
Utilizzando un numero di campioni dispari, giustamente i primi 3 campioni non sono simmetrici rispetto ai secondi 3 !!!

Scarica allegato

Sinusoide.Xlsx ( Numero download: 191 )



Modificato da BellaEli - 25/03/2015, 20:28:30


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

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 25/03/2015 20:39:59

....

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 26/03/2015 13:28:49

BellaEli forse è la volta buona che dici?


#include < avr/io.h" >
#include < avr/interrupt.h >
#include < avr/pgmspace.h" >
#define LENGTH 250

prog_char onda[250] PROGMEM  =
{0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 99, 104,
109, 114, 119, 124, 128, 133, 138, 143, 147, 152, 157, 161, 166, 170, 175, 179, 184, 188,
193, 197, 201, 206, 210, 214, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255, 259, 263,
266, 270, 274, 277, 281, 285, 288, 292, 295, 298, 302, 305, 308, 311, 315, 318, 321, 324, 
327, 329, 332, 335, 338, 340, 343, 346, 348, 351, 353, 355, 358, 360, 362, 364, 366, 368,
370, 372, 374, 375, 377, 379, 380, 382, 383, 385, 386, 387, 389, 390, 391, 392, 393, 394, 
395, 395, 396, 397, 397, 398, 398, 399, 399, 399, 400, 400, 400, 400, 400, 400, 400, 399,
399, 399, 398, 398, 397, 397, 396, 395, 395, 394, 393, 392, 391, 390, 389, 387, 386, 385,
383, 382, 380, 379, 377, 375, 374, 372, 370, 368, 366, 364, 362, 360, 358, 355, 353, 351, 
348, 346, 343, 340, 338, 335, 332, 329, 327, 324, 321, 318, 315, 311, 308, 305, 302, 298,
295, 292, 288, 285, 281, 277, 274, 270, 266, 263, 259, 255, 251, 247, 243, 239, 235, 231,
227, 223, 219, 214, 210, 206, 201, 197, 193, 188, 184, 179, 175, 170, 166, 161, 157, 152,
147, 143, 138, 133, 128, 124, 119, 114, 109, 104, 99, 95, 90, 85, 80, 75, 70, 65, 60, 55,
50, 45, 40, 35, 30, 25, 20, 15, 10, 5};

byte pwm[LENGTH];
int deadTime=5;


void setup() {

    

pinMode(9,OUTPUT);
pinMode(10,OUTPUT);

TCCR1A = (1 << COM1A1)|(1 << COM1B1)|(1 << COM1B0);

TCCR1A = (1 << WGM11);

TCCR1B= (1 << CS10);

TCCR2A = 0;
TCCR2B = (1 << CS21) |(1 << WGM22);
OCR2A = 8; // con 8 il timer scatta ogni 4 mICROs circa */
TIMSK2 = (1 << OCIE2A); 
sei(); 
  
}

void loop() {
}


ISR (TIMER2_COMPA_vect){
for ( int a = 0 ; a<= LENGTH  ; a++ ) { 
OCR1A = pwm[a] = pgm_read_byte(&onda[a]); 
OCR1B = 0; 
delayMicroseconds(deadTime) ; 
};

for ( int c = 0 ; c<= LENGTH  ; c++ ) { 
OCR1A = 0 ;
OCR1B =pwm[c] = pgm_read_byte(&onda[c]); 
delayMicroseconds(deadTime) ; 
}; 


}



Modificato da NonSoloBolleDiAcqua - 04/09/2015, 11:16:09


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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 26/03/2015 23:29:06


CITAZIONE

BellaEli forse è la volta buona che dici?


Assolutamente NO !!!!!



Comunque i post si modificano per aggiungere qualche "h" non per modificare il codice...


Vediamo un po' di correggere qualche errore...

CITAZIONE
TCCR1A = (1 << COM1A1)|(1 << COM1B1)|(1 << COM1B0);
TCCR1A = (1 << WGM11);


Non sono particolarmente esperto sulla sintassi ma, a occhio, la seconda riga annulla e sostituisce la prima !

La sintassi corretta dovrebbe essere la seguente:

TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << COM1B0) | (1 << WGM11);

Tutto su un'unica riga.

La correzione riguarda solo la sintassi, il contenuto della formula ancora non so giudicarlo...


CITAZIONE
OCR2A = 8; // con 8 il timer scatta ogni 4 mICROs circa */


Vuoi dire che intendi campionare ogni 4 µS ???

Direi che il micro scelto non è capace di andare così veloce... in ogni caso dovresti usare un vettore da 2.500 elementi, non 250 !

Per iniziare, credo che non dobbiamo scendere sotto i 50 µS.

Ora vediamo di correggere la struttura del codice...

Il codice postato serve a correggere solo gli errori concettuali, non so ancora se ci sono errori sui registri, ok ?



#include ...
#define ...

prog_char onda[250] PROGMEM =
{0, 5, ...};

<span style="color: red;">volatile int Indice = 0;
</span>

byte ...
int ...


void setup() {

   pinMode(...

   TCCR1A = ... <span style="color: red;">// Con 250 campioni, settare i registri per richiamare la ISR ogni 40 µS</span>

   sei();

}

void loop() {
}


ISR (TIMER2_COMPA_vect){
<span style="color: red;">
   if (Indice < 250) {
      OCR1A = pgm_read_byte(&onda[Indice]);
   }
   else {
      OCR1B = pgm_read_byte(&onda[Indice - 250]);
   }
   
   Indice++;

   if (Indice > 499) {
      Indice = 0;
   }
</span>
} 



Ora vediamo se le tue idee si schiariscono un po'...

Ciao !



Modificato da BellaEli - 27/03/2015, 01:03:49


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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 27/03/2015 06:36:26


CITAZIONE

Vediamo un po' di correggere qualche errore...

CITAZIONE
TCCR1A = (1 << COM1A1)|(1 << COM1B1)|(1 << COM1B0);
TCCR1A = (1 << WGM11);


Non sono particolarmente esperto sulla sintassi ma, a occhio, la seconda riga annulla e sostituisce la prima !


sono pienamente d'accordo, ma pultroppo era l'unico modo per farmi postare il codice, dopo mi sono accorto che il problema erano questi segni << che messi attaccati senza lo spazio a WGM11 quando postavo mi cancellava l'intera riga..

CITAZIONE
Vuoi dire che intendi campionare ogni 4 µS ???


Ma 10/250= 0,04 che corrispondono a 4 microsecondi o no?
No è vero ho sbagliato la conversione sono 40micro!
Quindi sarà 16000000/8=2000000; 1/2000000=0,5; 40/0,5=80;

CITAZIONE

ISR (TIMER2_COMPA_vect){

if (Indice < 250) {
OCR1A = pgm_read_byte(&onda[Indice]);
}
else {
OCR1B = pgm_read_byte(&onda[Indice - 250]);
}

Indice++;

if (Indice > 499) {
Indice = 0;
}

}



Ma quindi OCR1A dovrà eseguire l'indice da > 0 a 250 e invece OCR1B dovrà < da 250 a 0?E giusto?
Io pensavo che OCR1A va da >0 a 250 , poi l'indice di nuovo a 0, OCR1B da >0 a 250.

CITAZIONE
Ora vediamo se le tue idee si schiariscono un po'...


Speriamo di si BellaEli sta diventando piu complicato di quanto pensassi!
A presto



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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 27/03/2015 07:07:21


CITAZIONE

if (Indice > 499) {
Indice = 0;


Perche 499?

Perche incrementa da
0>249
250>499

??



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

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum