Möchten Sie einen Signalgenerator bauen? Folgen Sie diesen Tipps zum Bau eines leistungsstarken DDS-Signalgenerators mit direkter digitaler Synthese (DDS) unter Verwendung eines AD9851. Die Themen Modifikation des Moduls, Funktionsweise und Software werden alle in diesem Artikel zum Bau eines DIY-DDS-Signalgenerators behandelt.

Analog Devices bietet eine Reihe von integrierten Schaltungen an, die komplette DDS-Signalgeneratoren enthalten. Diese ICs können aber nicht ganz allein arbeiten, sondern benötigen ein Tiefpassfilter und ein Steuergerät zur Initialisierung und Einstellung der gewünschten Ausgangsfrequenz. Bei AliExpress werden komplette, sehr preiswerte Module angeboten, die den DDS-Chip zusammen mit besagtem Filter und einigen anderen Bauteilen enthalten. In dem kleinen Signalgenerator, der hier beschrieben wird, kommt ein Modul mit einem AD9851 zum Einsatz Das Modul kann ein Sinussignal mit einer Frequenz zwischen 1 Hz und 70 MHz erzeugen. Auf dem Chip ist ein Komparator integriert, der das Sinus-Ausgangssignal mit einer einstellbaren Gleichspannung vergleicht und daraus eine Rechteckwelle mit einstellbarem Tastverhältnis erzeugt. Fügt man zu diesem Modul einen kleinen Mikrocontroller, einen Drehgeber und eine Anzeige hinzu, entsteht ein vollständiger Signalgenerator.

Was sich dahinter verbirgt

Die Signalerzeugung erfolgt durch direkte digitale Synthese (DDS). Sie verwendet einen numerisch gesteuerten Oszillator (NCO) und eine Umsetzungstabelle (Lookup Table, LUT), um eine digitale Sinuswelle zu erzeugen. Letztere wird mit einem Digital-Analog-Wandler (DAC) in eine analoge Form umgewandelt. Das Datenblatt des AD9851 enthält zu diesem Thema genauere Informationen. Bild 1 zeigt das Modul mit dem AD9851. Damit es in das vorgesehene Gehäuse passt, wurde eine LED entfernt und eine Ecke des Moduls abgeschnitten. Das Trimmpoti zur Einstellung der Eingangsgleichspannung des Komparators wurde ebenfalls entfernt, da es nicht benötigt wurde: Diese Gleichspannung wird nämlich von einem DAC im Mikrocontroller erzeugt, der zur Steuerung des Moduls verwendet wird.

Bild 1. Das AD9851-Modul.

Der AD9851 kann entweder in einem parallelen oder einem seriellen Modus gesteuert werden. Da der serielle Modus nur vier Anschlüsse benötigt und der parallele Modus mehr als doppelt so viele, haben wir uns für den seriellen Modus entschieden, in dem das Modul initialisiert und die Frequenz gewählt wird. Die Serial-Load-Signale, wie sie im Datenblatt genannt werden, sind in Bild 2 dargestellt. Das vierte Signal setzt das Gerät zurück, um es zu initialisieren. Ein Mikrocontroller liefert diese Signale über seine intergierte SPI-Peripherie. Da die Frequenz variabel sein soll, wird ein Drehgeber verwendet, mit dem der Benutzer die Frequenz ändern kann. Ein kleines Display zeigt Informationen über die aktuell gewählte Frequenz an. Man sollte sich der Tatsache bewusst sein, dass ein DDS-Signalgenerator keine reinen Sinussignale erzeugt - das Ausgangssignal enthält mehrere Oberwellen der Abtastfrequenz.

Bild 2. Serial-Load-Signale. (Quelle: AD9851-Datenblatt)​​​

Ein Blick auf die Schaltung

In Bild 3 ist der Schaltplan zu sehen. Da nur wenige I/Os benötigt werden, wird der 14-polige Mikrocontroller PIC18F04Q41 von Microchip verwendet. Er steuert das DDS-Modul mit vier Ausgängen, liest den Drehgeber mit drei Eingängen aus und steuert das Display über den I2C-Bus an, wofür zwei weitere Ausgänge benötigt werden. Die Ausgangsgleichspannung für den Komparator des Moduls und somit zur Einstellung des Tastverhältnisses wird an Pin 11 erzeugt.

Bleiben noch Pin 1 und Pin 14 für die Spannungsversorgung und Pin 12 und Pin 13 für die Programmierung. Der PIC18F04Q41 kann mit einem PICkit 4, PICkit 5, ICD 4, ICD 5 oder MPLAB Snap programmiert werden; ältere Versionen dieser Tools sind nicht kompatibel. Der Controller wurde in diesem Fall zwar vor der Montage auf die Platine programmiert; es ist jedoch möglich, ihn „on-board“ zu programmieren, indem man vorübergehend Drähte an die Prozessor-Pins lötet und sie nach der Programmierung wieder entfernt. Die 5-V-Versorgungsspannung wird über einen USB-Anschluss bereitgestellt.

Bild 3. Schaltbild des DDS-Signalgenerators

Der PIC18F04Q41 gehört zu einer neuen Reihe von PICs, bei der insbesondere die seriellen I/O-Module für SPI und I2C im Vergleich zu älteren Modellen verbessert wurden. Dies ist in dieser Anwendung sehr nützlich. Das SPI-Modul verfügt jetzt über ein gepuffertes Ausgaberegister, das uns die Möglichkeit gibt, das erforderliche serielle 40-Bit-Ausgangssignal in einem einzigen kontinuierlichen Strom zu erzeugen. Für dieses serielle Signal wird ein Takt von 16 MHz verwendet, so dass eine Änderung der Ausgangsfrequenz des Generators weniger als 3 µs in Anspruch nimmt. Außerdem ist das I2C-Modul einfacher einzurichten als bei den älteren PICs. Die aktuelle Frequenz des erzeugten Signals wird auf einem kleinen OLED-Display (0,91″) angezeigt, das über einen I2C-Bus mit einer Taktfrequenz von 400 kHz angesteuert wird.

Abonnieren
Tag-Benachrichtigung zu Test & Messung jetzt abonnieren!

Wie man die Einstellungen ändert

Durch Drücken des Encoder-Knopfes wird ein Unterstrich-Cursor von links nach rechts bewegt, der bei Erreichen der äußersten rechten Stelle wieder nach links zurückkehrt. Durch Drehen des Drehgeber-Knopfes wird die Zahl über dem Cursor erhöht oder verringert. Auf diese Weise lässt sich der gesamte Bereich von 1 Hz bis 70 MHz schnell und bequem abdecken. Jede Änderung der angezeigten Zahl bewirkt eine Meldung an das DDS-Modul, um die Ausgangsfrequenz entsprechend anzupassen.

Wie bereits erwähnt, wird die Gleichspannung für den Komparatoreingang auf dem Modul von einem DAC im Mikrocontroller erzeugt. Diese Spannung kann geändert werden, indem der Schalter des Encoders etwa zwei Sekunden lang gedrückt wird, bis das Display eine dreistellige Zahl anzeigt. Wenn dies der Fall ist, kann die Spannung durch Drehen des Encoders in 256 Schritten auf das gewünschte Tastverhältnis der Rechteckwelle eingestellt werden. Wenn Sie den Drehknopf erneut länger als zwei Sekunden drücken, kehrt die Anzeige zur Frequenzanzeige zurück. Der Wert der gewählten Gleichspannung wird im internen EEPROM des PIC gespeichert.

Die Konstruktion

Die Schaltung besteht aus nur wenigen Komponenten. Es wurde eine kleine Platine angefertigt, die samt Bauteilen und Modul in einem kleinen Strapubox-Gehäuse mit den Abmessungen 50×50×20 mm3 Platz findet. Zwei SMA-Steckverbinder dienen als Ausgänge, da der Platz für BNC-Buchsen nicht ausgereicht hätte. Wie in den Bildern 4a...c zu sehen, wurden die Anschlussstifte des Encoders um 180 ° gebogen, damit sie auf die Platine gelötet werden können. Dabei muss man vorsichtig vorgehen, da sie leicht brechen.

