DDS-Sinus-Rechteck-Generator für AM-Modulation von 1 Hz bis 40 MHz mit einem AD9850 oder AD9851, einem ATmega328 und einer Arduino-Firmware

18. Dez. 2016

Dieses Selbstbauprojekt erzeugt mit Hilfe des DDS-Bausteins AD9850 ein Sinus- und ein Rechtecksignal von 1 Hz bis 40 MHz. Der Microcontroller ATmega328 steuert den DDS-Baustein.  Die Firmware liegt als Arduino-Sketch vor, welche nach eigenen Bedürfnissen anpassbar ist. Die Materialkosten liegen bei unter 20 Euro. Zudem beherrscht dieser Generator die Amplituden-Modulation.

Im Prinzip handelt es sich um einen Nachbau, welcher auf

http://www.vwlowen.co.uk/arduino/AD9850-waveform-generator/AD9850-waveform-generator.htm

vollständig mit dem Leiterplatten-Layout, der Firmeware und dem Schaltbild beschrieben ist.

Die dortige Seite liefert mit etwas Überlegung sämtliche Angaben zur Verdrahtung der Schaltung. Empfehlenswert ist die Verwendung einer gedruckten Schaltung, wie sie auf dieser Seite dort als Layout vorliegt.

Da mir Leiterplatten als Basismaterial mit Fotopositiv-Beschichtung fehlten, habe ich mich für einen Aufbau auf einer Lochrasterplatte entschieden. Das funktioniert natürlich auch. Allerdings ist die Gefahr von Verdrahtungsfehlern groß. Schließlich hatten einige Steckverbinder Wackelkontakte, deren zeitraubende Fehlersuche die Bastelfreude trübte. Die Anfertigung einer Leiterplatte spart also Zeit und vereinfacht den Nachbau.

Nachbau des DDS-Sinusgenerators auf einer Lochrasterplatine (größere Ansicht per Mausklick auf das Bild).

Einen Nachbau des  DDS-Generators auf Lochrasterplatte ist für Mutige mit viel Zeit empfehlenswert. Als Draht dienten mir die einzelnen Drähte eines verzinnten Elektrokabels. Das braun-weiße Kabel greift das Sinus-Signal ab.

Was ist DDS? DDS ist unter https://de.wikipedia.org/wiki/Direct_Digital_Synthesis beschrieben. Vereinfacht betrachtet verarbeiten DDS-Bausteine analoge Signale mit Hilfe der digitalen Signalverarbeitung. Ihre Ein- und Ausgänge besitzen Analog-Digital- und Digital-Analog-Wandler. Zudem ist die Rechnerarchitektur für die Rechenoperationen der digitalen Signalverarbeitung optimiert. Wie das genau funktioniert, muss man nicht wissen, wenn man zu vorgefertigten Bibliotheken greift.

Materialbeschaffung, Bauteileliste, und Kosten: In der Bucht stehen sämtliche Bauteile zur Verfügung. Die Materialkosten halten sich mit unter 20 Euro in Grenzen.

Diese Bauteileliste

ist mit den genauen Bezeichnungen und den Artikelnummern versehen, welche die Grundlage dieses Projekts bilden. Andere Anbieter und Händler halten diese Produkte meistens auch bereit.


Die von mir leicht abgeänderte Software ermöglicht ein Überstreichen von 1 Hz bis 40 MHz. Zum Einsatz kommt ein TFT LCD Display module ST7735S.

Bedienung: Über zwei Drehgeber, die zudem noch eine Druckknopfunktion besitzen, lässt sich die Frequenz von 1 Hz bis 40 MHz auf ein 1 Hz genau einstellen. Verschiedene Schrittweiten von 1 Hz bis 500 kHz stehen zur Verfügung.


Bedienung des DDS-Sinus-Rechteck-Generators (Quelle des Videos: Youtube-Nutzer vwlowen).

Software und Bibliotheken beschaffen: Die ursprüngliche Software ist von 10 Hz bis 10 MHz begrenzt.  Durch ein paar kleine Abänderungen ermöglicht

dieser Arduino-Sketch für AD9850,

den wir einfach in das Arduino IDE kopieren, eine Frequenzabdeckung von 1 Hz bis 40 MHz. Vor dem Kompilieren und Brennen nicht vergessen die drei notwendigen Bibliotheken einzubinden. Wir laden uns diese drei Bibliotheken von Github als Zip-Files herunter:

https://github.com/adafruit/Adafruit-GFX-Library

https://github.com/adafruit/Adafruit-ST7735-Library

https://github.com/brianlow/Rotary

Auf Github auf den grünen Button „Clone oder Download“ klicken und dann auf „Download Zip“ klicken. Die Zipfiles können dann in das Arduino-IDE eingebunden werden. Sie müssen dazu nicht entzippt werden.

Den ATmega328 brennen: Wie diese Bibliotheken und die Software (der Sketch) in die Software Arduino IDE gelangt, ist vollständig unter

Erste Schritte mit dem Arduino UNO R3

beschrieben. Der Arduino UNO R3 dient in diesem Fall als USB-Programmiergerät für den ATmega328.


Mit einem Arduino UNO R3, der schon für ein paar Euro in der Bucht erhältlich ist, gelangt die Firmware auf den Atmega328. Auf dem Rechner ist die Software Arduino IDE installiert.

Wichtig ist zudem, dass wir uns einen ATmega328 im steckbaren Gehäuse besorgen, der zudem noch mit einem Arduino-Bootloader vorbereitet ist. Auch diese gibt es in der Bucht.

Anschlussbelegung der Drehgeber (rotary switch): Die Drehgeber sind Standard-Ausführungen, die zudem noch mit einem Druckknopf versehen sind, der durch Drücken auf die Achse auszlösen sind. Der Drehgeber selbst hat nur drei Anschlüsse. Die Anschlussbelegung selbst ist aus den Kommentaren der beiden nachfolgenden Bilder zu entnehmen.


Eines der beiden Drehgeber (rotary encoder) mit Push-Funktion (Druckknopf-Funktion), 6mm-Achse und Rasterstellungen. Die Beschaffung ist ebenfalls in der Bauteileliste beschrieben. Die Befestigungsmuttern und Unterlegscheiben sind selbstverständlich mitgeliefert.


Beispiel einer Verdrahtung des linken Drehgebers. Der Bügel bildet den Masseanschluss. Die beiden rechten Anschlüsse sind für den Druckknopf zuständig. Links sind drei Anschlüsse. Der mittlere davon gehört zur Masse. Die beiden anderen sind die des Drehgebers.

Erfahrung: Nach meinem Messmitteln hat das AD9850-Modul die Frequenz auf das Hz genau getroffen, so dass sich eine Kalibrierung der Software erübrigte. Die Amplitude des Sinus beträgt etwa 1 Vss, die des Rechtecks 5 Vss. Der Sinus ist bei mir mit einer Gleichspannung überlagert, weshalb ein Koppelkondensator angeraten ist. Der Autor der usprünglichen Software war mit der Qualität des Sinus über 10 MHz nicht mehr zufrieden. Abhilfe kann ein zusätzliches Tiefpassfilter als Anti-Aliasing-Filter schaffen. Auf dem DDS-Modul befindet sich bereits ein Ausgangsfilter.

Bei Speisespannungen von mehr als 8 Volt Gleichspannung für die gesamte Schaltung sollte der 5Volt-Spannugsregler mit einen kleinen Kühlkörper versehen werden. Der Stromverbrauch liegt bei 180 mA.


Bei 40 MHz, der höchsten Frequenz, sieht der Sinus leicht deformiert aus. Das kann aber auch an meinem alterschwachen 150 MHz-Oszilloskop liegen.


Sinus bei etwa 1 MHz. Der Amplitude von 1 Vss (1 Volt von Spitze zu Spitze) ist über die Frequenz ziemlich konstant.

Leider speichert die Software nicht den zuletzt gespeicherten Wert und startet immer mit 1 kHz. Ein Signal wird erst erzeugt, wenn einer der Drehgeber betätigt wurde. Bis nach dem Einschalten das Bild auf dem Display erscheint, dauert es einige Sekunden. Erscheint nur eine helle, weiße Fläche, liegt wahrscheinlich ein Wackelkontakt der Steckverbinder vor.

Wo greife ich das Sinus- und das Rechtecksignal ab? Dies erklärt der Kommentar des nachfolgenden Bildes.


Das AD9850-DDS-Modul: Untere Reihe von rechts nach links gezählt: Pin 1 und 2: Sinus-Signal 1 Vss; Pin 3 und 4: Rechtecksignal 5 Vss; Pin 5: Masse (GND). Rechts zu sehen das blaue Trimmpoti zum Einstellen des Puls-Pausenverhältnisses. Die obere Reihe ist meistens nicht belegt. Datenblatt und Schaltbild hier. Demnach ist Pin 1, der ganz rechte Pin, mit dem Tiefpass verbunden.

AM-Modulation für den AD9850 mit 2N700: Dies geht laut http://www.analog.com …. AN-423.pdf mit einem 2N7000 recht einfach. Siehe dazu die nachstehende Skizzen und deren Kommentare. R6 auf dem DDS-Modul muss entfernt werden, um einen Draht an Pin 12 des AD9850-ICs zu löten. Angeblich soll es Module geben, bei denen dieser Pin herausgeführt ist. Bei mir war dies nicht der Fall. Also musste ich löten.


