Forum: Mikrocontroller und Digitale Elektronik Arduino Drehzahl Impulse zählen


von Arduino-help (Gast)


Lesenswert?

Möchte mit dem duemilanove Drehzahlen vom Elektromotor mit Hallgebern 
messen.Hab schon mit dem PulseIn Befehl schnell Ergebnise bekommen. 
Allerdings eignet sich das ganze nicht, da bei ganz kleinen Drehzahlen 
die
Zeiten zu lang werden.Hab mich hier durchs Forum gelesen und es mit 
interrupts und micros()versucht zu lösen. Hab den Code aus dem Internet 
und für meine Aufgabe angepasst ..Aber über den Seriell-Monitor bekomm 
ich keine vernünftigen Werte raus.Hat jemand ne Idee oder einen Tip?
1
void setup() {
2
  pinMode(2, INPUT);                        // Eingangspin auf Eingang 
3
  
4
  attachInterrupt(0, readmicros, RISING );  // Interrupt 0 auf Routine
5
}
6
7
volatile unsigned long dauer=1;             // microsekunden 
8
volatile unsigned long last=0;              // Zählerwert 
9
long drehzahl;                              // selbstredend
10
char buf[17];                               // Pufferstring für sprintf
11
12
void loop() {                               // Hauptprogramm
13
  drehzahl = 60000000 / dauer;              // Drehzahl ausrechnen und
14
  sprintf(buf, "%5lu", drehzahl);           // als 5 Zahl in den Puffer 
15
  serial.println(buf);                      // Puffer ausgeben
16
  delay(500);                               // Eine halbe Sekunde warten
17
}
18
19
void readmicros() {                         // Interrupt-Routine
20
  unsigned long m = micros();               // Microsekunden auslesen
21
  dauer = m - last;                         // Differenz letzte
22
  last = m;                                 // Letzten Wert merken
23
}

von Taquino (Gast)


Lesenswert?

Hi, ich glaube, du mußt für die Drehzahl die Dauer durch 60000000 teilen 
und nicht umgekehrt.
Gruß
Taquino

von Chiefhood (Gast)


Lesenswert?

Hey,

bin selbst dran einen Drehgeber auszulesen.
Hab dir den Tipp, dass die Funktion micros selbst den Interrupt benötigt 
und deswegen funktioniert dies nicht. Die interrupts blockieren sich 
gegenseitig.

Hast du bereits eine Lösung? Würde mich freuen!

von Wilhelm F. (Gast)


Lesenswert?

Arduino-help schrieb:

> da bei ganz kleinen Drehzahlen
> die
> Zeiten zu lang werden

Bei langen Zeiten mißt man die Zeit, und rechnet sie dann in Frequenz 
um. Das ist auch so eine alte Sache, wo Frequenzmesser auch mit zu 
kämpfen haben. Bei sehr geringen Frequenzen messen sie Zeit pro Impuls, 
bei hohen Frequenzen Impulse pro Zeit.

von Michael (Gast)


Lesenswert?

Wilhelm F. schrieb:
> Bei langen Zeiten mißt man die Zeit, und rechnet sie dann in Frequenz
> um. Das ist auch so eine alte Sache, wo Frequenzmesser auch mit zu
> kämpfen haben. Bei sehr geringen Frequenzen messen sie Zeit pro Impuls,
> bei hohen Frequenzen Impulse pro Zeit.

Reziprokzähler nennt sich das dann, wie z.B. im Artikel 
Frequenzzählermodul oder im 
Beitrag "Frequenzzähler 1Hz - 40MHz"

von Wilhelm F. (Gast)


Lesenswert?

Michael schrieb:
> Reziprokzähler nennt sich das dann,

Sicher. Ich hab die Fachbegriffe nicht immer so parat.

von Reinhard Kern (Gast)


Lesenswert?

Wilhelm F. schrieb:
> Bei sehr geringen Frequenzen messen sie Zeit pro Impuls,

Schon klar, aber wenn er nur einen Impuls pro Umdrehung hat, wird selbst 
das zum Problem, da kommen dann leicht mehrere hundert ms raus.

Gruss Reinhard

von M. N. (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Schon klar, aber wenn er nur einen Impuls pro Umdrehung hat, wird selbst
> das zum Problem, da kommen dann leicht mehrere hundert ms raus.

Er hat einen Elektromtor, der ohne Getriebe wohl kaum mit Drehzahlen 
<100 laufen wird. Mein Tipp: 
Beitrag "einfache Drehzahlmessung mit ATmega88"

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
Noch kein Account? Hier anmelden.