Cercasi Mentore

Salve ragazzi, mi sono iscritto e presentato qualche giorno fà, mi è appena arrivato arduino e dopo aver fatto lampeggiare led, controllato frequenza ed intensità del lampeggio con potenziometro e tasto di attivazione, all'idea di fare un progetto per un inverter che faccia girare un motore asincrono trifase a velocità variabile inizio a trovarmi nei primi vicoli ciechi.
Secondo voi questo codice genera una terna di sinusoidi sfasate di 120 gradi?

float faseu;
float fasev;
float fasew;
const float rad=(6.283185307179586476925286766559/360);
int angle;
int F;
void setup(){
for (int i=0; i<14; i++)
pinMode(i, OUTPUT);
}
void loop(){
angle=0;
F=10;
for(int c1=0; c1<360; c1++)
{
angle=angle+1;
faseu=sin(rad*(angle));
fasev=sin(rad*(angle+120));
fasew=sin(rad*(angle-120));
delay(F);
analogWrite(9, (127+(127faseu)));
analogWrite(10, (127+(127
fasev)));
analogWrite(11, (127+(127*fasew)));
}
}

in caso affermativo come mai per F=0 la frequenza resta bassa?
Non so se la strada che ho intrapreso sia quella giusta perchè
ho già visto altri problemi quindi so che la soluzione è lontana ma per ora i problemi principali per me sono questi.
Grazie a tutti quelli che interverranno
Ciao

Sherekhan:
.......
const float rad=(6.283185307179586476925286766559/360);
.......

Non sono in grado di aiutarti ma a occhio credo che tutti quei decimali verranno arrotondati

dici che 6,28 può bastare? :stuck_out_tongue:

... all'idea di fare un progetto per un inverter che faccia girare un motore asincrono trifase a velocità variabile inizio a trovarmi nei primi vicoli ciechi.

Dimenticalo. Ci sono tanti di quei problemi nella parte di potenza che non potrai risolvere che non ha senso che spendi tempo per provare di fare la parte di programmazione. Devi cambiare la frequenza di PWM prché 490Hz é roppo poco.
Ciao Uwe

Non credo che la strada sia quella giusta, però parlarandone forse arriviamo a capirci tutti quanti.

Lasciamo perdere la parte di potenza, intanto non puoi fare a meno di una strumentazione di base che nel tuo caso deve prevedere un'oscilloscopio.

il delay(10) introduce un ritardo di 10ms tra un ciclo e l'altro, in pratica le tre PWM rimangono immutate per 10ms. In effetti non aggiornando i PWM per x tempo ha l'effetto di abbassare la frequenza di pulsazione.

Che frequenza hai con F=0?

In teoria per evitare di impegnare il micro in calcoli a virgola mobile si creando delle matrici precalcolate in RAM. Il fatto è che il micro in questione non ha un processore matematico e quindi tutti i calcoli vengono svolti dalla libreria, questo comporta una certa lentezza elaboartiva. La causa un bassa frequenza anche con F=0 potrebbe anche essere legata alla funzione digitalWrite.

Forse è il caso di buttare giù qualche tabella con i dati principali.

PWM_freq?
(e impostata di base a 490HZ)

quanti punti usare per campionare la sinusoide?
(255 punti di base)
Quale sarà il range di frequenza di questa sinusoide?
(80HZ to 300HZ)

L'ide è quella di scrivere i valori del pwm in un array e usare i puntatori per prendere il valore. Ragiunto l'ultimo valore si riparte dall'inizio dell'array.
Così è sicuramente più rapido che calcolare i valori in float.

Ciao.

MauroTec:
La causa un bassa frequenza anche con F=0 potrebbe anche essere legata alla funzione digitalWrite.

Dove vedi un digitalWrite?
Concordo di memorizzare i valori in una tabella.
Caio Uwe

Sherekhan:
all'idea di fare un progetto per un inverter che faccia girare un motore asincrono trifase a velocità variabile inizio a trovarmi nei primi vicoli ciechi.

