Forum: Analoge Elektronik und Schaltungstechnik Schrittmotor zuckt beim Wiedereinschalten


von Gerald M. (gerald_m17)


Lesenswert?

Hallo,
irgendwie verstehe ich nicht genau warum, aber ich habe einen 
Schrittmotor über einen Riemen an einer Spindel, welche eine ordentliche 
Selbshemmung hat, und der zuckt beim Einschalten.

Als Treiber nutze ich einen TMC2660 mit 256x Mikroschritte.

Der Motor selbst ist fast immer aus, deswegen schalte ich ihn stromlos. 
Wenn ich mit ihm wo hin fahren möchte, schalte ich den Strom an und gebe 
dem STM32 Timer (im Capture Compare Mode) entsprechend meiner Rampe 
entsprechend Werte.
Wenn ich stehe, deaktiviere ich den Timer und anschließend deaktiviere 
ich den Strom.
Das funktioniert auch korrekt, denn beim debuggen habe ich überprüft in 
welcher Mikrostepposition (0-1023) der Schrittmotortreiber ist. Beim 
Einschalten hat er den gleichen Wert wie den, den er beim Ausschalten 
hatte. Es werden also keine Pulse ausgeben während der Motortreiber aus 
ist (was meiner erste Vermutung war).

Dennoch ruckt der Motor einmal kurz wenn ich den Strom einschalte. Ich 
verstehe allerdings nicht warum. Das passiert auch beim allerersten Mal, 
wenn der Controler und die Treiber frisch eingeschaltet wurden. Das 
würde ja dafür sprechen, dass der Schrittmotor seine Position hält, und 
beim ersten einschalten passt der Strom (Position 0 --> 100% Strom durch 
Spule B) nicht mit der Position (zufällig vom letzten Mal).
Allerdings passiert das auch, wenn ich danach anhalte, und etwas später 
wieder weiterfahre. Hier reicht es einfach nur den Strom einzuschalten 
ohne Schritte auszugeben, damit der Ruck kommt. Da die Mikrostepposition 
im Treiber die gleiche ist, wie beim ausschalten, würde das dafür 
sprechen, dass der Schrittmotor in einen Vollschritt rutscht. Das 
wiederspricht aber der ersten Beobachtung, dass der Ruck auch beim 
frisch einschalten auftritt.

Jetzt sitze ich hier, und mir fällt keine Erklärung hierfür ein. Weiß 
jemand spontan etwas, oder wie ich diese Ruck wegbekomme? Hatte mir 
eigentlich relativ viel Mühe gegeben und die Beschleunigungsrampe zu 
programmieren, und nun kann ich das Teil ohne einen Ruck nicht einmal 
einschalten. Hin und wieder fährt er auch ohne Ruck an, habe allerdings 
noch nicht herausgefunden wann.

: Verschoben durch Moderator
von mechatroniker (Gast)


Lesenswert?

das Verhalten des Schrittmotors erklärt sich aus dem Wegschalten des 
Spulenstromes. Die Mechanik wird vom letzten Schritt noch etwas 
"verspannt" sein, aber ohne Strom kann der Motor nicht gegenhalten. Beim 
Wiedereinschalten holt er das dann nach.

von H. Eggert (Gast)


Lesenswert?

Das ist normal wenn die Spulenzustände vor dem Abschalten und dann 
wieder beim Neustart verschieden sind, weil der magnetisierte Rotor sich 
immer die passende magnetische Polarisation der Statorspulen sucht um 
sich eine NS Polarisation vom Magnetfeldpol der Statorspulen 
auszurichten. Wenn das passiert, dann ruckelt es beim Einschalten 
innerhalb eines Schrittes. Auch der plötzliche Stromstoß beim 
Einschalten trägt dazu bei.

Dieses Problem lässt sich vermeiden, wenn man vor dem Abschalten den 
Motor in eine definierte Position bringt die auch beim Neustart der 
Steuerelektronik angenommen wird. Dann dürfte nichts passieren.

Je nach Motortreiber könnte man auch mit einem DAC die 
Strombegrenzungsvergleichspannung langsam hochfahren, so daß kein 
Stromstoß entsteht. Bei Mikroschritt Treibern läßt sich Ähnlich 
vorgehen.

Solange es keine funktionelle Nachteile bringt, würde ich raten es zu 
ignorieren. Schadet ja ausser dem unschönen Klick nicht.

von Wolfgang (Gast)


Lesenswert?

Gerald M. schrieb:
> Da die Mikrostepposition im Treiber die gleiche ist, wie beim
> ausschalten, würde das dafür sprechen, dass der Schrittmotor in einen
> Vollschritt rutscht.

Was soll er im stromlosen Zustand sonst machen. Schon beim Ausschalten 
des Haltestromes wird er auf die nächste Rastposition rutschen und beim 
Einschalten zuckt er dann wieder auf die dem angelegten Strommuster 
entsprechende Position. Wenn du den Strom immer nur auf Rastpostionen 
abschaltest, wird der Effekt verschwinden, sofern der Motor nicht durch 
Verspannung in deiner Mechanik zusätzlich verdreht wird.

von Paul (Firma: None) (rettungssani)


Lesenswert?

Beim tmc2660 kannst du über spi den Strom einstellen. Nutz das doch 
einfach um einen hold und einen run Strom zu definieren. Wird bspw. Auch 
in Klipper, einer Software für 3D Drucker so gemacht. Damit hast du zwar 
nicht gar keinen Stromverbrauch, aber diesen etwas gesenkt.

Alternativ könntest du wenn ein 1,8° Stepper eingesetzt wird auch einen 
0,9° Stepper nehmen. Dann wäre der ruck kleiner, du könntest eine 128 
microstepping fahren und hättest damit auch noch mehr Drehmoment.

von Rüdiger B. (rbruns)


Lesenswert?

Du musst auf das Microstepping verzichten und eine entsprechende 
Untersetzung einbauen.

von Gerald M. (gerald_m17)


Lesenswert?

Noch etwas, was nicht so richtig in mein Bild passt:
Wenn ich den Strom anschalte kommt ja der Ruck. Wenn ich ihn dann aber 
wieder aus und wieder einschalte, gibt es keinen Ruck mehr, egal wie oft 
ich das mache.
Das würde doch dem entgegensprechen, dass der Motor in einen Vollschritt 
fällt wenn man den Strom ausschaltet. Ansonsten würde das auch beim 
zweiten Mal einschalten passieren.

von Thorsten S. (thosch)


Lesenswert?

Schrittmotoren schaltet man nicht aus, solange die Position relevant 
ist!
Man kann den Strom zu einem Haltestrom verringern, wie schon erwähnt 
wurde.

von Georg (Gast)


Lesenswert?

Eigentlich ganz einfach: ein stromloser Schrittmotor kennt überhaupt 
keine Mikroschritte. Nach dem Abschalten stellt er sich auf eine 
Vollschrittposition. Stellt der Treiber nach dem Wiedereinschalten eine 
Mikroschrittposition ein, ruckt er logischerweise dorthin.

Lösung: eigentlich keine. Man müsste den Motor vor dem Abschalten auf 
eine Vollschrittposition einstellen, aber das ist sicher nicht 
erwünscht, wenn Mikroschritte gebraucht werden.

Georg

von Gerald M. (gerald_m17)


Lesenswert?

Thorsten S. schrieb:
> Schrittmotoren schaltet man nicht aus, solange die Position relevant
> ist!
> Man kann den Strom zu einem Haltestrom verringern, wie schon erwähnt
> wurde.

Die Position ist mir relativ egal, da ich eh referenzieren kann. Das 
Teil ist aber 12h pro Tag an, und davon wird der Motor etwa 2 Minuten 
bewegt. Da macht ein Haltestrom einfach keinen Sinn.

Georg schrieb:
> Eigentlich ganz einfach: ein stromloser Schrittmotor kennt überhaupt
> keine Mikroschritte. Nach dem Abschalten stellt er sich auf eine
> Vollschrittposition. Stellt der Treiber nach dem Wiedereinschalten eine
> Mikroschrittposition ein, ruckt er logischerweise dorthin.

