Forum: Digitale Signalverarbeitung / DSP / Machine Learning DAC bzw. DAU - ausgegebene Frequenz ist zu niedrig!


von Frank (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problem. Und zwar errechne ich mir Werte im DSP und 
gebe diese dann über den DAC aus. Z.B. Sinusschwingung. Soweit 
funktioniert alles, nur ist meine Frequenz niedriger als ich sie 
erwarte.

Hier der Pseudocode:

i=0;
updateRate=93000; // 0.093 MSPS
f=50;             // 50 Hz

while(i<93000){
   Wert= 1024 * sin(2*PI*f*i/updateRate)+1024;
   Ausgabe über DAC mittels SPI;
   i++;
}


Vielen DANK schonmal für eure Hilfe.


Gruß Frank

von Marco L. (lehmi)


Lesenswert?

Wie stellst du denn sicher, dass die Schleife in genau einer Sekunde 
durchlaufen wird?

Wie hoch/niedrig ist denn deine Ausgangsfrequenz? Ein paar mehr Infos 
wären hilfreich.

Grüße

von Alexander L. (lippi2000)


Lesenswert?

Exakte Frequenzen erhältst du nur mit ordentlichen Timing. Schon die 
Angabe

updateRate=93000; // 0.093 MSPS

ist nicht korrekt, da du nicht genau weißt wie viele CPU-Takte für den 
kompletten Schleifendurchlauf benötigt werden.

Generell wird so etwas über Timer-Interrupts gelöst. Allgemein würde das 
so aussehen:
1
frequenz = 50;    //Frequenz fs des Ausgangssignals in Hertz
2
samples = 1000;   //Anzahl der Samples pro Periode
3
CPU = 50MHz;      //CPU Frequenz
4
5
sample_ctr = 0;   //globaler sample counter = 0
6
7
int(main)
8
{
9
SetTimer = CPU/(frequenz*samples);    //Setze Teilerverhältnis des Timers  
10
                                     // zu CPU Takt
11
12
while(1;)                             //Endlosschleif
13
}
14
15
//Timer Interruptroutine
16
ISR(TIMER)
17
{
18
 //Sinus mit 1000 Samples berechnen
19
 value = 1024*sin(2*pi*sample_ctr/samples);
20
 Write_DAC(value);                //aktuellen Samplewert an DAC schreiben
21
 
22
 //Sample-Counter bei maximalen Wert wieder auf Null setzen
23
 if(sample_ctr = samples)
24
  {sample_ctr = 0;}
25
26
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.