Forum: Mikrocontroller und Digitale Elektronik Drehzahlmesser mit Mega8 - einfachstes Prinzip?


von Arno (Gast)


Lesenswert?

Hey Leute, ich lese gerade im Datenblatt vom Mega8 (hab ich gerade 
einige da) und überlege, wie ich am einfachsten die Drehzahl von einem 
meiner Quadrocopter-Propeller mit einer Lichtschranke messen kann. Ich 
hab mir gedacht:

1) ich stell mir einen Timer (Timer0?), der alle 500ms einen Interrupt 
auslöst

2) Timer1 (16bit) richte ich als Counter ein, mit externer Taktquelle 
(Pin INT1, da schließe ich nachher die Lichtschranke an - aber noise 
canceling kann ich da nicht nutzen, oder?)

3) in der ISR vom Timer (siehe 1) lese ich den Counter aus, setze ihn 
wieder auf 0 und sende den Wert (Drehzahl in U/sek) über die serielle 
Schnittstelle (sollte < 500ms dauern)

Ist das so gedacht mit den Timern / geht es einfacher/besser?

von Christian (Gast)


Lesenswert?

Es gibt zwei Möglichkeiten die Drehzahl so zu messen:
1. Du misst die Zeit zwischen zwei Unterbrechungen
2. Du misst die Anzahl der Unterbrechungen in einem festen Intervall

Beide Methoden haben ihre Vor- und Nachteile (Auflösung etc...), weshalb 
bei kleinen Geschwindigkeiten meist Variante 1 und bei hohen 
Geschwindigkeiten dann auf Variante 2 umgestellt wird.

von Udo S. (urschmitt)


Lesenswert?

Der Propeller wird doch über einen Brushless Motor angetrieben?
Also kann man mit den Nulldurchgängen der Motorspannung doch direkt die 
Drehzahl erfassen. Ohne Lichtschranke.
Beim Erfassen von Frequenzen hast du prinzipiell 2 Möglichkeiten.
1. Torzeit definieren und die Anzahl Impulse pro Torzeit zählen.
2. Mit einer konstanten hohen Frequenz (Timertakt) einen Zähler solange 
hochzählen, bis genau eine (oder mehrere) Umdrehungen geschehen sind.

Methode 1 nimmt man wenn die Frequenz hoch genug ist. Das Ergebnis wird 
(relativ) umso genauer je höher die Frequenz und die Torzeit ist.
Methode 2 nimmt man eher bei niedrigen Frequenzen. Das Ergebnis wird 
umso genauer je niedriger die zu ermittelnde Frequenz ist.

von Arno (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Torzeit definieren und die Anzahl Impulse pro Torzeit zählen.

So will ich es machenm wie oben beschrieben (dreht einigermaßen schnell)

Die Motoren sind nicht brushless (Nano QX)

Es ging mir eher darum, ob das mit den Timern so richtig ist / 
funktionieren kann - oder manchmal gibt es ja noch einen Trick, der das 
Ganze vereinfacht..

von Axel S. (a-za-z0-9)


Lesenswert?

Arno schrieb:
> Udo Schmitt schrieb:
>> Torzeit definieren und die Anzahl Impulse pro Torzeit zählen.
>
> So will ich es machenm wie oben beschrieben (dreht einigermaßen schnell)

Dann laß uns doch mal ein paar Schätzungen machen. Sagen wir mal, der 
Propeller rotiert mit 1000rpm. Das sind 16.67 Umdrehungen pro Sekunde.

Du willst ein Meßintervall von 500ms nutzen. In dieser Zeit kriegst du 
dann 8 Komma zerquetschte Impulse rein. Wegen der Asynchronität zwischen 
Signal und Abtastzeitpunkt werden es also entweder 8 oder 9 Impulse 
sein. Der wahre Wert liegt irgendwo dazwischen, der Fehler ist also bis 
zu 1/8 oder 12.5%. Reicht dir das wirklich?

OK, in der Praxis wird der Propeller mehrflügelig sein und die 
Lichtschranke mehrmals pro Umdrehung unterbrechen. Das reduziert den 
Fehler um einen Faktor (bei zweiflügeligen Propellern: um Faktor 2). 
Aber es bleibt doch ein gewisser Zweifel an der Meßmethode. Denn 
natürlich funktioniert sie um so schlechter, je langsamer der Propeller 
dreht.

Im Gegenzug die Periodendauermessung. Selbst wenn dein Mega8 nur mit 
1MHz tickert, kannst du eine Periode problemlos auf 1µs genau ausmessen. 
Einfach Timer 1 mit dem µC-Takt laufen lassen und deine Lichtschranke an 
eine Input Capture Einheit hängen. Die Peridendauer bei 1000rpm ist 
60ms, wenn du die auf 1µs genau auflösen kannst, ist der Fehler 1/60000 
~= 0.0017%. Bei 10000rpm wäre der Fehler immer noch nur 0.017%. Und du 
kriegst Meßwerte auch noch viel schneller als nur zweimal pro Sekunde.


XL

von m.n. (Gast)


Lesenswert?

Arno schrieb:
> Ist das so gedacht mit den Timern / geht es einfacher/besser?

2 x zu suchen ist am einfachsten:

1. Suche unter 'Projekte & Code' nach DREHZAHL
2. Suche Dir eine der vielen Möglichkeiten aus.

von Arno (Gast)


Lesenswert?

Axel, Du hast mich überzeugt. Darüber hinaus brauche ich dann nur 1 
Timer und kann ich dann input capture / noise canceler verwenden.

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.