Buongiorno a tutto il forum. Ho scoperto questo forum (e mi sono registrato subito) solo qualche giorno fa, cercando info in rete sul modulo driver EGS002... (e c'ho messo un paio di giorni per leggere tutti i post) e sono rimasto sbalordito da quanto avete già fatto e sperimentato in merito. Innanzitutto , i miei più sentiti complimenti a Elettro, Kekko, Scinty ed altri, per tutto quanto già realizzato, sia per la competenza che per la volontà e capacità di portare avanti questo progetto. Ho intenzione di sperimentare pure io l'autocostruzione di un pure sine wave e mi piacerebbe contribuire un po (nel mio piccolo) al progetto. Partirei da un appello di Scinty (del 4maggio scorso)su "arduino" rimasto inascoltato e dal lavoro di Kekko sul microP ATMEL per la simulazione di un'onda sinusoidale a 50Hz. Ho scritto su arduino un piccolo sketch (sono una quindicina di righe di codice, circa 1KB) che sembra simulare abbastanza bene un'onda utile a pilotare un driver a ponte H. Provo ad aggiungere il listato (scusatemi non ho molta pratica di post).
----------------------------------------
/* prova di pilotaggio di un ponte H con sinusoide simulata PWM */
// array di 27 elementi (da 0 a 255) di typo byte (il primo non conta)
byte onda[27]={0,0,16,32,48,63,79,94,109,123,137,150,163,175,186,196,206,215,223,231,237,243,
247,250,253,254,255};
//unsigned long time; //utilizzato per debug
byte PA = 5 ; // canale A (ramo del ponte a frequenza elevata)
byte PB = 6 ; // canale B (ramo del ponte a frequenza 50Hz)
byte durata = 179 ; // durata, valore necessario per i 20mSec del ciclo
void setup()
{
// Serial.begin (9600); //utilizzato per debug
pinMode (PA, OUTPUT) ; //assegnazione dei pin 5 e 6 come output per il ponte H
pinMode (PB, OUTPUT) ; // i pin 5 e 6 sono uscite PWM
}
void loop()
{
/* Serial.println( "==============" ) ; utilizzata per il debug
Serial.print("Time: ");
time = millis();
Serial.println(time); */
digitalWrite (PB , HIGH ) ; // attiva 1° e 2° quadrante (sem. positiva)
for ( byte x = 1 ; x<= 26 ; x++ ) { analogWrite ( PA , onda[x] ) ; delayMicroseconds ( durata ) ; } ;
for ( byte y = 26 ; y>= 1 ; y-- ) { analogWrite ( PA , onda[y] ) ; delayMicroseconds ( durata ) ;} ;
digitalWrite (PB , LOW ) ; // attiva 3° e 4° quadrante (sem. positiva)
for ( byte x = 1 ; x<= 26 ; x++ ) { analogWrite ( PA , onda[x] ) ; delayMicroseconds ( durata ) ; } ;
for ( byte y = 26 ; y>= 1 ; y-- ) { analogWrite ( PA , onda[y] ) ; delayMicroseconds ( durata ) ;} ;
}
-------------------------------------------------
Ho messo qualche commento ma se avete qualche dubbio....
l'ho già testato e provo ad allegare qualche foto.