Funktionsgenerator

Ausgangspunkt war eine fixe Idee, einen Funktionsgenerator selbst zu bauen.
Die Signal- und Frequenzstabilität reicht für die meisten Anwendungen locker aus, so dass die Idee als Hobby „nebenher“ ausgereift ist.

Das Projekt stelle ich unter GPL bzw CreativeCommons gerne hiermit zur Verfügung.

Hardware

Die Hardware besteht aus dem nachgebauten DDS Generator von Jesper Hansen, einem Controller für die Benutzersteuerung, einem DotMatrix LCD und einer analogen OPV Stufe für die analoge nachregelung.

Die Hauptplatine beherbergt

  • Spannungsregelung +5V, +12V, -12V
  • Controller1 für das Benutzerinterface (LCD, Rotary Encoder*, Switches (optional über PortC)
  • Controller2 für das Erzeugen der verschiedenen Signalformen/Frequenzen
  • Widerstandsnetzwerk als DAC
  • 4-Fach OPV Stufe für die analoge nachbearbeitung des Signals

Das LCD wird im 90° Winkel mittels Riser Board auf die Hauptplatine gesteckt.
Somit kommt das gesamte Projekt mit nur einer Eurokarte aus und kann unter Anderem auch in ein 1HE 19″ Gehäuse (ausgeschlachteter Switch, etc) verbaut werden.

Externe Komponenten sind lediglich noch

  • ein Transformator 2x12V AC 0.5A
  • Externe Verstärkerstufe 15-20W (wird später dem Projekt noch hinzugefügt)

Firmware

Die Firmware ist komplett in AVR Assembler geschrieben. MiniDDS.ASM ist eine leichte Modifikation des oben erwähnten Quellcodes von Jesper Hansen.

Die Bedienung erfolgt über einen einzigen Regler: ein Drehgeber (GRAY Code) mit Tastfunktion:

  • Links/Rechts Auswahl im Menü / Einstellen der Frequenz
  • Drücken: Aktuellen Menüeintrag quittieren

Die Frequenzen können folgenden Schritten eingestellt werden (+/-):
FINE, 1 Hz, 10 Hz, 100 Hz, 1 KHz, 10 KHz

Signalformen und analoge Nachbearbeitung

Der Generator kann die Signalformen Sinus, Rechteck, Dreieck und Sägezahn erzeugen.
Über die Analogregelung kann die Amplitude zwischen 0 und 6.5 Vrms AC stufenlos eingestellt werden.
Über die Analogregelung kann das Offset stufenlos eingestellt werden.
In Kombination mit der Amplitudenregelung lässt sich die komplette Signalform stufenlos sowohl in den positiven als auch den negativen Spannungsbereich verschieben.

Minimaler/maximaler Frequenzbereich

Die minimal darstellbare Frequenz kann ich mit meinem Oszilloskop gar nicht mehr messen. Sie liegt in etwa bei 0.2 Hz.
Die maximal erzeugbare Frequenz liegt theoretisch irgendwo um 1 MHz.

Allerdings wird das Widerstandsnetzwerk und vor allem der Operationsverstärker schon viel früher überlastet, so dass ich eine Maximalfrequenz von ca 850 KHz gerade noch messen konnte.

Da sich die Signalform bei höheren Frequenzen verändert (bedingt durch Leiterbahnen und Widerstände, konnte ich die Maximalfrequenz nur mit einem Rechteck messen. Man sieht, dass sich bis 200KHz die Flanken verändern und später das generierte Rechteck am DA-Wandler Ausgang (Widerstandsnetzwerk) stark verändert. Auch ist es über 200KHz nicht mehr Frequenzstabil. Der Operationsverstärler quittierte seinen stabilen Dienst bereits bei etwas über 210KHz.

Die absolut maximal darstellbare (und auch noch stabile) Frequenz konnte ich bei 200 KHz ausmachen, ausser dem Sägezahn, dort liegt die maximale Frequenz bei 125KHz.

Downloads

Der komplette Quelltext in Assembler, sowie die Schaltplan- und Layoutdaten stelle ich unter GPL zur Verfügung:

 

Update 24.06.2009:
Mittlerweile wurde die komplette Elektronik samt einer separat schaltbaren 15W Endstufe in ein 1HE Gehäuse eines defekten Switches eingebaut.

Funktionsgenerator, sowie Endstufe können separat betrieben werden – das Signal des Generators kann über einen Spannungsteiler (1:10) direkt auf den Eingang der Endstufe geschaltet werden. (Bild siehe oben)

Update 08.12.2012:
Da schon einige gefragt haben, wie denn die Fusebit Einstellungen für die beiden Controller lauten:
TINY2313: -U lfuse:w:0xff:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
TINY2313 (alternativ): -U lfuse:w:0xc0:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
MEGA8515: -U lfuse:w:0xc0:m -U hfuse:w:0xd9:m

Update 23.05.2013:
Der verwendete Drehimpulsgeber ist ALPS 401755, Artikelnummer STEC11B09 beim „grossen R“.

Momentan verwende ich das Gerät nicht mehr, habe allerdings in absehbarer Zukunft vor, ein paar Optimierungen vorzunehmen und auch die Firmware in avr-gcc neu zu schreiben. Sollte es zu einer Aktualisierung kommen, werde ich dies auf der Startseite und natürlich auch auf dieser Projektseite vermerken.