Peter Hofbauer’s private Homepage
Selbstbauprojekte eigene Entwicklungen
Impressum Letzte Änderung: 08.Juli 2013 Copyright: frei! Impressum Letzte Änderung: 27.Jan.2025 Copyright: frei! Home Home Signal Generator Seite 1 Signal Generator Seite 2

SINE SQUARE WAVE SIGNAL GENERATOR (1/2)

Ein spezieller Funktionsgenerator

In meiner kleinen Hobby-Werkstatt habe ich schon zwei Generatoren. Einen inzwischen 40 Jahre alten (Eigenbau) analogen Sinus/Rechteck- Generator und einen gekauften Funktionsgenerator. Warum jetzt einen weiteren entwickeln und bauen? Oft verwende ich den alten Generator, wegen der eindeutigeren Bedienung. Beim Funktionsgenerator wird Spannung, Offset und Frequenzbereich mit Taster getippt, von unten nach oben und wieder nach unten, also immer in die Runde. Da sind mir die analogen Einsteller mit Drehschalter und Poti lieber.

Meine Überlegungen

Der neuen Generator wird so entworfen wie ich es wirklich benötige und soll möglichst nur mit bereits vorhandenen Bauteilen auskommen. Die Frequenz soll mit ein Poti über den kompletten Bereich nur mit einer 270°-Drehung einstellbar sein. Hilfreich bei der Suche nach einer Resonanz-Stelle. Die Ausgangs-Spannung soll im Display von oben bis unten incl. DC-Anteil im Klartext angezeigt sein. Der Oszillator wird mit ein AD9850-Modul aufgebaut. Das hatte ich noch in mein Hobbylager. Das liefert die genaue Frequenz und konstante Spannung. Ich habe die Frequenzen von 1Hz bis 9999999Hz (10MHz -1Hz) verwendet. Das Modul wurde etwas verändert. Die beiden Sinusausgänge müssen mit je 100R belastet sein. Das LC-Filter wird entfernt. Ebenso der R-Trimmer für die Einstellung des Tastverhältnis der Rechteck-Signale entfernt. Das wird jetzt mit Poti “PWM” auf der Front gemacht. Der AD9850 hat für beide Signalformen komplementäre Ausgänge. Die werden mit Differenzverstärker in gegen GND symmetrische Signale geformt. Der komplette Signalweg im Generator ist DC-gekoppelt, also ohne Koppel-C . Dann kommt das “AMPL”-Poti für die Einstellung der Ausgangsspannung. Dahinter kommt eine Endstufe. Die hebt das Signal auf maximal 26Vpp, also +/-13V an. Es folgt ein 4-fach Eichteiler mit einer Impedanz von 100R. Den habe ich mit normalen Widerständen aufgebaut. Die dadurch bedingte geringe Abweichung ist tolerierbar. Diesen Teiler habe ich hinter der Endstufe gesetzt und nicht davor. Damit Rauschen aus der Endstufe ebenfalls herunter geteilt wird.

Die Funktion und Bedienung

