Forum: Mikrocontroller und Digitale Elektronik Frequenzmessung mit Teilen der PLL


von Martin (Firma: Angestellt) (herki)


Lesenswert?

Guten Morgen miteinander

Ich arbeite gerade an einem Projekt mit dem Thema Frequenzmessung.
Ich möchte gern Frequenzen im Bereich von 10Hz bis 20kHz messen können.

Ich dachte da an folgendes Konstrukt:
                     --------------------      ---------------    ------
Messfrequenz     --> |                  |      |Signal-      |    |    |
Referenzfrequenz --> |Phasenvergleicher |----->|aufarbeitung |--->|ADC |
                     --------------------      ---------------    ------

Ist ein bisschen weit hergeholt aber wenn es so funktionieren sollte 
warum nicht?

Der Vorteil wäre: ich hätte sogar eine Art Messbereichsauswahl (in dem 
ich die Referenzfrequenz umschalte)

Der Nachteil: Ich kann bei einer Referenzfrequenz von 10kHz nicht 
unterscheiden ob es sich bei der Messfrequenz um 100kHz oder um 1kHz 
handelt.

Kann mir vielleicht mal einer einen Tipp geben ob meine Überlegungen so 
passen oder nicht?

Ich würde mich über konstruktive Kritik freuen :)

Und ja ich weiß... Es gibt auch einen Mikrocontroller mit Timern.

VG

Martin

von Helmut L. (helmi1)


Lesenswert?

>Und ja ich weiß... Es gibt auch einen Mikrocontroller mit Timern.

Richtig ! Und so macht man es auch.
Warum soll man ein Signal das ohnehin schon digitaler Natur (Frequenz) 
ist erst in eine Spannung und die dann von einem ADC messen lassen. Das 
ist erstens sehr ungenau und zweitens wie du schon erkannt hast 
mehrdeutig.

Also das ganze Signal auf eine uC Internen Timer geschaltet. Capture 
Funktion einschalten und gut ist.

Gruss Helmi

von Martin (Firma: Angestellt) (herki)


Lesenswert?

Danke für die Antwort.

Jetzt ist es aber so, dass ich keinen Timer zur freien Verfügung habe
und ich die Frequenz mindestens alle 10us (vielleicht sogar alle 1,6us) 
einmal messen muss.
Außerdem sollen mindestens 2-Frequenzen gleichzeitig gemessen werden 
können.

Gibt es vielleicht noch andere Möglichkeiten?

VG

Martin

von Peter D. (peda)


Lesenswert?

Martin R. schrieb:
> Jetzt ist es aber so, dass ich keinen Timer zur freien Verfügung habe
> und ich die Frequenz mindestens alle 10us (vielleicht sogar alle 1,6us)
> einmal messen muss.

Wenn Du nur 10µs lang mißt, dann sind 10Hz Rechteck purer Gleichstrom.

Für 10Hz brauchst Du 100ms Meßzeit, drunter gehts nicht.
Bzw. wenn Du weißt, daß das Signal exakt symmetrisch ist, ginge auch 
50ms.


20kHz sollten sich noch ohne Timer mit nem externen Interrupt messen 
lassen.
Und nen Timer als allgemeine Zeitbasis wird ja Deine Applikation wohl 
haben.


Peter

von Helmut L. (helmi1)


Lesenswert?

>(vielleicht sogar alle 1,6us) einmal messen muss.

Was soll das bringen ?

Dein 100KHz Signal hat eine Periodendauer von 10uS. Da kannst du nur mit 
Periodendauermessung ueber einen Timer noch was erreichen. Bei deiner 
Loesung mit dem Phasenvergleicher , Filter , ADC braucht die ganze Sache 
doch schon ewigkeiten um einzuschwingen. Da wirst du schon einige mS 
warten muessen bis sich da ueberhaupt was tut.


>Jetzt ist es aber so, dass ich keinen Timer zur freien Verfügung habe

Falschen uC ausgesucht oder Software nicht optimal strukturiert.

>Außerdem sollen mindestens 2-Frequenzen gleichzeitig gemessen werden
>können.

Wenn du einen schnellen uC eventuelle das Siganl direkt mit einem ADC 
einlesen und dann eine FFT machen.

von Martin (Firma: Angestellt) (herki)


Lesenswert?

Hallo

Ein 10Hz-Signal hat eine Periodendauer von 100ms und ein 20kHz-Signal 
hat eine von 50us. Das ist schon klar.

Es ist in der Anwendung so, dass alle 10us (oder eben 1,6us) ein 
komplettes Abbild aller I/O's gespeichert werden muss. Und wenn die 
Messung noch nicht beendet wäre dann würde ich halt den alten Messwert 
nochmal speichern.

Zum falschen uC.
Wenn es nach mir gegangen wäre hätte ich schon was größeres genommen 
(vielleicht sogar nen FPGA mit Softcore).
Naja. Aber ich hab jetzt den LPC und an dem kann nicht mehr gerüttelt 
werden.

Das Argument mit dem Einschwingen ist schon recht heftig.
Ich werde wohl doch schauen, dass ich das in den LPC reinbringe.

Danke

VG

Martin

von Peter D. (peda)


Lesenswert?

Martin R. schrieb:
> Es ist in der Anwendung so, dass alle 10us (oder eben 1,6us) ein
> komplettes Abbild aller I/O's gespeichert werden muss. Und wenn die
> Messung noch nicht beendet wäre dann würde ich halt den alten Messwert
> nochmal speichern.

Das hat aber nichts mit der Messung zu tun.

Du nimmst einfach ne Variable, die den alten Meßwert behält, bis die 
nächste Messung fertig ist. Und die kannst Du dann sooft auslesen, wie 
Du lustig bist.

Ob das nun sonderlich sinnvoll ist, die CPU mit 10000 mal den gleichen 
Wert auszugeben zu belasten, sei dahingestellt.


Peter

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.