Der für die Amplitudenmodulation verantwortliche Anschluss RSET befindet sich am Pin 12 des AD9850-ICs. Pin 12 ist mit dem 3,9kOhm-Widerstand R6 gegen Masse verbunden. Wir löten diesen Widerstand aus und schließen wie auf dem Bild zu sehen ist einen Draht für die AM-Modulation an.

Nach dem Auslöten des Widerstands R6 kommt kein Sinus-Signal mehr aus dem Baustein. Entweder löten wir den winzigen R6 wieder ein oder wir nehmen einen bedrahteten 3k9-Widerstand, den wir irgendwo mit Masse und dem Pin 12 verbinden. An R6 liegt übrigens eine Spannung von etwa 1,3 Volt an.

 


Handskizze für die Amplitudenmodulation mit dem AD9850-Modul, der hier von oben, also der Bestückungsseite, betrachtet ist, wobei rechts das Poti zu sehen wäre und links die LED. Leider funktioniert der Pin 7 nicht bei allen Modulen. Wie weiter oben beschrieben, muss dann R6 ausgelötet werden, um dann einen Draht an Pin 12 des ICs AD9850 anzulöten.

Für die AM-Modulation wird die Gleichspannung am Anschluss RSET des AD9850-Moduls verändert. Analog Device empfiehlt dafür eine kleine Schaltung mit einem 2N7000 (N-Channel Enhanced Mode MOSFET, Anreicherungstyp, selbstsperrend). In der Bucht habe ich 100 Stück davon für etwa 3 Euro gefunden. Die beiden HF-Ausgänge werden über einen kleinen Ringkerntrafo ausgeführt, 1:1 Windungsverhältnis, primär die Mittenanzapfung an Masse. 10 Windungen pro Wicklung müssten bei Ferritmaterial reichen. Man nehme einen kleinen Ringkern.

AM-Modulation für den AD9850 nur mit passiven Bauteilen:


Alternative Einspeisung des Audio-Signals für die AM-Modulation, die auch mit dieser erprobten Schaltung absolut linear erfolgen soll. Das 10 kOhm-Trimmpoti dient zur Einstellung des Arbeitspunktes. Die Auskoppelung der HF erfolgt wieder über den Ringkerntrafo, wie es in der vorangegangen Schaltung dargestellt ist. RSET ist der Pin 12 des AD9850-ICs. Die NF, das Audiosignal, benötigt etwa 1 Vss. Die Schaltung ist ein Vorschlag von Ingo aus dem Wumpus-Gollum-Forum.


Versuchsaufbau für die AM-Modulation. Der gelb-schwarze Draht führt direkt zum Pin 12 des AD9850-ICs.


Trafo mit 3 x 5 Windungen (3 x 70 uH) aus der Schrottkiste für den ersten Versuch. Die 5 Windungen sind für unter 2 MHz zu wenig. Die beiden Primärwickllungen gleichphasig zusammenschalten, so dass sich ihre zusammengesetzte Induktivität erhöht. Der Rinkgern kam nur zu Testzwecken zum Einsatz. Er hat sein Maximum bei etwa 10 MHz.


100% AM-Modulation mit einem Dreiecksignal (unten) zur Beurteilung der Linearität bei 10 MHz Trägerwelle. Es kommt die Widerstands-Schaltung zum Einsatz. Den HF-Übertrager habe ich einfach an die beiden Anschlüsse des Moduls angeschlossen, obwohl an einem Pin noch das Tiefpassfilter hängt. Es geht trotzdem.


Mit einem Sinus mplitudenmodulierter Träger.

Kein Rechteck-Signal? Bei mir lieferte der DDS-Baustein kein Rechtecksignal. In diesem Fall ist erst einer der beiden Drehgeber zu betätigen, damit überhaupt ein Sinus erzeugt werden kann. Dann das (blaue) Trimmpoti auf der DDS-Platine für das Puls-Pausen-Verhältnis so lange verdrehen, bis ein Rechtecksignal erscheint und das Puls-Pausen-Verhältnis 1:1 ist.

Das Rechteck-Signal stört das Sinus-Signal: 10 cm Draht am Ausgang des Rechtecksignals führen schon zu sichtbaren Verzerrungen des Sinussignals, die mir z.B. besonders gut um die 700 kHz aufgefallen sind. Die Störungen sind extrem, wenn mit einem Uhrmacher-Schraubenzieher die Rechteckausgänge berührt werden. Wer ein möglichst sauberes Sinussignal erhalten möchte, schaltet das Rechtecksignal am besten ab. Dies geht durch Verdrehen des Trimmpotis bis zum Anschlag. Sichtbare Verzerrungen des Sinus-Signals stammen also vom Rechtecksignal her und sind nicht Folge der digitalen Signalerzeugung. Selbstverständlich sollten abgeschirmte Signal-Leitungen und eine gute Masseführung zur Anwendung kommen. Nachfolgend zwe Spektren mit abgeschaltetem Rechteck:


