Geschrieben

Nachbau eines digitalen Sinusgenerators 0

Richard Visokey hat in seinem Blog mit einem AD9850 und einem ARDUINO einen digitalen Sinusgenerator realisiert. Der Nachbau hat mir schon länger in den Fingern gejuckt, zumal Derartiges in meinem Elektronik-Labor noch fehlt. Zeit für eine kleine Bastelstunde.

Das Original-Projekt ist hier zu besichtigen. Die Seite enthält einen Download, der den ARDUINO-Sketch und den Verdrahtungsplan enthält. Im ZIP-File ist eine rotary.h-Library enthalten, die für den Betrieb des Inkrementalgebers erforderlich ist. Diese wird einfach dem /libraries-Ordner hinzugefügt. Die LiquidCrystal-Bibliothek ist von Haus aus enthalten.

Die Hardware

Herz des Sinusgenerators ist ein DDS-Modul, das einen AD9850 von Analog Devices enthält und komplett als Entwicklungsboard mit allen erforderlichen Komponenten (z.B. bei eBay oder Amazon) für rund 5 Euro zu haben ist. Der Chip ist in der Lage, einen digitalen Sinus zu generieren, der einen Bereich von 1 Hz bis 40 MHz überstreicht. Aber dazu später mehr. Ergänzt wird das Projekt durch ein HD44780 kompatibles LCD-Display. Auch dieses ist bei o.g. Anbietern für rund 4 Euro erhältlich. Inklusive des ARDUINO sind die aktiven Komponenten für weniger als 30 Euro zu kaufen – Gehäuse, Netzteil und Bedienelemente nicht eingerechnet.

Der Aufbau und die “Betankung” des Arduino hat lediglich eine Stunde in Anspruch genommen. Der Drehgeber ist einer alten Kensington-Maus entnommen. (Nicht alle Hersteller haben Scrollräder mit rotierenden Schlitzscheiben und Gabellichtschranken realisiert. Hier wurde ein echter Impulsgeber verwendet. Nicht unbedingt hochauflösend, aber für meine Zwecke nutzbar.) auf dem Foto zu sehen ist ein ARDUINO Nano v3.0, die erste Version lief mit einem ARDUINO Duemillenova.

Die Software

Das ZIP-File auf Richard Visokeys Seite enthält das Script, die Library und den Verdrahtungsplan. Allerdings habe ich ein paar Änderungen am Script vorgenommen, die m.E. die Bedien- und Ablesbarkeit verbessern:

– Es gibt neben dem “Step Up”- nun auch einen “Step Down”-Button.

– Die Anzeige stellt jetzt Einheiten lesbarer in Hz, KHz und MHz mit Vornullenunterdrückung dar. Somit wird 1 Hz angezeigt und nicht wie im Original 0.000.0001 MHz.

– Es gibt sechs Frequenz-Voreinstellungen, die ohne viel Kurbelei direkt angesprungen werden können:

1 MHz mit Schrittweite 100 KHz
100 Khz mit Schrittweite 10 KHz
10 Khz mit Schrittweite 1 KHz
1 KHz mit Schrittweite 100 Hz
100 Hz mit Schrittweite 10 Hz
10 Hz mit Schrittweite 1Hz

Hier der von mir geänderte Sketch. Die Voreinstellungen wie alles andere auch können natürlich eigenen Erfordernissen entsprechend angepasst werden. Bedingt durch die Änderung im Script ergeben sich Änderung im Verdrahtungsplan: Die beiden Taster für “Step Up” und “Step Down” liegen an den Eingängen D0 und D1. Nicht auf dem Foto zu sehen sind die sechs Taster an den Analog-Eingängen A0 – A5 gegen Masse für die Presets. (Die ursprüngliche Version habe ich mit einem ARDUINO Duemillenova aufgebaut, der 6 Analogeingänge hat – daher auch die 6 Presets. Da der abgebildete ARDUINO Nano 8 Analog-Eingänge hat, sind somit natürlich noch weitere Presets möglich.)

Ein Wort zur Genauigkeit

Analog Devices stellt auf ihren Seiten ein Tool zur Verfügung, mit der das Frequency Tuning Word errechnet werden kann, das die Höhe der ausgegebenen Frequenz bestimmt. Dabei folgt die Frequenz der folgenden Formel:

TuningWord = Frequenz * (2^32)/ 125 MHz

Das Ergebnis ist der Wert, der in den Chip geschrieben wird. Das Problem: Das Ergebnis der Formel ist naturgemäß ein Fließkommawert. Da der Chip aber nur ganzzahlige Werte annimmt, wird verständlich, das die real erzeugte Frequenz von der gewünschten abweichen muss. Ich habe mir ein php-Script geschrieben, das für den Bereich von 1 – 1000 Hz eine Tabelle mit den Abweichungen auflistet.

Das Ergebnis ist hier einzusehen. (Alternativ kann das Script hier heruntergeladen und angepasst werden.) Zur Ehrenrettung des Bausteins muss gesagt werden, dass die Abweichungen nur marginaler Natur sind. Über 10 Hz spielen sie keine signifikante Rolle mehr. Als Taktgeber für Präzisions- oder Langzeitmessungen sicherlich nicht geeignet, reicht die Genauigkeit als reiner Signalgenerator im NF-Bereich oder als Abgleichsender für ein Radio-Empfänger allemal.

Ein Wort zur Qualität

Auch ein digital erzeugter Sinus enthält Oberwellen. Diese nehmen bei steigender Frequenz zu und werden über einen starren, auf dem Board enthaltenen passiven Tiefpass herausgefiltert. Das funktioniert zum Einen naturgemäß nur bedingt und zum Anderen behauptet dieser Blog in einem Artikel, die Board seien nur deswegen so preisgünstig (oder billig?), weil es Ausschussware sei, bei dem der Tiefpass falsch berechnet wurde. Tatsache ist: Der Chip ist mit Frequenzen bis 40 MHz angegeben, aber über 20 MHz wird das Bild auf dem Oszilloskop echt hässlich, abgesehen von der sinkenden Amplitude. (Was aber natürlich niemand davon abhalten muss, einen eigenen Tiefpassfilter zu konstruieren und an geeigneter Stelle in den Ausgabeweg des Signals einzuschleifen!)

Was noch zu tun ist

Um einen ernsthaften Job in einem Elektroniklabor übernehmen zu können, fehlen meinem kleinen Generator noch ein paar Features, die ich noch nachrüsten werde:

– Ein niederohmige Ausgangsstufe mit schalt-/ regelbaren Amplitude

– einen AM-Modulator (~ 1KHz) zum Abgleich eines Radioempfängers

– Einen Sinus-/ Rechteck-Wandler. Der Baustein kann zwar Rechtecksignale mit einstellbarem Tastverhältnis erzeugen, allerdings nur bis 1 MHz und an den Flanken mit auffälligen Überschwingern garniert

Fazit: Puristische Messtechniker mögen die Nase rümpfen, für mich als Hobbybastler reicht das Ergebnis vollkommen. Klein, einfach/ schnell realisiert, kein “Wandern” der Frequenz und für schmales Geld zu erwerben – was will ich mehr …

Kommentare abonnieren

Es gibt noch keine Kommentare zu diesem Artikel

Schreiben Sie einen Kommentar!

* Erforderliche Angabe

Peter Hostermann is powered by WordPress and FREEmium Theme.