Lüfter Drehzahlmessung STM32

Gast #4740157
Lesenswert?

Guten Abend,

ich baue gerade einen "Ventilator" (12V-Lüfter) für meinen Schreibtisch 
und benutze dabei mein STM32F4 Discovery Board (habe ich seit gestern).

Der Lüfter, den ich mir bestellt habe, hat 3 Leitungen - also eine 
Leitung für die Drehzahl.

Diese möchte ich nun auslesen ...
Der Lüfter kann von 0 bis 2.500 1/min.

Nun würde mich eine gute Vorgehensweise interessieren.

Habe ich mir überlegt:

-> einen Timer auf einen externen Interrupt einstellen
-> in der Interrupt-Routine einen Variable hochzählen lassen

-> einen weiteren Timer immer nach einer bestimmten Zeit den Wert 
abfragen lassen
-> Drehzahl aus diesem Wert berechnen

Was meint Ihr, ist das ok so? Geht es besser/schneller?

LG, LF
#4740180
Lesenswert?

Lüfterfreund schrieb:
> STM32F4 Discovery Board
[...]
> Der Lüfter kann von 0 bis 2.500 1/min.

Der STM32F4 ist um mehrere Größenordnungen schneller als Dein Lüfter. Da 
ist es quasi egal wie Du das machst - mit 2 Timern oder nur mit EXTIs 
und dem Systick. Du musst nur aufpassen daß die Timer in der langen 
Wartezeit zwischen 2 Lüfterpulsen nicht überlaufen.

> -> einen Timer auf einen externen Interrupt einstellen
> -> in der Interrupt-Routine einen Variable hochzählen lassen

Für schnelle Signale und präzise Messung würde man den Timer so 
einstellen, daß er direkt in Hardware und ohne Interrupt bei einem 
externen Signal hochzählt. Siehe Refman.
Gast #4740182
Lesenswert?

Nein, ich meinte der externe Interrupt wird durch eine Flanke des 
Drehzahlsignals ausgelöst. Und dann erhöhe ich eine Variable.
Diese Variable erhöhe ich so lange, bis der zweite Timer Interrupt 
auslöst (nach Zeit) und mit dem Wert rechnet. Dann alles wieder auf 0 
zurück ...
Gast #4740191
Lesenswert?

@Gerd E

> Für schnelle Signale und präzise Messung würde man den Timer so
> einstellen, daß er direkt in Hardware und ohne Interrupt bei einem
> externen Signal hochzählt. Siehe Refman.

Meinst du damit, anstatt einer Variable slebst im Quellcode 
hochzuzählen, einen Timer zählen zu lassen?
Gast #4740231
Lesenswert?

m.n. schrieb:
> Beschreibung steht im Ref.-Manual
> unter PWM input mode.

Danke für den Tipp!

Im Ref.-Manual steht nun dieser Satz:

Select the active input for TIMx_CCR1: write the CC1S bits to 01 in the 
TIMx_CCMR1 register (TI1 selected).

Kannst du mir diesen Satz in Quellcode zeigen? Das klingt etwas 
kompliziert für mich, habe da noch nicht die Erfahrung mit Registern 
setzen usw.
Gast #4740272
Lesenswert?

m.n. schrieb:
> Sieh Dir unter init_t9() an, wie die Register beschrieben werden.

Vielen Dank für das Beispiel!
Ich habe auch noch ein Beispiel gefunden.
1
      
2
        /* (1) Select the active input TI1 (CC1S = 01),
3
        program the input filter for 8 clock cycles (IC1F = 0011),
4
        select the rising edge on CC1 (CC1P = 0, reset value)
5
        and prescaler at each valid transition (IC1PS = 00, reset value) */
6
        /* (2) Enable capture by setting CC1E */
7
        /* (3) Enable interrupt on Capture/Compare */
8
        /* (4) Enable counter */
9

10
TIMx->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_IC1F_0 |     TIM_CCMR1_IC1F_1; /* (1)*/
11
TIMx->CCER |= TIM_CCER_CC1E; /* (2) */
12
TIMx->DIER |= TIM_DIER_CC1IE; /* (3) */
13
TIMx->CR1 |= TIM_CR1_CEN; /* (4) */

Nur verstehe ich nicht ganz, wie ich nun sagen kann, dass mein Signal 
vom Lüfter an bspw. Timer3 Channel3 anliegt. Geht das überhaupt?
Gast #4740635
Lesenswert?

Lüfterfreund schrieb:
> Nur verstehe ich nicht ganz, wie ich nun sagen kann, dass mein Signal
> vom Lüfter an bspw. Timer3 Channel3 anliegt.

Das steht auch im Datenblatt, oder besser, es steht dort nicht, da es 
nicht geht.
Wenn es unbedingt ein STM32F4xx sein muß, dann mußt Du auch das 
Datenblatt lesen und verstehen. Für die ersten Schritte wäre es 
sinnvoll, zunächst eine einfachere Aufgabe zu lösen.
Wie der Meßwert angezeigt werden soll, ist wohl auch noch nicht klar?

Viel einfacher wäre ein Drehzahl(Frequenz) -> Spannungswandler und 
Anzeige der Spannung analog oder digital.

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