Premesso che il driver di potenza è decisamente molto complesso e richiede un'ottima conoscenza dell'elettronica analogica, però non puoi generare tre sinusoidi sfasate di 120° con frequenza variabile usando i generatori PWM di Arduino.
Il solo modo per avere tre onde quadre, quindi duty cycle esattamente al 50%, sfasate a 120° tramite Arduino è generarle via software e tenuto conto delle basse frequenze in gioco, andiamo da pochi Hz a 50 Hz se parliamo di un normale asincrono trifase da collegare alla 380, non è una cosa difficile da fare, non ti servono i numeri float e nemmeno la conversione in radianti, lavori direttamente in gradi sotto forma di numeri interi da 0 a 360 con il supporto di un timer.
La conversione da onda quadra a sinusoide reale la fa il driver di potenza tramite filtro passa basso, ed è qui che cominciano i primi problemi dove è necessario conoscere bene l'elettronica analogica, poi lo stadio di potenza vero e proprio, che è costituito da tre halfbridge ad alta tensione, è un discorso a parte che richiede moltissima esperienza con queste cose.
Morale della favola, lascia perdere perché è un problema che è molto più grosso di te e perché Arduino non è indicato per questo genere di applicazioni, esistono mcu specifiche, p.e. i PIC 18F2431, verticalizzate per questo genere di applicazioni grazie a periferiche specifiche.

Dove vedi un digitalWrite?

In nessun posto. my memory corrupted.

Quella di astro è la via breve, quella da te intrapresa è più complessa e moderna.

Tu vuoi un inverter trifase ad onda sinusoidale con frequenza variabile. Che tradotto significa che oltre a modificare la frequenza della sinisoide controllo anche l'ampiezza di queste.

Io penso che scendendo a basso livello qualcosa si riesce ad ottenere, tuttavia potresti trovarti facilmente impiccato con il tempo, che qui è critico, sopratutto perchè dovresti anche trovare il modo di creare un feedback per dosare il PWM. Cioè ci vuole un controllo inversamente proporzionale all'ampiezza della sinusoide, così da mantenere stabili le tre sinusoidi. Il vantaggio lo ritrovi lato potenza che richiede un filtraggio blando per avere in uscita delle sinusoidi.

Mentre pilotando i gate con tre onde quadre dovrai usare un trasformatore particolare che ha anche la funizione di approssimare una sinusoide.

Insomma come detto è molto complesso, ma non ti scoraggiare.

Ciao.

Con la mia esperienza di programmazione.... mi prendo 2 mesi per capire e provare ciò che mi avete consigliato.
Ringrazio tutti per gli interventi ed ora a poco alla volta comincio a provare qualcosa.
Se scriverò fesserie galattiche può essere che sono troppo indietro per capire in dettaglio le vostre risposte
e quindi finchè avete pazienza chiedo, quando vi rompete le @@ ditemelo non c'è problema. (Ho letto le risposte e le soluzioni che avete dato in altri topic,
penso che sia lontana la data nella quale io potrò contraccambiare e dare un aiuto a voi)
Entrando nel vivo:
La frequenza del PWM si setta?, come?
La sinusoide ho tentato di campionarla su 360 punti,
fare 180 campionamenti sarebbe comunque ragionevole per muoversi in un range dai 40 ai 100Hz?
Non ho trovato documentazione chiara ed esemplificativa sugli array, che mi consigliate di leggere?
Usare dei puntatori per prendere il valore da un array, come si fà? o cosa e dove mi consigliate di leggere
per capire la faccenda?
Il codice che ho postato per F=0 va ad un paio di Hz massimo.

Oggetivamente uwe e Astrobeed avete ragione, ma qualcosa di complesso da fare è il filo d'unione per imparare ad usare Arduino partendo da qualcosa che conosco (ho fatto l'apprendista progettista di motori elettrici anni fà) e quindi vado avanti col mio sogno "inverterino" , ma contemporaneamente vado a vedere anche i PIC 18F2431 che mi ha indicato Astro perchè per me potrebbero diventare pane quotidiano a breve termine.
Forse se tutto va bene ritorno alla progettazione dopo qualche anno di buio

La frequenza del PWM si setta?, come?

Non saprei dirti in modo semplice come si fà, posso dirti che c'è da studiare il datasheet del microcontroller che stai usando. In specifico Atmega328 per Arduino UNO e 2009, Atmega1280 o 2560 per Arduino Mega. Occore studiare il datasheet perchè è necessario impostare la frequenza il timer ecc, modificando direttamente i registri interni del microcontroller.

