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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.