Forum: Mikrocontroller und Digitale Elektronik Arduini Drehzahl


von Niang (Gast)


Lesenswert?

Hallo  leute ,
Ich brauche eure hilfe , meine Aufgabe mit Arduino seht um eine 
Drehzahlmessung zu erfassen.

1
  
2
3
4
#include <Wire.h>
5
unsigned long beginnzeit; // le temps debut pour la deuxiemer messure
6
volatile unsigned long endezeit; // le temps ecoule
7
volatile unsigned long  impuls; // compteur
8
unsigned long drehzahl; //nombre de tours
9
unsigned long dauer ;
10
int A=0;
11
int mittelwert=0;
12
13
14
void setup() {
15
Serial.begin(9600);
16
pinMode(2,INPUT);
17
pinMode(2,INPUT_PULLUP);
18
drehzahl=0;
19
endezeit=0;
20
beginnzeit=0;
21
impuls=0;
22
attachInterrupt(0,impulse,HIGH) ;// der Interrupt wird ausgelöst , wenn der pin 2 von HIGH nach LOW wechselt , bei fallender Flanke
23
}
24
void impulse(){
25
  impuls++;
26
 endezeit=millis();
27
 Serial.println("ende");
28
   Serial.println(endezeit);
29
   Serial.println(impuls);
30
}
31
void loop() {
32
 
33
if (endezeit>beginnzeit){
34
   detachInterrupt(0);
35
  dauer=endezeit-beginnzeit;
36
37
  drehzahl= 60*1000 *1/ (dauer); //
38
39
  beginnzeit=endezeit;
40
    A=drehzahl+A;
41
      if (impuls==18){
42
  mittelwert=A/impuls;
43
  Serial.println("Mittelwert");
44
Serial.println(mittelwert);
45
  impuls=0;
46
  A=0;
47
  }
48
    attachInterrupt(0,impulse,HIGH) ;
49
  /* Serial.println("begine");
50
   Serial.println(beginnzeit);
51
    Serial.println("edauer");
52
    Serial.println(dauer); */
53
    Serial.println("drehzahl");
54
Serial.println(drehzahl);
55
56
57
 
58
  }
59
else{
60
  drehzahl=0;
61
}
62
63
delay(1000);
64
65
66
67
}


Ich versuche halt  die Drehzahl nach jede Impuls und der mittelwerte 
nach 18 Impulse  auszurechnen , aber irgwie klappt gar nicht mit meinem 
code.
Der impuls zähler geht nicht wider auf NUll nach 18 impulse und der 
drehzahl kriege die falsch :S


wäre sehr dankbar falls jemande mir helfen kann :)
Vielen Dank und schönen Abend noch .
Ps: sorry mein Deutsch ist aber nicht perfekt

von Mitlesa (Gast)


Lesenswert?

Niang schrieb:
> meine Aufgabe mit Arduino

Welcher Arduino?

von Mitlesa (Gast)


Lesenswert?

Hier ein paar offensichtliche Fehler/Problemstellen:

1)
attachInterrupt(0,impulse,HIGH);
nur einmal aufrufen in Setup()

2)
void impulse()  ist deine Interrupt-Service-Funktion.
Darin sollst du keine print Statements haben da diese
zuviel Zeit brauchen.

3)
attachInterrupt(digitalPinToInterrupt(2), impulse, HIGH);
schreiben weil du offensichtlich Pin 2 als Interruptquelle
verwendest.

von J. S. (Gast)


Lesenswert?

Das Serial.println im interrupt ist nicht wirklich eine gute Idee, da es 
(je nach Drehzahl) mehr Zeit braucht, als die Impulse lang sind.

von Niang (Gast)


Lesenswert?

Mitlesa schrieb:
> Niang schrieb:
>> meine Aufgabe mit Arduino
>
> Welcher Arduino?

Arduino Uno .

Mitlesa schrieb:
> Hier ein paar offensichtliche Fehler/Problemstellen:
>
> 1)
> attachInterrupt(0,impulse,HIGH);
> nur einmal aufrufen in Setup()
>
> 2)
> void impulse()  ist deine Interrupt-Service-Funktion.
> Darin sollst du keine print Statements haben da diese
> zuviel Zeit brauchen.
>
> 3)
> attachInterrupt(digitalPinToInterrupt(2), impulse, HIGH);
> schreiben weil du offensichtlich Pin 2 als Interruptquelle
> verwendest.

J. S. schrieb:
> Das Serial.println im interrupt ist nicht wirklich eine gute Idee,
> da es
> (je nach Drehzahl) mehr Zeit braucht, als die Impulse lang sind.

 Vielen Dank :)
was wäre eig besser um eine gute Drehzahlmessung zu erfassen  .
Weisst jemande wie ich  mein code veränder um je impuls drehzahl 
ausrechnen und nach 18 impulse , der mittelwert  auch .
ich habs auch wieder probiert geht mein impuls counter immer hoch .( 
deswegen detachInterrupt meinte damit nach 1 puls direkt drehzahl 
ausrechnen )

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Um welche Drehzahl handelt es sich denn, also wie schnell erwartest Du, 
daß sich die Welle dreht?

Entweder misst Du die Zeit zwischen zwei Impulsen, oder zählst die 
Impulse in einer bekannten Zeit.
Aus Beidem kann man die Drehzahl errechnen - je nach Drehzahl ist es 
sinnvoller, die Zeit zu messen oder eben die Impulse zu zählen.
Wenn Du dann noch mehrere Messungen speicherst - also zuerst zählst Du 
'Impulse_1', danach 'Impulse_2', dann 'Impulse_3', dann wieder 
'Impulse_1' und die drei Werte addierst, hast Du gleichzeitig eine 
Mittelwert-Bildung - klar, die ersten zwei Messungen liefern Müll (zu 
geringe Drehzahlen), da noch nicht alle Gruppen gezählt/gefüllt wurden.

MfG

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.