Forum: Mikrocontroller und Digitale Elektronik Frequenzmessung ATmega 16/32


von Schorsch (Gast)


Lesenswert?

Möchte gerne Frequenzen im Bereich von 40kHz-60kHz messen und hab mich 
schon mal ein bisschen durchs Forum gewurschtelt.

Meine Idee, die auch durchs Forum bestätigt wurde war folgende:

Die zu messende Taktfrequenz an T0 oder T1 und somit einen Zähler über 
diese Frequenz zu takten.
Gleichzeitig einen zweiten Zähler über den CPU-Takt (16Mhz) takten 
lassen um somit eine genaue Torzeit zu erzielen.

Der erste Zähler zählt also die Flankenwechsel nach oben und der zweite 
Zähler generiert die Torzeit und einen Interrupt, der den Zählerstand 
des ersten in CaptureRegister schreibt, welches ich dann über 
f=1/Torzeit auswerten kann und somit die Frequenz bekomme.


Gibts bessere, genauere Lösungen?

Kann man bei den Zählern die Taktflanke wählen?


mfg, Schorsch

von irgendein Rahul (Gast)


Lesenswert?

Oder man benutzt die ICP-Einheit (sofern vorhanden) und lässt den 
Controller etwas rechnen.

von Falk (Gast)


Lesenswert?

@ Schorsch

> Gibts bessere, genauere Lösungen?

Was ist daran ungenau und schlecht? Jeder Frequenzzähler arbeitet so. 
Jetzt kannst du dir noch um Details den Kopf zerbrechen. Generiere ich 
die Torzeit mittels Delay (Jehova, Jehova ;-) oder zweitem Timer.

MFG
Falk

von Schorsch (Gast)


Lesenswert?

@Falk

Also wie ich es vorgeschlagen habe quasi ;), wenn ich das deinem Post 
richtig entnehmen konnte.

MFG; Schorsch

von Schorsch (Gast)


Lesenswert?

Gibts irgendwelche Erfahrungswerte was die Torzeit betrifft, 
wahrscheinlich je länger desto besser. Bei mir gehts in dem Fall um nen 
Frequenzbereich wie oben beschrieben von 40kHz-60kHz. Die Applikation 
sind immer noch die Feuchtesensoren, also muss nicht so sauschnell gehen 
;).

mfg, Schorsch

von Axel (Gast)


Lesenswert?

Miss doch einfach von einer steigenden Flanke zur nächsten.

Also erste Flanke: Zähler nullen.
Nächste Flanke: Wert auslesen.

Die Genauigkeit dürfte doch für einen Feuchtesensor ausreichen.

Gruss
Axel

von Schorsch (Gast)


Lesenswert?

Das ist eine Periode, hätte schon gerne mehr als eine Periode gewählt 
wegen der Genauigkeit. Schnell muss es ja nicht gehen.

von Falk (Gast)


Lesenswert?

@Axel

Was heisst bei dir dürfte reichen? Hast du das mal wenigstens 
überschlagen?

60 kHz => 16,6 us

Bei 20 MHz Oszillatortakt sind das 332 Takte, also etwas mehr als 8 Bit 
Auflösung. Nun das reicht sicher für nen Feuchtesensor. Wenn man 
allerdings mit einem geringeren Takt arbeiten will (Stromsparen) wirds 
schon schlechter, bei 1 MHz sind es nur noch 16,6 Takte -> Essig.
Für nen Feuchtesensor sollte selbst 1s Messzeit sehr schnell sein
-> macht bei 1 MHz 60000 Takte -> fast 16 Bit Auflösung.

MfG
Falk

von Schorsch (Gast)


Lesenswert?

Ich werds jetzt mal mit nem 16Mhz Quarz versuchen, da ich eventuell auch 
noch ein paar knifflige Rechnung durchführen will. Wenn ich dann nur mit 
nem Takt von 1MHz messen will kann ich ja immer noch "prescalen".

Normalerweise dürfte so ein 2-Pin Quarz wohl das vernünftigste sein nehm 
ich an, oder?

Habt ihr da irgendwelche Erfahrungen welche man da nehmen kann/sollte?

mfg, Schorsch

von Falk (Gast)


Lesenswert?

Nim einfach einen 16 MHz Quarz und gut. In dem Frequenzbereich gibt es 
AFAIK noch keine Oberwellenquarze mit denen man sich schön ins Knie 
schiessen kann.

