Digitaler Funktionsgenerator

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

von Andreas Schwarz

Ein digitaler Funktionsgenerator, basierend auf einem AVR-Controller (ATmega8).

  • Signalformen: Sinus, Rechteck, Dreieck, Sägezahn
  • Ausgangsfrequenz: von 0,5 Hz bis ca. 25 kHz in 0,5 Hz-Schritten verstellbar
  • Amplitude 0-10 V
  • Offsetspannung ca. -6 V bis +6 V
  • Anzeige von Frequenz und Signalform auf einem LCD

Die Funktionserzeugung basiert auf dem Prinzip der Direkten Digitalen Synthese (DDS). Das Projekt war meine Facharbeit im Fach Physik (Note: 15 Punkte) und war deshalb hauptsächlich zur Demonstration des Verfahrens gedacht. Vielleicht ist es trotzdem auch zum Nachbauen oder als Grundlage für eigene Projekte interessant, da der Hardwareaufwand (ggf. bei reduzierter Ausgangsbeschaltung) sehr gering ist. Wer Wert auf ein möglichst sauberes Signal und hohe Frequenz legt, der ist aber mit einem fertigen DDS-Chip besser bedient.

Ein paar Kommentare und Korrekturen im Nachhinein:

  • Das Programm ist teilweise mit heißer Nadel gestrickt (besonders deutlich sichtbar an der Tastenauswertung und BCD-Umrechnung) und sollte daher nicht unbedingt als Beispiel für guten Programmierstil hergenommen werden.
  • Der Schaltplan des R2R-Wandlers in der PDF-Datei ist fehlerhaft, eine korrigierte Version gibt es unter DA-Wandler.
  • Bei R19 fehlt die Wertangabe. Ich meine mich zu erinnern dass es 5.6k waren (wer will kann sich den korrekten Wert aus der Formel des Subtrahierverstärkers ausrechnen), im Zweifelsfall kann man den Widerstand aber auch weglassen - die Abstimmung ist dann nicht ganz so fein aufgelöst.
  • R29 ist zu klein, es wird ständig ein halbes Watt verbraten. Allerdings ist wenn man ihn größer macht der Spannungsteiler nicht mehr als unbelastet zu betrachten, was das Ergebnis verfälschen könnte. Ich würde es mal mit 4.7k probieren.

Hinweise für Nachbauer:

  • Nicht vergessen das EEPROM zu programmieren (.eep), sonst bleibt das LCD leer.
  • Die Fusebits sollten so eingestellt werden wie auf diesem Bild.
  • Statt dem Quarzoszillator kann man auch einen Quarz verwenden.

Funktionsgenerator.jpg

Nachbau von Björn Wieck:

27025.jpg