Eigenbau DDS: Wie Reconstruction Filter realisieren?

  • Hallo Zusammen,

    Ich bin gerade dabei das Thema DDS fuer mich zu verstehen. Ich habe eine Software DDS auf einem ATTiny4313
    entwickelt (DAC ist ein 8bit R-R2 Ladder aus 10k Praezisions-Widerstaenden). Der Prozessor laeuft mit 20MHz,
    der DDS Loop braucht 9 Takte, d.h. f_clk ist 2,222MHz.

    Mein Plan ist nun, mir Signale im Bereich von 700 .. 760KHz generieren zu lassen. Dies soll dann durch einen
    Frequenz-Multiplikator auf 3,5 .. 3,8MHz angehoben werden.

    Soweit die Theorie 8)

    Wenn ich nun 700kHz als Ausgabe-Frequenz im ATTiny einprogrammiere und am Ausgang einen Frequenz-Zaehler
    dranhaenge, zeigt der mir auch 700kHz stabil an. Die Kurvenform auf dem Oszi sieht aber grauenvoll aus.
    Ich denke, dass die 700kHz mit dem 2,222MHz f_clk Image-Frequenzen bilden, die die originale Kurvenform
    ueberlagern (1,522MHz, 822kHz, ...). Bis 100kHz ist das Ausgangssignal sauber, bei 400kHz sieht es schon
    graeulich aus.

    Nun wird ja in DDS Papers immer ein Reconstruction Filter am DAC Ausgang als essentiell angegeben. Mein
    Plan ist deshalb nun, solch ein Filter als aktiven Lowpass mit einem LM318 zu implementieren. Ich habe eine
    Skizze angehangen. Als Cutoff Frequenz habe ich 733kHz (= 1/3 * f_clk) gewaehlt.

    Meine Fragen:
    - Kann der Filter so funktionieren? Mir kommt es vor allem auf eine steil abfallende Flanke kurz oberhalb von
    800kHz an.
    - Ist der LM318 schnell genug fuer diese Anwendung?
    - Sollte ich den Lowpass doch eher aus Spulen/Kondensatoren aufbauen? Ich dachte, dass die Induktivitaeten
    recht gross werden und das ganze dann nicht mehr praktikabel ist.

  • Hallo Uwe, DO8UL und Uwe, DO5PI

    DO8UL herzlich willkommen im Forum.....
    Deine Überlegungen zur Funktion einer solchen Frequenzerzeugung für
    3,5MHz funktioniert. Über die Möglichkeit der 700KHz Erzeugung kann
    Dir der andere Uwe, DO5PI mehr als ich von der rechnerischen Seite
    her erklären. Du solltest dabei bedenken dass Du kein Sinussignal , sondern
    eine geschaltete Treppe mal hoch, mal runter erzeugst. Bei jedem Schaltpunkt
    von einer Treppenstufe weiter zur nächsten wird ein Signalsprung mit unendlicher
    Steilheit durchgeführt. Die sind also Rechtecksprünge und die haben alle möglichen
    Oberwellen in sich vereint. Das Problem für Praxis ist, dass nur die Grundwelle
    benötigt wird, die Oberwellen sind schädlich , diese soll dann noch vervielfacht werden.
    Im ersten Moment der Betrachtung würde ich sagen dass ein enormer Filteraufwand
    erforderlich sein wird. Es gibt noch eine andere Möglichkeit wie Du Dein Ziel der 3,5MHz
    erreichen kannst. Erstelle Dir einen gut funktionierenden "Sinusgenerator" , teile dieses
    Signal durch 8 oder 16 und vergleiche es mit Deinem DDS . Als Vergleicher CD4013
    das ergibt nach dem Vergleich eine Regelspannung mit der Du den Sinusgenerator
    steuerst.
    Wünsche viel Erfolg bei Deinem Vorhaben und hier im Forum
    73 de

    Manfred , dl3arw

  • Hallo zusammen,

    die Rechnung von Uwe/DO5PI ist für mich nicht nachvollziehbar,
    ca. 3 samples ( 2MHz clock/700kHz ) pro Zyklus sind nach Nyquist
    genug, wenn man denn die von Uwe schon identifizierten
    Nebenwellen ausfiltert.
    Das ein aus drei passenden Werten zusammengestückelter
    Sinus ungefiltert nicht so richtig sinus-förmig aussieht ist keine Überraschung.

    Was eine eventuelle L/C Filterung angeht, ist das Problem die brutal hohe
    Ausgangsimpedanz des 2R Netzwerks, die zu extrem hohen L Werten führt.
    Evtl. erst puffern und dann filtern, aber dann kann man auch gleich ein aktives Filter
    nehmen.

    Viel Erfolg

    Peter/DL3PB


    P.S. ...verstehe jetzt die Argumentation von Uwe/DO5PI, er geht offenbar von einer Art PWM aus, vermutlich macht Uwe es
    aber anders, er haut alle ~0.5µsec ( 2MHz 'clock' ) ein 8-bit breites sample, vermutlich aus einer Tabelle, raus.
    Das funktioniert defintiv, es gab mal einen FA ( ?) Artikel dazu - mein bevorzugter µC hatte nur max. 8MHz Taktfrequenz,
    so dass meine Versuche bei gut 200kHz endeten.
    Wichtig ist das Zahl der benötigten Takte konstant ist ( etwa mittels Timer/Interrupt ) und eine scharfe Filterung wie bei
    jeder DDS, typischerweise braucht man >40dB Unterdrückung der Faltprodukte.

    Edited once, last by DL3PB (October 24, 2012 at 8:40 PM).

  • Hallo Peter,

    nun 3 Punkte bedeutet ein Dreieck: -2,5V -- 0V -- +2,5V

    Ich habe aber eine Rechnung für 251 (max. 255) Zwischenpunkte eines Sinussignals aufgemacht.
    Warum sonst sollte man einen 8-Bit DAC implementieren, wenn man ihn nicht nutzen möchte ?

    Ich versuche die Beschreibung etwas ausführlicher zu machen.

    Bei einer Taktfrequenz von 20MHz und 10 Takte für die Ausgabe eines neuen Spannungwerts auf dem DAC-Wandler, ergibt sich ein Spannungsänderungsintervall von 20MHz / 10 Takte = 2MHz.

    In meinem Beispiel ist ein Sinus durch 251 analog Werten definiert, so das sich eine Sinusfrequenz von

    f = 2MHz / 251 = 7,968kHz

    ergibt.

    Gibt man nur jeden zweiten Spannungswert der diskreten Sinuswerte auf dem DAC-Wandler aus, so verdoppelt sich die Frequenz.

    Es ist richtig ein PWM-Signal soll aus 3 "Samples" bestehen, bevor ein neues PWM-Verhältnis angelegt wird. Ziel ist es ja mit Hilfe der PWM-Signal, nach der RC TP-Filterung, einen Sinus zu erhalten.

    Ich hoffe das Bild zeigt nun den Sachverhalt eindeutig.

  • Hallo Uwe,

    die 8 bit beziehen sich auf die Auflösung der Amplitude, dazu später mehr.

    Gedankenexperiment: Wir verringern die Zahl der Stützstellen von 256 kontinuierlich.
    Der Sinus wird immer weniger sinusförmig, immer 'eckiger'. Bei nur noch zwei samples
    pro Zyklus erhalten wir eine reine Rechteckschwingung.
    Das aber ist nichts anderes als ein Sinus der gewünschten Frequenz mit überwiegend
    ungradzahligen Oberwellen, die sich leicht ausfiltern lassen.

    In der Praxis wird man dieses Minimum nicht ausschöpfen um den Filteraufwand gering zu halten,
    und stattdessen z.B. drei oder mehr Amplitudenwerte pro Schwingung benutzen ( muss nicht ganzzahlig sein )

    Die 8-bit Auflösung der Ausgangsamplitude braucht man, da clock und gewünschte Frequenz in
    der Regel gerade nicht in einem geradzahligen Verhältnis zueinander stehen, so dass die Phase durchläuft
    und sich sehr unterschiedliche Amplituder ergeben können, wenn man versucht einen Ausschnitt der
    gewünschten Sinusschwingung durch eine mittleren Wert anzunähern, nichts anderes macht eine DDS.

    Der Einfachheit benutzt sie gleich lange Zeitabschnitte, ist aber nicht Bedingung, erleichtert nur
    die Benutzung von 'look up' Tabellen, die wenig Rechenleistung brauchen und zügig ( Echtzeit ) abgearbeitet
    werden können. ( http://de.wikipedia.org/wiki/Direct_Digital_Synthesis )

    72/3!

    Peter/DL3PB

    P.S. hier ist der erwähnte Artikel: http://techdoc.kvindesland.no/radio/b1/20051213185956709.pdf

  • Hallo Peter und Uwe,

    Genau so ist es. Der Trick bei DDS ist ja gerade, Stuetzpunkte in der Waveform Lookup Table zu ueberspringen, um
    hohe Frequenzen zu erzeugen. Die theoretische Grenze ist die Nyquist Frequenz: In meiner
    Implementierung also 2,222MHz / 2 = 1,111MHz.

    In der Praxis laesst sich dies nicht ausschoepfen: a) Der Sinus wird immer rechteckiger (+ Ueberlagerung mit vielen Misch-
    produkten die in den Bereich < 1,111MHz "zurueckfalten" (Aliasing); und b) Die Signalamplitude geht zurueck. Meine
    Referenz ist ein Paper von Analog Devices (http://www.analog.com/static/importe…ials/MT-085.pdf), welches
    ich nun bestimmt schon 20x mal gelesen habe. Dank meiner Experimente verstehe ich es nun auch etwas besser :rolleyes:

    Ich habe das ganze erst mit Python simuliert und mir ueber Excel die FFT von verschiedenen Durchlaeufen berechnen lassen.
    Passt alles. Die aufgebaute Schaltung macht auch bis mind. 100kHz einen schoenen Sinus ...

    Doch nun nochmal zurueck zu meiner Ausgangsfrage: Hat jemand von euch Erfahrung mit dem Aufbau eines aktiven
    Lowpass Filters mit dem LM318 fuer eine Cutoff Frequenz von 733kHz? Macht die Dimensionierung (s. oben) Sinn?

    Mein Problem ist, dass alle aktiven Lowpass Filter, die ich gesehen habe, im Audio Bereich arbeiten.

    Ciao,
    Uwe / DO8UL.

  • [...] Es gibt noch eine andere Möglichkeit wie Du Dein Ziel der 3,5MHz
    erreichen kannst. Erstelle Dir einen gut funktionierenden "Sinusgenerator" , teile dieses
    Signal durch 8 oder 16 und vergleiche es mit Deinem DDS . Als Vergleicher CD4013
    das ergibt nach dem Vergleich eine Regelspannung mit der Du den Sinusgenerator
    steuerst. [...]

    Hallo Manfred,

    Verstehe ich Dich richtig: Du schlaegst eine Art Eigenbau PLL vor? Dann muesste ich also
    einen 3,5MHz Generator (z.B. Colpitts Oszillator mit Varactor Diode) bauen und dann mit
    der DDS Loesung stabilisieren?

    Ciao,
    Uwe / DO8UL.

  • Hallo Uwe / DO8UL

    Hast es richtig verstanden. Ein sauberes Sinussignal erzeugen, puffern und splitten . Einmal zum Teiler
    und ein mal zur weiteren Verwendung. Habe selber mit Ringkernen im Oszillator gearbeitet und bin sehr
    zufrieden mit der Stabilität der Frequenz. Stimme zwar mit Drehko ab, aber der Referenz-VFO vom
    Tramp8 macht dazu eine gute Figur . Musst Dir dieses Prinzip mal anschauen. Bei mir wird im Tramp
    jeweils nur durch 32 geteilt , ergibt etwa 120KHz abtastfrequenz für die PLL und die Regelspannung
    bleibt sauber , regelt gut und schnell nach, das Ausgangssignal ist einigermaßen sauber.
    Und 120KHz wird Deine jetzige Schaltung doch wohl schaffen.

    73 de

    Manfred , dl3arw

  • Doch nun nochmal zurueck zu meiner Ausgangsfrage: Hat jemand von euch Erfahrung mit dem Aufbau eines aktiven
    Lowpass Filters mit dem LM318 fuer eine Cutoff Frequenz von 733kHz? Macht die Dimensionierung (s. oben) Sinn?


    Das sollte grundsätzilch gehen, auch wenn die Kondensatoren im für Analogschaltungen unüblichen Picofarad Bereich liegen. Schnell genug ist der LM318, um nicht selber als Tiefpass zu fungieren. Allpassfilter zur Gruppenlaufzeitkompensation habe ich schon (vor gefühlten hundert Jahren) bis 5 MHz mit schnellen OP Amps ohne Probleme hingekriegt. Also sollte ein Lowpass genauso gehen. In der Simulation (Bild hängt an) geht es, allerdings liegt die CutOff Frequenz höher. Wenn man in der Simulation einen schnelleren OPAmp nimmt, führt die positive Rückkopplung über das C zu einer deutlichen Anhebung, bevor die Flanke abfällt.

    Um sein Filterdesign zu prüfen gibt es ein praktisches Java Tool von Analog Devices:
    http://designtools.analog.com/dt/filter/filterW.html</a>

    Wenn du mehr Grundlagen hierzu suchst:
    More Filter Design on a Budget

    Filter Design in Thirty Seconds
    Analog Filter Design Demystified - AN1795
    a basic introduction to filters active passive and switched capacitor

    Sollte ich den Lowpass doch eher aus Spulen/Kondensatoren aufbauen? Ich dachte, dass die Induktivitaeten
    recht gross werden und das ganze dann nicht mehr praktikabel ist.

    Damit du ein Gefühl bekommst hier ein Plot eines einfachen 600kHz Filters in passiver Technik. Die Spulenwerte lassen sich mit Ringkernen einfach hinkriegen.


    73, Günter

  • Hallo Uwe,
    dein mit 10K terminiertes Filter aus dem Post vorher sieht in der Simulation nicht sehr berauschend aus (Plot). Warum so hochohmig?

    Lade dir doch einfach bei Gunthard Kraus den Ansoft Designer herunter oder das Filterberechnungsprogramm RFSim99 . Damit kannst du dir dein Filter nach Gusto designen und optimieren.
    Die Spulenberechung dann mit dem Mini-Ringkernrechner.

    73, Günter

  • Hallo Guenter und alle anderen die geholfen haben:
    Komme gerade aus dem Keller zurueck.
    Ich habe den Filter so aufgebaut, wie oben skizziert.

    ES FUNKTIONIERT!
    :thumbup:

    Habe nicht in 10kOhm terminiert sonder einfach den x10 Tastkopf drangehalten:
    - 700kHz ergeben 3.4Vpk,pk
    - 760kHz ergeben 1.8Vpk,pk

    Was ich noch nicht weiss, ist die spektrale Reinheit. Dazu werde ich es kommende
    Woche mal an ein digitales Speicher-Scope mit FFT in der Firma haengen. Fuer
    heute reicht es mir, dass alles schoen sinus-foermig/glatt aussieht :D

    Die 10kOhm kommen von meinem DAC. Den habe ich als R-2R Leiter mit 10/20kOhm
    Praezisions-Widerstaenden aufgebaut. Habe inzwischen 1kOhm SMD Praezisions-
    Widerstaende geordert (nur 7Cent das Stueck). Damit werde ich dann die zweite
    Version aufbauen. Evtl. noch ein trifilar gewickelter Transformer um die
    Source Impendaz auf 110Ohm runterzubringen? Soweit ich verstehe, arbeitet der
    Filter je besser, je weniger ich ihn bedaempfe, richtig?

    Egal, ich geh jetzt erstmal ein Bierchen oeffnen :D

    Ciao,
    Uwe / DO8UL.

  • Soweit ich verstehe, arbeitet der
    Filter je besser, je weniger ich ihn bedaempfe, richtig?


    Das ist nicht ganz korrekt, Uwe. Ein LC-Filter arbeitet dann richtig, wenn es eingangs-und ausgangsseitig mit seiner charakteristischen Impedanz abgeschlossen ist. Das heißt wenn es mit den Widerständen abgeschlossen ist, für die es dimensioniert wurde. Nur dann ist es auch ein Tiefpass mit definierte, Übertragungsverhalten.

    Schließt man deinen Tiefpass mit 1000 Ohm ab, ergibt deine Dimensionierung das gewollte Übertragungsverhalten (Plot als pdf). Schließt man ihn jedoch mit 10K ab, dann ist die Übertragungsfunktion - wie aus dem Plot im Vorpost ersichtlich - als Tiefpass mehr oder weniger unbrauchbar.

    73, Günter