MFG
Falk

von Schorsch (Gast)


Lesenswert?

@Falk

Alles klar, Danke.


Das heißt jetzt für mich also dass ich über den Pin T1 den 16bit Zähler 
hochzählen lasse, das Ganze über 1 Sekunde (getriggert durch nen 8bit 
Zähler). Womit ich bei sagen wir 50-60kHz auf einen Zählerstand von 
50k-60k kommen dürft, also passend für nen 16bit Zähler.

mfg, Schorsch

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Es geht genauer, wenn man reziprok zählt und als Taktfrequenz wesentlich 
mehr als den Prozessortakt benutzt. Das geht nur mit externen schnellen 
Zählern, also entweder ein FPGA mit mehreren hundert MHz oder schnelle 
Zähler z.B. aus der 74 AC-Reihe bis über 100 MHz. Noch schneller wären 
ECL-Teiler 10E131 10E151 die zählen bis 1,4 GHz.

Ich bin zur Zeit dabei, einen einfachen Reziprokzähler zu entwerfen, mit 
74AC161 oder 163 und AVR. Es ist noch nicht weit gediehen, wie man 
sieht.

Die Teilerkette links teilt die Eingangsfrequenz durch 8 einstellbare 
Teiler bis max 16 Millionen, das reicht um 100 MHz auf etwa 100 
Millisekunden herunterzuteilen, damit ich etwa 5-10 Messungen pro 
Sekunde erhalte.
Eine Autoranging -Funktion wählt den passenden Teiler aus. Der Vorteiler 
rechts oben teilt eine 100MHz-Taktfrequenz soweit herunter, dass der AVR 
die restlichen Zählstufen übernehmen kann. Er stellt zunächst die 
Teilerkette links auf max. Zählerstand FFFFFF und gibt dann den 
LD-Eingang frei. Die nächste pos. Flanke des Eingangssignals stellt den 
Zähler auf Null, der ausgewählte Ausgang gibt damit den rechten Zähler 
frei. Nach 2hochirgendwas Eingangsperioden geht das Tor wieder zu, ein 
INT-Eingang am AVR löst dann die Verarbeitung und Anzeige aus. Das ist 
vor allem eine Division zur Kehrwertbildung und eine Umrechnung in die 
Dezimalstellen.

von Peter D. (peda)


Lesenswert?

Man muß es nicht gleich mit riesen extra Hardware machen, um ne hohe 
Genauigkeit zu erzielen.

Man kann ja einfach über mehrere Perioden messen, bis man einen genügend 
hohen Zeitwert hat für die gewünschte Genauigkeit.

Das einzige, was man z.B. für einen Frequenzmesser 0,5Hz ... 150MHz 
braucht, ist nur ein schneller Vorteiler 1/256 (74AC393).
Ich hab das mal mit nem AT89C2051 gemacht, die Genauigkeit ist 5-stellig 
über den gesamten Bereich.


Sensoren haben außerdem oft nen starken Jitter, d.h. es ist sogar besser 
über mehrere Perioden zu messen.

Führe einfach die zu messende Frequenz an Timer0 und ICP.
Der Timer zählt dann einfach die gewünschte Anzahl Perioden zwischen den 
2 Capturewerten.


Peter

von Falk (Gast)


Lesenswert?

@ Christoph Kessler
@ Peter

Musses immer die eierlegende Wollmilchsau sein, die auch fliegen kann?
Peter, hast du den Thread gelesen, bevor du geschrieben hast? Ich denke 
nein.

MFG
Falk

von Michael (Gast)


Lesenswert?

@Falk

Ich denke, daß Peter sehr wohl verstanden hat, worum es geht. Und was er 
vorschlägt ist keine eierlegende Wollmilchsau, sondern die einfachste 
und eleganteste Möglichkeit das Problem zu lösen.
Eine weitere Möglichkeit bestünde darin, nach 'reziproker 
Frequenzzähler' zu suchen.

von Falk (Gast)


Lesenswert?

@Michael

Du hast den Thread also auch nicht gelesen oder nicht verstanden. 
Schade.

