Halli Hallo
Ich möchte mit meinem uC (ATMEGA88) eine Frequenz im Bereich von 10kHz
bis 500kHz messen. Es ist ein Rechtecksignal mit DC 50%.
Habs schon mit Periodendauermessung ausprobiert, hat auch gut geklappt,
nur denke ich, dass es bei so hohen Frequenzen nicht gerade genau ist.
Darum hab ich ans Flankenzählen gedacht. Ich würde mit Timer0 eine
Torzeit von ca. 500ms erzeugen und dann die Flanken mit Timer1 Zählen.
Nur wenn ich ja diese Torzeit immer Fix lasse, dann hab ich ja nur ne
Aulfösung von 1Hz, also nichts mit Kommazahlen. Oder mach ich da einen
überlegungsfehler?
Meiner Meinung nach müssten nicht die Flanken, sondern die ganze
Periodenanzahl gemessen werden. Also beim ersten positiven Flanke wird
die Torzeit gestartet, die Perioden werden gezählt, und wenn die Torzeit
vorbei ist, wird gewartet, bis die nächste positive Flanke kommt. So hat
man ganze Perioden drauf und nicht noch eine angefangene.
Mit der Zeit der "erweiterten" Torzeit und den Anzahl Perioden kann man
dann die Frequenz berechnen.
Nun lese ich aber überall von fixen Torzeiten. Sehe ich das richtig,
dass die alle nur auf 1Hz Auflösung genau messen wollen/können?
Grüsse Michl
>Nun lese ich aber überall von fixen Torzeiten. Sehe ich das richtig,>dass die alle nur auf 1Hz Auflösung genau messen wollen/können?
Wenn du eine Torzeit von 1s hast misst du mit 1Hz Auflösung.
Bei 10s Torzeit mit 0.1Hz Auflösung. Bei kleinen Frequenzen
ist deshalb die Periodendauermessung günstiger. Musst halt sehen
wo du von Frequenz- auf Periodendauermessung umschaltest.
Michael schrieb:
> Nun lese ich aber überall von fixen Torzeiten. Sehe ich das richtig,> dass die alle nur auf 1Hz Auflösung genau messen wollen/können?
Es gibt auch Frequenzzähler mit 10/100 Sekunden Torzeit, da hat man dann
0,1/0,01 Hz Auflösung.
Wieviel Prozent Messfehler sind denn 1Hz bei einer Messgroesse von 500
kHz?
Um Deine Referenz so genau zu bekommen, dass das was Du da misst,
verlaesslich ist, musst Du Aufwand treiben, den Du nicht bezahlen
kannst/willst.
Gast
In der Regel ist die Messung über die Zeit besser. Bei hohen Frequenzen
muß man nur die Periodendauer nicht aus einer Periode, sondern aus mehr
Perioden (z.B. 256 oder 1000) machen. Für wirklich hohe Frequenzen
(über etwa 100 kHz) muß der Vorteiler in Hardware sein, den Feinabgleich
und den Rest kann man auch in Software machen.
Schon damit wäre man mit der relativen Auflösung immer so gut wie bei
den niedreigen Frequenzen.
Wenn mehr als 2 Perioden hat, kann man auch noch die Flanken im inneren
Nutzen (nicht nur die 1. und letzte) damit läßt sich dann das Rauschen
nochmal etwas reduzieren. Ideal wäre eine Lineare regression der
gemessenen Zeiten für die Flanken. Für höhere Frequenzen wird das aber
recht Recehnzeitaufwendig (vermutlich bis etwa 10 kHz mit dem Mega8 in
Echtzeit) und man muß was nicht ganz optimales nutzen, z.B. indem man
nur je 50 Flanken am Start und Stop nutzt, oder je 2...32 Zeiten erstmal
mittelt.
Bei allem muß man aber auch bedenken das auch ein Quarz Fehler hat. Es
macht aber durchaus Sinn die Auflösung deutlich höher als die
Absolutgenauigkeit zu haben. Nur besser als die Stabilität macht keinen
Sinn. Die Grenze liegt aber auch für einen einfachen Quarz im bereich
0.01 ppm über ein paar Sekunden.
>Wenn mehr als 2 Perioden hat, kann man auch noch die Flanken im inneren>Nutzen (nicht nur die 1. und letzte) damit läßt sich dann das Rauschen>nochmal etwas reduzieren. Ideal wäre eine Lineare regression der>gemessenen Zeiten für die Flanken. Für höhere Frequenzen wird das aber>recht Recehnzeitaufwendig (vermutlich bis etwa 10 kHz mit dem Mega8 in>Echtzeit) und man muß was nicht ganz optimales nutzen, z.B. indem man>nur je 50 Flanken am Start und Stop nutzt, oder je 2...32 Zeiten erstmal>mittelt.
Hä?
Frequenzmessung für Dummies:
Torzeit ist die Zeitbasis z.B. 10s, 1s, 0.1s.
Gezählt werden die Perioden der Frequenz.
Je länger die Zeitbasis desto größer die Auflösung.
Periodendauermessung für Dummies:
Torzeit ist die Periodendauer der Frequenz.
Gezählt werden die Perioden der Zeitbasis.
Je höher die Frequenz der Zeitbasis desto besser die Auflösung.
Da muss man nix mitteln.
Du kannst tatsächlich die Zeitdauer von der ersten z.B. positiven Flanke
nach dem Öffnen des Tors bis zur ersten positiven Flanke direkt nach
Torende zählen und durch die Anzahl der positiven Flanken dazwischen
teilen. Dann hast Du eine Kombination von Periodendauer- und
Frequenzmessung mit einer im Schnitt höhere Genauigkeit als jede
einzelne daven.
An den Grenzen degeneriert es zu einer der beiden Messarten: Ist die
Periodendauer des Messobjekts in der Gegend der Torzeit, hast Du reine
Periodendauermessung (der Divisor ist dann 1), bei sehr hohen Frequenzen
hast Du praktisch reine Frequenzmessung (der Divisor ist sehr hoch).
Ich habe so etwas mal zur optischen Messung der Rotorblattfrequenz eines
Flugobjekts mit dem Butterfly und einer kleinen Fotodiodenschaltung
realisiert. Bei 100 Hz (Glühlampe) und 1 Hz Torzeit war die Auflösung 2
Nachkommastellen, die zuverlässig waren.
Ich habe das bisher so gelöst, dass ich bei meiner
Wunsch-Mindestauflösung zwischen Periodendauermessung (für kleine
Frequenzen) und Torzeitmessung (für hohe Frequenzen umgeschaltet habe.
Damit ist gewährleistet, dass ich immer eine Mindestauflösung habe.
> Damit ist gewährleistet, dass ich immer eine Mindestauflösung habe.
Mit der von mir geschilderten Methode hast Du immer mindestens die
Auflösung der jeweiligen Methode.
Hc Zimmerer schrieb:
> Mit der von mir geschilderten Methode hast Du immer mindestens die> Auflösung der jeweiligen Methode.
Sag' ich doch. ;)
Diese Mindestauflösung kann man mittels Hardware (Teiler) einstellen und
nach Bedarf wählen.
Die Messung der Zeit über mehrere Perioden ist schon eine gute Lösung.
Damit hat man auch bei höheren Frequenzen die Hohe Auflösung die man mit
der einfachen Periodenmessung bei niedrigen Frequenzen hat auch bei
hohen Frequenzen. Die zahl der Perioden könnte man vorher festlegen,
oder man zählt halt mit, bis man genug hat.
Eine einfache Version davon ist ein einstellbarer Teiler, um immer eine
relativ niedrige Frequenz zu messen.
Bei einer Messzeit von 0,5 s und einer Zeitmessung mit z.B. 50 ns
Auflösung hat man so knapp 7 Stellen Auflösung.
Die Umschaltung zwischen einfacher Periodenmessung und klassischen
Frequenzzählen ist dagegen nicht so gut. Im mittleren Bereich (z.B. 10
kHz) ist weder das eine noch das andere Verfahren wirklich gut - nicht
ganz 4 Stellen Auflösung.
Wenn man noch mehr Auflösung haben will (oder weniger Messzeit), kann
man halt mehr als nur die Position der ersten und letzten Flanke in der
Messzeit auswerten. Da braucht es dann aber etwas mehr Mathematik, um
noch mal etwa 1-3 Stellen mehr an Auflösung zu gewinnen. Man kann es
also noch besser machen, muß es aber nicht - 7 Stellen reichen meistens.
Im Netz gibt es ein Programm für einen Frequenzzähler der mit der
Periodendauermessung arbeitet.
http://www.mino-elektronik.de/fmeter/fm_software.htm
Da werden bei einem AT90S2313 mit 10MHz Takt bis zu 140kHz direkt
gemessen (6-stell. Auflösung). Mit einem Mega88 und 20MHz käme man dann
auf 280kHz und mit ein wenig Optimierung sicherlich auch auf 500kHz
Eingangsfrequenz.
Vielleicht hilft Dir dies weiter.
Ulrich schrieb:
> Die Messung der Zeit über mehrere Perioden ist schon eine gute Lösung.> Damit hat man auch bei höheren Frequenzen die Hohe Auflösung die man mit> der einfachen Periodenmessung bei niedrigen Frequenzen hat auch bei> hohen Frequenzen. Die zahl der Perioden könnte man vorher festlegen,> oder man zählt halt mit, bis man genug hat.
So isses.
Auf ne Flanke warten, dann für z.B. 0,5s die Perioden zählen (z.B. mit
T0) und dann bei der nächsten Flanke stoppen.
Damit erspart man sich die Umschalterei und hat immer die gleiche
minimale Auflösung (CPU-Quarz * 0,5s).
f_unbekannt = f_CPU * Periodenzahl / Capture_Wert
Peter