C2000-LaunchPad - Realizzare un voltmetro true rms
- Mauro Laurenti
- Moderatore
Less
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, 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
Less
Di più
- Messaggi: 186
- Ringraziamenti ricevuti 3
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.
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
Less
Di più
- Messaggi: 186
- Ringraziamenti ricevuti 3
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
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:
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.
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
Less
Di più
- Messaggi: 186
- Ringraziamenti ricevuti 3
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.
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.
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.
Ultima Modifica 8 Anni 5 Mesi fa da paoletto. Motivo: Informazioni mancanti
Si prega Accesso o Crea un account a partecipare alla conversazione.
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
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 Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- MODULO GSM SIM900A
- da FABRIZIO
-
- LTerminal - nuove funzioni
- da Mauro Laurenti
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti
-
- FORMULA PER LINEARIZZARE TERMOCOPIA
- da Mauro Laurenti