Genauigkeitsproblem eines DDS bei sehr niedrigen Frequenzen

8

Zum ersten Mal in meinem Leben verwende ich diesen DDS-Chip (AD9850), um eine Sinuswelle mit einer gewünschten Frequenz zu erzeugen, wobei ich den Nachschlagetabellencode und die gewünschte Frequenz hochlade. Befehl über einen mit Mikrocontroller. Daher ist mein Wissen im Moment sehr begrenzt.

Die Sache scheint bisher in Ordnung zu sein, aber das Problem liegt bei sehr niedrigen Frequenzen. Bei 1Hz und sogar 0,5Hz scheint das in Ordnung zu sein. Ich brauche aber auch bis zu 0,1Hz.

Hier ist die Ausgabe von DDS, wenn ich die Nummer 0.1 über den Mikrocontroller an das DDS sende :

Geben Sie hier die Bildbeschreibung ein

In meinem Code sende ich den Befehl vom PC als String an micro und konvertiere ihn in double. Der Einfachheit halber und zur Überprüfung verwende ich diesen Code und setze für 0,1 Hz sendFrequency (0,1) in der Schleife.

Wie Sie jedoch sehen, beträgt der Zeitraum für 0,1-Hz-Befehle etwa 11,5 Sekunden anstelle von 10 Sekunden.

Ich hoffe, ich konnte das Problem gut erklären. Gibt es eine Möglichkeit, dies zu kalibrieren oder zu optimieren, damit ich ein genaueres Ergebnis erzielen kann? Oder sollte ich mit der Genauigkeit leben? Übrigens, wo im Datenblatt kann man auf eine solche relative Unsicherheit verweisen?

floppy380
quelle
1
Also, was ist das Steuerwort, das Sie an den DDS-Chip senden, und was ist der Referenztakt, den Sie für den DDS-Chip verwenden? Was haben Sie erwartet und wie weit sind diese 11,5 Sekunden davon entfernt? Wir brauchen viel mehr Wissen über Ihr System!
Marcus Müller
@ MarcusMüller Ich benutze diesen Code softgeniedoc.dk/contents/projects/AD9850_tonegen/AD9850.html nur etwas modifiziert, aber der Kern ist der gleiche. Ich konnte aus dem Code nicht ableiten, welche Uhr verwendet wird. Ich habe den Code und den Chip bereitgestellt, was Sie sonst noch brauchen, lassen Sie mich bereitstellen.
Floppy380
Sie haben den Chip mit einer Referenzuhr verbunden. Sie sind buchstäblich der einzige auf dieser Welt, der uns sagen kann, was die Referenzuhr ist. Die Rennstrecke sitzt vor dir, nicht vor uns!
Marcus Müller
Oh, ich glaube, ich dachte, es wird durch den Code behoben oder geändert. Ich werde messen und zurückkommen.
Floppy380
Es ist dieses Modul teleknatron.com/modules/ad9850/index.html, also scheint es 125MHz
floppy380

Antworten:

9

Es ist keine Genauigkeitssache - es ist Auflösung.

Die Vorderseite des Datenblattes gibt eine Abstimmungsauflösung von 0,0291 Hz mit einem 125-MHz-Takt an.

0.0291125×106232

Das sind also ungefähr 30% Ihrer gewünschten Ausgangsfrequenz. Dies ergibt sich aus dem Ergebnis des Hinzufügens des LSB des Abstimmworts zum Phasenakkumulator bei 125 MHz - für eine gegebene Taktfrequenz ist dies dem Chip und der Anzahl der Bits eigen, die sie für den Phasenakkumulator und das Abstimmwort ausgewählt haben.

Sie können versuchen, die Taktfrequenz zu reduzieren - das Minimum beträgt 1 MHz, sodass Sie die Auflösung um mehr als zwei Größenordnungen auf etwa +/- 0,23% bei 0,1 Hz verbessern können sollten.

0.23×1031×106232

Leider müssen sich andere Dinge ändern, um eine optimale Leistung zu erzielen (insbesondere das Ausgangsfilter, bei dem es sich normalerweise um ein elliptisches LC-Filter 7. Ordnung bei diesen Modulen handelt).

Wenn Sie beispielsweise 1 Hz nicht überschreiten müssen, können Sie einfach einen RC-Filter mit einem Cutoff von beispielsweise 100 Hz zum vorhandenen Ausgang hinzufügen, der für viele Zwecke akzeptabel ist.