Die Funktionen und Eigenschaften lassen sich am besten mit der Bedienung erklären. Die Tasten und Bedienelemente zeigen mit einer LED an ob sie aktiv sind. Mit den 5 Tasten neben dem Display wird ausgewählt welche Werte man verändern will. Im Display erscheint davor ein Doppelpfeil “<<”. Die Einstellung der Werte ist mit 3 Einstellern möglich: 1.) Mit einer Ziffern-Tastatur, wird aktiv durch tippen auf eine Zifferntaste. Mit “CLR” geht die letzte Ziffer zurück. wenn mal alles zurück nimmt erscheint der vorige Wert wieder. Mit “ENT” wird übernommen und wenn nötig auf einen zulässigen Wert begrenzt.   2.) Mit den Inkrementalgeber, wird aktiv sobald man dran dreht. Das ist eine Feinkorrektur um +/- 1. 3.) Mit Absolutwert-Poti. Damit werden Werte innerhalb der erlaubten Grenzen mit einer einzigen 270°- Drehung verändert. Weil das sofort brutal wirkt muss vorher eine kleine Taste am Drehknopf gedrückt werden. MAX” ist die höchste Frequenz, geht bis 9999,999kHz, (10MHz -1Hz). “FREQ” ist die gewünschte Frequenz am Ausgang, muss innerhalb zwischen  “MAX” und “MIN” liegen “MIN” ist die untere Frequenz, geht ab 1Hz (0.001kHz) “SWEEP” schaltet den Wobbler ein. “BURST” schaltet die Funktion “abgezählte Impulskette” ein. Wobbler und Impulskette nenne ich hier Sweep und Burst weil das weniger Buchstaben hat und deshalb besser auf die Frontplatte passt. Die Signalform Sinus und Rechteck kann in jeder Betriebsart umgeschaltet werden. Das Poti “OFFSET” wird mit den Kippschalter darunter aktiviert. Der Schalter “FILTER ON” schaltet ein LC-Filter in den Signalweg. Schalter “OUTP ON” trennt die BNC-Buchse “OUTPUT” komplett. Das erspart das An- und Abstecken einer BNC-Leitung. Die BNC-Buchse “TRIGGER” liefert ein 5V TTL-Signal in der Bertiebsart “SWEEP” und “BURST”. Die “START” und “STOP”-Tasten wirken in den Betriebsarten “SWEEP” und “BURST”. Das Poti “AMPL” sitzt vor der Endstufe. Damit kann der Ausgangspegel stufenlos eingestellt werden. Der Drehschalter “ATTEN VPP” ist der Eichteiler. Der liegt am Ausgang der Endstufe und schaltet das Signal zur Ausgangs-BNC-Buchse.

 Briebsart Generator

Wenn weder Sweep noch Burst aktiv sind haben wir einen normalen Sinus-Rechteck-Generator. Dann sind im Display nur die 3 Frequenzen und die Ausgangsspannung sichtbar. Bei Rechteck-Betrieb wird noch das Tastverhältnis (PWM) angezeigt. Eine Umschaltung Sinus <> Rechteck ist in allen Betriebsarten immer möglich. Die beiden Frequenzen “MAX” und “MIN” legen den Frequenzbereich fest. Statt Bereichsschalter. Der Bereich ist beliebig einstellbar. Dürfen sich natürlich nicht überlappen. Die aktuelle Frequenz “FREQ” ist nur innerhalb der beiden Grenzwerte möglich. Die Ausgangsspannung wird nicht mit z.B “26Vpp” sondern immer die untere und obere Spannung angezeigt z.B. “-13V ... +13V”. Das ist eindeutiger. Mit den Einsteller “OFFSET” und “AMPL” kann die Endstufe übersteuert werden. Dann erscheinen hinter dem “V” ein Fragezeichen: “V?”. Das funktioniert bei allen Spannungsbereichen, Spannungsform und Frequenz. Damit die Anzeige immer ausreichend genau ist, sind in der Firmware Eichfaktoren und für den Sinus zusätzlich eine Frequenz/Spannungstabelle enthalten. Es wird immer die richtige Leerlaufspannung (Unten und Oben) am Ausgang angezeigt.   Beispiele: Links: einer Steuerspannung 0 bis 3,2v, PWM = 11%.    Mitte: Sinus von -9,5V bis -12,6V.          Rechts: Sinus von +9,2V bis +12,2V Hier wird die Übersteuerung der Endstufe mit “V?” angezeigt. Das funktioniert natürlich auch bei anderen Stellungen des Drehschalters “ATTEN Vpp”. Hier ein Beispiel wenn der Eichteiler in Stellung “0,02” steht. Der Eichteiler ist am Ausgang der Endstufe, bei”+18.1mV?” hat die Endstufe am Ausgang einen Rechenwert +18,1V?, wird also übersteuert. Beispiele für Rechtecksignale: links = 1kHz, Mitte = 1MHz, Rechts = 10MHz Die Frequenzen sind in der Firmware nicht begrenzt worden. Man kann auch bis 10MHz einstellen, bzw 9999,999kHz. Der Rechteckteck ist dann natürlich nicht mehr schön und kaum als solcher erkennbar. Aber für manch eine Anwendung doch nutzbar. Hier sind die Flanken eines 1MHz- Rechtecksignals sichtbar. Der Pegel der Sinussignale wird ab 1MHz kleiner. Das ist in der Spannungsanzeige eingerechnet. Messwerte:  Pegel +/-13V (0dB) bei 1MHz, +/-11,5V (-1dB) bei 6MHz, +/-10,5V (-2dB) bei 8MHz, +/- 9,1V (-3dB) bei 10MHz (9999,999kHz)  

