DDS Signalgeneratoren
Ein Signalgenerator gehört ja bekanntlich zur Standardausrüstung im (Hobby)-Elektroniklabor. Die hier vorgestellte Variante nutzt das Prinzip der direkten digitalen Synthese (DDS) des Signals. Die Ausgangsfrequenz lässt sich in sehr kleinen Stufen über einen weiten Bereich quarzstabil einstellen. Hierzu gibt es fertige Schaltkreise, die die gesamte Signalerzeugung übernehmen. Ich habe mich für den AD9833 von Analog Devices entschieden, der in einem 10-poligen SMD-Gehäuse daher kommt. Damit kann man Sinus- Dreieck- und Rechtecksignale von ~0Hz bis 12,5MHz erzeugen. Die übrigen Zutaten sind: Ein ATmega8 Mikrocontroller, ein 2-zeiliges LC-Display, ein Drehgeber und 4 weitere Tasten.
Der Drehgeber hat noch einen Drucktaster und ermöglicht so ein recht cleveres Bedienkonzept: Links/rechts drehen zum Verkleinern oder Vergrößern der Frequenz. Bei gedrücktem Drehgebertaster ist es anders: Eine Linksdrehung ändert dann die Kurvenform (Sinus/Dreieck/Rechteck); per Rechtsdrehung wird die Schrittweite für die Frequenzverstellung definiert: 1Hz, 10Hz...1MHz (Erhöhung jeweils um eine Zehnerpotenz).
Zusätzlich gibt es noch einen "Sweep-Modus", bei dem ein frei wählbarer Frequenzbereich kontinuierlich auf- und abwärts durchlaufen wird. Mit 2 der 4 Einzeltasten kann man die entsprechende Start- und Stoppfrequenz vorgeben, die anderen beiden Tasten vergrößern oder verkleinern die Sweep-Geschwindigkeit. Drückt man etwas länger auf den Drehgeberknopf ohne dabei zu drehen, werden die aktuellen Sweep-Parameter angezeigt und die momentan eingestellte Frequenz wird im EEPROM gespeichert; diese steht beim nächsten Einschalten sofort wieder zur Verfügung.
Die Firmware habe ich diesmal mit dem freien Entwicklungswerkzeug LunaAVR erstellt, einer Objekt basierten Programmiersprache ähnlich Basic/Pascal.
Eine Ausgangsstufe müsste man bei Bedarf noch ergänzen.
Ansonsten viel Spaß beim Löten!
Wem das SMD-Löten zu filigran ist, für den ist hier ein Frequenzgenerator, der nur aus wenigen bedrahteten Standardkomponenten besteht, die unter 20€ kosten. Die Signalqualität ist bis ca. 100kHz ganz brauchbar, was für den Audiobereich meist ausreicht.
Statt des fertigen DDS-Generators kommt hier ein 2. Prozessor zum Einsatz, der die Signale durch Abtasten von Wertetabellen mit anschließender Digital-Analog-Wandlung über ein einfaches R-2R Widerstands Netzwerk erzeugt. Die Steuerung erfolgt nach dem gleichen "Schnittmuster“ wie beim AD9833 DDS mit einer LunaAVR-Firmware via RS232 Interface.
Grundlegende Informationen über das DDS-Prinzip möchte ich hier nicht wiederholen; es gibt sie reichlich im Internet, z.B. hier: http://de.wikipedia.org/wiki/Direct_Digital_Synthesis
Der DDS-Generator ist in Assembler programmiert, da die Zahl der Taktzyklen für die Signalerzeugung wichtig ist. Die Basis hierfür stammt aus Jesper Hansens Web-Artikel: “Mini DDS”.
Bei meiner Implementierung werden Sägezahn- und Rechteck-Signale aber ohne Nutzung einer Tabelle erzeugt; hierdurch ergibt sich beim Rechteck sogar noch ein einstellbares Tastverhältnis.
Die kleinste Frequenzstufe beträgt 0.1Hz, und die Maximalfrequenz wurde auf 200kHz begrenzt. Außerdem werden Sinus- und Dreieck-Signale erzeugt. Auch eine EKG-Kurve darf nicht fehlen; die sollte aber nicht den Arztbesuch ersetzen.
Sinus - 100kHz EKG - 15kHz
Da man für die Signalerzeugung selbst verantwortlich ist, kann man leicht eigene Kurven-Tabellen ergänzen. Hierzu habe ich ein kleines Delphi-Programm erstellt, das aus einer einzugebenden mathematischen Funktion gleich die entsprechende DDS-Tabelle erzeugt. So spart man sich das Eintippen von 256 Zahlenwerten und kann schnell mal eigene Ideen ausprobieren. In beiden Prozessoren (jeweils ATtiny4313) ist nämlich noch genügend freier Speicher hierfür vorhanden. Das Programm kann nach dem Entpacken des Archivs ohne Installation gestartet werden.