Hallo, ich Werte für meine Drehzahlerkennung zwei Impulse aus und errechne mir die Drehzahl anhand der beiden Zeitwerte, des Taktes und der Overflows. Soweit funktioniert das super. Wenn aber der Lüfter aufhört zu drehen und dann still steht, bleibt eine kleine Drehzahl (kleiner als 10) übrig, die ich nicht auf Null gesetzt bekomme. Im Moment blende ich Drehzahlen kleiner als 10 aus und setze dafür den Wert 0. Das ist, wie ich finde, nur eine Notlösung. Wie kann ich, wenn der Lüfter tatsächlich steht und noch ein Drehzahlwert ansteht, diesen auf 0 setzen? Ich verwende einen ATmega8 und AVR Studio inklusive WinAVR. Als Eingangspin für die Impulse nehme ich ICP1. Vielen Dank, Alexander
> Wie kann ich, wenn der Lüfter tatsächlich steht und noch ein > Drehzahlwert ansteht, diesen auf 0 setzen? So etwa:
1 | Drehzahl = 0; |
Hast du dir schon mal überlegt, was mit dem Capture passiert, wenn keine Flanke mehr kommt? Du wirst also ein Timeout brauchen, das z.B. mit irgendwelchen Flanken/Pegeln am Impulseingang zurückgesetzt und mit einem Timer hochgezählt wird. Oder du merkst dir den aktuellen Capture-Stand und siehst nach, ob der sich ändert. Falls der sich nicht mehr ändert, lässt du dein Timeout hochlaufen. Es ist auf jeden Fall Handarbeit nötig.
Danke, ich hatte nicht daran gedacht, dass der Timer immer weiter läuft und sich die Overflows erhöhen. Ich hatte vorher
1 | if (Ergebnis <= 10) |
2 | {
|
3 | Ergebnis = 0.0; |
4 | }
|
Wenn ich stattdessen
1 | if (Overflows > 5000) |
2 | {
|
3 | Ergebnis = 0.0; |
4 | }
|
schreibe, sollte ich doch erkennen, dass sich der Lüfter nicht mehr dreht, da bei der ersten positiven Flanke die Overflows auf 0 gesetzt werden?! Ich werde meine Gedanken aber auf jeden Fall ausprobieren! Gruß, Alexander
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.