Drehzahlmessung mit Atmega 128

Gast #1144569
Lesenswert?

Hallo,

ich möchte die Drehzahleines Motor messen.
Folgenden Code habe ich geschrieben, irgendwo ist noch ein Fehler da die 
Drehzahl nicht stimmt.
Ist das die richtige Vorgehensweise?
Atmega128 mit 8Mhz
1
volatile u32 seconds;
2
volatile u08 rounds;
3
volatile u16 rpm;
4

5
void timer1 (void)
6
{
7
  // Timer1 settings: ~ 8000000 ticks (2 sec)
8
  TCCR1B = (1<<CS12); // prescaler = 256
9
  // init counter
10
  TCNT1H = 11;
11
  TCNT1L = 220;
12
  //TIMSK = (1<<TOIE1); // Timer1 Overflow Interrupt Enable
13
  TIMSK = (1<<OCIE1A);// enable irq: compa
14
}
15

16
void extInt (void)
17
{
18
  EICRB =  (1 << ISC41);
19
  EIMSK =  (1 << INT4);
20
}
21

22
// Timer1 Compare A
23
ISR(TIMER1_COMPA_vect)
24
{
25
  TCNT1H = 11;
26
  TCNT1L = 220;
27
  seconds += 2;
28
  if(seconds%6==0)
29
  {
30
    rpm = rounds * 10;
31
    rounds = 0;
32
  }
33
}
34

35
ISR(INT4_vect)
36
{
37
  rounds++;
38
}
39

40
timer1();
41
extInt();
42
sei();

am PIN4 werden die Impulse gezählt.
Alle 2 Sekunden tritt der Timerinterrupt auf und berechnet die Drehzahl.
Gast #1144577
Lesenswert?

ISR(INT4_vect)
{
  rounds++;
}

was ist wenn der Motor so schnell dreht, dass rounds überläuft...

miss lieber die Zeit zwischen z.B 10 Impulsen und berechne daraus die 
Frequenz

d.h. du bauchst die Startzeit, die Endzeit und die eventuellen 
Timerüberläufe

schau die mal den angehängten Code an, der funktioniert bei mir tadellos
Angehängte Dateien:
Gast #1144614
Lesenswert?

Nachtrag: deine Variante (impulse über fetse Zeit messen) ist für 
schnelle Signale gut, hat bei langsamen aber einen zu großen Fehler (je 
schneller die zu messende Frequenz, dest geringer ist hier der Fehler)

meine Variante zählt feste Impule über die entsprechende Zeit, hat den 
Nachteil, dass die Messzeit bei sehr langsamen Signalen steigt (ist 
dafür aber sehr genau)
bei schnellen Signalen kommt man dann an die Grenzen des µC, da ja nur 
diskrete Zeitabstände gemessen werden können (Takt begrenzt Messung). Da 
würde man dann zu deiner Variante wechseln.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren