Hallo,
habe ein Schrittmotor-IC TMC5072 von Trinamic welches ich über SPI
ansteuere
leider ist mir nicht ganz klar ob ich um z.B. das Register XACTUAL
auslesen zu können es periodisch z.B. im Interrupt lesen muss oder
reicht es aus es einmal zu lesen um dann fest zustellen das der Motor
die Position erreicht hat.
Aus dem Datenblatt werde ich nicht ganz schlau zu der Sache.
Die selbe Frage stellt sich mir mit Flags wie z.B. position_reached im
RAMP_STAT register.
Kennt sich einer mit den Trinamic Schrittmotor ICs aus?
Folgende Sequenz sende ich aktuell um eine Referenzfahrt durchzuführen
mit "Homing with stallGuard"
Der Motor fährt aber nicht an... ich denke es liegt am setzen von
sg_stop aber wie setzen ich es z.B. nachdem der Motor schon am fahren
ist wo von mache ich das abhänging?
Ich habe mal ein wenig mit dem TMC2130 gespielt bisher.
Zunächst muss der Strom dazu zumindest richtig eingestellt werden.
IHold 0 ist ok. IRun habe ich auf mindestens 20 gestellt. 7 klingt nach
sehr wenig. Ggf. würde ich das IHold auch mal auf 20 stellen und gucken
ob der Motor überhaupt angeht.
Auf der Homepage von Trinamic ist auch ne Excel-Datei mit der man die
Werte berechnen kann. Bei normalen Settings empfehlen die mindestens 16
als IHold.
Der Strom etc. ist richtig eingestellt denn der Motor verfährt wenn ich
den Befehl
1
writeDatagram(SWMODE_1,0,0,4,0);//sg_stop */
weg lasse, aber ich benötigen diesen Befehl um Stop on stallguard zu
aktivieren. So wie ich das verstanden habe muss dieser Befehl später
kommen wenn der Motor seine Endgeschwindigkeit erreicht hat.
Nur wie mache ich das über _dalay(..); geht es nicht.
Ich muss wohl die aktuelle Geschwindigkeit oder Position auslesen aber
muss ich dieses kontinuierlich machen oder reicht es einmal?
Der Stall-Guard ist recht tricky richtig einzustellen.
Ich habe dazu das SG im DRV_STATUS ausgelesen und geguckt wie ich den
genau einstellen muss. Weiß jetzt aber nicht mehr was ich genau gemacht
habe. Ist schon ein wenig her.
Im Datasheet unter Punkt 12.1 sollte das genauer beschrieben sein.
Nico W. schrieb:> Der Stall-Guard ist recht tricky richtig einzustellen.
ja das stimmt, aber das habe ich bereits hinbekommen
Nico W. schrieb:> Ich habe dazu das SG im DRV_STATUS ausgelesen und geguckt wie ich den> genau einstellen muss. Weiß jetzt aber nicht mehr was ich genau gemacht> habe. Ist schon ein wenig her.
Hast du das Register ständing ausgelesen (polling?)
Larry schrieb:> Hast du das Register ständing ausgelesen (polling?)
Ganz klar nein.
Ich steuer meine Motoren aber nur über Step/Dir.
Afaik muss man einen bestimmten SG-Wert einstellen, der mindestens oder
maximal erreicht werden darf, damit der StallGuard überhaupt reagieren
darf. Wenn der zu klein/groß/falsch ist, läuft der Motor gar nicht an.
Nico W. schrieb:> Ganz klar nein.> Ich steuer meine Motoren aber nur über Step/Dir.
bei mir läuft es über SPI. Daher denke ich das ich in regelmäßigen
abständen auslesen muss ..
Nico W. schrieb:> Afaik muss man einen bestimmten SG-Wert einstellen, der mindestens oder> maximal erreicht werden darf, damit der StallGuard überhaupt reagieren> darf. Wenn der zu klein/groß/falsch ist, läuft der Motor gar nicht an.
Der Motor fährt ja an wenn ich sg_stop nicht setzte....daher ist der
SG-Wert schon richtig gesetzt... nur hält er ja nicht an wenn er am
Anschlag ankommt dafür muss sg_stop gesetzt sein....nur kann ich das
erst setzten wenn der motor schon in fahrt ist und die
Sollgeschwindigkeit erreicht hat...mache ich es sofort fährt er erst gar
nicht los...daher wollte ich den status bzw. die aktuelle position oder
Geschwindigkeit auslesen und dann davon abhänging sg_stop erst
setzten........
Jemand ne Idee?
Es gibt da noch mehr Werte die richtig eingestellt werden müssen als nur
das SG_stop. Ist auch egal ob der Motor über SPI oder Step/Dir läuft. Er
muss eine Mindestgeschwindigkeit haben. Und die muss man über einen
etwas veränderten SG-Wert einbauen irgendwo. Hatte afaik auch was mit
der Frequenz zu tun mit der der IC läuft.
Wie auch immer. Sollte das alles nicht zum Ziel führen hast du doch auch
schon eben die Lösung beschrieben.
Geschwindigkeit auslesen und ab einer bestimmten Geschwindigkeit das
sg_stop setzen.