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
@ 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
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
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
@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
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
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
@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
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.
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
@ 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
@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.
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.
> 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.
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
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.
>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.
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.
> 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).
@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
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...
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
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.
> 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 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.
> 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.
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
>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.
> 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.