Spehro Pefhany
quelle
1
Nichts trennt das 125MHz von dem, was ich sehen kann (außer dem DDS selbst natürlich). Sie müssten den Oszillator ablöten und durch ein anderes (niedrigeres) Frequenzmodul ersetzen. Oder deaktivieren Sie es und wenden Sie eine externe Uhr an (es kann einen Freigabeeingang haben. Sie können es nachschlagen). Es ist eine Hardwareänderung.
Spehro Pefhany
1
Das tut es natürlich, aber sie haben nicht genug Bits für Ihre Anwendung eingefügt. Wenn sie dem Abstimmungswort und dem Phasenakkumulator weitere 8 Bits hinzugefügt hätten, wären Sie glücklich (und Leute, die keine so niedrigen Frequenzen benötigen, müssten etwas mehr bezahlen und mehr Bits senden, um den DDS abzustimmen, damit sie es nicht tun sei so glücklich).
Spehro Pefhany
1
Richtig. Es ist jedoch nur für einen 1-MHz-Takt geeignet, sodass auch für Ihre Anwendung nicht alles verloren geht. Das Modulausgangsfilter (diese Induktivitäten und Kondensatoren und Widerstände) ist jedoch nicht geeignet, so dass der Ausgang bei einer viel niedrigeren Taktfrequenz tendenziell verrauscht ist.
Spehro Pefhany
1
Nichts mit Stiften zu tun. Der Modultakt und das Ausgangsfilter sind jedoch für 125 MHz fest ausgelegt.
Spehro Pefhany
1
@SpehroPefhany - FGs der unteren Endbank können und verwenden vorgefertigte DDS-Chips. Darüber hinaus können ICs wie der AD9106 eine beliebige Wellenformgenerierung im A / FG-Stil (mit fester Rate) durchführen. (Die High-End-Benutzer würden zwar ein FPGA + RAM und einen separaten DAC verwenden, aber sie sind im Grunde immer noch die gleichen grundlegenden Dinge, nur um ihre eigene Implementierung zu rollen :)
ThreePhaseEel
7

Was Sie im Datenblatt suchen, ist die Auflösung der Frequenzabstimmung. Für diesen Chip beträgt sie 0,0291 Hz für einen 125-MHz-Referenztakteingang. Ihre Frequenz wird auf ein Vielfaches dieser Zahl gerundet. Diese Zahl basiert auf der Frequenz des Takteingangs des Chips.

Beispielsweise werden 0,1 Hz auf 0,0873 Hz (0,0291 * 3) gerundet. Die Periode für 0,0873 Hz beträgt 11,5 Sekunden, was Sie sehen.

Eine niedrigere Eingangstaktfrequenz führt zu einer höheren Genauigkeit bei niedrigeren Frequenzen. Wenn Sie also eine bessere Genauigkeit bei niedrigeren Frequenzen wünschen, senken Sie die Taktfrequenz.

Pangus
quelle
Wie berechnet man die gerundete Ausgangsfrequenz? Wenn ich zum Beispiel 0,5 an den Chip sende, können Sie dann zeigen, welche Formel verwendet wird und wie die Ausgabe aussehen würde? Damit ich für jeden vorhersagen kann
floppy380
Es wird auf ein Vielfaches von 0,0291 abgerundet. Um die nächsten Vielfachen zu finden, teilen Sie 0,5 durch 0,0291, runden Sie auf die nächste ganze Zahl ab und multiplizieren Sie mit 0,0291. 0,5 / 0,0291 = 17,18, die wir auf 17 runden. Dann 17 * 0,0291 = 0,4947. Wenn Sie also 0,5 Hz eingeben, sehen Sie tatsächlich 0,4947 Hz
Pangus
Oh schön, ich kann sogar den Fehler gegen die Frequenz zeichnen. now-
floppy380
@ ChrisStratton Ups. ja, du hast recht. Ich habe meine Antwort bearbeitet. Danke
Pangus
1
Sie können Frequenzmodulation und Amplitudenmodulation durchführen, aber ich glaube nicht, dass Sie die Nachschlagetabelle auf dem Chip ändern können. Wenn Sie daran interessiert sind, beliebige Wellenformen zu erstellen, lohnt es sich möglicherweise, einen anderen Chip zu untersuchen oder einen DAC zu erwerben und zu versuchen, Ihr eigenes DDS zu erstellen
Pangus