1 kHz - 4 MHz Stabiler Frequenzgenerator (Arduino)
Moderatoren: MaxZ, ebastler, SeriousD
-
- 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)
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). 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). 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). 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). 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.
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. 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
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). 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). 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). 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). 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.
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. 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
-
- 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)
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!
Beste Grüße!
- Paul
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!
Beste Grüße!
- Paul
-
- 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)
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
Ich bin zutiefst besorgt über das, was hier geschieht.
Jean-Luc Picard 2367
-
- 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)
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
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
-
- 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)
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
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
http://www.kilovolt.ch
-
- 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)
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
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
-
- 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)
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
Grüße, Mofi.
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
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
Ich bin zutiefst besorgt über das, was hier geschieht.
Jean-Luc Picard 2367
-
- 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)
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
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
-
- 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)
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.
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
Ich bin zutiefst besorgt über das, was hier geschieht.
Jean-Luc Picard 2367