Hall Sensor Messwerte

Hallöchen zusammen,

ich habe vor kurzer Zeit einen Code Snippet gefunden (ich glaube er ist sogar aus diesem Forum ::slight_smile: ), der die Impulse eines Hall Sensors innerhalb eines bestimmten Intervalls misst:

float startTime = micros();
int amountImpulses = 0;
do {
    if (pulseIn(4, HIGH) > 0) amountImpulses++;
} while (micros() < (startTime + 100000));
Serial.println(amountImpulses);

Ich bekomme damit ungefähr alle 100ms einen Messwert ausgegeben. Der Hall Sensor misst in meinem Beispiel die Anzahl der Umdrehungen eines Motors. Ich frage mich jedoch wieso ich nur noch alle 700-800ms einen Messwert erhalte, sobald der Motor gar keine Umdrehungen mehr generiert? Eigentlich arbeitet der Code doch mit einem festen Zeitintervall?

Kann das an der Prellung liegen? Ich habe schon überlegt ein digitales Pull up einzubauen oder einen Widerstand zu benutzen. Wäre für Denkanstöße sehr dankbar.

Gruß Mut3x

Hi

pulseIn ist blockierend.
Wenn kein Puls kommt, WARTET pulsIn bis zu 1 Sekunde (TimeOut).
Somit müsstest Du bei stehendem Motor eher alle Sekunde eine Messung von 0 bekommen.

MfG

PS: Ein Hall-Sensor prellt nicht, Prellen haben nur mechanische Schalter.
Ein Reed-Kontakt (reagiert auch auf Magnete) würde prellen.

Hallo,

Du musst mittels Interrupt die Anzahl der Impulse pro Zeit messen (Bspw. 1s) und am Ende in U/min umrechnen.
Wenn der Drehzahlbereich eher niedrig ist, misst man den Abstand der Impulse, sprich die Periodendauer.
Man kann das Messintervall vom Anzeigeintervall komplett trennen.