Forum: Mikrocontroller und Digitale Elektronik Anzahl Umdrehungen pro Sekunde des Motors


von Ma B. (drumstick)


Lesenswert?

Guten Tag!

Ich arbeite mit dem uVision von Keil und Stm32f103vct.

ich benötige die Anzahl Umdrehungen pro Sekunde von dem Motor.
Die Hallsensoren lösen einen externen Interrupt aus. Pro Umdrehung des 
Motors werden 48 Hallsensorimpulse erfasst.

Meine Idee:  Beim ersten Auslösen des Externen Interrupts starte ich 
einen Timer und incrementier zusätzlich eine Variable. Erreicht die 
variable den Wert 48, stoppe ich den Timer und merke mir den Zählwert 
des Timers, ich sezte die Variable wieder auf 0, usw.

Dies ist die beste Lösung, die mir in den Sinn kommt. Gibt es noch 
bessere Lösungen?? Hat jemand Erfahrungen gemacht, z.B. betreffend der 
Genauikeit der Anzahl Umdrehungen? Soll ich den Timer länger laufen 
lassen, und durch Anzahl Impulse dividieren? Ich denke möglichst wenig 
rechnen!?

Danke und Gruss!

M.B.

von Karl H. (kbuchegg)


Lesenswert?

Du kannst auch mit hinreichender Genauigkeit die Zeit von einem 
Hallsensor zum nächsten messen und das dann auf Drehzahl umrechnen.

(wenn die Sensoren gleichmässig im Kreis angeordnet sind. Aber das setz 
ich mal vorraus)

von Achim M. (minifloat)


Lesenswert?

M. B. schrieb:
> Soll ich den Timer länger laufen
> lassen, und durch Anzahl Impulse dividieren?

Super, weil wenn sich der Motor nicht dreht, gibts 0 Impulse.
Nun kommt deine Timerprozedur und dividiert durch 0.

Der Weg andersherum mit 48 Impulse abwarten und dann 1/(gemessene Zeit)
erscheint mir Sinnvoller. Allerdings sollte noch eine Glättung 
hinterher(wenn die Regelung das abkann).

Und -wichtig- Wann ist die Drehzahl omega ungefähr Null?
eine Erkennung auf Timerüberlauf könnte das lösen.
Impulse werden ja nicht versäumt.

Vielleicht funktioniert ja eine Kombination aus den 3 Methoden.
Wenn die Timerauflösung bei schneller Drehzahl nicht mehr reicht, kann 
man ja auch 96, 192, 384... Impulse zählen, dann wirds genauer, 
erfordert aber eine Nachkorrektur des Ergebnisses. Der Neue Wert muss 
bloß vor einem erneuten Durchlauf des Regelalgorithmus vorliegen.

mfg mf

von Harald W. (wilhelms)


Lesenswert?

Mini Float schrieb:

>> Soll ich den Timer länger laufen
>> lassen, und durch Anzahl Impulse dividieren?
>
> Super, weil wenn sich der Motor nicht dreht, gibts 0 Impulse.
> Nun kommt deine Timerprozedur und dividiert durch 0.

Gabs früher nicht mal (mechanische) Rechenmaschinen, die kaputt
gingen, wenn man durch Null teilte?
Gruss
Harald

von Achim M. (minifloat)


Lesenswert?

Harald Wilhelms schrieb:
> die kaputt
> gingen, wenn man durch Null teilte?

Vielleicht. Es gab auch wesentlich einfachere Maschinen, die Versuchten 
den Divisor sooft vom Dividenden abzuziehen, wie es ging. Wie oft es 
ging, wurde an einem Zähler hochgezählt. Stellt man als Divisor 0 ein, 
kann man Kurbeln wie ein Weltmeister...

Und zum Sarkasmus in deiner Frage: Ja sicher geht der Controller nicht 
kaputt, wenn du da drauf durch 0 teilst. Nur wäre das Ergebnis nutzlos 
und dem TO nicht geholfen. Außerdem weiß ich nicht, was bei einer 
Division durch 0 auf dem Controller passiert. Der 
DIV0-Interrupt-Vektor wird angesprungen, es kommt ein sinnloses Ergebnis 
heraus, es kommt ein plausibles Ergebnis raus(als würde der Motor noch 
drehen, das wär fatal)...

mfg mf

von Thomas (kosmos)


Lesenswert?

wie hoch ist deine maximale Drehzahl, wenn der µC schnell genug ist 
würde ich jeden Impuls auswerten, dadurch kann man viel schneller 
reagieren (Drehzahlsprünge). Handelt es sich um einen Verbrennungsmotor?

von Ma B. (drumstick)


Lesenswert?

Hallo und Danke für die Tipps!

Es ist ein 50W DC Motor und möchte die Anzahl Umdrehungen einmal in der 
Sekunde erfassen. Der Motor läuft mit einer Maximalen Geschwindigkeit 
von 80mm/s.

Gruss!

M.B.

von Achim M. (minifloat)


Lesenswert?

M. B. schrieb:
> 80mm/s.

Ein Linearmotor?
mfg mf

von Karl H. (kbuchegg)


Lesenswert?

M. B. schrieb:

> Es ist ein 50W DC Motor und möchte die Anzahl Umdrehungen einmal in der
> Sekunde erfassen. Der Motor läuft mit einer Maximalen Geschwindigkeit
> von 80mm/s.

80 mm/s können in Umdrehung pro Sekunde viel sein, wenn die Achse 3 
Hunderstel Millimeter Durchmesser hat. Können aber auch sehr wenig sein, 
wenn die Achse 2 Meter Durchmesser hat.

Nimm doch bitte die jeweils passende Einheit. Und bei Umdrehungen sind 
das nun mal U/min. Das ist doch nicht so schwer, wirft allerdings ein 
bezeichnendes Licht darauf, wieviel Ahnung du von dem hast, was du da 
eigentlich tust.

von Ma B. (drumstick)


Lesenswert?

Kenndaten und Typ des Motors

EC 45 flat, bürstenlos, 50W

Nennspannung:                   36V
Leerlaufdrehzahl:               3360 1/min
Nenndrehzahl:                   2320 1/min
Durchmesser der Motorenachse:   4mm


Es wird ein Schneckengetriebe eingesetzt: Untersetzung 1:60


Karl Heinz Buchegger schrieb:

> wirft allerdings ein bezeichnendes Licht darauf, wieviel Ahnung du von dem hast, 
> was du da eigentlich tust.

Danke sehr motivierend. Ich brauch halt ein wenig länger, um mich in 
neuen Gebieten zu recht zu finden und befinde mich noch in Ausbildung. 
Das heisst nicht, das du nicht recht hast.
Du arbeitest wahrscheinlich schon 25 Jahre auf diesem Gebiet!? ;-)

danke und FREUNDLICHE Grüsse

der der keine Ahnung hat, von dem was er tut!

von Ma B. (drumstick)


Lesenswert?

Wirkumfang des Getriebe 152 mm!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Im Hallsensor Interrupt zähle eine Variable hoch pro Puls.

Ein Timer Interrupt feuert jede Sekunde, holt sich die Variable und 
teilt sie durch 48. Das Ergebnis ist Umdrehungen/sec. Dann setzt der 
Timer Interrupt die SensorVariable noch auf 0.
Alternativ kannst du noch mit 60 multiplizieren, dann hast du das 
gewohnte U/min.

von Karl H. (kbuchegg)


Lesenswert?

M. B. schrieb:

> Du arbeitest wahrscheinlich schon 25 Jahre auf diesem Gebiet!? ;-)

Nein,
Ich arbeite überhaupt nicht auf dem Gebiet.
Aber wenn mich jemand nach einer Drehzahl fragt, dann antworte ich nicht 
mit 80mm/s. Das hab ich nämlich mit 12 Jahren im Physikunterricht schon 
gelernt, dass die Einheit für Umdrehungen U/min sind.
Steht am Amaturenbrett jedes Autos, welches eine Drehzahlanzeige des 
Motors besitzt.

Dreh - Zahl

   wie oft dreht sich ein Teil in einer bestimmten Zeiteinheit.
   Bis auf die Zeit sagt schon das Wort worum es geht. Um eine
   Anzahl Umdrehungen. Seit wann wird eine Anzahl in Millimeter
   angegeben?

Millimeter pro Sekunde

   wie weit bewegt sich etwas in einer Zeiteinheit, wenn man die
   Bewegung als geradlinig ansieht bzw. in geradlinig umrechnet.
   Da gehts also um eine Strecke.

Das passt so erst mal nicht zusammen. Und dazu muss man kein 
Motoringenieur sein, sondern einfach nur ein bischen über die Dinge 
nachdenken die man tut. Bei gleicher 'Drehzahl' bewegt sich ein 
Traktorreifen weiter vorwärts als das kleine Reifchen der Inline-Skates. 
Also muss es einen gewichtigen  Unterschied zwischen Drehzahl und 
zurückgelegter Strecke geben.


Edit: Ich hätt nichts gesagt, wenn nicht jetzt eine Variante des "Du 
bist wahrscheinlich mit dem Wissen geboren worden" Arguments gekommen 
wäre.

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.