STM32-Timer als Frequenzzähler konfigurieren

Ich versuche, einen der Timer-Eingänge eines STM32 so zu konfigurieren, dass er sich als Frequenzzähler für ein externes Signal verhält. Das STM32-Datenblatt beschreibt einen "Eingangserfassungsmodus" in Abschnitt 17.3.6 (Seite 342)

Mein Verständnis dieses Modus ist, dass der Prozessor immer dann, wenn ein Eingang am ausgewählten TIMx_CHx-Eingang eingeht, den Wert eines freilaufenden internen Zählers erfasst. Die Frequenz kann dann anhand des Zählerwerts und der Frequenz des internen Zählers berechnet werden.

Ich versuche, dies in CubeMX zu aktivieren, und habe Schwierigkeiten, die Erklärung des Datenblatts mit den Einstellungen in CubeMX zu korrelieren. Dies ist, was ich derzeit konfiguriert habe. Ist das richtig?

Kann ich auch mehrere unabhängige Eingänge in separaten Kanälen auf demselben Timer ausführen, um das Timing gleichzeitig zu erfassen?

Geben Sie hier die Bildbeschreibung ein

Sie haben die detaillierte Beschreibung gefunden, was zu tun ist, welcher Wert zu welchem ​​Registerbit gehört. Dort gibt es sogar Codebeispiele. Warum kämpfen Sie dann mit CubeMX?

Antworten (1)

Frequenzzähler können schnell kompliziert werden, abhängig von der gewünschten Bandbreite und der Taktrate der internen Uhr sowie der Größe der Register, die die Clock-Ticks und die Input-Ticks enthalten.

Ich meine, es sieht so aus, als würde es funktionieren, aber Sie sollten sicherstellen, dass (1) der Taktzähler und der Frequenzzähler am Ende des Samples aktualisiert werden (2) dass keiner während des Samples überläuft (3) das Setup wird geben Ihnen die gewünschte Auflösung und (4) dass die MCU Anpassungen vornimmt, wenn die Bandbreite groß genug ist, wo sie einige Zeit überläuft und / oder sehr niedrig abfällt. Der erste würde zu falschen Ergebnissen führen und der zweite würde die Genauigkeit bei niedrigen Hz drastisch reduzieren.

Danke für den Einblick. Ich messe eine Motordrehzahl im Bereich von 1k bis 6k Hz
@ user8908459 Wie misst du die Drehzahl? Reluktanzsensor?
Ja mit einem MAX9926
Denken Sie in diesem Fall daran, dass Sie die Frequenz der Zahndurchgänge auf dem Zahnrad ablesen, nicht die Frequenz des Zahnrads. Sie müssen durch die Anzahl der Zähne dividieren, was bedeutet, dass Ihre Ticks bei der Eingabeerfassung deutlich höher als 6k sein werden. Wenn Sie ein 16-Bit-Timer-Register haben, sollten Sie gut sein, es sei denn, es gibt eine verrückte Anzahl von Zähnen auf dem Zahnrad.