Se sei già registrato           oppure    

Orario: 25/04/2024 03:34:23  

 

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

VISUALIZZA L'ALBUM

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


Homemade Inverter "modulo DC/AC"
FinePagina

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 08:17:25


CITAZIONE

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.


Come ti avevo anticipato nel post precedente, io preferisco far funzionare sia il pin 9 che il 10 in logica normale, non negata.

Se guardi bene, su OCR1B c'è la formula [Indice - 250]:

Succede che da 0 a 249 i valori dell'Array finiranno dentro OCR1A, da 250 a 499 i valori dell'Array finiranno dentro OCR1B (poiché c'è quel "- 250" i valori saranno sempre da 0 a 250), a 500 la variabile Indice viene resettata a 0 per riniziare il ciclo da OCR1A.

Nell'ultimo IF avrei potuto mettere: IF (Indice = 500) {...

Tuttavia ho preferito utilizzare "> 499" in modo che se per qualunque evento imprevisto la variabile dovesse saltare direttamente ad un valore > di 500 viene comunque resettata.

Sono riuscito a trasmettere il concetto ?



Modificato da BellaEli - 27/03/2015, 08:25:47


---------------
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 11:21:11

Ok BellaEli come sempre voi date sempre delle ottime spiegazioni sono io un po tonto a capire

Ok, ma se volessimo tagliare la testa al toro giusto per capire e ad esempio per OCR1B volessimo usare la negativa la formula sarà sempre (indice-250)?



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 11:41:01


CITAZIONE

Ok, ma se volessimo tagliare la testa al toro giusto per capire e ad esempio per OCR1B volessimo usare la negativa la formula sarà sempre (indice-250)?


No !

Sarebbe qualcosa del genere:



OCR1B = 400 - pgm_read_byte(&onda[Indice - 250]); 



Ma ti è chiaro il funzionamento ?

a 0 µS il PWM del pin 9 e 10 è a 0 // Istante iniziale in cui parte il micro

a 40 µS il PWM del pin 9 viene settato a 5 // Il PWM inizia a crescere

a 80 µS il PWM del pin 9 viene settato a 10

a 120 µS il PWM del pin 9 viene settato a 15

...

a 5.000 µS il PWM del pin 9 viene settato a 400 // Il PWM raggiunge il picco superiore

...

a 5.160 µS il PWM del pin 9 viene settato a 399 // Il PWM inizia a calare

...

a 10.000 µS il PWM del pin 9 viene settato a 0 // Il PWM del Pin 9 torna a 0



a 10.040 µS il PWM del pin 10 viene settato a 5 // Inizia a crescere il PWM del Pin 10

a 10.080 µS il PWM del pin 10 viene settato a 10

a 10.120 µS il PWM del pin 10 viene settato a 15

...

quindi a ogni chiamata dell'ISR viene modificato il valore del PWM di un solo PIN !

E ogni cambiamento verrà effettuato ogni 40 µS !


Fammi capire se ti è chiaro come funziona...



Modificato da BellaEli - 27/03/2015, 11:44:29


---------------
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 12:19:48

Ok ok il funzionamento generico c'e l'ho a mente, ricapitolando timer2 conteggia 80 impulsi (cioè 40us) e fa scattare l'interrupt (ISR) e nei primi 10ms cioè meta semionda(OCR1A) l'indice si incrementa da 0 a 250 campioni, poi altri 10ms per completare l'altra semionda (OCR1B) indice da 251 a 500..passati 20ms periodo dell'intera onda l'indice l'indice si resetta a 0 e ricomincia il ciclo..

la cosa che non mi è tanto chiara è tu preferisci usare il modo non-inverita questo vuol dire che avremo 2 onde positive?



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



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

Rev. 07: Miglioramenti Titoli e Descrizioni

Scarica allegato

Sinusoide.Xlsx ( Numero download: 198 )



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 12:51:04


CITAZIONE

la cosa che non mi è tanto chiara è tu preferisci usare il modo non-inverita questo vuol dire che avremo 2 onde positive?


Esatto, sarà il ponte ad H ad invertire il verso della corrente all'interno dell'avvolgimento del trasformatore:

http://www.energialternativa.info/public/newforum/ForumEA/D/Ponte%20H.jpg



Poichè il Pin 9 piloterà i finali TR1 e TR4 (Corrente nel DC Motor da Sinistra verso Destra) il Pin 10 piloterà i finali TR2 e TR3 (Corrente nel DC Motor da Destra verso Sinistra)

Giusto ?



---------------
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 13:10:32

una cosa del genere quindi







Immagine Allegata: Ponte H.jpg
 
ForumEA/D/Ponte H_1.jpg



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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 27/03/2015 13:12:19

e cosi



Immagine Allegata: Ponte H1.jpg
 
ForumEA/D/Ponte H1.jpg



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 13:21:09

Perfetto... ora ci siamo !!!

Hai disegnato persino la corrente nei diodi, vuol dire che le precedenti spiegazioni ti sono chiare...



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 13:28:22

Elettro, Scinty, Kekko ma stiamo procedendo nella direzione giusta ?

Ricordo che io un inverter non l'ho mai realizzato, tutte le mie idee sono semplici deduzioni logiche sulla base delle mie conoscenze pregresse...

Se le mie idee sono sbagliate correggetemi !



---------------
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 13:32:44

Ok BellaEli speriamo bene, in attesa di qualche conferma da chi gia a realizzato il sistema, vediamo se riusciamo a generera almeno le 2 semionde.
A presto



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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 27/03/2015 13:40:46

Dato che ci siamo ti chiedo un'altra roba, regolazioni feedback pid abbiamo detto che andrà eseguita tutta tra l'ISR?In void loop non mettiamo niente



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 13:49:39

Nel loop sicuro ci andrà del codice, non possiamo mettere il PID nella ISR, rallenterebbe troppo l'esecuzione della ISR stessa...

Ma lo affronteremo in un secondo momento...



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

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 27/03/2015 20:57:33

Allora, vediamo di migliorare le cose...

Ho provato a fare qualche verifica e ho modificato il codice in questo modo:



#include ...
#define ...

<span style="color: red;">#define DeadTime 0</span>			<span style="color: gray;">// Valori consentiti: 0.. 1/2 Tempo di Campionamento</span>

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: gray;">// Con 250 campioni, settare i registri per richiamare la ISR ogni 40 µS</span>

sei();

}

