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
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.
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.
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.
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.
Du musst auf das Microstepping verzichten und eine entsprechende Untersetzung einbauen.
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.
Schrittmotoren schaltet man nicht aus, solange die Position relevant ist! Man kann den Strom zu einem Haltestrom verringern, wie schon erwähnt wurde.
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
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
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.
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.
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.
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.
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.
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.
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.
Lesen müsste man können, das hast du ja schon gemacht. Dann vielleicht versuchen, bei einem "runden" Schritt aufzuhören?
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.
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?
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?
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.
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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.