Bild 4a. Die Vorderseite der Platine mit dem Display. (a); Die Rückseite der Platine, ohne DDS-Modul (b); der Leiterplatte mit eingebautem DDS-Modul. (c).

Eine der Befestigungsschrauben, mit denen die Platine am Gehäuse befestigt wird, wird durch das DDS-Modul verdeckt. Deshalb wurde letzteres steckbar gemacht. Doch dabei stoßen wir auf ein Platzproblem: Das Gehäuse ist nur 20 mm hoch. Mit Ultra-Low-Profile-Buchsen und den dazugehörenden Low-Profile-Stiften konnte die erlaubte Höhe gerade noch so eingehalten werden. Der Mikrocontroller ist ausschließlich in einem SMD-Gehäuse erhältlich. Die drei Kondensatoren und der USB-Anschluss sind ebenfalls SMDs, was das Layout sehr einfach machte.

Die Firmware

Die Firmware wurde in Assembler geschrieben und belegt nur 13 % des Programmspeichers des Controllers. Zunächst werden die Ports eingerichtet und dann zwei konfigurierbare Logikzellen (CLCs) als Flipflops gesetzt, die jede positive Transiente erkennen, die durch das Drehen des Drehgebers verursacht wird. Danach wird Timer2 so konfiguriert, dass er eine Verzögerung von 10 ms für die Entprellung des Schalters liefert, und Timer4 so, dass er eine Verzögerung von etwa 100 ms einstellt. Letzteres Päuschen ist nach der Initialisierung des OLED-Displays erforderlich. Nach der Einrichtung des DACs, der die Gleichspannung für den Komparator erzeugt, wird das I2C-Busmodul für die Kommunikation mit dem OLED-Display bei einer Taktfrequenz von 400 kHz konfiguriert, und schließlich kommt das SPI-Modul, das das DDS-Modul steuert, an die Reihe. Danach werden das Display, das DDS-Modul und die Interrupts initialisiert.

Alles ist vollständig interruptgesteuert. Das Hauptprogramm besteht ausschließlich aus NOPs, in denen der Controller auf Interrupts wartet. Die Interrupt-Service-Routine des Schalters bewegt den Cursor nach rechts. Wenn der Schalter länger gedrückt wird, wird der Ausgangswert des DAC wie oben beschrieben angezeigt. Wenn das Flip-Flop des zweiten CLC seinen Zustand ändert, wird die zweite Interrupt-Service-Routine ausgeführt. Der Ausgangsstatus des CLC zeigt an, ob der angezeigte Frequenzwert inkrementiert oder dekrementiert werden muss. Nach der Anzeige des neuen Wertes werden die Steuerbytes für das DDS-Modul berechnet und übertragen, und der Controller beginnt, auf den nächsten Interrupt zu warten. Ein bequemes Dasein!


Anmerkung der Redaktion: Der artikel, "Ein einfacher DDS-Signalgenerator" (230695-02) erscheint in Elektor Mai/Juni 2024.


Über den Autor

Willem den Hollander begeistert sich seit seinem 12. Lebensjahr für Elektronik. Er hat einen Master-Abschluss in Elektrotechnik und arbeitete 37 Jahre lang in der Forschung und Entwicklung im Bereich der Unterhaltungselektronik. Seine Lieblingsthemen sind Netzteile, digitale Schaltungen, programmierbare Logik und Mikroprozessoren. Mehrere seiner Projekte wurden in Elektor veröffentlicht.
 

Abonnieren
Tag-Benachrichtigung zu DIY-Elektronik jetzt abonnieren!

 

 

Haben Sie Fragen oder Kommentare?

Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Wenden Sie sich bitte an den Autor unter wdenhollander@solnet.ch oder an die Elektor-Redaktion unter redaktion@elektor.de.