C2000-LaunchPad - Realizzare un voltmetro true rms

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
8 Anni 6 Mesi fa #11 da Mauro Laurenti
Risposta da Mauro Laurenti al topic C2000-TMS320F28377S LaunchPad
...bene, bene.

Si, confermo che il modulo è piuttosto complesso ma questo è un suo punto di forza.
Probabilmente è tra i migliori presenti sul mercato.

Per la libreria fixed point mi è stato consigliato di utilizzare IQMath.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • paoletto
  • Autore della discussione
  • Elit Utente
  • Elit Utente
Di più
8 Anni 6 Mesi fa #12 da paoletto
Risposta da paoletto al topic C2000-TMS320F28377S LaunchPad
Ciao,

ho visto la libreria, mi pare di capire che serve a trasformare una rappresentazione floating point in una fixed point con notevole incremento delle prestazioni.
Non so però se cambi qualcosa visto che già faccio uso di un'aritmetica intera.
Inoltre non sono sicuro che si possa usare per il F28377S.

Paolo.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • paoletto
  • Autore della discussione
  • Elit Utente
  • Elit Utente
Di più
8 Anni 6 Mesi fa #13 da paoletto
Risposta da paoletto al topic C2000-TMS320F28377S LaunchPad
Ciao, sono andato un po aventi e ho provato ad usare la DPlib in particolare ho provato la funzione Sine Wave Analyzer e devo fire che funziona :cheer:

Tale funz è presente nella controlsuite.
Essa riceve in ingresso i campioni dall'ADC accumulandoli, la frequenza di campionamento, e una soglia di trigger.
Restituisce media, valore efficace e frequenza del segnale.
Bisogna chiamare la funz all'interno della ISR dell'adc con un codice del tipo:
Code:
interrupt void adca1_isr(void) { sineAnalyzer.Vin = (AdcaResultRegs.ADCRESULT0)*((float)3/65536); SineAnalyzer_F_C(sineAnalyzer); Out=sineAnalyzer.Vrms; Freq=sineAnalyzer.SigFreq; AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; }


Si può anche utilizzarla in un task per il coprocessore (CLA) e poi passare i valori di uscita al processore centrale per successive elaborazioni: in questo modo non si interrompe mai il processore centrale a tutto vantaggio delle prestazioni e della precisione. Ma questo è il prossimo step.

Che dirvi, veramente un dispositivo interessante.

Paolo.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • paoletto
  • Autore della discussione
  • Elit Utente
  • Elit Utente
Di più
8 Anni 5 Mesi fa - 8 Anni 5 Mesi fa #14 da paoletto
Risposta da paoletto al topic C2000-TMS320F28377S LaunchPad
Piccolo passettino in avanti, sono riuscito ad utilizzare la FFT floating point.
L'esempio è riportato sulla libreria FPU, Application Programming Interface(FPU)

Il programma acquisisce un segnale in un buffer di dimensione pari ad FFTSize e poi calcola la FFT.
Code:
interrupt void adca1_isr(void) { RFFTin1Buff[resultsIndex++] = (AdcaResultRegs.ADCRESULT0)*((float)3/4096); if(resultsIndex == (RFFT_SIZE - 1) ) { resultsIndex = 0; bufferFull = 1; } AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; }

Code:
//take conversions indefinitely in loop do { //start ePWM EPwm1Regs.ETSEL.bit.SOCAEN = 1; //enable SOCA EPwm1Regs.TBCTL.bit.CTRMODE = 0; //unfreeze, and enter up count mode //wait while ePWM causes ADC conversions, which then cause interrupts, //which fill the results buffer, eventually setting the bufferFull //flag while(!bufferFull); RFFT_f32_win(&RFFTin1Buff[0], (float *)&RFFTwindow, RFFT_SIZE); //applico la finestratura RFFT_f32u(hnd_rfft); //Calcola la FFT RFFT_f32_mag(hnd_rfft); //Calcola il modulo della FFT bufferFull = 0; //clear the buffer full flag //stop ePWM EPwm1Regs.ETSEL.bit.SOCAEN = 0; //disable SOCA EPwm1Regs.TBCTL.bit.CTRMODE = 3; //freeze counter asm(" ESTOP0"); }while(1);

Nell'esempio in foto ho fatto un prova con una onda quadra a 50 Hz, di valore picco-picco di 3v a cui ho sovrapposto una continua di 1.5v.
Frequenza di campionamento Fs = 2560Hz, FFTSize = 2048, risoluzione spettrale Df = 1.25 Hz

La prima foto con finestratura (HANNING window), la seconda senza.

Non è chiarissimo come la libreria scala le righe, non ho capito se è tutto a cura della libreria, oppure tocca al programmatore scalare opportunamente i bins.

Mauro hai qualche suggerimento?

Paoletto.
Allegati:
Ultima Modifica 8 Anni 5 Mesi fa da paoletto. Motivo: Informazioni mancanti

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
8 Anni 5 Mesi fa #15 da Mauro Laurenti
Risposta da Mauro Laurenti al topic C2000-TMS320F28377S LaunchPad
Non ho avuto modo di verificare.
In ogni modo come test iniziale metterei una sinusoide di ampiezza unitaria.
Dal risultato vedi se la posizione in frequenza è corretta e anche l'ampiezza.
In particolare dovresti vedere l'unità di misura delle Y.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi