Interrupt hall sensor voor RPM

Arduino specifieke Software
Berichten: 3
Geregistreerd: 28 Jan 2014, 11:28

Interrupt hall sensor voor RPM

Berichtdoor HBO88 » 28 Jan 2014, 11:52

Hallo allemaal,

ik ben bezig met een project om een boot te monitoren/aansturen.
Ik wil de toeren van de dieselmotor meten met behulp van een hall sensor (TLE4905). Het is een unipolaire sensor en schakelt laag als er een magneet bij is.
Een simpel programma met het aansturen van een led werkt. Toeren meten werkt echter niet!

Deze sensor zit aangesloten op mijn DUE, als FALLING interrupt.
Voor het testen laat ik alleen de counts zien. Wanneer ik mijn magneet dus langs de hall sensor haal (die dus van hoog naar laag gaat), verwacht ik dat mijn counts met 1 is toegenomen.
Dit is dus niet zo, er zijn wel 20 counts bijgekomen.
Wat doe ik verkeerd? of kan ik meer succes boeken met een latching hall sensor, en dan 2 magneten gebruiken??

De code:
Code: Alles selecteren
volatile int rpmcount = 0;

void setup() {

pinMode(0, INPUT);
digitalWrite(0, HIGH); //interne pull up aanzetten
attachInterrupt(0, toeren, FALLING);
Serial.begin(9600);
}

void loop() {

Serial.println(rpmcount);

}

void toeren() {

rpmcount++;
}


Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Interrupt hall sensor voor RPM

Berichtdoor pjh » 28 Jan 2014, 14:47

ik vond dit:
Code: Alles selecteren
//-----------------------------------------------

 volatile byte rpmcount;
 unsigned int rpm;
 unsigned long timeold;
 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, RISING);
   rpmcount = 0;
   rpm = 0;
   timeold = 0;
 }
 void loop()
 {
   if (rpmcount >= 20) {
     //Update RPM every 20 counts, increase this for better RPM resolution,
     //decrease for faster update
     rpm = 30*1000/(millis() - timeold)*rpmcount;
     timeold = millis();
     rpmcount = 0;
     Serial.println(rpm,DEC);
   }
 }
 void rpm_fun()
 {
   rpmcount++;
   //Each rotation, this interrupt function is run twice
 }
//-----------------------------------------------

Hier: http://playground.arduino.cc/Main/ReadingRPM

Misschien dat RISING beter werkt? Het TLE4905 signaal is normaal laag en gaat hoog bij activatie.
Voor wat het waard is.
Groet

Berichten: 4068
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Interrupt hall sensor voor RPM

Berichtdoor shooter » 29 Jan 2014, 21:51

zet in de interupt eens een delay van 1 ms, als dan je probleem is opgelost, dan heb je dus last van kontaktdender. en op een uno klopt het pinnummer niet dat moet 2 zijn.
en zet een vertraging in je mainloop, want anders wordt het zenden te vaak gedaan. (waardoor de buffer overloopt)
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 28 Jan 2014, 11:28

Re: Interrupt hall sensor voor RPM

Berichtdoor HBO88 » 30 Jan 2014, 13:16

Ik heb ergens een functiegenerator geleend, toen werkte de teller wel goed. Dus last van dender. Er komen binnenkort wat andere hall schakelaartjes binnen, eens testen of die het wel doen.

Berichten: 4068
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Interrupt hall sensor voor RPM

Berichtdoor shooter » 30 Jan 2014, 20:24

als je twee hallsensoren hebt kun je een encoder maken, die heeft geen last van dender
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten