Moin,
ich erfasse mit einem IR Sender / Empfänger Impulse von einer Kodierscheibe auf einer rotierenden Welle um die Drehzahl zu messen.
Dies tue ich, in dem ich eine Minute lang den Wechsel von LOW nach HIGH an einem Digitaleingang mitzähle.
Das Ganze ist eine Drehzahlmessung von einem Lüfter.
Bis dahin funktioniert es wunderbar.
....nur manchmal messe ich zu hohe Drehzahlen.
Ich habe mir dann mit einem Oszilloskop das Signal angeschaut und stelle fest, dass manchmal noch mehr Flanken auftreten, die da nicht hingehören. An der Stelle kann ich aber aktuell nichts mehr ändern.
Nun habe ich mir überlegt, ob man das nicht softwaremäßig abfangen kann.
Entweder über ein Fenster oder über eine Plausibilitätsprüfung.
Fensterprüfung:
Die Flanken dürfen nicht schneller als erwartet kommen. (Die Flanke muss in einem gewissen Fenster kommen).
Plausibilitätsprüfung:
Da die Kodierscheibe 50% schwarz und 50% weiss ist, müssen die Flanken immer im gleichen Tastverhältnis kommen. Tun sie das nicht, gibt's da irgendwie ein Problem. Man müsste also die Zeit der HIGH Flanke und die Zeit der LOW Flanke messen, und die müssen zu 95% identisch lang sein. Ich glaube diese Art der Prüfung müsste besser funktionieren, da sie keine harten Grenzen kennt wie eine Fensterprüfung.
Funktioniert so eine Idee?
Hat sowas schon einer von Euch gemacht?
Das Frequenzsignal kommt in etwa von 0-70Hz.
Aktuell sieht mein (hierfür zusammengeschrumpfter) Code so aus:
void loop() {
Sensor[1] = digitalRead(sensorPin[1]);
if (Sensor[1] == HIGH && OldSensor[1] == LOW) {
rpm[1]++;
}
OldSensor[1] = Sensor[1];
if (millis() - Startzeit >= Messzeit) {
Serial.print("rpm1: ");
Serial.println(rpm[1]);
}
rpm[1] = 0;
Startzeit = millis();
}
Wie könnte ich jetzt so eine Plausibilitätsprüfung einbauen?
Lieben Gruß,
Chris