La sinusoide ho tentato di campionarla su 360 punti,
fare 180 campionamenti sarebbe comunque ragionevole per muoversi in un range dai 40 ai 100Hz?

Nota che fare questo lavoro ha senso se devi implementare un controllo dell'ampiezza della sinusoide che generi, diversamente si fa come dice astro.

Non ho trovato documentazione chiara ed esemplificativa sugli array, che mi consigliate di leggere?
Usare dei puntatori per prendere il valore da un array, come si fà? o cosa e dove mi consigliate di leggere
per capire la faccenda?

Un libro sul linguaggio C generico, megli se più d'uno. Cerca delle risorse in rete, ne troverai tantissime, quale leggere? apri un topic e posta quello che hai trovato. Si tratta di scrivere e leggere direttamente nella ram, senza aiuti, se vai fuori la memoria allocata leggerai valori a caso, se scrivi fuori comprometti il contenuto della memoria ed il programma si blocca o assume comportamenti anomali.

Per ricostruire una intera onda a 50HZ ti serve variare il PWM 360 volte in 20ms, quindi ogni istruzione che modifica il ciclo dovrebbe impiegare un tempo minore di 0.05 ms, per questo ottieni frequenze basse anche con F=0. Quelle istruzioni sono lente da processare, più tutti i calcoli.
Prova a ridurre il campionamento a 255, cioè 127 gradini, sicuramente ci sarà un sensibile aumento di frequenza a parita di F.

Fondamentalmente il problema è semplice, il difficile è implementarlo in modo efficiente, perché non c'è molto margine. Prova a ridurre

Ciao.

MauroTec:

La frequenza del PWM si setta?, come?

Non saprei dirti in modo semplice come si fà, posso dirti che c'è da studiare il datasheet del microcontroller che stai usando. In specifico Atmega328 per Arduino UNO e 2009, Atmega1280 o 2560 per Arduino Mega. Occore studiare il datasheet perchè è necessario impostare la frequenza il timer ecc, modificando direttamente i registri interni del microcontroller.

Eh, sì. Non è semplice. Bisogna agire modificando a mano i timer del micro, e per far ciò va letto bene il datasheet e capito come modificare i registri del micro in maniera diretta. Se ne è parlato in un'altra discussione recentemente.

Sherekhan spiegami perché vuoi costruirti questo Inverter per motori trifasi. Hai esperienza di elettronica per 350V e le idee chiare con motori asincroni?
Ciao Uwe

Ho le idee chiare sugli asincroni trifase (li ho progettati e prodotti per 15 anni) , voglio andare a fondo della possibilità di costruire un inverter trifase perchè mi sono sempre chiesto perchè sono così costosi; e se dovesse essere solo un cartello di chi li produce? Se così fosse credo che mi rimetterei a lavorare in proprio, Se non ci riesco pazienza. Ti faccio un esempio, il motivo per il quale i motori brushless sono così costosi lo so:
è per il costo e la quantita di magnete permanente (spesso in neodimio) che serve per costruirlo, e contro quello nessuno ci può fare niente per altri buoni 15 anni momento in cui scadono alcuni brevetti che riguardano la produzione di questi magneti. Avere la possibilità di avere un asincrono che varia di velocità (anche se ovviemente non potrà mai restare in coppia a velocità 0 proprio per la sua stessa natura) può esserci un margine economico per pensare di produrlo. In questo momento è importante avere delle idee nuove, non escludo che possa essere una caxxata ma almeno ci provo.

per l'elettronica ad alta tensione sto a 0 ma posso farmi aiutare.

Posso dirti di un inverter per una centrifuga da laboratorio che ho riparato: 7 transitori da 38€ uno (6 per la trifase e 1 per la resistenza di frenata). Pilotaggio dei tre transistori riferiti a +315V isolato tramite trasformatorino. Velocitá di rotazione motore fino 10000 giri (che sono 166Hz); Frequenza di PWM per simulare la sinusoidale: 10kHz, Frequenza di modulazione per i trasformatori: 275kHz.
Un microprocessore genera il segnale PWM. una quindicina di TTl per creare i segnali di pilotaggio dei Transistori.
Cao Uwe