Hi liebe Community,
bislang konnt ich sehr viel lernen hier im Forum und auch auf den unzähligen Internetseiten.
Leider habe ich aktuell ein Projekt, bei welchem ich einfach nicht wirklich weiter komm.
Es geht um eine 125er Aprilia, welche ich technisch etwas upgraden will.
Ich verwende zur Zeit einen Interrupt zur Drehzahlermittlung welcher nach einer Zeitperiode den inkrementierten Counter verrechnet. Das funktioniert soweit gut nur leider ist es sehr statisch und auch nicht so aktualisierungsfreudig.
PROBLEM/FRAGE:
Ich möchte zu jeder Umdrehung die benötigte Zeit auswerten. Das funktioniert mit meiner aktuellen Konfiguration im Leerlauf und bei wenig Drehzahl, danach spinnt die Routine sehr und ich weiß nicht wieso.
Hardware:
http://www.ebay.de/itm/172166288417 als Hallsensor mit Widerstand zwischen GND VCC
So sieht die Hardware in etwa aus:
http://img5.fotos-hochladen.net/uploads/polradmoklrdjabq.jpg
Das Wäre der Code dazu:
volatile unsigned long tim = 0;
volatile unsigned long time_last = 0;
volatile unsigned long minu = 60000000;
int rpm=0; //evtl alle unsigned long
int rpm1=0;
int rpm2=0;
int rpm3=0;
int rpmres=0;
int pot;
void setup()
{
attachInterrupt(0, rpm_interrupt, FALLING);
Serial.begin(115200);
}
void loop()
{
if (tim > 1) {
// detachInterrupt(0); hab ich mal zum test auskommentiert - ändert aber nix
rpm= minu/tim;
rpm3 = rpm2;
rpm2 = rpm1;
rpm1 = rpm;
rpmres=(((rpm1*3) + (rpm2) + (rpm3)) / 5) ; //da 2 magnete
Serial.println(rpmres);
// attachInterrupt(0, rpm_interrupt, FALLING); hab ich mal zum test auskommentiert - ändert aber nix
}
}
void rpm_interrupt()
{
tim = (micros() - time_last);
time_last = micros();
}
Im Serial Monitor kommen super Werte raus, jedoch springen sie ab ca. 5000 umdrehungen ins negativ unermässliche.
Sehr selten sind auch bei niedrigeren Drehzahlen kurz negative werte mit drin.
Leider hab ich den Monitor geschlossen, ich mache heute abend ein Screenshot davon.
Habt ihr mir Verbesserungsvorschläge für den Code?
Ziel soll sein einen extrem genauen und schnell aktualisierenden Drehzahlmesser zu haben um Servos etc. anzusteuern.
Vielen Dank Euch im Voraus,
Lg Chris