Hallo, ich habe einen Hallsensor mit dem ich die Drehzahl eines Motors
auslese. Das funktioniert auch gut, allerdings habe ich Probleme damit
einen Stillstand des Motors festzustellen, sprich wenn er bei 100 U/min
ausgemacht wird, wird weiterhin diese Drehzahl angezeigt.
Das Programm ist für sehr niedrige Drehzahlen zwischen 15-50 U/min
ausgelegt, deswegen werden die Zeiten mit dem Array festgehalten.
Am Motor sind 3 Magnete, pro Umdrehung misst man also 4 mal und bildet
die Differenz daraus, deswegen die Arraylänge von 4.
//Array für Messzeiten
volatile unsigned long hall_values[4];
//Berechnung der Drehzahl im Hauptprogramm
void calc_rpm()
{
//Ein paar Bedingungen um Nulldivision etc zu verhindern
if(hall_values[0]!=0 && hall_values[1]!=0 && hall_values[2]!=0 &&
hall_values[3]!=0 && hall_values[0]!= hall_values[3])
{
//da nointerrupts() mit einem wire.begin() kollidiert
detachInterrupt(digitalPinToInterrupt(interruptPin));
leakinfo.sensor.drehzahl = 60000000/(hall_values[0]-hall_values[3])
;
hall_values[3]=0;
attachInterrupt(digitalPinToInterrupt(interruptPin), detectMagnet,
FALLING);
}
}
//Interruptroutine
void detectMagnet() {
hall_values[3]=hall_values[2];
hall_values[2]=hall_values[1];
hall_values[1]=hall_values[0];
hall_values[0]=micros();
}
Bin für Vorschläge zur Verbesserung offen.
Nils schrieb: > Das funktioniert auch gut, allerdings habe ich Probleme damit > einen Stillstand des Motors festzustellen, sprich wenn er bei 100 U/min > ausgemacht wird, wird weiterhin diese Drehzahl angezeigt. Stillstand wirst du nicht feststellen können. Du kannst höchstens feststellen, wenn die Zeit zwischen zwei Impulsen des Hallsensors einen gewissen Wert überschreitet, die Drehzahl also unter einem bestimmten Wert liegt. Was du brauchst, ist ein Timeout für die Zeitmessung.
Du solltest noch eine Marke setzen, die anzeigt, dass ein Interrupt aufgetreten ist. Die setzt du zusammen mit einem Timeout-Timer zurück. Wenn der Timeout-Timer abgelaufen ist, steht dein Motor.
Im Loop oder per Timer-Interrupt prüfen, ob sich das Array längere Zeit nicht geändert hat (mit Kopie vergleichen). Wenn das so ist, Anzeige auf Null setzen ...
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.