Forum: Mikrocontroller und Digitale Elektronik Bitte um Hilfe bei DDS


von Marcus (Gast)


Lesenswert?

Hallo,

ich bin grad dabei mich mit dds zu beschäftigen und würde mich über 
Hilfe von euch freuen. Ich will auf einem FPGA Entwicklungsboard 
(Spartan 3e) aus dem Systemtakt 50MHz via dds 40kHz Sinus erzeugen. Ich 
will nur die eine Frequenz haben und es soll dds sein.

Irgendwie habe ich jetzt aber so viele Parameter zu optimieren, dass ich 
nicht weiß wo ich am Besten ansetzen soll. Als erstes steht die 
Entscheidung über die Phasenregisterbreite an. Die minimale 
Frequenzänderung, die ich über die Erhöhung des Tuningwords erzielen 
kann ist mir durch die feste Ausgangsfrequenz egal. Bei z.B. 32 Bit 
Registerbreite bin ich mit entsprechend errechnetem und gerundetem 
Tuningword ziemlich dicht an den 40kHz dran.
Andererseits könnte ich aber die 50Mhz auch ordentlich runterteilen. 
Dann könnte ich bei gleicher Frequenzauflösung bei der kleinen 
Ausgangsfrequenz in der Registerbreite runter gehen.
Aber: Bei einer runtergeteilten Taktfrequenz und größerem Phasenregister 
muss das Tunigword ja entsprechend größer sein.
Mein Gedanke dabei ist, dass ich, um zu errechnen wie viele Samples aus 
meinem Look Up Table bei der Ausgangsfrequenz tatsächlich genutzt 
werden, die Größe des Phasenregisters durch das Tuningword teile. 
Optimal wäre ja z.B. bei Nutzung der oberen 10 MSB des Phasenakkus zum 
ansteuern des Look Up Tables, dass ich auf 1024 komme. Beim 
runtergeteilten Takt wäre das ja entsprechend weniger und ich würde 
Auflösung verschenken. (Oder?) In dem Zusammenhang finde ich keine 
richtigen Entscheidungskriterien darüber, wie viele der oberen Bits des 
Phasenakkus ich zum Ansteuern des Look Up Tables benutze. Je mehr desto 
besser, aber - ich komme nicht drauf wie ich, wenn ich nur die eine 
Ausgangsfrequenz haben will, die optimale Anzahl bestimme.

Ich würde mich über jeden Tipp von euch freuen, wenn irgendwas oben 
unverständlich ist kann ich auch mehr erklären was ich meinte.

Viele Grüße und einen schönen Sonntag, Marcus

von eProfi (Gast)


Lesenswert?

"Andererseits könnte ich aber die 50Mhz auch ordentlich runterteilen.
Dann könnte ich bei gleicher Frequenzauflösung bei der kleinen 
Ausgangsfrequenz in der Registerbreite runter gehen."

Wenn Du die Basisfrequenz herunterteilst, wird das Verhältnis Fsample / 
Fout schlechter, dadurch muss der Ausgangsfilter steiler werden, um 
weniger Oberwellen zu haben.

Je kleiner die Lookup ist, desto größer werden die Phasensprünge.


"Mein Gedanke dabei ist, dass ich, um zu errechnen wie viele Samples aus 
meinem Look Up Table bei der Ausgangsfrequenz tatsächlich genutzt 
werden, die Größe des Phasenregisters durch das Tuningword teile."

Vermutlich werden mit der Zeit (nach mehreren Durchläufen) alle Einträge 
verwendet. Deswegen nimmt man ja so viele.



Hast Du die theoretischen AD-ANs gelesen?

von Marcus (Gast)


Lesenswert?

Hallo eProfi,

erstmal vielen Dank für deine Antwort.

"Wenn Du die Basisfrequenz herunterteilst, wird das Verhältnis Fsample /
Fout schlechter, dadurch muss der Ausgangsfilter steiler werden, um
weniger Oberwellen zu haben."

Ich bin davon ausgegangen, dass Fsample im Verhältnis zu Fout so hoch 
ist, dass ich mir selbst bei einer Teilung durch 16 oder sogar noch mehr 
über die Flankensteilheit des Filters kaum sorgen machen muss.


"Vermutlich werden mit der Zeit (nach mehreren Durchläufen) alle 
Einträge
verwendet. Deswegen nimmt man ja so viele."


Bump. Einfacher Satz mit viel Wirkung - du hast Recht. Daran, dass sich 
die Verhältnisse in einem bestimmten Zyklus bei jedem Durchlauf ändern 
hab ich einfach nicht gedacht.

"Je kleiner die Lookup ist, desto größer werden die Phasensprünge."

Ja, das ist mir klar. Nur hab ich gedacht, dass es für eine feste 
Frequenz vielleicht an Optimum an Bits gibt die genutzt werden. Wenn ich 
aber einen Absatz weiter nach oben gucke ist dem wohl nicht so.



Mal als Beispeil was ich meinte: die Anzahl der pro Periode ausgegebenen 
unterschiedlichen Samples ist Fsample/Fout. Bei einer Registerbreite von 
32 Bit bei Fsample=50MHz sind das 1250, bei Fsample/16=3,125MHz nur 78. 
Also viel geringe Phasensprünge bei der höheren Frequenz. Andererseits 
sollte das egal sein, wenn das Filter richtig arbeitet. Ich wüsste 
trotzdem nicht, wie viel Bit aus dem Phasenregister ich zum adressieren 
des Look Up Table "optimal" nutzen sollte. Wahrscheinlich müsste ich 
genau nachrechnen was für Frequenzen durch das Abschneiden der anderen 
Bits entstehen und schauen das die nicht zu weit in die Nähe meiner 
Ausgangsfrequenz rutschen - und die Wahrscheinlichkeit sinkt mit 
steigendender Bitzahl zum Addressieren, oder?

Nachdem ich jetzt weiß was du mit AD-ANs meinst ;) Ja, ich hab sie neben 
mir zu liegen und auch drin gelesen. Es gibt halt viele Parameter und 
für mich ist's schwer ein Optimum für alles zu finden.

Viele Grüße, Marcus

von eProfi (Gast)


Lesenswert?

Mach Dir nicht zu viele Gedanken, bei dieser niedrigen Ausgangsfrequenz 
spielt das nahezu keine Rolle.
Nimm 256 oder 1024 und gut ist's.


Aber: man lernt viel dabei.


Wie gibst Du denn aus? hat das FPGA einen integrierten DAC? oder Extern? 
Oder R2R?

Könntest Du bitte das Ergebnis Deiner Überlegungen (Programmierung des 
FPGA) hier posten. Würde mich interessieren.

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.