Vai al contenuto
PLC Forum


Sfasare di 120° delle tensioni.


morgan.106

Messaggi consigliati

L'autore non c'è più, ma a me ha fatto nascere una curiosità, come spesso accade leggendo le discussioni sul forum, che ho dovuto assolutamente soddisfare

e così, ecco il risultato finale

 

5b3024f2fdc85e40a10d97739c3a44f1.jpg

 

Ho dovuto semplificare perchè il pic usato faceva fatica a calcolarsi i 3 array

 

coeffR[Angolo]=(Offset+(Offset*(sin((float)((Angolo*pi)/180)))));

coeffS[Angolo]=(Offset+(Offset*(sin((float)((120+(Angolo*pi))/180)))));

coeffT[Angolo]=(Offset+(Offset*(sin((float)((240+(Angolo*pi))/180)))));;

 

quindi, ho eseguito i calcoli in excell ottenendo 3 tabelle da 30 campioni che rappresentano il valore del duty cycle di ogni pwm per ogni passo di 12°

 

         int                R[30]={511,619,721,813,895,956,1002,1022,
                                   1022,1002,956,895,813,721,619,517,
                                   
                                   404,302,210,128,67,21,0,0,21,
                                   67,128,205,302,399};

         int                S[30]={956,895,813,721,619,517,404,302,
                                   210,128,67,21,0,0,21,67,128,205,
                                
                                   302,399,506,619,721,813,895,956,
                                   997,1022,1022,1002};

         int                T[30]={67,21,0,0,21,67,128,205,302,399,
                                   506,619,721,813,895,956,997,1022,
                                   
                                   1022,1002,956,895,818,726,624,517,
                                   404,302,210,133};

 

Di conseguenza la routine che viene eseguita in interrupt è molto snella

 

//##############################################################################
//                        Interrupt Routine
//##############################################################################
void interrupt(){
     if(INTCON.TMR0IF)
     {
     Angolo=Angolo+1;
     if(Angolo>29)Angolo=0;
     PWM1DC = R[Angolo];
     PWM2DC = S[Angolo];
     PWM3DC = T[Angolo];
     PWMLD  =0x7;
     TMR0   = 174;
     INTCON.TMR0IF = 0;
     }
    }

 

e questo è il risultato

 

aebad1a87bc5a44ab623aeda6631ab0d.JPG

 

e rimane abbastanza spazio per fare altro

 

d7b2d5d90bc69fcffda6e20d81871419.JPG

 

 

 

 

 

Link al commento
Condividi su altri siti


Troppo buono...grazie :thumb_yello:

 

Nel frattempo...la forma d'onda e il livello d'uscita migliorano ulteriormente ponendo R=10K  C=470nF.

Misurando la distorsione con la red mi fornisce un bel 0.8% ...e devo fidarmi perché non ho un vero distorsimetro 

Link al commento
Condividi su altri siti

 

Quote

peccato che chi ha aperto la discussione sia sparito dopo il primo messaggio

 

Pazienza :senzasperanza:

 

Vorrà dire che non continuerò con eventuali miglioramenti.

 

Pensavo di non sprecare i pins liberi e creare un segnale di sincronismo...e rendere variabile la frequenza da 8 a 110Hz....

 

df0f74596b87e1f4a023ebd776c0a1c1.jpg

 

f1decd924336cc3a2e9b4f0cdf818c16.JPG

 

b1757875ce192b42c178eae14950ddc4.JPG

 

...sarà per un'altra volta :)

Link al commento
Condividi su altri siti

Eh ma non posso allontanarmi un mesetto che mi date per disperso :-D !

Scherzi a parte siete straordinari tutti!

Alcune soluzioni sono davvero interessanti ma molto sofisticate al punto da dover scegliere quella del motore trifase. È una soluzione che mi garantisce la riuscita.

 

Quanto scritto data voi non è certo vano.... rimane a disposizione di tutti.

 

Grazie.

 

Link al commento
Condividi su altri siti

Scopo del forum è, soprattutto la circolazione di idee.

Una domanda spesso porta a speculazioni intellettuali (tanto per usare parole grosse :P) che propongo soluzioni differenti.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...