Warum zuckt er dann nur beim ersten mal Einschalten, wenn er in diese 
Position springt, und beim nächsten Mal einschalten zuckt er nicht, 
obwohl er auch wieder auf diese Mikroschrittposition hüpft?

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Gerald M. schrieb:
> Warum zuckt er dann nur beim ersten mal Einschalten, wenn er in diese
> Position springt, und beim nächsten Mal einschalten zuckt er nicht,
> obwohl er auch wieder auf diese Mikroschrittposition hüpft?

Deine Aussage genau genommen, zuckt er nur beim allerersten Mal und 
danach nie wieder ;-) Aber vermutlich zuckt er jedesmal, wenn die 
Mechanik wieder auf Vollschrittposition "vibriert" ist.

Wenn Dich das Geräusch stört, dann fahre den Motorstrom langsam (< 1 s ) 
hoch. Ansonsten nimm dieses Verhalten zur Kenntnis und fahre nach dem 
Einschalten eine Referenzposition an.

Gerald M. schrieb:
> Das
> Teil ist aber 12h pro Tag an, und davon wird der Motor etwa 2 Minuten
> bewegt. Da macht ein Haltestrom einfach keinen Sinn.

Was soll der Geiz? Im Ruhezustand ist ein Haltestom immer sinnvoll.

von Walter Tarpan (Gast)


Lesenswert?

Gerald M. schrieb:
> Das funktioniert auch korrekt, denn beim debuggen habe ich überprüft in
> welcher Mikrostepposition (0-1023) der Schrittmotortreiber ist. Beim
> Einschalten hat er den gleichen Wert wie den, den er beim Ausschalten
> hatte.

Er wird beim Einschalten nicht mehr in der gleichen Mikroschrittposition 
sein. Der Motor wird in die nächste Halbschrittposition eingerastet 
sein.

von Gerald M. (gerald_m17)


Lesenswert?

m.n. schrieb:
> Deine Aussage genau genommen, zuckt er nur beim allerersten Mal und
> danach nie wieder ;-) Aber vermutlich zuckt er jedesmal, wenn die
> Mechanik wieder auf Vollschrittposition "vibriert" ist.

Mit dem Text von zuvor sollte klar sein, dass der Unterschied von hier 
zum anderen Text ist, dass ich dazwischen nicht wo anders hin fahre. 
Aber ja, prinzipiell hast du Recht.

m.n. schrieb:
> Was soll der Geiz? Im Ruhezustand ist ein Haltestom immer sinnvoll.

Damit aber weniger, wenn man Aufwand und Ertrag anschaut.

Ich denke ich versuche mal was passiert, wenn ich vor dem Ausschalten 
die Richtung umdrehe und zurück auf die nächste Vollschrittposition 
fahre, damit ich auf Vollschrittposition bin und der Riemen etwas 
entspannt ist.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Gerald M. schrieb:
> Warum zuckt er dann nur beim ersten mal Einschalten, wenn er in diese
> Position springt, und beim nächsten Mal einschalten zuckt er nicht

Na, weil er dann schon in einer stabilen Rastposition ist. Da gibt es 
für ihn nichts mehr zu springen.

von Gerald M. (gerald_m17)


Lesenswert?

Irgend W. schrieb:
> Na, weil er dann schon in einer stabilen Rastposition ist. Da gibt es
> für ihn nichts mehr zu springen.

Er hüpft aber in die alte Mikrostepposition zurück wenn ich den Strom 
einschalte, also sollte er hüpfen.

von NichtWichtig (Gast)


Lesenswert?

Dann les das Datenblatt vom TMC was der beim Einschalten an seinen 
Ausgängen anstellt.

Ich setze einen 2208 ein und kann mich dunkel dran erinnern das da jede 
Menge Register zur was-auch-immer vorhanden sind.

In meiner Anwendung wird nur die PWM Frequenz angehoben und je nach 
Maschinenzustamd die Mircosteps (32 oder 256) verstellt. Alles andere 
ist default.

