1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Für Basteleien, Messgeräte und physikalische Experimente.

Moderatoren: MaxZ, ebastler, SeriousD

Antworten

Thread-Ersteller
ataio
Beiträge: 603
Registriert: Fr 13. Okt 2006, 21:54
Spezialgebiet: seltsame Geräte :)
Wohnort: Karlsruhe
Hat sich bedankt: 2 Mal
Danksagung erhalten: 14 Mal

1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von ataio »

Hallo zusammen,

ich wollte mal meinen neuen 1 kHz - 4 MHz Arduino-Frequenzgenerator vorstellen, nachdem ich überraschend lang im Internet gesucht habe und nichts wirklich passenden gefunden habe. Die Motivation war folgende:

In meinen meisten Projekten steckt ein Oszillator. Und manchmal auch ein Mikrokontroller. Deshalb wollte ich den Mikrokontroller als Frequenzgenerator einsetzen und mir den Oszillatorchip sparen. Gerade bei höheren Frequenzen sollte das eine Menge Ärger sparen, da sich die Frequenz nicht mehr mit der Betriebsspannung verstellt und auch das Tastverhältnis konstanter bleibt und man die Frequenz einfach per Poti oder Software einstellen kann. Der Frequenzgenerator hier ist mehr ein Nebenprodukt (und deshalb habe ich ihn hier- und nicht im Mikrokontrollerforum gepostet).
189.jpg
189.jpg (186.64 KiB) 5044 mal betrachtet
Die Frequenzerzeugung kann vom Mikrokontroller gemacht werden, oder von einem separaten Frequenzsynthesizer-Baustein, der aber für einfache Anwendungen overkill wäre (und teurer als der Mikrokontroller).
194.jpg
194.jpg (36.56 KiB) 5044 mal betrachtet
Im Schaltplan gibt es nur 2 Potis zur Frequenzeinstellung (grob und fein).

Der Systemtakt wird durch prescalar geteilt und Timer2 zählt bei jedem Schritt ein Inkrement von 0 bis max 254. Bei beliebigen Werten zwischen 1 und 254 kann das compare-Register OCR2A definiert werden, dass dann einen Interrupt auslöst und D3 toggelt, wenn timer1 daran "vorbeizählt". Das macht der Arduino im Hintergrund, sodass man gleichzeitig noch andere Projekte ausführen kann.

Insgesamt hat der arduino 3 timer, wovon jedoch timer0&1 für andere Dinge belegt sind. Deshalb macht eigentlich nur timer2 Sinn, falls man noch anderen Code im Main-Loop hat. Da timer2 jedoch nur 8 byte fassen kann (0-254), kann es nur 255-1 Frequenzinkremente geben, die zudem nicht linear verteilt sind (bei hohen Frequenzen wird das Raster gröber).
192.jpg
193.jpg
193.jpg (44.83 KiB) 5044 mal betrachtet
Die Grafik zeigt die möglichen Frequenzen mit einem prescalar von 8 auf der x-Achse (links). Die gleiche Auftragung ist doppellogarithmisch rechts wiederholt (zusätzlich noch mit den prescalars 64 und 1). Die Kreuzchen zeigen die möglichen Frequenzen an. D.h. die Frequenzen zwischen den Kreuzchen kann der Mikrokontroller nicht erzeugen. Alle möglichen Frequenzen sind in der Exceldatei unten aufgelistet. Die von der Software zusammengeschalteten Bereiche sind in der Datei gelb hervorgehoben.

D.h. z.B. bei 4 MHz ist das Increment bis zur nächst tieferen Frequenz ca 800 kHz. Dieser Wert wird zur Info in der 2. Zeile des LCDs angezeigt. Bei 1 kHz ist das Inkrement sehr klein, d.h. hier gibt es nur kleine Stufen (Incr 0.00 kHz, in der Grafik).
187.jpg
187.jpg (133.75 KiB) 5044 mal betrachtet
Der Frequenzgenerator schaltet diese 3 Bereiche zusammen und schneidet die Überlappungen heraus. Dadurch wird nicht nur der Frequenzbereich grösser sondern auch das Frequenzauflösungsvermögen.
191.jpg
191.jpg (133.55 KiB) 5044 mal betrachtet

Das Oszi zeigt die Signale bei 1 kHz und 4 MHz. Bei 4 MHz sieht man meinen schlechten Tastkopf auf Kanal A. Ausserdem weicht das Tastverhältnis bei hohen Frequenzen von den idealen 50% ab, weil die Digitalisierung zu klein wird. Abgesehen davon, können in der Software auch andere Tastverhältnisse eingestellt werden.
190.jpg
190.jpg (185.22 KiB) 5044 mal betrachtet
Der ICL7667 macht als Ausgangsverstärker einen guten Job und schützt den Mikrokontroller. Irgendwann baue ich wahrscheinlich noch abgeschirmte Ausgänge ein und vielleicht eine Kurzschlussstrombegrenzung. Der Arduinosketch ist ganz unten. Ausserdem filtert die Software noch das Rauschen der Potis und "lockt" die eingestellte Frequenz nach 4 Sekunden.

Viele Grüsse
ataio
Dateianhänge
Frequenzbereiche und Berechnung.xlsx
(79.9 KiB) 305-mal heruntergeladen
Frequenzgenerator 1kHz-4MHz Arduino sketch.txt
(7.94 KiB) 597-mal heruntergeladen
Benutzeravatar

Paul
Admin
Beiträge: 3596
Registriert: So 7. Aug 2005, 14:34
Schule/Uni/Arbeit: HW/SW-Entwickler
Wohnort: Braunschweig
Hat sich bedankt: 638 Mal
Danksagung erhalten: 210 Mal
Kontaktdaten:

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von Paul »

Moin ataio,

tolles Projekt! :) So einen Generator kann man immer gebrauchen.
Das Problem mit der nichtlinearen Auflösung hast du in meinen Augen sehr schön gelöst.
Ist nicht auszuschließen, dass dein Code bei mir auch irgendwann mal Verwendung finden wird! :mrgreen:

Beste Grüße!
- Paul
“With great power come great heat sinks.”
paulwilhelm.de -- mosfetkiller.de
Benutzeravatar

Mofi
Beiträge: 3981
Registriert: Mo 19. Apr 2010, 20:39
Spezialgebiet: Müllverwertung und rumgammeln, Pilze.
Schule/Uni/Arbeit: Universaldilletant
Wohnort: Bremen
Hat sich bedankt: 157 Mal
Danksagung erhalten: 204 Mal
Kontaktdaten:

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von Mofi »

Danke auch von mir. Lässt sich schnell und einfach nachbauen. Ganz nach meinem Geschmack ;)
Oh ja. So fängt es an. Aber der Weg von einem legitimen Verdacht zu blindem Verfolgungswahn ist weitaus kürzer als wir denken.
Ich bin zutiefst besorgt über das, was hier geschieht.
Jean-Luc Picard 2367

Thread-Ersteller
ataio
Beiträge: 603
Registriert: Fr 13. Okt 2006, 21:54
Spezialgebiet: seltsame Geräte :)
Wohnort: Karlsruhe
Hat sich bedankt: 2 Mal
Danksagung erhalten: 14 Mal

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von ataio »

Hi Leute,

das freut mich zu hören!
ich bin auch ein Freund von einfachen Anleitungen :)
hehe, und Paul, Du hast den Code gelesen und die Zeile mit der Integerrundung gefunden :) Hut ab, - fremden Code lesen ist meist eine unangenehme Sache .oO(zumindest für mich :)

Grüsse
ataio
Benutzeravatar

kilovolt
Beiträge: 13364
Registriert: So 25. Feb 2007, 09:50
Hat sich bedankt: 685 Mal
Danksagung erhalten: 441 Mal
Kontaktdaten:

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von kilovolt »

Hallo ataio

Da kann ich mich nur anschliessen. Einmal mehr ein sehr schönes Projekt. Von der Softwareseite her verstehe ich leider zuwenig, um mitreden zu können, aber das Gerät gefällt mir! Dass die ICL7667 als Ausgangsstufe die 4MHz mitmachen, erstaunt mich etwas ;) Wie sieht es eigentlich mit der Frequenzstabilität aus? Ist diese durch den Quarztakt des Arduinos gegeben?

Übrigens zum Nachbau Deines vorherigen Projekts bin ich leider noch nicht gekommen, musste meine Werkstatt kurzzeitig räumen. Werde mich aber sicher noch damit befassen.

Beste Grüsse
kilovolt
Alle Angaben meinerseits ohne Gewähr! Ich lehne jegliche Haftung für Personen- und/oder Sachschäden ab. Jeder ist für seine Sicherheit selber verantwortlich.

http://www.kilovolt.ch

