Reziproke Frequenzzähler sind bekannt. Allerdings haben sie den
Nachteil, dass für eine entsprechende Anzahl signifikanter Stellen
vergleichsweise lange Messzeiten/Gatezeiten erforderlich sind.
Schöner wäre es, wenn man die Frequenz einer jeden Periode mit hoher
Auflösung (>= 8 Digit) messen könnte.
So langsam kommen von immer mehr Herstellern TDC-Bausteine
(Time-to-Digital Converter) mit ps-Auflösung und zum Teil auch
zweistellige ps-Genauigkeiten auf dem Markt. Um nur mal einige
Hersteller zu nennen: ACAM/ams, Maxim Integrated, Texas Instruments...
Zudem werden diese Bausteine immer besser und günstiger, wobei zum Teil
auch der Preis interessant ist. Da die Zeitmessung in ein spezielles
Chip ausgelagert ist kann ein wesentlich kleinerer Mikrocontroller
ausschließlich den Teil der Ansteuerung, Darstellung auf einem Display
oder Kommunikation mit einem PC übernehmen.
Nun frage ich mich, ob es nicht möglich ist mit solchen Bausteinen einen
Frequenzzähler zu realisieren, der wesentlich schneller ist und
gleichzeitig eine viel größere Anzahl signifikanter Stellen liefern
kann, als das nach dem reziproken Zählverfahren der Fall ist.
Dazu würde ich gern mit euch zusammen verschiedene Konzepte erarbeiten
und diskutieren und später auch mal eines aufbauen und verifizieren
wollen.
Hiermit wäre die Diskussion eröffnet...
Simon schrieb:> Reziproke Frequenzzähler sind bekannt.
Aber anscheinend nur oberflächlich.
> Allerdings haben sie den> Nachteil, dass für eine entsprechende Anzahl signifikanter Stellen> vergleichsweise lange Messzeiten/Gatezeiten erforderlich sind.> Schöner wäre es, wenn man die Frequenz einer jeden Periode mit hoher> Auflösung (>= 8 Digit) messen könnte.
Genau das tut ein reziproker Frequenzzähler. Er mißt die Dauer von
mindestens einer Periode mit der ihm zur Verfügung stehenden
Genauigkeit. Wenn man von Interpolatoren u.ä. absieht, bestimmt die
Größe der Referenzfrequenz die erreichbare Zeitauflösung.
Wenn man die Anforderung an die Auflösung hinreichend weit
heruntersetzt, dann reicht einem reziproken Frequenzzähler auch eine
einzelne Periode.
> So langsam kommen von immer mehr Herstellern TDC-Bausteine> (Time-to-Digital Converter) mit ps-Auflösung und zum Teil auch> zweistellige ps-Genauigkeiten auf dem Markt.
...
> Nun frage ich mich, ob es nicht möglich ist mit solchen Bausteinen einen> Frequenzzähler zu realisieren, der wesentlich schneller ist und> gleichzeitig eine viel größere Anzahl signifikanter Stellen liefern> kann, als das nach dem reziproken Zählverfahren der Fall ist.
Natürlich nicht. Es ist ja das gleiche Meßverfahren. Wenn du
Picosekunden Auflösung zur Verfügung hast, dann ist es vollkommen
wurscht, ob die Messung in einem PLD, einem µC oder einem dezidierten
TDC-Baustein passiert.
Wenn man schneller mehr signifikante Stellen will, dann muß man schon
über das reziproke Verfahren hinausdenken. Leseempfehlung:
http://www.npl.co.uk/modern-frequency-counting-principles
Axel S. schrieb:> Genau das tut ein reziproker Frequenzzähler. Er mißt die Dauer von> mindestens einer Periode mit der ihm zur Verfügung stehenden> Genauigkeit. Wenn man von Interpolatoren u.ä. absieht, bestimmt die> Größe der Referenzfrequenz die erreichbare Zeitauflösung.
Genau das ist der Punkt. Ein TDC kann pro Periode eine deutlich höhere
Genauigkeit liefern als das ein reziproker Frequenzzähler kann.
Simon schrieb:> Um nur mal einige> Hersteller zu nennen: ACAM/ams, Maxim Integrated, Texas Instruments...
Und warum zeigst Du dann keinen Link auf einen solchen IC?
Man muß nicht unnötig schwammig fragen bzw. kriegt eben nur schwammige
Antworten.
Simon schrieb:> Genau das ist der Punkt. Ein TDC kann pro Periode eine deutlich höhere> Genauigkeit liefern als das ein reziproker Frequenzzähler kann.
Nö. Genau das ist eben nicht der Punkt und es stimmt auch sachlich
nicht.
Was möchtest du eigentlich messen und mit welcher Auflösung? Etwa die
Breite eines einzelnen Pulses? Oder eben doch die Frequenz eine
periodischen Signals?
Denk mal drüber nach.
W.S.
W.S. schrieb:> Simon schrieb:>> Genau das ist der Punkt. Ein TDC kann pro Periode eine deutlich höhere>> Genauigkeit liefern als das ein reziproker Frequenzzähler kann.>> Nö. Genau das ist eben nicht der Punkt und es stimmt auch sachlich> nicht.
So sehe ich das auch. Ich warte auch immer noch auf einen Pointer auf
ein solches IC, das beliebige Pulslängen mit einer Auflösung von vielen
(der TE sprach von >=8) Dezimalstellen messen könnte.
Der o.g. GP22 kann Impulse bis maximal 2.4µs Länge mit einer Auflösung
von 90ps vermessen. Das sind ~26000 diskrete Schritte respektive 4
Dezimalstellen. Das ist ganz ordentlich. Er würde sich daher prima als
Interpolator in einem reziproken Frequenzzähler eignen. Mit ~100ps
Auflösung wäre man dann bei 10 Dezimalstellen pro Sekunde Meßzeit und
ungefähr auf dem technischen Stand der 1990er Jahre angekommen. Aber für
sich allein nutzt dieser TDC recht wenig.
Prinzipiell lässt sich durch Vergleich von zwei Frequenzen mit einem TDC
und einer Referenzfrequenz für Start eine unbekannte Frequenz (Stop)
bestimmen.
Angenommen die unbekannte Frequenz ist stabil und kleiner als die
Referenzfrequenz erhält man einen sägezahnförmigen Verlauf über die
Zeit. Über die Ermittlung der Steigung des Sägezahns und Verrechnung mit
der bekannten Referenzfrequenz lässt sich nun auf die unbekannte
Frequenz rechnen.
Im Anhang mal beispielhaft gezeigt ein Vergleich von zwei Frequenzen mit
dem GP22 und einem 2-Kanal Funktionsgenerator, sprich beide Frequenzen
haben die gleiche Taktquelle als Basis:
Rechtecksignal 1 (Start) f=1.000 000 000 00MHz
Rechtecksignal 2 (Stop) f=1.000 000 001 00MHz
Nachteil, die beiden Frequenzen sollten möglichst nah beieinander
liegen, ansonsten hat man nicht genügend Messpunkte um die Steigung zu
bestimmen bis hin zu Aliasing Effekten.
Die Messwiederholrate ist zudem abhängig von den Eingangsfrequenzen.
Ist die unbekannte Frequenz zudem instabil wird sich auch die Steigung
permanent ändern.
Es gibt auch reciproke Frequenzzähler mit Interpolator, um eine höhere
Auflösung auch bei kurzer Messzeit zu erreichen. Viele der TDC Bausteine
sind ähnlich dem Interpolator.
Die Frage für eine besseren Frequenzzähler wäre eher wie bzw. ob man
einen der TDC Bautsteine als Interpolator nutzen kann um damit dann
einen reciproken Frequenzzähler zu bauen. Nicht immer geht das
vernünftig.
Auf der digitalen Seite gibt es das contineous time stamping verfahren
um ggf. die Auflösung zu vergrößern. Ob es besser als ein reciproker
Zähler wird, hängt aber von Signal ab, bzw. was für ein Frequenzrauschen
man hat. Das kann eine deutliche Verbesserung geben (etwa wenn die
Triggerschaltung, oder uncorreliertes Phasenrauschen die schwachstelle
ist). Wenn das Limit aber das Frequenzrauschen des Oszillators selber
ist (etwa ein LC Oszillator), ist die reziproke Messung schon optimal.
Mit Interpolation oder der Auswertung vieler Flanken hat man in der
Regel so viel theoretische Auflösung, dass diese nicht mehr das Problem
ist, so ähnlich wie bei den 24 Bit Sigma delta ADCs. Das Limit ist das
Rauschen und nicht die theoretische Auflösung. Da interessiert dann eher
die Referenz und die Triggerschaltung und Rauchunterdrückung.
Ein stark gestörtes Signal wie etwa die Netzfrequenz kann man z.B. mit
einer Soundkarte und passender Software genauer messen als mit fast
jedem reziproken Frequenzzähler.
Es gibt da einfach nicht ein bestes Verfahren, dass für alle Fälle
passt.
Christoph K. schrieb:> Beitrag "Re: 100mhz 32bit - counter ohne vorteiler?"> Auch eine Art reziproke Frequenzzählung mit analogem Interpolator
Leider auch nur eine theoretische Diskussion ohne Ergebnis.
Axel S. schrieb:> Wenn man schneller mehr signifikante Stellen will, dann muß man schon> über das reziproke Verfahren hinausdenken. Leseempfehlung:> http://www.npl.co.uk/modern-frequency-counting-principles
Schönes Gerät, aber das Continuous Timestamping Verfahren hat wohl noch
niemand in Heimarbeit im DIY umgesetzt?
Es gibt ein Verfahren mit dem man sehr präzise, hochdynamisch und
günstig über mehrere Dekaden messen kann:
Messsignal auf einen Zählereingang legen.
Ein weiterer interner Zähler mit hoher Frequenz läuft parallel auf einen
anderen Zählereingang.
Den Flankenwechsel des Signals wird zunächst einfach gepollt.
Nach einem Flankenwechsel werden beide Zählerstände an zwei Variablen
übergeben und die Zähler werden genullt.
Jetzt kann man in aller Ruhe beide Variablen (Zählerwerte) (abzüglich
eines festen Offsets nämlich der Zeit zwischen pollen und
Zählerstandsübergabe) durcheinander teilen und sich wieder um andere
Dinge zum Beispiel der Datenübergabe via SPI an einen Master kümmern.
Ist das erledigt, wird wieder gepollt und der Zyklus beginnt von vorne.
Der Referenztakt sollte (je nach Messaufgabe) recht hoch sein; am besten
direkt den µC Takt (z.B 64MHz).
Natürlich muss man noch eventuell auftretende Überläufe beider Zähler
behandeln...
Ich habe mir einige TDC Baustein angesehen, da aber keinen vernünftigen
Weg gefunden die als Erweiterung der Auflösung eines Zählers zu nutzen.
Die gehen gut für kurze Zeiten, etwa Kabelrefelxionen oder so, sind aber
halt nicht als Interpolator für einen Zähler gedacht.
So kompliziert ist der analoge Interpolator auch nicht: Halt die
Wandlung vom Triggerzeitpunkt in einen Restpuls variabler Breite und
dann vom Puls in eine analoge Spannung und damit auf den ADC. Einige
PIC18/24 sollen so etwas sogar schon integriert haben. So super hoch
muss dabei die Zeitauflösung auch nicht sein, denn ein Komparator zum
festlegen der Flanke hat auch einiges an Unsicherheit - für die meisten
Signale hat man also sowieso da eine Begrenzung.
Das contineous time - stamping ist nicht wirklich kompliziert von der
Software. Lineare Regression klingt kompliziert, aber dafür gibt es eine
geschlossene Formel.
Das ließe sich auch schon mit einem relativ kleinen µC realisieren. Bei
meinem Zähler mit 90S2313 (-> Tiny2313) hat der Platz im Flash nicht
mehr gereicht und die Hardware sollte einen etwas feiner einstellbaren
Vorteiler haben. So wirklich viel Code ist das nicht - ich würde mal auf
etwa 1-4 K mehr schätzen, je nachdem was man für Funktionen haben will.
Als einen Nebeneffekt kriegt man z.B. auch Werte für Jitter - wobei man
aber für einen sinnvolle Auflösung da schon eine gute Interpolation
haben sollte.
Der Vorteil der Höheren Auflösung durch das contineous timestamping wird
meiner Meinung nach aber auch oft überschätzt. Es hängt vom Signal ab,
ob es wirklich besser als ein einfacher Reziprokzähler ist. Wenn schon
sollte man beide Optionen haben, und ggf. auch Zwischenstufe. Gerade
wenn man den Zähler im µC realisiert ist Hardware ist schließlich
praktisch die selbe. Den großen Vorteil hat des Time-stamping auch mehr
bei einem eher verrauschtem Signal, also nicht wenn es um super hohe
Auflösung geht, sondern eine gute Messung bei einem schwierigen Signal,
wie etwa der Netzfrequenz oder dem DCF77 Träger. Daher macht das auch
für einen DIY low cost Zähler Sinn.
Ich habe da einen interessanten Link gefunden, der gut zum Thema passt:
"The Ω counter, a frequency counter based on the Linear Regression"
https://arxiv.org/pdf/1506.05009