Positionsfeststellung an einem Schrittmotor ?

  • Guten Tag an alle Bastler und Elektroniker,

    für viele Anwendungen mag es keine Rolle spielen, wenn man einen Schrittmotor ansteuert und der betreffende Controller kennt die aktuelle Anker-Spulen Beziehung nicht. Da lässt man mal den Code eine halbe Umdrehung in eine Richtung laufen, und schon ist die ganze Sache wieder synchron.

    Will man aber ohne externe Sensorik ermitteln zu welcher Spule / Spulenpaarung der Gegenpol des Ankers steht, muss man einige Schritte in die eine oder andere Richtung mit dem Programmcode vollführen, aber man könnte doch auch die jeweils gegenüberliegende Spule eine Induktionsspannung zu messen, um Rückschlüsse auf die Ankerstellung , gerade erreichte Position ist !?

    Wie könnte man so etwas umsetzen ? Ein weiterer Thread dazu.

    Wer hat so etwas schon einmal versucht, und welchen Weg ist er dabei gegangen ? Und welches Ergebnis hat er dabei erzielt ?

    Danke

    es grüßt euer
    Willy

  • Also abgesehen davon, dass ich deinem Text nicht sicher entnehmen kann, was du überhaupt machen möchtest, ist dieser Satz absolut unverständlich, weil grammatikalisch ziemlich verunglückt.

    [...] aber man könnte doch auch die jeweils gegenüberliegende Spule eine Induktionsspannung zu messen, um Rückschlüsse auf die Ankerstellung , gerade erreichte Position ist !?

    Wenn ich mir das richtig zurechtdenke, willst du die absolute Position des Rotors durch Messung des Induktionsstroms bei Bewegung ermitteln.

    Wenn ich den Aufbau von Schrittmotoren richitg verstehe, sind die Dinger sozusagen mehrfach symmetrisch häufig mit 8 Spulen und 200 Magnetpolen oder so ähnlich. Wenn du also an den Rotor bewegst und an einer der Spulen die Induktionsspannung oder den Induktionsstrom misst, dann wirst du in verschiedenen Positionen des Rotos gleichartige Ergebnisse haben, weil sich das zyklisch wiederholt. Gäbe es, wie in einfachen Schemazeichungen oft dargestellt, nur einen Magneten, dann ginge das. Ich vermute aber, dass das in dieser Form mit üblichen Schrittmotoren nicht machbar ist. Bin gespannt, ob da jemand eine Möglichkeit sieht.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Du hast doch als Ausgang die Wahrheitstabelle für alle Vollschritte, bzw. Halbschritte.

    Um den aktuellen Schritt zu erfahren, kannst du entweder in der Schleife zählen oder benutzt die Methode index, um den Index zu erfahren.

    Es gibt noch viele weitere Möglichkeiten und ist abhängig von deinem Programm.

    Edited once, last by RestlessMud46765: find war die falsche Methode (June 27, 2023 at 12:39 PM).

  • Guten Tag

    Wenn ich den Aufbau von Schrittmotoren richitg verstehe, sind die Dinger sozusagen mehrfach symmetrisch häufig mit 8 Spulen und 200 Magnetpolen oder so ähnlich.

    Ich spreche jetzt hier weder von irgendwelchen Motoren wie sie auch in Lüfterantrieben verbaut werden, noch von größeren Teilen, wie sie vielleicht in industriellen Umfeld zum Einsatz kommen.
    Den letzten kleineren Step-Motor den ich mal zerlegt hatte, und als Getriebemotor für ein älteres Anzeigensystem verwendet wurde, hatte zwar auch Spulen, aber die gegenüberliegende Spule war im Betriebsmodus Spannungsfrei. Daher hatte ich ich in dem anderen Thread nach einer 6 Spulen Halb-/ Vollschrittsteuerung gefragt, weil mir die ursprünglich Ansteuerung mit jeweils 3 PWM Signalen zu aufwendig in der Berechnung erschien.

    Du hast doch als Ausgang die Wahrheitstabelle für alle Vollschritte, bzw. Halbschritte.

    Das ist vollkommen richtig., Nur gibt es auch die Situation, wo der Controller mal Stromlos sein kann, und man damit die tatsächliche Position verliert. Dazu müsste man mit einer Bewegungsauslösung den Anker wieder einfangen um an einer Stelle X mit dem Zählen beginnen zu können. Bezogen auf einen µController welcher in Python bzw. µPython programmiert werden kann, ist es aus meiner Sicht eher destruktiv, wenn man jeden Schritt als Anker- und Absolut-Position auf dem Filesystem des Controllers abspeichert, nur um im Fail-Falle die letzten Positionswerte zu kennen. Ein Positionserkennnung am mechanischen Ausgang des Untersetzungsgetriebes das könnte man noch relativ einfach implementieren. Nur bei einem Untersetzungsverhältnis 1:50 und größer macht es wenig Sinn, sich ausschließlich auf die Abgangswelle zu verlassen.

    Daher meine Frage, könnte man die nicht mit Spannung beauflagten Spulen dafür nutzen zu erkennen, und wie dann auch auswerten, um im Falle eines Wiedereinschaltens des Controllers die aktuelle Stellung des Ankers zu ermitteln.

    es grüßt euer
    Willy

  • Wenn ich Dead_Eyes Tabelle richtig deute, hast du 4 (Vollschritte) bzw. 8 (Halbschritte) verschiedene Spulen-Spannungskombinationen. Ein üblicher kleiner Schrittmotor hat 200 Vollschritte / 400 Halbschritte pro Umdrehung, also jeweils 50 Positionen, die hinsichtlich Spannung/Strom nicht unterscheidbar sind.

    Oder ich verstehe nicht, was du meinst... Ich habe jedenfalls noch keinen Motor gesehen, der seine absolute Position anhand irgendwelcher Induktionsspannungen seiner eigenen Spulen bestimmt. Ich würde mich auch wundern, warum an jedem Servomotor ein Hallsensor mit aufwändiger Elektronik angebracht ist, der die Position liefert, wenn es doch auch ohne ginge. Wenn am Rotor irgendwas magnetisch assymetrisch wäre, könnte es vielleicht klappen. Dann hättest du in einer bestimmten Position eine andere Induktion in den Spulen als sonst. Das würde sich aber vermutlich auf die Gleichlaufeingenschaften des Motors auswirken, was vielleicht Probleme macht.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Das ist vollkommen richtig., Nur gibt es auch die Situation, wo der Controller mal Stromlos sein kann, und man damit die tatsächliche Position verliert. Dazu müsste man mit einer Bewegungsauslösung den Anker wieder einfangen um an einer Stelle X mit dem Zählen beginnen zu können.

    Das Problem haben Industrieroboterhersteller auch. Die verwenden Inkrementalgeber, um die relative Position zu erfassen und die absolute Position wird "Geteached" und Batterien puffern einen Mikrocontroller, der dann im ausgeschalteten Zustand des Controllers die Schritte zählt, wenn der Manipulator manuell bewegt wird.

    Anderes Beispiel. Wir vertreiben didaktische Systeme für Mechatroniker. Unter anderem auch ein kleines Hochregallager mit einer S7-1200. Die S7-1200 kann Schrittmotoren ansteuern. Die Schritte werden intern mitgezählt. Jedes Mal, nachdem das Hochregallager stromlos war, ist die Position undefiniert und das Hochregallager muss dann erst mal referenziert werden. Dazu fahren die beiden Achsen in eine fest definierte Richtung, kehren die Drehrichtung um, wenn der letzte Nockenschalter erreicht ist und fährt dann bis zum nächsten Nockenschalter, bis z.B. eine negative Flanke erkannt worden ist. Dann sind die X- und Y-Positionen referenziert.


    Das Problem mit Achsen, dessen Stellung unbekannt ist, ist ein alltägliches Problem. Du wirst zur Referenzierung mindestens einen Schalter benötigen, der von der Achse des Motors bei der gewünschten Stellung geschaltet wird. Das wäre dann deine absolute Position 0. Nach der Referenzierung kannst du dann ganz normal die Schritte zählen.

  • Wieviele Anschlussleitungen hat Dein Motor eigentlich ?

    Daraus kann man ableiten, wieviele Positionen man von „außen” unterscheiden kann.

    Dabei bleibt dann immer noch die Frage, welche Spule Du nach dem Einschalten des Prozessors zuerst mit einer Spannung beaufschlagen willst.

    Die nicht eingeschalteten Spulen liefern ja erst dann ein messbares Signal, wenn sich die Magnetfelder, in denen sie sich jeweils befinden, ändern.

    Um die Position eines solchen Motors zu erfassen, benötigt man entweder einen oder mehrere Sensoren, oder man lässt die ganze Mechanik nach dem Einschalten gegen einen oder beide Endanschläge laufen und zählt von da aus weiter.

    Edited once, last by Prittzl (July 9, 2023 at 12:58 AM).

  • Positionsbestimmung beim Antrieb eines Quatkopters?

    Ich bin mal gespannt, was bei diesem Thread auf Dauer rauskommt. Meiner Meinung nach kann das bei einem Schrittmotor nicht funktionieren.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Frequenz. Leistung. Drehzahl... mag alles sein. Aber die Rotorposition - das müsste mir mal einer genau erklären... Außerdem betreibt man die Rotoren eines Kopters wohl kaum mit Schrittmotoren - oder hab ich das falsch verstanden und es geht nicht um die Rotor-Antriebe?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Nicht mit Schrittmotoren. Mit BL-Motoren (Brushless- Motoren), wie ich geschrieben habe.

    Im Prinzip das gleiche wie ein Schrittmotor, allerdings mit 3 Schritten pro Umdrehung.

    Und damit ich weiß, wie die Magneten zum Rotor stehen, an welcher Position also meine Sinuswelle sein soll (ich weiß, es ist kein Sinus, sondern PWM, im Ergebnis aber das gleiche), messe ich auf der gerade nicht bestromten Spule die Gegen-EMK.

  • Und genau das ist das Problem. Wenn du nur drei Schritte hast, klappt das wunderbar. Ein BLDC ist aber kein Schrittmotor. Der Schrittmotor hat meist 4 Polungsschritte (kannst du auch mit 8 Halbschritten oder mehr Mikroschritten oder als Sinus abfahren) aber 200 Schritte pro Umdrehung. Also erhältst du an jeweils 50 Positionen die gleichen Ergebnisse bei der Induktionsmessung. Für den Schrittmotor musst du für die optimale Bestromung prinzipiell auch genau wissen, wo die Spule steht - aber dabei ist es egal, welche der 50 möglichen jeweils um 7,2° versetzten Spulenpositionen du hast.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ist doch egal ob 3 Schritte oder 200 Schritte. Der Schrittmotor dreht dementsprechend langsamer.

    Wenn der Quadrokopter 5 Minuten in der Luft ist macht der Motor vermutlich mehr "Schritte", als der Schrittmotor beim Antrieb von irgendwas.

    Dadurch, das der Motorregler sehr oft pro "Schritt" die freie Spule misst, geht kein Schritt verloren.

  • Ich bin nicht ganz sicher, wer hier nicht weiß, wovon er redet. Wenn es drum geht, mittels der Induktion festzustellen, ob ein Schritt verloren gegangen ist, mag das vielleicht gehen. Aber eine absolute Positionserkennung ist damit meiner Meinung nach nicht möglich.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • der betreffende Controller kennt die aktuelle Anker-Spulen Beziehung nicht.

    Dann ist die Datenübergabe nicht in Ordnung.

    Ein Schrittmotor mit Datenausgang ist so konstruiert, dass die aktuelle Position des Motors zum Nullpunkt jederzeit mit der Genauigkeit des Systems (Motor) ausgelesen werden kann.

    Was nicht ausgelesen werden kann, ist die absolute Position des Motors in seiner Umgebung, aber die innerhalb der 360°-Lage, welche die Motorachse einnehmen kann.

    Die Position anhand der Spulenlage zu bestimme sehen ich als seine sehr ungenaue Methode an, denn der Motor dreht sich normalerweise, und dann ist die exakte Lage nicht 'besonders gut' messtechnisch zu ermitteln.


    Ja, es gibt Schrittmotoren, bei denen die Position nur aus der Anzahl der dem Motor gegebenen schritte 'ermittelt' wird, hier besteht dann die Gefahr, dass, wenn der Motor schritte überspringt, die genaue Position nicht mehr genau feststellbar ist. Weshalb solche Motoren regelmäßig über definierte Nullpunkte kalibriert werden müssen.

    (Motoren bei Kranlauflaufkatzen zum Beispiel)

    Computer ..... grrrrrr

  • Gehen wir mal davon aus, das eine Spindel angetrieben wird:

    Natürlich muss ich ein mal einen Nullpunkt haben.

    Aber wenn ich dann jeden Schritt mehrmals überwache, dann kann die Spindel bis nach Pusemuckel gehen.

    Der Motortreiber bleibt ja so lange in dem Schritt, bis er die Rückmeldung von der freien Spule bekommen hat, das er zum nächsten Schritt springen kann.

  • Guten Morgen,

    ich denke mal es hat keinen Sinn hier das Thema weiter zu führen, weil es Mitglieder gibt, die ein allumfassendes Wissen ausströmen lassen, und dabei ihre Vorstellungen und Ansichten auf etwas projektieren, was so gar nicht vorliegt.
    Hier wird wieder ein wiederholte bekannter Vorgang , man zitiert Bruchstücke aus einem Satz und beginnt es frei zu interpretieren.

    Ich hatte eine Frage gestellt, nur wird wieder alles andere und darum herum diskutiert, ohne wirklich auf die Frage einzugehen. Scheinbar geht es hier vielen nur darum, irgendwelche Antworten zu platzieren um den eigenen Beitragsscoure in die Höhe zu heben, ohne wirklich Wissen, oder eine Information weiter geben zu wollen.

    Einfach nur schlimm.

    es grüßt euer
    Willy

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!