Thread-Ersteller
ataio
Beiträge: 603
Registriert: Fr 13. Okt 2006, 21:54
Spezialgebiet: seltsame Geräte :)
Wohnort: Karlsruhe
Hat sich bedankt: 2 Mal
Danksagung erhalten: 14 Mal

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von ataio »

Hi kilovolt,

oh, eine Werkstatträumung ist übel :) Hoffe, das renkt sich bald wieder ein! :)

Und bis vor kurzem ging es mir genau so wie Dir: ich habe einen grossen Bogen um Mikrokontroller gemacht, bis mir mein Bruder mal das Arduino Starterset geschenkt hat. Dann gabs keine Ausreden mehr und ich muss echt sagen, dass sich der Respekt vor Mikrokontrollern nicht gelohnt hat :) Ich kann mir zwar noch immer nicht die Befehle merken, aber die meisten Leute kopieren sie einfach aus einem alten Projekt, der Internet doku, oder einer der vielen Beispielsketches.
Ich habe den Aufwand für den Einstieg in Mikrokontroller komplett überschätzt. Und es gibt dadurch komplett neue Möglichkeiten für die Projekte und ich frage mich zum Spass immer mal wieder selbst, wie man gewisse Sachen ohne Mikrokontroller umgesetzt hätte. :)
Es lohnt sich also und macht eine Menge Spass, - vor allem, wenn man Dinge implementieren kann, die einem ansonsten sehr viel Aufwand gemacht hätten, oder es den Komfort erhöht (Knöpfe&Messwerte anzeigen & LCD Ausgabe)

Und ja, der ICL7667 ist eine tolle Sache, auch für 4 MHz und aufwärts. Und die Frequenzstabilität hängt dann letztendlich von der Quarzstabilität ab.

Viele Grüsse
ataio
Benutzeravatar

Mofi
Beiträge: 3981
Registriert: Mo 19. Apr 2010, 20:39
Spezialgebiet: Müllverwertung und rumgammeln, Pilze.
Schule/Uni/Arbeit: Universaldilletant
Wohnort: Bremen
Hat sich bedankt: 157 Mal
Danksagung erhalten: 204 Mal
Kontaktdaten:

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von Mofi »

Hy.

Bau das Teil grad nach.
Was ich nicht verstehe: warum sind 2 Treiber ICs verbaut, wo der ICL7667 doch 2 Kanäle hat? und warum sind sie in Reihe und nicht parallel verbaut?
Ist das Signal des 2ten Kanals invertiert? Werd mal wieder aus dem Datenblatt nicht schlau: https://www.renesas.com/us/en/document/ ... -datasheet
Sorry, für die Fragerei :oops:

Grüße, Mofi.
Oh ja. So fängt es an. Aber der Weg von einem legitimen Verdacht zu blindem Verfolgungswahn ist weitaus kürzer als wir denken.
Ich bin zutiefst besorgt über das, was hier geschieht.
Jean-Luc Picard 2367

Thread-Ersteller
ataio
Beiträge: 603
Registriert: Fr 13. Okt 2006, 21:54
Spezialgebiet: seltsame Geräte :)
Wohnort: Karlsruhe
Hat sich bedankt: 2 Mal
Danksagung erhalten: 14 Mal

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von ataio »

Hi Mofi,
ich habe tatsächlich nur einen icl7667 ic verwendet und die beiden enthaltenen, invertierenden Verstärker hintereinander geschaltet um ein positives und ein negatives Ausgangssignal zu bekommen. Es ging also nicht um die Leistung der icl7667 "Endstufe".

das ist im Schaltplan vllt etwas missverständlich dargestellt :)

Ich hoffe, das macht jetzt etwas mehr Sinn!

Grüsse, ataio
Benutzeravatar

Mofi
Beiträge: 3981
Registriert: Mo 19. Apr 2010, 20:39
Spezialgebiet: Müllverwertung und rumgammeln, Pilze.
Schule/Uni/Arbeit: Universaldilletant
Wohnort: Bremen
Hat sich bedankt: 157 Mal
Danksagung erhalten: 204 Mal
Kontaktdaten:

Re: 1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)

Beitrag von Mofi »

So macht das natürlich Sinn. War etwas irritiert, weil du 2 Sockel drin hast. Schade, dass beide Kanäle invertiert sind, sonnst könnte man beide IC's nutzen.

Grüße, Markus.
Oh ja. So fängt es an. Aber der Weg von einem legitimen Verdacht zu blindem Verfolgungswahn ist weitaus kürzer als wir denken.
Ich bin zutiefst besorgt über das, was hier geschieht.
Jean-Luc Picard 2367
Antworten