DDS (Direct Digital Synthesis) Signalgenerator

Bei diesem Projekt wird gezeigt, wie man mithilfe eines Arduino Mikrocontrollers und dem Baustein AD9850 selbst einen Frequenzgenerator entwickeln kann, um sich Sinus- und Rechteckspannungen ausgeben zu lassen. Diese Frequenzen kann man in diesem Projekt sogar sweepen oder man kann sich einfach eine feste Frequenz ausgeben lassen. Im folgenden Projekt werden Aufbau und Programmierung dargestellt und erklärt.

AD9850 - DDS Signalgenerator Modul

Der AD9850 ist ein hoch komprimierter Baustein mit fortgeschrittener DDS-Technologie, verbunden mit einem internen A/D Wandler und einem Komparator. Er stellt einen vollständig digital programmierbaren Frequenz- und Taktgenerator dar.

Auch ist der AD9850 durch das Stiftleisten-System leicht zu verschalten und man muss falsche gesetzte Kabel nicht immer wieder neu löten.Er wird mit einer Netzspannung von 5V betrieben. Er kann von nahezu 0Hz bis max. 40MHz sinusförmige Signale erzeugen. Der AD9850 generiert eine saubere, frequenz- und phasenprogrammierbare Sinuswelle. Die Sinuswelle kann direkt als Frequenzquelle genutzt werden oder in eine z.B Rechteckspannung umgewandelt werden.

Die Output Frequenz kann digital verändert werden in einer Wechselgeschwindigkeit von bis zu 23 Millionen Frequenzen pro Sekunde. Er enthält auch einen sehr schnellen Komparator der konfiguriert werden kann um einen gefilterten Output von dem A/D Wandler zu akzeptieren und dadurch eine Rechteckspannung mit wenig Störsignalen zu generieren. Das erleichtert die Benutzung des Gerätes zu einem flexiblen Takt Generator.

Der Aufbau des Projekts

Zunächst muss der Arduino mit Strom und Spannung versorgt werden. Hierfür kann man entweder den USB-Eingang des Arduinos verwenden oder den Vin und den GND Pin. Ich habe außerdem den Ground des Arduinos mit dem Ground des AD9850 verbunden. Damit auch der AD9850 die nötige Spannung bekommt habe ich den 5V Pin des Arduinos mit dem VCC des AD9850 verbunden. Nun habe ich Pin 8, 9, 10 und 11 des Arduinos nach Programmierung als Ausgänge definiert und habe sie an den Data, Clock, Frequenz und Reset Eingang des AD9850 angeschlossen.

Um das Signal jetzt noch anzeigen lassen zu können legt man noch eine weitere Verbindung vom Sinus- oder Square-Ausgang und Ground vom AD9850 zum Oszilloskop. Nun ist das Projekt fertig aufgebaut und es kann mit der Programmierung begonnen werden.

Die Programmierung

Sobald das Programm startet, beginnt es erstmal mit der void setup Methode und definiert mit dem DDS.begin Befehl die Pins vom Arduino und vom AD9850 (void bedeutet, dass das Programm nichts zurück gibt, anders als Beispielsweise bei einem Rechenprogramm in Java). Wenn dies geschehen ist, dann startet das Programm mit der void loop Methode. Hier prüft es den ersten sweep Befehl, welcher lautet „sweep(2000, 6000, 5000) ;“. Sobald das geschehen ist geht das Programm in die void sweep Methode und macht eine if/else Abfrage mit den verschiedenen sweep Befehlen und guckt jeweils welcher Fall zutrifft. Sollte der erste sweep Befehl zutreffen, so sweept das Programm in dem Fall von 2000Hz auf 6000Hz innerhalb von 5 Sekunden hoch. Sollte der erste Befehl nicht zutreffen, so geht das Programm gleich in den zweiten sweep Befehl und somit in die zweite if/else Abfrage über. Dies macht das Programm bei allen drei sweep Befehlen. Wenn man diese if/else Abfrage oder generell das ganze sweepen umgehen möchte dann kann man die drei sweep Befehle einfach auskommentieren. Wenn das sweepen erledigt ist greift das Programm auf die DDS.setfreq Methode zu. In diesem Fall werden hier 4 beliebige Frequenzen mit einem beliebigen Zeitabstand ausgegeben. Zum Schluss gibt dann das Programm noch eine feste Frequenz aus, welche man auch beliebig verändern kann bis dann das Programm den void loop von vorne beginnt.