Betriebsart SWEEP

In dieser Betriebsart wird die Frequenz alle 1ms um einen Step-Wert erhöht. Beginnt bei MIN und endet bei MAX und wieder von Vorn. Es handelt sich also um einen normalen Wobbler. Als Besonderheit gibt es einen Trigger-Ausgang und eine Start- und Stop-Taste. Nach betätigen der Taste “SWEEP” (siehe Bild links) ist der Wert “Step” editierbar. Wie bei allen Eingaben ist das mit allen drei Bedienelementen möglich. Von 1 Hz bis 9999,999kHz. Der Generator ist im Stop-Modus. Es können jetzt alle Werte (Step, Max, Frequ und Min) editiert werden. Ausgegeben wird vorm Start die eingestellte Frequenz. Unten rechts ist Zeit für einen Zyklus “Time 0.999s”  angezeigt. Diese Zeit ist aus allen Werten (Max, Min und Step berechnet worden. Das geschieht in Echtzeit und wird permanent angezeigt. Die Firmware lässt alle Werte zu, bei Max = 9999,999, Min = 0.001 und Step = 0,001 dauert ein Zyklus 9999 Sekunden! Mit Taste START läuft der Zyklus kontinuierlich ab. Jetzt ist nur noch Frequ einstellbar. Die Frequenz am Ausgang wird alle 1 Millisekunde um den Wert Step von Min bis Max erhöht. Was ständig abläuft bis es mit der STOP-Taste angehalten wird. Der Trigger-Ausgang Solange sich die Frequenz (während Sweep-Zyklus)  unter Frequ befindet, ist der Pegel am Trigger-Ausgang Low, wird beim überschreiten auf High gesetzt. Die L>H - Flanke am Triggerausgang zeigt also auf die bei Frequ eingestellte Frequenz. Die Frequ wird am Besten mit Absolutwert-Poti verstellt. Damit kann man mit einer einzigen Drehung der komplette Bereich überstreichen. Was mit einem Digi-Oszilloskop gut zu sehen ist. Hier ist der komplette Bereich von 1kHz bis 9999,999kHz mit Step = 10kHz und Frequ = 5MHz angezeigt. Oben blau = Triggersignal, unten gelb =  Sinussignal. Ein paar Beispiele: 10kHz bis 200kHz, Step 10kHz, Ohne Filter       10kHz bis 200kHz, Step 10kHz, mit Filter          1kHz ...1MHz, Step 1kHz, Trigger 500kHz Nach betätigen der STOP-Taste wird die Trigger- Frequenz stabil ausgegeben. START - STOP ist beliebig wiederholbar. Im STOP sind alle Daten editierbar. Im START nur Frequ. !kHz bis 20kHz, Trigger 10kHz                            1kHz bis 20kHz, Trigger 1kHz  

Betriebsart BURST

In dieser Betriebsart werden abgezählte Impulse erzeugt. Besonders geeignet zum Betrieb von Schrittmotor-Steuerungen. Nach betätigen der Taste “BURST” ist der Generator zunächst im STOP-Modus. Es wird kein Signal ausgegeben, mal abgesehen vom DC- Offset . Das in Zeile 4 angezeigte Signal wird erst nach START ausgegeben. Im Display erscheint eine Zeile zur Eingabe der gewünschten Impulse. Möglich 1 bis 9999999 Impulse. Darunter wird die berechnete Zeit (“Time”) angezeigt. Dies ist die benötigte Dauer der Impulse mit der eingegeben Frequenz im START-Zyklus. Beispiele: 9999999 Impuls mit einer Frequenz von 1 Hz werden erst nach 2777 Stunden fertig. 100000 Impulse mit einer Frequenz von 1kHz benötigen 100 Sekunden. Die “TIME” und “CLK” werden nach Start sichtbar in Echtzeit herunter gezählt. Nachdem alle Impulse raus sind, geht der Generator auf STOP. Im laufenden START-Zyklus kann die Frequenz verstellt werden. Gut geeignet zur Frequenz- Einstellung ist das Absolutwert-Poti. Ist dann ein Drehzahlsteller. Auch dabei wird sofort die Wirkung bei “Time und “Clk” sichtbar. Wenn vorm Start FREQ und das Poti aktiv ist, bleibt das nach Start aktiv damit das Poti sofort als Drehzahlsteller dienen kann. Mit STOP kann der Zyklus angehalten und auch ab der selben Stelle fortgesetzt werden. Natürlich auch ständige Wiederholungen. Der Trigger-Ausgang Im Start-Zyklus erscheint ein H-Pegel an der Trigger-Buchse. Wird in den Oszilloskop-Bildern blau angezeigt. Das hat eigentlich nur eine Kontrollfunktion. Wenn diese Zeit zu lang ist, wurde eine zu hohe Frequenz gewählt. Dann werden ein paar Impuls nicht oder einer zu víel gezählt. Zulässig sind bis 50kHz. Im Oszilloskop-Bild unten rechts war eine Frequenz von 9999,999kHz und 10000 Impulse eingestellt. Hätte viel früher fertig sein müssen. Trotz der hohen Frequenz ist der Zyklus aber fertig geworden.

Die Firmware

Als Prozessor verwende ich den 16bit-Typ dsPIC30F6012A. Ich programmiere meine CPUs komplett in Assembler. Der komplette Code besteht aus ca. 4200 Zeilen in 22 Dateien. Das Display QC12864 Das Datenblatt (Version 2008) für den Controller ST7920 hat leider Fehler! Ich will ein 128x64-LCD mit ST7920 als Display mit 6 Textzeilen im Parallel-Modus betreiben. Das geht nur im Grafik Betrieb. Im Netz ist das Display nur mit seriellen Betrieb mit Hilfe von Libs und mit einer Arduino Hardware beschrieben. Da kann ich nichts mit anfangen. Habe eine eigene Hardware und programmiere meine CPUs grundsätzlich komplett in Assembler. Der 8bit Parallelbetrieb ist falsch beschrieben. Ob das auch beim Seriellen so ist weis ich nicht. Die Grafik (S.25) zeigt pro Byte 2 E-Takte, das ist falsch, es darf nur einer sein. Die LCD-Adresse für Y (vertikal) ist mit 6 bit angegeben (S.17). Das höchste bit AC5 wird aber ingnoriert. Man kann also eine 16-bit Pixelreihe nicht direkt adressieren. Die Pixelreihen im oberen LCD-Teil ist mit der im unteren Teil in Reihe geschaltet. Man muss also immer 256 Pixel auf einmal übertragen. Die X-Reihe #0 wird in der X-Reihe #32 fortgesetzt. In der Initialisierung sind für den Grafikmode nur 3 Instruktionen nötig:     0x30 + 250us warten     0x30 + 80us warten     0x36 + 80us warten Im Datenblatt sind Wartezeiten angegeben, aber nicht ab wann das gilt. Erst nach Übertragung von den erforderlichen 2 Byte leider nicht. Nach jeden Byte muss eine Wartezeit sein. Man darf die Zeit aber teilen. Beim Schreiben der 16bit Adressen und 16bit Daten habe ich heraus gefunden, nach jedes Byte Parallel:     0,1us     E auf H     0,2us     E auf L     40us Wenn ich die 2 x 40us (wegen 16bit) nur eine auf 20us verkleiner entstehen Fehler. Mein Display arbeitet mit 460kHz intern, also am unteren Limit. Weil ich alles in Echtzeit angezeigt haben will, dürfen keine Wartezeiten im Programm enthalten sein! Das Display bekommt immer nur ein einziges Byte pro Durchlauf. Dazu sind  drei UPs in der Hauptschleife und ein Timer verantwortlich. Der komplette Inhalt im LCD wird 17 mal pro Sekunde geschrieben, unabhängig ob sich etwas geändert hat oder nicht. Ergebnis: jede Datenänderung wird in Echtzeit sichtbar. Das DDS-Modul mit AD9850 Solch ein Modul habe ich bei meinen HF-Speki eingesetzt und damals (weils billig war) gleich mehrere gekauft. Eigentlich war der Besitz dieses Moduls der Auslöser für die Entwicklung dieses Generators. Der AD9850 wird seriell angesteuert. Das mache ich “zu Fuß” über normale CPU-Pins. Das Modul arbeitet mit 125MHz-Quarz. Die Frequenz wird mit 5 Byte bei einer Auflösung von  0.0291Hz eingestellt. Ausschalten kann man das Signal mit 5 x 0x00, was für den Burst-Modus benötigt wird. Die Anzeige der Ausgangsspannung Die Ausgangsspannung wird nicht gemessen sondern das Poti “AMPL” ist ein Doppelpoti. Die zweite Hälfte ist an 5VDC angeschlossen. Dessen Stellung und die des Offsetpoti wird vom 12bit-ADW gelesen. Aus diesen Werten lässt sich die Ausgangsspannung mit ausreichender Genauigkeit berechnen und anzeigen. In der Firmware werden noch Korrekturen eingerechnet. Und zwar für jede Signalform und Stellung des “ATTEN Vpp” getrennt. Wegen des leider nicht linearen Frequenzganges (vor allem der Endstufe) ist noch eine Frequenz-Spannung-Tabelle berücksichtigt. Die Anzeige ist bei allen Frequenzen, auch mit Offset, genau. Nur beim Rechteck stimmt das bei Frequenzen ab ca. 5MHz nicht mehr ganz weil der Rechteck dann recht deformiert ist. Bedienelement via 12bit-ADW lesen Die 5 Tasten links, die Zifferntastatur, der Drehschalter  und die 4 Tasten rechts werden über Widerstände kodiert, vom 12bit-ADW gelesen, dekodiert und entprellt. Auch für die 12 Ziffern-Tasten ist die Genauigkeit des ADW ausreichend. Das Absolutwert-Poti soll eine Bedienung wie bei einem analogen Generator ermöglichen. Also mit einer einzigen Drehung den kompletten Bereich durchfahren. Natürlich geht das nicht ganz, eine Drehung ist in 4095 Schritte unterteilt. Netzausfall-Erkennung Vorm Ausschalten sollen die eingestellten Daten ins EEPROM des dsPIC30F6012A. Damit nach dem Einschalten alle wieder vorhanden sind. Bevor die 5V-Versorgung absinkt wird die EEPROM-Aufzeichnung  aktiv, siehe blaue Nadel. Die gelbe kurve zeigt die 5V für den Prozessor.

Der mechanische Aufbau

Platine FGG9020D linke Tasten, Inkrgeber, Zifferntasten
Platine FGG9020E Endstufe
Platine FGG9020B Rechte Tasten
Display
Platine FGG9020H DDS-Oszillator
Platine FGG9020C CPU mit dsPIC30F6012A
DC/DC-Wandler für 5V
Platine FGG9020N Netzteil
Platine FGG9020T Netztrafo
Die Platinen FGG9020E und ...H mit der Fräse gefertigt, der Restkupfer zwischen den Leiterbahnen ist GND- Potential
Das Grundgerüst, Seitenteile aus dem 3D-Drucker
Zentrale GND-Fläche
CPU
DDS-Oszillator
Endstufe
Netzteil
Es folgt: Schaltpläne, Downloads, Hinweise
Home Nächste Seite Nach oben