Spektrum bei 30 MHz Ausgangssignal, dB-Angabe links, 10 MHz / Einteilung.


Spektrum bei 40 MHz. Bei 80 MHz ist eine Harmonische mit -35 dB zu erkennen. Bei etwa 115 MHz ist immer ein Peak zu erkennen, der wohl vom Taktgenerator herstammt.

Behauptungen, das Ausgangsfilter des AD9850-Moduls würde nichts taugen, kann ich nicht teilen. Es gibt jedoch noch ein Modul mit einem AD9851, welcher bis 70 MHz geeignet ist und vielleicht noch bessere Werte besitzt.

Anwendungen und Erweiterungen: Der DDS-Generator mit seiner quarzstabilen Frequenz kann mit einer Amplituden-Modulation versehen werden, um alten Röhrenradios einen Mittelwellensender vorzutäuschen. Der Ausgang sollte noch mit einer Pufferstufe (z.B. Emitterfolger) und einem Abschwächer versehen werden, um eine Impedanz von 50 Ohm zu liefern. Zudem schützt die Pufferstufe den DDS-Baustein vor Zerstörung.

Weitere Anwendungen: Quarzstabiler LO für SSB-Empfänger, HF-Prüfsender oder Audio-Generator. Über eine Software-Erweiterung könnte an einem analogen Eingang des ATmega328 eine Frequenzmodulation möglich sein, wodurch sich der DDS-Generator zum Wobbeln eignet.


Da das Projekt noch nicht abgeschlossen ist, dient eine Pappschachtel als schützende Hülle, um nicht von einem Gehäuse zu sprechen.


Innenansicht des provisorischen Versuchsaufbau, der einfach nur Ordnung im Kabelsalat im bringen soll.


Sieht schon besser aus. Als Gehäuse dient hier eine alte Box für Disketten.


Für Erweiterungen ist noch reichlich Platz vorhanden. Nicht im Bild zu sehen ist der nachträglich eingebaute Kühlkörper für den Spannungsregler.

AD9850 als Wobbelgenerator – Eine Idee als Ausblick: Als Erweiterung zu einem  Wobler schwebt mir eine einfache Lösung für analoge Oszilloskope vor, die nicht immer alle einen externen Sägezahnausgang besitzen. Der Bau eines externen Sägezahngenerators ist kein großer Aufwand und sinnvoll, da seine Ausgangsspannung nur zwischen 0 bis 5 Volt liegen darf und diesen Bereich auch wegen der Auflösung auch nutzen soll. Am ATmega328 sind noch zwei Pins frei. Pin 28 ist analog für die Sägezahn-Einspeisung geeignet und Pin 18 lässt sich mit einem Drucktaster für die Wahl des Hubs nutzen, um AM- und FM-ZF-Filter untersuchen zu können. Der Hub lässt sich auch noch auf dem Display anzeigen. Die Software-Erweiterung gestaltet sich relativ einfach.

Eine Pufferstufe (z.B. Emitterfolger) am Ausgang ist dringend empfehlenswert, damit man den Ausgang des AD9850 nicht versehentlich zerschießt.

Über eine Regelschleife mit langsamer Zeitkonstante ließe sich dann noch mit Hilfe des AM-Eingangs der Ausgangspegel stabilisieren.

Immerhin hätte man dann einen schönen Prüfsender für AM, FM und Wobbeln, der auch noch für den NF-Bereich geeignet ist.

Erweiterung und Umbau auf bis 70 MHZ durch ein AD9851-Modul Der AD9851 kostet ein paar Euro mehr und kann Frequenzen bis 70 MHz erzeugen. Die Software benötigt dann gemäß http://www.rocketnumbernine.com/2011/10/25/programming-the-ad9851-dds-synthesizer eine kleine Anpassung, da der AD9851 mit einer höheren Taktfrequenz arbeitet. Die beiden Module gibt es mit der gleichen Platine (z.B. nach 272491356349 in der Bucht suchen). Unter

http://elektronikbasteln.pl7.de/ad9851.html

ist der Umbau für einen AD9851 beschrieben. Dieses Projekt wurde dann im Jahr 2023 endlich abgeschlossen:

DDS-Generator im Gehäuse mit 1 Hz bis 70 MHz Sinus und Amplitudenmodulation

Selbstbauprojekt DDS-Generator für Sinus, Rechteck und AM, 1 Hz bis 70 MHz
DDS-Funktionsgenerator 1 Hz – 70 MHz mit AM-Modulation – 17.10.2023: Dieser Funktionsgenerator basiert auf einem DDS-Modul mit einem AD9851 und einem Arduino-Projekt. Mit einer etwas abgeänderten Firmware lässt sich auch der AD9850 einsetzen, der allerdings nur ein Signal bis 40 MHz liefern kann. – weiter