Forum: Mikrocontroller und Digitale Elektronik TMC222 Referenzfahrt


von Hannes R. (nightflyer502)


Lesenswert?

Hallo!

Ich bastle gerade an einer Zeitraffer-Kameraführung mit einem 
Schrittmotor.

Gesteuert soll das ganze über einen Mega32 und einem TMC222 Schrittmotor 
Controller werden.

Soweit habe ich den TMC222 denke ich schon verstanden.
Einzig mit der Referenzfahrt habe ich noch so meine Problemchen.

Mein Ziel ist es eine Referenzfahrt über eine "längere" Strecke 
durchzuführen,
bis jetzt bleibt mir der TMC222 aber nach ~32000 Schritten stehen.

Da meine Linearführung aber länger als 32000 Schritte ist, ist das nun 
ein wenig "dumm".

Meine einzige Idee wäre jetzt eine Art 
Move->Stop->ResetPosition->Move-Stop->ResetPosition
Sodaß man auch irgendwann am Referenzpunkt ankommt.

Meine Frage ist nun, gibt es eine elegantere Lösung zu meinem Problem 
oder muss ich das wohl so hinnehmen?

Vielen Dank im Voraus!

Hannes

von Steffen H. (avrsteffen)


Lesenswert?

Hannes Rosdfjkshj schrieb:
> Meine Frage ist nun, gibt es eine elegantere Lösung zu meinem Problem
> oder muss ich das wohl so hinnehmen?

Das musst du wohl so hin nehmen, da der TMC222 ja nur ein 
Positionsregister über 16Bit hat. Und als ich mit dem TMC222 
rumexperimentiert habe, hat das mit der Referenzfahrt irgendwie sowiso 
nicht hin gehauen.


Gruß Steffen

von Chris (Gast)


Lesenswert?

Du gibst eine SetPos for , und dann während der Fahrt noch eine, usw ..
Die aktuelle Pos kannst du ja auch immer abfragen.

von Hannes R. (nightflyer502)


Lesenswert?

Chris schrieb:
> Du gibst eine SetPos for , und dann während der Fahrt noch eine, usw ..
> Die aktuelle Pos kannst du ja auch immer abfragen.

Das frisst er leider nicht so, weil da müsste ich die Position wären dem 
Fahren auf Null setzen und dann den neuen Zielpunkt angeben, was der 
Controller aber auch nicht mag :-/

LG

von Chris (Gast)


Lesenswert?

Bei mir ist es problemlos gegangen. Ich habe dir die AN dafür 
rausgesucht:


1. Read ActPos using GetActualPos (TMC222: GetFullStatus2) command
2. Set lower 16 bits of [ActPos+32767] as the next target position using 
SetPosition command
For real continuous motion this sequence has to be repeated before the 
current target position
has been reached.

Weiterhin gibt es noch einen Trick mit RunInit . Dieser setzt ActPos auf
null und dann soll es

Jedenfalls stoppt der Controller nicht wenn man ihn eine neue Position 
mit
SetPosition gibt, immer während der motion.


Weiters: How to change velocity during emulated velocity mode?
Set AccShape=1. This prevents acceleration from Vmin to Vmax, velocity 
is at Vmin level all
the time. As Vmin is determined by both the Vmax index and the Vmin 
index much more
different velocities can be chosen from compared to only changing at 
Vmax level. To avoid
negative effects which can be caused by switching Vmin or Vmax group 
during a motion (see effects of changing Vmax…) the target position 
should always be far ahead of the actual position. This can be ensured 
by applying the velocity mode emulation command sequence (see velocity 
mode) as often as possible. In between of the velocity mode emulation
commands Vmin index and Vmax index can be switched to generate the 
desired velocity profile.
Please note: Set Acc=15 when simultaneously switching to another Vmax 
group and Vmin index
to avoid out-of-range intermediate velocities. When staying in the same 
Vmax group, lower Acc
values can be used to generate smoother velocity transitions. 
Background:
AccShape=1, the Acc parameter is effective for velocity changes 
resulting from Vmin changes
during a running motion.

von Hannes R. (nightflyer502)


Lesenswert?

Perfekt! Vielen vielen Dank für den Tipp!

Genau so funktioniert es jetzt!

LG

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.