MfG
Falk

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Ich habe schon nach Reziprokzähler gegoogled, aber da gibts nicht viele 
Bauanleitungen.
Ein Holländer hat auf der UKW-Tagung 2005 eine Möglichkeit mit FPGA 
vorgetragen, 100 MHz Takt und den in 22,5 Grad Stufen auf effektiv 1,6 
GHz Zähltakt gebracht. Wieweit er das schon realisuiert hat weiß ich 
nicht, im Internet ist seither keine neuere Meldung von ihm zu finden.
Von PIC-Spezialisten Lacoste gibts auch einen preisgekrönten Entwurf, 
aber wenig Einzelheiten.

von Michael (Gast)


Lesenswert?

> Möchte gerne Frequenzen im Bereich von 40kHz-60kHz messen und hab mich
> schon mal ein bisschen durchs Forum gewurschtelt.
...
> Gibts bessere, genauere Lösungen?

Das war die Vorgabe und die Frage, bevor Du mich weiter bedauerst.

von Falk (Gast)


Lesenswert?

@ Michael

Ja, richtg, das war die Vorgabe. Und was wurde in den Antworten dazu 
geschrieben? VOR Peter und Christoph?

MFG
Falk

von Peter D. (peda)


Lesenswert?

Falk wrote:

> Peter, hast du den Thread gelesen, bevor du geschrieben hast? Ich denke
> nein.

Da irrst Du.

Es ist vollkommen schnurz, ob Du die Periodendauer oder die Frequenz 
ausmißt, beides läßt sich ineinander umrechnen.


Die reine Periodendauermessung liefert schlechte Auflösung bei hohen 
Frequenzen und die reine Frequenzmessung liefert schlechte Auflösung und 
lange Meßzeit bei niedrigen Freqenzen.


Die Messung über n Perioden liefert dagegen immer eine hohe Auflösung 
ohne komplizierte Bereichsumschaltung.
Der Faktor n ergibt sich automatisch durch die gewünschte Meßzeit.


Peter

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Ich gebe gern zu, dass meine Schaltung für den hier gefragten Einsatz 
völlig überdimensioniert ist. Es geht um die Frage, wie kann man einen 
Frequenzzähler "genauer machen".
Erste Vorraussetzung ist natürlich eine Referenzfrequenz mit ausreichend 
kleinem Fehler ( Messtechniker sind Pessimisten und sehen den "Fehler", 
nicht die "Genauigkeit").
Dann muß man die gewünschte Messzeit festlegen, hier für einen 
Feuchtesensor völlig unkritisch.
Wenn das nicht ausreicht, kann man vom direkten Zählen, mit oder ohne 
Vorteiler, auf "bessere" Verfahren zurückgreifen.
Das ist vor allem der reziporke Frequenzzähler, wie er in 
professionellen Messgeräten heute üblich ist.
Eine weitere Methode wäre noch das Heruntermischen der Eingangsfrequenz 
in den NF-Bereich und die Weiterverarbeiztung mit der PC-Soundkarte. 
Wenn der Eingangsfrequenzbereich genau zwischen 40 und 60 kHz liegt, 
könnte man mit 40 kHz in einem EXOR-Gatter mischen und die 
Differenzfrequenz 0-20kHz mit der Soundkarte auswerten.

von Schorsch (Gast)


Lesenswert?

Hiermit würde ich den Thread gerne schließen ;) ..

Kampfhähne

mfg, Schorsch

von irgendein Rahul (Gast)


Lesenswert?

>die auch fliegen kann?

Fliegen kann so ziemlich alles (auch "wie Spucke durch ne Trompete").

40-60kHz zu messen sollte nicht wirklich ein Problem sein.
Die Möglichkeiten, die Peter und Christoph aufgezeigt haben, sind doch 
nur Ergänzungen zum Thema "Frequenzmessung mit einem Mikrocontroller". 
Dass das für diese Aufgabe notwendig ist, hat niemand geschrieben.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Nur zur Ergänzung ein Literaturverweis auf einen Fall von "extreme 
frequency counting".
Der Verfasser möchte bei der geplanten Marsmission eines 
Amateursatelliten den Eintritt in die Marsumlaufbahn auf einige 10 Meter 
genau bestimmen, und das mit Hobbymitteln:

http://www.ulrich-bangert.de/AMSAT-Journal.pdf

Zitat:
...der viel beschworene +/- 1 Digit-Fehler, der angeblich so typisch für 
jeden Frequenzzähler ist. Wer so argumentiert, hat ungefähr 30 Jahre 
Entwicklung im Bereich der Frequenzmesstechnik verschlafen. Heutige 
Zähler arbeiten nicht nur prinzipiell immer nach dem Reziprok-Verfahren, 
sondern sie sind durch  raffinierte 
„Sub-Clock-Interpolation“-Mechanismen auch in der Lage, mit höherer 
Auflösung zu messen, als sich mancher denkt.

von Falk (Gast)


Lesenswert?

@Christoph Kessler

Super Dokument, Danke! (habs erstmal nur überflogen).

MFG
Falk

von Kunz von Kaufungen (Gast)


Lesenswert?

> Heutige Zähler arbeiten nicht nur prinzipiell immer nach dem 
Reziprok-Verfahren...

Für einen Frequenzbereich von 0 - 10MHz stimmt das. Oberhalb 10 MHz 
schalten moderne Counter in den Standardmode um, also feste 
Referenztorzeit von 1sec(10sec; 0,1sec; 0,01sec).


von Falk (Gast)


Lesenswert?

@Kunz von Kaufungen

>> Heutige Zähler arbeiten nicht nur prinzipiell immer nach dem 
Reziprok-Verfahren...

> Für einen Frequenzbereich von 0 - 10MHz stimmt das. Oberhalb 10 MHz
> schalten moderne Counter in den Standardmode um, also feste
> Referenztorzeit von 1sec(10sec; 0,1sec; 0,01sec).

Die Frage ist ganz einfach, welche Frequenz höher ist.

Signalfrequenz höher als die Referenzfrequenz -> Frequenzmessung
Signalfrequenz niedriger als die Referenzfrequenz -> 
Periodendauermessung, ggf. über mehrere Perioden

MFG
Falk


von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Und die Referenzfrequenz kann ja mehrere GHz betragen mit heutigen 
Teilern.

so allmählich sind alle Oberlehrer hier eingetroffen
denn siehe oh Herr, du weißt alles, ich hingegen weiß alles besser...

von Peter D. (peda)


Lesenswert?

Falk wrote:

> Die Frage ist ganz einfach, welche Frequenz höher ist.
>
> Signalfrequenz höher als die Referenzfrequenz -> Frequenzmessung
> Signalfrequenz niedriger als die Referenzfrequenz ->
> Periodendauermessung, ggf. über mehrere Perioden


Nö, die Frage ist, welche Auflösung will ich haben.

Wenn die Auflösung bei Zählung der Referenzfrequenz schon groß genug 
ist, besteht überhaupt kein Grund, bei hohen Frequenzen ein anderes 
Verfahren zu nehmen.

Man schaltet höchstens noch nen Vorteiler ein, wenn der Zähler im MC 
nicht mehr mitkommt.


Peter

von Sonic (Gast)


Lesenswert?

Du kannst auch den T1 (externen Timereingang), wie ganz oben schon 
gesagt, benutzen und den Output-Compare-INT benutzen. Mit diesem lässt 
sich dann mittels 2. Timer die Zeit messen, die für z.B. 1000 Impulse 
benötigt werden. Wird im unteren Frequenzbereich natürlich langsamer, 
aber auf die Zeit kommts ja nicht so an.

von Kunz von Kaufungen (Gast)


Lesenswert?

> so allmählich sind alle Oberlehrer hier eingetroffen

aber aber, Herr Christoph Kessler!

Ich habe in der Vergangeheit Ihre Beiträge immer mit Begeisterung 
gelesen.
Sie zählen zu den wenigen, kompetenten HF-Spezialisten hier im Forum.

Das sollte Sie aber nicht davon abhalten, etwas Neues zu lernen.


Das was Falk und Peter Dannegger schreiben ist richtig.

Mit der Frequenzmessung erreiche ich bei einer Torzeit von 1sec eine 
Auflösung von 1Hz. Und das ist unabhängig von der Höhe der Messfrequenz.
Für den Hochfrequenzbereich ist diese Methode die einzig 
wirtschaftliche.

von Christoph Kessler (db1uq) (Gast)


Angehängte Dateien:

Lesenswert?

Von Hewlett-Packard / Agilent gibt es mehrere Applikationsschriften zum 
Thema:

5965-7660E.pdf
Fundamentals of the Electronic Counters Application Note 200

5965-7664E.pdf
Understanding Frequency Counter Specifications Application Note 200-4

5967-6038E.pdf
8 Hints for Making Better RF Counter Measurements

Aus der ersten stammt dieses Diagramm. Es besagt, solange die 
Referenzfrequenz  höher als die zu messende ist, ist der Reziprokzähler 
höher auflösend. Der beste HP-Zähler hat laut dem genannten Text von 
U.Bangert eine single-shot-Auflösung ( =1/Referenzfrequenz) von 150 
Picosekunden.

von Kunz von Kaufungen (Gast)


Lesenswert?

> Aus der ersten stammt dieses Diagramm. Es besagt, solange die
Referenzfrequenz  höher als die zu messende ist, ist der Reziprokzähler
höher auflösend.

Das ist die Bestätigung meiner Ansicht und der von Falk/Peter.



> Der beste HP-Zähler hat laut dem genannten Text von
U.Bangert eine single-shot-Auflösung ( =1/Referenzfrequenz) von 150
Picosekunden.

Das sind 6,6 GHz-Referenz. Das es für spezielle Forschungszwecke div. 
Abarten von Zählern gibt, ist bekannt.

Die gängigsten und bezahlbaren Zähler haben 10 MHz-, 25 MHz- oder 100 
MHZ-Referenzfrequenz.
Und die preisgünstigsten(billigen) arbeiten nur nach der 
Reziprokmessung, mit der folge, daß bei Fx > Fref hinten die Stellen 
weniger werden.
Bessere Geräte vermeiden diesen Nachteil mit einer Umschaltung zur 
reinen Frequenzmessung.

von Peter D. (peda)


Lesenswert?

Kunz von Kaufungen wrote:

> Und die preisgünstigsten(billigen) arbeiten nur nach der
> Reziprokmessung, mit der folge, daß bei Fx > Fref hinten die Stellen
> weniger werden.

Die signifikanten Stellen werden nicht weniger, sie bleiben konstant.


> Bessere Geräte vermeiden diesen Nachteil mit einer Umschaltung zur
> reinen Frequenzmessung.

Wobei wir wieder beim Thema Genauigkeit v.s. Auflösung sind.

Es nützt weniger als einen Entenscheiß, wenn ich 100MHz mit 1Hz anzeige, 
solange meine Referenz nicht entsprechend genau und stabil ist.

Mit nem normalen Quarzsozillator lohnen sich einfach nicht mehr als 6-7 
Stellen.
Wenn man noch nen alten stromfresser TTL-Oszillator nimmt, kann man 
schon bei nur 6 Stellen sehr schön die Eigenerwärmung beim Einschalten 
sehen.


Peter

von Sonic (Gast)


Lesenswert?

>Mit der Frequenzmessung erreiche ich bei einer Torzeit von 1sec eine
Auflösung von 1Hz.

Nicht so ganz. Mit zunehmender Frequenz wird die Auflösung immer gröber, 
da sich der Zählerstand des Timers immer weiter verringert. Bei einem 
Zählergebnis von 2000 bei einer Torzeit von einer Sekunde beträgt die 
Auflösung 1/2000 Sekunde, bei einem Zählerstand von 10 wäre es nur noch 
1/10 Sekunde.

von Kunz von Kaufungen (Gast)


Lesenswert?

> Die signifikanten Stellen werden nicht weniger, sie bleiben konstant.

Meinetwegen bleiben sie konstant. Klar ist aber, das die 
Gerätehersteller diese Stellen nicht anzeigen, weil unbrauchbar.

Apropo "Entenscheiß": In unserer Produktionskontrolle messen wir 
Frequenzen von 125 MHz(Auflösung 1Hz), bei einer Fref von 25 
MHz(+/-1ppm, +/-1ppm@0-60°C).
Uns interessiert hierbei nicht die Absolutfrequenz sondern nur der 
Relativwert innerhalb einer Produktionscharge.

Insofern haben Zähler mit Ref-Quarz~1ppm sehr wohl eine Berechtigung, 
und nicht nur in unserem Betrieb.

Wer Referenzfrequenzen von 100ppm-Quarzen ableitet ist selber schuld!


@sonic
>Mit der Frequenzmessung erreiche ich bei einer Torzeit von 1sec eine
Auflösung von 1Hz.

Diese Zeile von mir bezog sich, wie nachzulesen ist, auf den 
Hochfrequenzbereich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.