void loop() {
}


ISR (TIMER2_COMPA_vect){


	if (Indice < 1) || (Indice = 250) || (Indice > 499) {		<span style="color: gray;">// Indice 0, 250 o 500 (Valore 0, incrocio delle semionde) </span>
		OCR1A = 0;
		OCR1B = 0;
	}

	if (Indice = 1) || (Indice = 251) {				<span style="color: gray;">// Sto iniziando una semionda (Positiva o Negativa)</span>
		delayMicroseconds(DeadTime);				<span style="color: gray;">// Posticipo l'attivazione del relativo Pin di "DeatTime" µS</span>
	}								<span style="color: gray;">// Tale valore dovrà essere max. 1/2 del tempo di campionamento per evitare problemi con la ISR</span>


	if (Indice > 0) && (Indice < 250) {				<span style="color: gray;">// Pin 9, Indice compreso tra 1 e 249 (Valori tra 5..400..5) </span>
		OCR1A = pgm_read_byte(&onda[Indice]);
	}


	if (Indice > 250) && (Indice < 500) {				<span style="color: gray;">// Pin 10, Indice compreso tra 251 e 499 (-250 = tra 1 e 249, Valori tra 5..400..5) </span>
		OCR1B = pgm_read_byte(&onda[Indice - 250]);
	}

	Indice++;							<span style="color: gray;">// Incremento l'Indice</span>


	if (Indice > 500) {						<span style="color: gray;">// Se l'indice supera 500 lo resetto per ricominciare il ciclo</span>
		Indice = 0;
	}

}



Il 1° IF gestisce i passaggi per lo "0" delle semionde, mettendo a 0 i piedini 9 e 10.

Il 2° IF trasla di DeadTime µS l'impulso del primo PWM di ogni semionda (Vedi immagine)

Il 3° IF incrementa da 5 a 400 e decrementa da 400 a 5 il PIN 9.

Il 4° IF incrementa da 5 a 400 e decrementa da 400 a 5 il PIN 10.

Il 5° IF resetta la variabile Indice per ricominciare il ciclo.


In realtà l'ultimo PWM avrà un T-on piccolo e un T-off Grande (diciamo 5 µS On e 35 µS Off), poi c'è un campionamento con tutti i PWM Off, poi parte il PWM dell'altra semionda con un DeadTime selezionabile.

Quindi, campionando a 40 µS potremo considerare i seguenti tempi tra lo spegnimento di 2 finali e l'accensione degli altri 2:

35 + 40 + DeadTime (0..20) = 75..95 µS

A me sembrano tantissimi, in realtà se le cose stanno così non serve affatto gestire il DeadTime, qualcuno mi dice dove sto sbagliando ?

http://www.energialternativa.info/public/newforum/ForumEA/D/PWM.png



Elettro ? Scinty ? Kekko ? Dove siete ???



Modificato da BellaEli - 28/03/2015, 00:29:27


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

 

inverter90

Avatar
MegaWatt


Gruppo:Utente
Messaggi:323

Stato:



Inviato il: 28/03/2015 06:43:31

Aitutateci pleaseeeee



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

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum