Hallsensoren und Interrupts

Gast #5950442
Lesenswert?

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.
Gast #5950450
Lesenswert?

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.

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