DDS Generator mit AD9835 und AVR ATmega8 Steuerung
Von der Wienbrücke über PLL nach DDS
Mein allererster Prüfgenerator, Ende der 60er des letzten Jahrhunderts nach einem Radiobastelbuch gebaut, war ein frei schwingender Oszillator mit einer Röhre. Das Ding wurde mit einem Drehkondensator abgestimmt und erzeugte Frequenzen von etwa 150KHz bis über 2MHz. Messgeräte hatte ich nicht, getestet wurde mit dem alten Radio meiner Eltern und es funktionierte. Damit machte ich mir in meiner Umgebung aber keine Freunde, denn damals wurde noch AM Rundfunk gehört.
Es war früher nicht einfach, einen abstimmbaren Sinusgenerator mit quarzstabiler Frequenz, konstanter Amplitude und auch noch großem Frequenzbereich zu bauen. Solche Geräte wurden nur sehr aufwendig industriell hergestellt und waren für Bastler nicht zu bezahlen.
Die Vorstellung, ein Gerät mit den unten aufgeführten technischen Daten im Bastelkeller zusammen zu schrauben, währe noch bis fast zum Ende des letzten Jahrhunderts nicht einmal als Aprilscherz durchgegangen. Möglich wird es durch das DDS Verfahren (Direct Digital Synthesis) in Verbindung mit hoch integrierten Schaltkreisen. In diesem Beitrag geht es um die Beschreibung der Ansteuerung eines DDS IC AD9835 der Firma Analog Devices. Die Grundlagen von DDS sind schon länger bekannt und zur Theorie findet man im Internet viele Beiträge.
!!! Achtung Lebensgefahr !!!
Dieses Gerät arbeitet mit 230V Netzspannung. Diese Schaltung dürfen nur
Leute mit entsprechender Ausbildung aufbauen.
Einige technische Daten:
Frequenzbereich: 1Hz – 20MHz
Frequenzauflösung: 1Hz über den ganzen Bereich
Frequenzgenauigkeit: abhängig vom Quarzgenerator, kalibrierbar wenn entspr. Messtechnik vorhanden
Rechteck Ausgang: TTL Pegel
Sinus Ausgang: 0 – 2,5V an 50Ohm mit Poti einstellbar
Stromversorgung: eingebautes Netzteil
Abmessungen in mm: 160x95x60
Das Gerät besteht aus den Baugruppen Generatorplatine, Steuerplatine und USB Interface (optional).
Auf der Generator Platine befinden sich Frequenzerzeugung, Sinusendstufe, TTL Endstufe und Netzteil.
Der Schaltplan zeigt einen Ausschnitt mit dem Kern der Schaltung, ein IC AD9835. Der Schaltkreis arbeitet nach dem Prinzip des DDS Verfahrens und enthält alle notwendigen Baugruppen:
32Bit Phasen Akkumulator
Phasen Sinus Konverter
10Bit Digital Analog Wandler mit interner Referenz
TTL kompatibles, drei Leitung Interface, 16Bit seriell, zur Programmierung
Das Sinus Ausgangssignal vom AD9835 wird über ein Tiefpassfilter geführt um systembedingte Störungen zu unterdrücken. AD9835 gibt es nur im 16Pin TSSOP (Raster 0,65mm) und ist deshalb auf der Leiterseite angeordnet. Die Bestückung ist nicht einfach aber mit etwas Erfahrung machbar. Ein 50MHz Quarzgenerator erzeugt den Mastertakt. Damit beträgt die theoretische, obere Grenzfrequenz 25MHz. Das Potentiometer zum Einstellen der Sinus Ausgangsspannung wird ebenfalls auf der Leiterseite bestückt und mechanisch durch die Leiterplatte fixiert. Mit dem Einstellregler wird der Nullpunkt der Sinusendstufe ohne Ausgangssignal gegen GND eingestellt.
Das Netzteil erzeugt +5V und -5V bei jeweils 150mA Belastbarkeit. Die vollständige Schaltung findet sich im Downloadbereich.
Die Steuer Platine enthält die Steuerung des Generators mit einem ATMEL AVR ATmega8 Prozessor, einem 4x20 Zeichen LCD (hier noch mit Schutzfolie) für Menüführung und Anzeigen, sowie ein Inkrementalgeber und drei Taster für die Bedienung des Gerätes.
Der Schaltplan zeigt die Standard Beschaltung eines ATmega8. Für den 7,3728MHz Quarz verwende ich einen Standard Keramikschwinger mit integrierten Kondensatoren. Die Quarzfrequenz ist auf die Nutzung der RS232 Schnittstelle ausgelegt, für die Funktion mit dem AD9835 aber unkritisch. Im Schaltplan ist der Quarz nur mit Lötpads Q1, Q2 und QGND gezeichnet.
Beide Platinen werden mit einem 5poligen Kabel verbunden. Mechanisch sind die Platinen mit Abstandsbolzen an die bearbeitete Alu Frontplatte eines handelsüblichen Gehäuses geschraubt. Es sind für beide Ausgänge jeweils zwei unterschiedliche Buchsen vorgesehen. Die Zuleitung erfolgt mit geschirmtem Kabel von der Generatorplatine. Dabei ist darauf zu achten, dass nur an einer Stelle die Frontplatte mit GND verbunden ist.
Die Beschriftung der Frontplatte erfolgt mit selbstklebender Folie, die ich mit einem Tintendrucker beschriftet habe. Zur besseren Haltbarkeit der Oberfläche wird die Folie mit einem Fixierspray behandelt. Die Folie ist trotzdem nicht sehr robust aber es ist besser als gar nichts.
Da noch Platz im Gehäuse vorhanden ist, habe ich ein fertiges RS232 nach USB Wandler Modul eingebaut um den Generator später auch mit einem PC steuern zu können.
!!! Achtung Lebensgefahr !!!
Dieses Gerät arbeitet mit 230V Netzspannung. Diese Schaltung dürfen nur
Leute mit entsprechender Ausbildung aufbauen.
Im Raum hinter der Steuerplatine ist ein zweipoliger Netzschalter untergebracht. Die Netzleitung vom Schalter zum Trafo wird über einen Ferritringkern (Stromkompensierte Drossel) geführt um Störungen von und in das Netz zu unterdrücken. Alle Netzpannung führende Teile sind mit Schrumpfschlauch isoliert. Das Gehäuse hat hinten und an den Seiten unten und oben Lüftungslöcher, da das Netzteil etwas Wärme erzeugt.
Die ATmega8 Software ist mit der Demoversion von BASCOM AVR geschrieben und soll als Anstoß für eigene Entwicklungen verstanden werden. Die Software ist weitgehend mit Kommentaren versehen. Ein Problem ist der auf 4KByte begrenzte Compiler der Demoversion. Ich habe trotzdem eine mini Menüführung eingebaut. Bei der Eingabe der Frequenz muss der zulässige Bereich von 1 – 20.000.000Hz selbst beachtet werden. Das RS232 Interface ist nicht realisiert.
Das AD9835 TTL Interface wird seriell mit 16Bit Datenwörtern beschrieben. Das MSB muss als erstes Bit gesendet werden. Zuerst wird FSYNC low gesetzt. Mit jedem Takt an SCLK wird nun der Zustand von SDATA vom AD9835 übernommen. Nach 16 Takten wird FSYNC high gesetzt, womit das 16Bit Datenwort als gültig erkannt und vom AD9835 weiterverarbeitet wird. Ein Datenwort besteht aus je einem 8Bit Teil für Befehle und einem 8Bit Teil für Daten. Für die Bedeutung der Bits verweise ich auf das Datenblatt des AD9835. Im Quelltext meiner Software habe ich für die Datenwörter die binäre Schreibweise gewählt für einen leichteren Vergleich mit dem Datenblatt.
Das Programm initialisiert den AD9835 beim Start mit 1000Hz.
Dieser Wert wird im Anzeigemodus am LCD angezeigt. Wenn man die Taste INPUT drückt, kommt man in den Eingabemodus. Mit den Tasten LEFT und RIGHT kann man die zu ändernde Stelle anwählen und mit dem Inkrementalgeber einen Wert zwischen 0-9 eingeben. Mit der Taste ENTER wird der Eingabemodus verlassen, die berechnete Frequenz zum AD9835 übertragen und der eingestellte Wert angezeigt.
Frequenzberechnung:
Zuerst wird, aus den im LCD einzeln eingegebenen Stellen, die gewünschte Frequenz berechnet. Der Wert steht in F1 und darf den Bereich zwischen 1 und 20.000.000 annehmen. Ab jetzt wird nach der Formel laut Datenblatt gerechnet. Der Wert wird in eine Double Variable (FREQ) gewandelt. FREQ wird dann durch die Taktfrequenz des AD9835 geteilt und anschließend mit 2^32 multipliziert. Anschließend wird FREQ auf einen glatten Wert gerundet und in eine Long Variable gewandelt. Das fertige 32Bit Datenwort steht somit in VALUE zur Übertragung bereit.
Dieses 32Bit Datenwort muss für die Übertragung zum AD9835 in vier Byte aufgeteilt werden. Dafür nutze ich den OVERLAY Befehl. Die einzelnen vier Byte werden dann in das 16Bit Datenwort eingefügt, welches die Befehle enthält, um die Daten an die entsprechende Stelle im AD9835 zu schreiben. AD9835 hat zwei 32Bit Register für die Frequenz. In diesem Fall werden die vier Byte in das Frequenzregister1 geschrieben. Nach der Übernahme aller vier Byte vergehen noch zwei Mastertakte bis der AD9835 die neue Frequenz erzeugt. Zum weiteren Verständnis verweise ich auf das Datenblatt vom AD9835.
Die Berechnung mit 64Bit Double Variablen in BASCOM AVR braucht den meisten Speicherplatz ist aber für die Genauigkeit notwendig. Ich habe erst mit Single Variablen gerechnet aber der BASCOM Simulator zeigt mit zunehmender Frequenz immer größere Abweichungen. Zum Vergleich habe ich eine kleine EXCEL Tabelle erstellt. In dieser Tabelle kann man die Frequenz genauso eingeben wie oben beschrieben und erhält die berechneten vier Byte. Diese sollten dem entsprechen, was der Simulator anzeigt.
Das Bild zeigt das Signal am Sinus Ausgang bei Rechtsanschlag vom Sinus Spannungsregler ohne Belastung. Die Amplitude ist im Bereich der unteren Grenzfrequenz von 1Hz bis zur oberen Grenzfrequenz von 20MHz konstant.
Frequenzgenauigkeit:
Die Frequenzgenauigkeit ist direkt von der Frequenzgenauigkeit des Quarzoszillators für den Mastertakt des AD9835 abhängig. Wer die Möglichkeit hat, diesen Takt mit einem sehr guten Zähler zu messen kann den gemessenen Wert in die Konstante MCLK eintragen. Dazu sollte das Gerät etwa eine Stunde in Betrieb sein.