Forum: Mikrocontroller und Digitale Elektronik STM32 Input Capture, 2 Kanäle mit einem Timer


von Mathias M. (aragorn)


Lesenswert?

Hallo!

Ist es irgendwie möglich mit einem Timer (Bsp. Timer 3) die Frequenz von 
zwei Eingangsignalen per Input Capture zu messen.

In meinem Beispiel habe ich dafür Channel 1 und Channel 3 verwendet. Die 
Messung des Signals an Channel 1 stellt kein Problem dar und 
funktioniert auch soweit. Die Messung vom Signal an Channel 3 wird durch 
die Messung an Channel 1 beeinflusst!

So wie ich das sehe ist das Problem, dass er nach jedem Capture Compare 
IR vom Channel 1 das Counter Register resetet. Und bei einem Capture 
Event wird ja schließlich nur der Counter Wert übernommen...

Eine Möglichkeit dies zu umgehen fällt mir spontan ein:

Der Counter resetet sich beim Capture Event nicht mehr und läuft durch.

Bei jedem Capture wird die Differenz zwischen vorigem Counter Wert und 
jetzigem Counter Wert berechnet.

Würde das so funktionieren oder gibt es auch eine einfachere Möglichkeit 
dies in Hardware zu realisieren?

lg
Mathias

von (prx) A. K. (prx)


Lesenswert?

Mathias M. schrieb:

> Bei jedem Capture wird die Differenz zwischen vorigem Counter Wert und
> jetzigem Counter Wert berechnet.

Das funktioniert und es scheint mir der übliche Weg zu sein. Nachteilig 
ist, dass es bei Zeitintervallen oberhalb der Timerperiode etwas 
umständlich wird.

von Mathias M. (aragorn)


Lesenswert?

Hallo A.K.

Habe es jetzt so implementiert und es funktioniert ohne Probleme!

Bis auf die Division und die Berücksichtigung des Überlaufs ist es auch 
nicht weiter umständlich...

Danke!

lg, Mathias

von (prx) A. K. (prx)


Lesenswert?

Capture und Überlauf können ganz oder fast gleichzeitig auftreten. Wenn 
Zeiten >= Periode keine Rolle spielen, dann ist es trivial weil man den 
Überlauf komplett ignorieren kann.

Andernfalls muss man ein bischen aufpassen, denn die Abarbeitung im 
Interrupt-Handler erfolgt dabei nicht unbedingt in der Reihenfolge des 
urprünglichen Auftretens der auslösenden Ereignisse.

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.