Der Klack beim Einschalten ist vorhanden und egal.

von Patrick (Gast)


Lesenswert?

Wenn er beim Wiedereinschalten zuckt und wenn du ihn danach direkt 
wieder aus und einschaltest, macht er keinen Mucks, dann liegt es daran, 
dass das erste einschalten ihn in die Startposition zieht, würde ich 
sagen. Passe deine Steuerung doch so an, dass das Abschalten mit genau 
der gleichen Ansteuerung (=Position) passiert, wie die Startposition. 
Oder du merkst dir die Ansteuerung beim Abschalten. Es kann aber auch 
sein, dass er sich über den Tag einfach verdreht, was er bei zweimal 
Einschalten kurz hintereinander nicht macht.

von Patrick (Gast)


Lesenswert?

Lesen müsste man können, das hast du ja schon gemacht. Dann vielleicht 
versuchen, bei einem "runden" Schritt aufzuhören?

von Gerald M. (gerald_m17)


Lesenswert?

Also, beim Einschalten des Treibers gibt dieser wieder die gleichen 
Ströme aus wie beim Ausschalten. AFAIK "merkt" er gar nicht, dass kein 
Strom fließt, denn es werden einfach nur die Mosfets deaktiviert.

Ich lasse den Motor jetzt immer an eine "Halbschrittposition" fahren, 
welche keine Vollschrittposition ist. Soweit ich verstanden habe, 
bedeutet ein Vollschritt immer, dass beide Spulen stromdurchflossen 
werden, so dass er genau zwischen zwei Ruhepositionen (entweder rastet 
er so, dass die Magnete sich an Spule A oder Spüle B anziehen) steht. 
Beim Halbschritt wird nur eine Spule durchflossen, so dass diese 
Position der Ruheposition entspricht.

Das funktioniert schon deutlich besser, hin und wieder habe ich noch 
einen kleineren Ruck, allerdings liegt das vermutlich an der Verzögerung 
zwischen Auslesen des Wertes und benutzen des Wertes (der Wert wird per 
DMA zyklisch mit etwa 30Hz ausgelesen), so dass es manchmal sein kann, 
dass ich schon an eine andere Position gefahren bin, da ich momentan mit 
1kHz den Takt zum Halbschritt ausgebe. Das ändere ich aber vermutlich 
noch.

von Wolfgang (Gast)


Lesenswert?

Gerald M. schrieb:
> (der Wert wird per DMA zyklisch mit etwa 30Hz ausgelesen)

Selbst ein Interrupt würde sich bei der Frequenz noch heftig langweilen. 
Oder hast du dich mit der Zehnerpotenz vertan?

von Gerald M. (gerald_m17)


Lesenswert?

Wolfgang schrieb:
> Oder hast du dich mit der Zehnerpotenz vertan?

Nein, der Wert wird eben mit den 30 Hertz ausgelesen. Es gibt aber 
mehrere Schrittmotortreiber und auch verschiedene Register die 
ausgelesen werden, so dass mehrere hundert Male pro Sekunde ein Wert 
ausgelesen wird.

Was allerdings der Geiz mit dem DMA soll, verstehe ich nicht. Was bringt 
es mir, wenn ich dieses angenehme Feature nicht nutze? Die Alternative 
wäre hier, anstatt den DMA wenig zu nutzen den DMA gar nicht zu nutzen. 
Wäre das dein Vorschlag? Wenn ja, was macht das besser?

von NichtWichtig (Gast)


Lesenswert?

Wozu liest man Werte aus wenn man eigentlich die Kontrolle ausserhalb 
hat?

Man sollte doch wissen wieviele Steps man dem Motor zum Zeitpunkt X 
gegeben hat.

von Gerald M. (gerald_m17)


Lesenswert?

NichtWichtig schrieb:
> Man sollte doch wissen wieviele Steps man dem Motor zum Zeitpunkt X
> gegeben hat.

Eine berechtigte Frage. Der Schrittmotor soll hauptsächlich eine 
konstante Geschwindigkeit erreichen, die genau Position ist mir nicht so 
wichtig.
Bei den Mikrosteps kommt einiges an Pulsen pro Sekunde zusammen, so dass 
das mitzählen im Interrupt nicht mehr wirklich funktioniert hat.
Deshalb zähle ich mit einem anderen Timer die Updatevents des 
Step-Timers, aber hier schleichen sich immer Mal wieder ein paar Events 
ein, wenn ich beispielsweise das Prescale Register ändere. Der macht 
nicht wirklich etwas aus, aber in der Summe passen sie Werte im Zähler 
und die Mikrosteps vom Treiber nicht 100% zusammen.

von NichtWichtig (Gast)


Lesenswert?

Klingt nach einem mangelhaften SDD.

https://de.wikipedia.org/wiki/Software_Design_Description

Mitzählen ist exakt ein Inkrement auf ein 32bit Variable.

Die STM32 sind doch durchaus in der Lage das noch in einer ISR zu 
machen.

von Gerald M. (gerald_m17)


Lesenswert?

NichtWichtig schrieb:
> Klingt nach einem mangelhaften SDD.
> https://de.wikipedia.org/wiki/Software_Design_Description
> Mitzählen ist exakt ein Inkrement auf ein 32bit Variable.

Oh man, hast du wenigstens Mal überschlagen wie viele Interrupts 6 U/s * 
200Steps/U * 256Microsteps/Steps sind? Hast du Mal überschlagen wieviele 
Cycles der Controller brauch um die Register zu sichern, um in einen 
Interrupt zu springen um eine Variable um eins zu implementieren? Das 
ganze für mehrere Motoren?

Allein in diesem Thema sind locker 3-4 Personen aus dem Nichts 
gekrochen, haben nichts beigetragen außer dass sie meinen es besser zu 
wissen, nur um anschließend eines besseren belehrt zu werden und sich 
dann nicht mehr melden?
Manchmal drängt sich gerade zu auf, dass jemand nicht einmal die Frage 
richtig verstanden hat, und dennoch meint er alle anderen seien zu blöd 
zum Atmen.

von Carsten-Peter C. (carsten-p)


Lesenswert?

Gerald M. schrieb:
> Oh man, hast du wenigstens Mal überschlagen wie viele Interrupts 6 U/s *
> 200Steps/U * 256Microsteps/Steps sind?

Hallo, hast Du mal andere Mikroschritte versucht? Meine Motore laufen am 
Ruhigsten mit 1/8 Steps. Angesteuert werden die über einen ATMega 1284P. 
Der wiederum bekommt sine Koordinaten über die serielle Schnittstelle 
und gibt Impulse sowie Richtungsbits an die beiden Motortreiber weiter. 
Die Motore schaffen zwar nicht die 6 U/s, aber es ist da noch jede Mange 
Luft nach oben. Das Programm habe ich in Assembler geschrieben. Ich 
bastele zur Zeit an Treibern für 5-Phasen Motore, weil ich keine 
günstigen gefunden habe, aber Zeitprobleme sehe ich da noch nicht.
Gruß Carsten

von NichtWichtig (Gast)


Lesenswert?

Gerald M. schrieb:
> NichtWichtig schrieb:
>> Klingt nach einem mangelhaften SDD.
>
> Allein in diesem Thema sind locker 3-4 Personen aus dem Nichts
> gekrochen, haben nichts beigetragen außer dass sie meinen es besser zu
> wissen, nur um anschließend eines besseren belehrt zu werden und sich
> dann nicht mehr melden?
> Manchmal drängt sich gerade zu auf, dass jemand nicht einmal die Frage
> richtig verstanden hat, und dennoch meint er alle anderen seien zu blöd
> zum Atmen.

Ein SDD, welches die Anforderungen berücksichtigt, hilft bei der 
Umsetzung.

Du hast keine Kontrolle über das was Dein(e) Motoren machen. Das ist 
nicht mein Fehler oder Problem.

von michael_ (Gast)


Lesenswert?

Vielleicht gibt es auch einen Schrittimpuls am Eingang.
Durch falschen Pull-Up o.ä.

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.