0Hz messen mit Input Capture

Gast #164160
Lesenswert?
• ▲
▼
Mit einem mega8 erfasse ich eine Motordrehzahl im Bereich 0-500Hz.
Die Taktfrequenz von Timer 1 liegt bei 62500Hz. Somit lässt sich der
Bereich 1Hz bis >10kHz mesen.
Gibt es irgendeinen einfachen Trick um Frequenzen <1Hz zu erkennen, um
Fehlmessungen zu umgehen ?
Wenn der Motor steht, bleibt der zuletzt gemessene Wert erhalten, da
kein Input Capture Interrupt erfolgt, weshalb die Regelung nicht
funktioniert.

Hier nochmal alles zusammengefasst, was ich erreichen möchte:
Frequenz >=1Hz: Frequenz=62500/(Input Capture-letzen Input Capture)
Frequenz <1Hz: Frequenz=0

Vermutlich geht das über eine Softwaremäßige Erweiterung des Input
Capture Registers auf 24bit, nur wie erkenne ich den Zeitpunkt, zu dem
ich das Register auslesen muss, wenn kein Capture Interrupt erzeugt
wird ?
Gast #164165
Lesenswert?
• ▲
▼
Ich habe es jetzt mit einem zusätzlichen Register als 24bit Erweiterung
gelöst.
Dieses wird bei jedem Timer Overflow erhöht.
Ist es bei einem TimerOverflow bereits 1 (also der Zählerstand wird
jetzt auf 2, also 131072 erhöht), dann wird die Frequenz aus Null
gesetzt. Dazu setze ich TRot auf 65535, was von der Dividierroutine in
eine Frequenz von 0Hz umgewandelt wird.
Liegt die Frequenz irgendwo zwischen 0Hz und 1Hz, dann wird ab und zu
ein Input Capture Interrupt ausgelöst und auch hier wird das erweiterte
Input Capture Register ausgewertet.

Allerdings bin ich nicht ganz sicher, ob es nicht Sonderfälle gibt
(z.B. bei geringen Frequenzen, oder wenn gleichzeitig ein Timer
Overflow und ein Input Capture Interrupt auftreten), ob dann die Werte
nicht mal falsch werden können.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren