TMC5072 SPI Ansteuerung

Gast #4900980
Lesenswert?

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"
1
writeDatagram(CHOPCONF_1 , 0, 1, 1, 213); //TOFF: 5, HSTRT: 5, HEND: 3, TBL: 2
2
writeDatagram(IHOLD_IRUN_1 , 0, 7, 2, 0);
3
writeInt(VHIGH_1, 256);
4
writeInt(VCOOLTHRS_1, 256);
5
writeDatagram(PWMCONF_1,0,20,4,0);//PWM_GRAD: 4, pwm_autoscale: 1, FREEWHEEL: 1
6
writeDatagram(RAMPMODE_1, 0, 0, 0, MODE_VELPOS);  
7
writeInt(AMAX_1, 40000);
8
writeInt(VMAX_1, 80000);
9
writeDatagram(COOLCONF_1, 0, 0, 25, 0);  //SGT +25  
10
writeDatagram(SWMODE_1, 0, 0, 4, 0); //sg_stop  */


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?
Angehängte Dateien:
#4901680
Lesenswert?

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.
Gast #4901785
Lesenswert?

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?
#4902455
Lesenswert?

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.
Gast #4903121
Lesenswert?

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?)
#4903169
Lesenswert?

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.
Gast #4903629
Lesenswert?

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?
#4903655
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren