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.
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)
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
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
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
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?
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.
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.
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!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.