mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DDS - Verständnisfrage


Autor: Eckhard Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich beschäftige mich grade mit dem Thema DDS.
Nun habe ich dazu eine Frage.
Also, der Phase Accumulator ist ja, soweit ich das verstanden habe, 
nichts anderes als ein Zähler, der die Adressen für das Phase ROM 
erzeugt. Richtig?
Und das Frequency Tuning Word ist nichts anderes, als der Wert, um den 
der Phase Accumulator mit jedem Takt erhöht wird. Stimmt das auch?

Nun habe ich bereits gelesen, dass bei besseren Geräten bis zu 48 Bit 
breite Phase Accumulatoren verwendet werden. Dazu muss ja der Speicher, 
wo dann die Waveform abgelegt ist (also das ROM) eine Grösse von mehr 
als 4 Gigabyte haben! Und das auch nur, wenn die Signalform mit 8 
BitGenauigkeit gespeichert wird. Meist hat man ja aber 10..14 Bits, also 
wird noch mehr Speicher gebraucht!
Meine Frage heirzu ist jetzt: Wie wird das denn da gelöst? Wenn ich 
einen Funktionsgenerator bauen will, kann ich ja da wohl kaum ein Flash 
einbauen mit 4G Speicher.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Eckhard Meier (Gast)

>nichts anderes als ein Zähler, der die Adressen für das Phase ROM
>erzeugt. Richtig?

Ja.

>Und das Frequency Tuning Word ist nichts anderes, als der Wert, um den
>der Phase Accumulator mit jedem Takt erhöht wird. Stimmt das auch?

Ja.

>wo dann die Waveform abgelegt ist (also das ROM) eine Grösse von mehr
>als 4 Gigabyte haben!

Das wären "nur" 32 Bit.

>Meine Frage heirzu ist jetzt: Wie wird das denn da gelöst?

Man nimmt vom Phasenakkumulator nur die oberen 10..16 Bits. Dadurch hat 
man immer noch eine sehr hohe Frequenzauflösung.

>einen Funktionsgenerator bauen will, kann ich ja da wohl kaum ein Flash
>einbauen mit 4G Speicher.

Klar, kostet doch nur noch ein paar Euro ;-)

MFG
Falk

Autor: Eckhard Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk,
neee, das mit dem 4G Flash vergessen wir besser wieder ;-)
Wie viele Bits sollte man mindestens nehmen vom Phasenakku?
Und was bietet das für einen Vorteil? Man könnte dann ja direkt einen 
langsameren Zähler nehmen.

Dann:
Wie stellt man die Amplitude des Ausgangssignals sinnvoll ein? Dazu 
müsste man ja jeden Amplitudenwert, den man aus dem ROM gelesen hat, mit 
einem bestimmten Faktor multiplizieren (oder dividieren). Das gibt ja 
nen grossen Rechenaufwand. Wie wird das tatsächlich realisiert?
Und, eine letzte Frage:
Wie viele Punkte sollte man für eine ganze Periode ungefähr mindestens 
haben, um einen guten Sinus erzeugen zu können? Reichen wohl 256 Punkte, 
oder geht es sogar mit noch weniger?

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für einen DDS-Sinus sollte in der Tabelle kein Sprung >1
vorkommen um die Auflösung optimal auszunutzen.

Die Tabellengröße in Abhängigkeit der Auflösung des DA-Wandlers
kann man einfach Berechnen.

Bei 8 Bit währen das 804.

Da man jedoch die Tabelle auch in 2^n anlegt sind es 1024 Einträge.

Mehr Einträge bringen nichts.

avr

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eckhard Meier schrieb:

> Und was bietet das für einen Vorteil? Man könnte dann ja direkt einen
> langsameren Zähler nehmen.

Stell dir einfach mal vor, dein Phasenakku hat nur 8 Bit und die 
Berechnung des Frequency Tuning Word ergibt 2.5

Wie machst du das dann?

Als FTW 2 nehmen. Oder doch 3?

Man könnte natürlich auch einfach einen 9 Bit breiten Akku nehmen, davon 
nur die obersten 8 Bit für die Adressierung in den Speicher nehmen und 
das unterste Bit brauch ich nur deshalb, weil dort die 0.5 reinkommen 
und sich sauber aufaddieren auch wenn sie in die eigentliche 
Adressierung des Speichers so nicht eingehen.

Jetzt geht sich das aber nicht immer so schön aus, auf 0.5.
Was ist, wenn rauskommt, dass der Nachkommaanteil im FTW .214583 sein 
müsste?

Autor: Eckhard Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@avr

Wenn ich so die optimale Tabellengrösse berechne, funktioniert das dann 
auch noch bei grösseren Frequenzen? denn da kann es ja gut sein, dass 
der Phasenakku mit einem so ungünstigen Wert inkrementiert wird, dass 
nicht bei jeder Periode die selben Werte aus dem Akku geholt werden. 
(enthält der Akku z.B. 1024 Werte, und wird mit 5 inkrementiert, dann 
kommen nach jeiner Periode 1024 andere Werte raus oder.).

@Karl heinz

Alles klar! jetzt verstehe ich. So lässt sich eine bessere Auflösung 
erreichen. Vielen Dank!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Eckhard Meier (Gast)

>Wie viele Bits sollte man mindestens nehmen vom Phasenakku?

8++

>Und was bietet das für einen Vorteil? Man könnte dann ja direkt einen
>langsameren Zähler nehmen.

Lesen. Ich schrieb was von höherer Frequenzauflösung.

>Wie stellt man die Amplitude des Ausgangssignals sinnvoll ein? Dazu
>müsste man ja jeden Amplitudenwert, den man aus dem ROM gelesen hat, mit
>einem bestimmten Faktor multiplizieren

Ja.

> (oder dividieren).

Nein. Man multipliziert lieber mit Zahlen kleinr 1 mittels 
Festkommaarithmetik.

> Das gibt ja nen grossen Rechenaufwand.

Nöö, ein Multiplizierer ist relativ einfach in einem FPGA zu bauen.

> Wie wird das tatsächlich realisiert?

Multiplikation.

>Wenn ich so die optimale Tabellengrösse berechne, funktioniert das dann
>auch noch bei grösseren Frequenzen?

Wenn dein FPGA bzw. ASCI das schafft.

> denn da kann es ja gut sein, dass
>der Phasenakku mit einem so ungünstigen Wert inkrementiert wird, dass
>nicht bei jeder Periode die selben Werte aus dem Akku geholt werden.

Das passiert sowieso. Das ist einer der Nachteile von DDS. Dadurch 
entsteht eine ungewollte Amplitudenmodulation, welche den reinen Sinus 
verunreinigt mit Nebenwellen (Zweiseitenbandmodulation).

MfG
Falk

Autor: Eckhard Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk
also, pro Periode mindestens 256 Werte sollte schon für einen 
einigermassen guten Sinus reichen. Richtig?

Weiter habe ich da noch ne Frage:
Wäre es prinzipiell auch möglich, die Symmetrie von einem Dreiecksignal, 
das mit DDS erzeugt wird, zu beeinflussen? Sprich die 
Anstiegsgeschwindigkeit der steigenden und fallenden Flanke zu 
beeinflussen.
Angenommen z.B. 10 kHz Frequenz, ergibt 10 us Periodendauer. Und die 
ansteigende Flanke vom Dreiecksignal soll nur 2 us dauern, die 
abfallende demnach 8 us. Ist sowas auch machbar, OHNE jede mögliche 
Kombination im ROM abzulegen?

Ist grundsätzlich der Selbstbau eines DDS-Funktionsgenerators bis sagen 
wir 1 MHz möglich? Das ergibt ja schon eine gewaltige Frequenz für den 
Eingangstakt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Eckhard Meier (Gast)

>also, pro Periode mindestens 256 Werte sollte schon für einen
>einigermassen guten Sinus reichen. Richtig?

Ja.

>Wäre es prinzipiell auch möglich, die Symmetrie von einem Dreiecksignal,
>das mit DDS erzeugt wird, zu beeinflussen?

Ja, einfach die passende Signalform in den RAM laden. Also Dreieck statt 
Sinus.

>abfallende demnach 8 us. Ist sowas auch machbar, OHNE jede mögliche
>Kombination im ROM abzulegen?

Schwer. Könnte man ggf. tricksen.

>Ist grundsätzlich der Selbstbau eines DDS-Funktionsgenerators bis sagen
>wir 1 MHz möglich?

Ja.

> Das ergibt ja schon eine gewaltige Frequenz für den Eingangstakt.

Warum? Theoretisch 2 MHz, wenn man nur Sinus erzeugen will. Will man 
aber auch noch ein gutes Dreieck/Sägezahnsignal bei 1MHz erzeugen, 
braucht man 10..50 MHz. Das ist aber auch noch machbar. Nimm einem 
kleinen CPLD, gesteuert durch einen uC, z.B. AVR. Der kann dann relativ 
gemütlich die verschiedenen Muster für deinen variablen Sägezahn 
berechnen und in einen kleinen SRAM schreiben. Im CPLD steckt dann der 
Phasenakku, welcher dann den SRAM steuert und die Daten ausgibt.

MFG
Falk

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für ein Dreiecksignal braucht es keine Tabelle.
Da ist das Ableiten des Ausgabewertes aus dem Zähler
schneller.
Die Tabelle wird für Signale benötigt deren Berechnung
zu aufwändig ist.
Eine "Selbstbau DDS" mit einem µC ala AVR ist nur im NF-Bereich
(bis ca. 15 kHz) sinnvoll, bei AVR32 auch etwas höher.

Für 1 MHz sollte man auf fertige Bausteine (Analog hat welche)
ausweichen und nur die Einstellung mit einem µC machen.

avr

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Softwarelösung im AVR Controller kreigt man die Schleife auf 10 
Zyklen, mit einem 24 Bit Phasenakku auch 8 Zyklen wenns sein muß. Damit 
hätte man bei 20 MHz Takt immerhin schon 2 MHz Samplingrate. Das sollte 
für mehr als 20 kHz reichen.

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 2 MHz Samplingrate.

das reicht sogar für theoretisch 1MHz, wenn Du den richtigen 
Antialiasing
Filter dahinter setzt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe [[DDS)), dort gibt es so ein Projekt mit AVR.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.