Problem Spindelservo und Verzweiflung macht sich breit :(

More
14 Jul 2024 10:46 - 14 Jul 2024 10:50 #305128 by WKS-3D
Hallo Gemeinde,
ich stecke noch voll in meinem Drehmaschinenprojekt fest und komme mit dem Spindelservo nicht weiter.
Drehzahl funktioniert, aber ich bekomme keine Spindelorientierung hin also zB. "M19 R180", dass heißt für mich, auch Gewindedrehen wird nicht klappen. Da das ganze unter LinuxCNC läuft und völliges Neuland für mich ist, muss ich mir mehr oder weniger alles zusammenkopieren und anpassen.
Der Servotreiber ist ein "JASD15002-20B" und der Motor ist ein "80JASM510230K-M23B-T"
Mesakarten sind eine 7i92TM-->7i76-->7i85 mit passendem Bitfile.

Vorlage für die Spindel habe ich von Talla83:

(6) LinuxCNC & Mesa 7i76e - Step/dir - Spindel mit Orientierung z.B. für Werkzeugwechsel - YouTube

Ich weiß nicht woran es liegt das es nicht funktioniert, liegt es an der Verkabelung oder an der HAL oder den Parametern des Servotreibers.
 

Belegung 7i76
 

Hier der Auszug aus der HAL-Datei:

#*******************
# SPINDEL
#*******************

setp hm2_7i92.0.encoder.05.counter-mode 0
setp hm2_7i92.0.encoder.05.filter 1
setp hm2_7i92.0.encoder.05.index-invert 0
setp hm2_7i92.0.encoder.05.index-mask 0
setp hm2_7i92.0.encoder.05.index-mask-invert 0
setp hm2_7i92.0.encoder.05.scale [SPINDLE_0]ENCODER_SCALE


setp hm2_7i92.0.stepgen.04.dirsetup [SPINDLE_0]DIRSETUP
setp hm2_7i92.0.stepgen.04.dirhold [SPINDLE_0]DIRHOLD
setp hm2_7i92.0.stepgen.04.steplen [SPINDLE_0]STEPLEN
setp hm2_7i92.0.stepgen.04.stepspace [SPINDLE_0]STEPSPACE
setp hm2_7i92.0.stepgen.04.position-scale [SPINDLE_0]OUTPUT_SCALE
setp hm2_7i92.0.stepgen.04.step_type 0
setp hm2_7i92.0.stepgen.04.control-type 1
setp hm2_7i92.0.stepgen.04.maxaccel [SPINDLE_0]STEPGEN_MAXACCEL
setp hm2_7i92.0.stepgen.04.maxvel [SPINDLE_0]STEPGEN_MAXVEL


#loadrt pid names=pid.s
loadrt limit2 names=spindle-ramp
loadrt near names=spindle-at-speed,spindle-at-pos
loadrt timedelay names=spindle-active-delay

loadrt mux2 names=spindle-out-switch
loadrt or2 count=1
loadrt not count=2
loadrt and2 count=1
loadrt mult2 count=2
loadrt offset count=1
loadrt invert count=1
loadrt tristate_bit count=1
loadrt oneshot count=1

#addf pid.s.do-pid-calcs servo-thread
addf spindle-ramp servo-thread
addf spindle-at-speed servo-thread
addf spindle-at-pos servo-thread
addf spindle-active-delay servo-thread

addf spindle-out-switch servo-thread
addf or2.0 servo-thread
addf not.0 servo-thread
addf not.1 servo-thread
addf and2.0 servo-thread
addf mult2.0 servo-thread
addf mult2.1 servo-thread
addf offset.0.update-output servo-thread
addf invert.0 servo-thread
addf tristate-bit.0 servo-thread
addf oneshot.0 servo-thread

setp pid.s.Pgain [SPINDLE_0]P
setp pid.s.Igain [SPINDLE_0]I
setp pid.s.Dgain [SPINDLE_0]D
setp pid.s.bias [SPINDLE_0]BIAS
setp pid.s.FF0 [SPINDLE_0]FF0
setp pid.s.FF1 [SPINDLE_0]FF1
setp pid.s.FF2 [SPINDLE_0]FF2
setp pid.s.deadband [SPINDLE_0]DEADBAND
setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true

setp spindle-ramp.maxv [SPINDLE_0]ACCELERATION
setp spindle-at-speed.difference [SPINDLE_0]MAX_ERROR
setp spindle-at-pos.difference 0.01
setp spindle-at-pos.in1 0
setp spindle-active-delay.on-delay 0
setp spindle-active-delay.off-delay [SPINDLE_0]OFF_DELAY
setp oneshot.0.width 0.1
setp offset.0.offset [SPINDLE_0]POS_OFFSET
setp invert.0.in 360
setp tristate-bit.0.in 1

# Winkelvorgabe zur Orientierung
net orient-angle0 spindle.0.orient-angle => mult2.0.in0
net orient-angle1 invert.0.out => mult2.0.in1
net orient-enable spindle.0.orient => and2.0.in1
# Position vom Encoder
net spindle-pos spindle.0.revs <= hm2_7i92.0.encoder.05.position => pid.s.feedback
# Encodergeschwindigkeit U/sek in den near und spindle schieben
net spindle-fb-rps spindle.0.speed-in <= hm2_7i92.0.encoder.05.velocity => spindle-at-speed.in2
# Positionsvorgabe vom orient in den pid schieben
net spindle.otient-cmd mult2.0.out => offset.0.in
net spindle-orient-cmd1 offset.0.out => pid.s.command
# Drehzahlvorgabe U/min aus spindle in das limit2 schieben
net spindle-speed-rpm spindle.0.speed-out => spindle-ramp.in
# Drehzahlvorgabe U/sek aus spindle in das near schieben
net spindle-speed-rps spindle.0.speed-out-rps => spindle-at-speed.in1
# Wenn Solldrehzahl gleich Istdrehzahl dann aus near das bit ......
net spindle-at-speed spindle-at-speed.out => spindle.0.at-speed
# Wenn Sollpositon gleich Istpositon dann aus near das bit .....
net spindle-pos-err spindle-at-pos.in2 <= pid.s.error
net spindle-at-pos spindle-at-pos.out =>
net spindle-on0 spindle.0.on => spindle-active-delay.in
net spindel-on1 spindle-active-delay.out => or2.0.in0 => not.0.in
net spindel-on2 and2.0.in0 <= not.0.out
# pid aktivieren
net orient-active and2.0.out => or2.0.in1 => spindle-out-switch.sel => pid.s.enable
net spindle-enable or2.0.out => hm2_7i92.0.stepgen.04.enable
# Signal an Encoder das beim naechsten Z Signal auf 0 gestellt werden soll
net spindle-sync spindle.0.index-enable => hm2_7i92.0.encoder.05.index-enable => tristate-bit.0.out
net orient-active => oneshot.0.in
net testeee oneshot.0.out <= tristate-bit.0.enable
sets spindle-sync 1
# Drehzahlsignal Weiche
net out-switch-in0 spindle-out-switch.in0 <= spindle-ramp.out
net out-switch-in1 spindle-out-switch.in1 <= pid.s.output
net out-switch-out spindle-out-switch.out => hm2_7i92.0.stepgen.04.velocity-cmd

# Spindelmodus Drehzal / Position
#
loadrt comp names=spindle.0.mode.1
addf spindle.0.mode.1 servo-thread

setp spindle.0.mode.1.hyst 250
setp spindle.0.mode.1.in0 [SPINDLE_0]MODE_VEL

#Umrechnen von Sekunde auf 1/min
#
setp mult2.1.in0 60
net spindle-vel-cmd-rpm-abs mult2.1.out => spindle.0.mode.1.in1
net spindle-fb-rps => mult2.1.in1

net vel-mode-1 spindle.0.mode.1.out => hm2_7i92.0.7i76.0.0.output-04 #hier weiss ich nicht wo am Servo anschließen
net vel-mode-1 not.1.in
net vel-mode-2 not.1.out => hm2_7i92.0.7i76.0.0.output-05 #hier weiss ich nicht wo am Servo anschließen

#

und hier der Teil in der INI-Datei:


[SPINDLE_0]

# PID zur Spindelorientierung

P = 500
I = 0
D = 0
FF0 = 0
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0.001
MAX_OUTPUT = 50

# Stepgeneratoreinstellungen

DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEPGEN_MAXVEL = 3000
STEPGEN_MAXACCEL = 5000

# Sonstiges

ENCODER_SCALE = 10000
ACCELERATION = 1000
MAX_ERROR = 0.2
OFF_DELAY = 1.5

OUTPUT_SCALE = 166.0667
# Berechnung: 10000 / 60 = 166.06666667 (Endocer Impulse pro Umdrehung durch 60 = Impulse pro Sekunde Output Scale)

POS_OFFSET = 1
# Positionsoffset 1 + X.XX **** Wert darf nicht kleine 1 sein! ****

MODE_VEL = 1000
# Ab welcher Drehzahl Drehzahl/Positionsmode

Wäre super wenn mir jemand helfen könnte, denn so langsam aber sicher bereue ich den Schritt zu LinuxCNC.

Danke und Gruß
Olli
Attachments:
Last edit: 14 Jul 2024 10:50 by WKS-3D.

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 11:24 #305130 by Aciera

aber ich bekomme keine Spindelorientierung hin also zB. "M19 R180", dass heißt für mich, auch Gewindedrehen wird nicht klappen

Warum möchtest du Spindelorientierung an einer Drehmaschine? Zum Gewinde drehen brauchst du keine Spindelorientierung dazu brauchst du nur einen Encoder mit Indexsignal.

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 11:40 #305132 by WKS-3D

aber ich bekomme keine Spindelorientierung hin also zB. "M19 R180", dass heißt für mich, auch Gewindedrehen wird nicht klappen
Warum möchtest du Spindelorientierung an einer Drehmaschine? Zum Gewinde drehen brauchst du keine Spindelorientierung dazu brauchst du nur einen Encoder mit Indexsignal.


So war halt mein 1. Gedanke, wenn das nicht funktioniert wird das mit dem Gewinde auch nicht funktionieren, aber mit der Orientierung ist auch an einer Drehmaschine hilfreich zB. dass man den Futterschlüssel immer an der gleichen Stelle einstecken kann ;)

Da wir aber gerade bei Indexsignal sind, an dem Servotreiber gibt es Ausgänge A, B und Z.
A und B konnte ich auf der 7i76 leicht zuordnen, aber das Z-Signal habe ich dann an IDX+ und IDX- angeschlossen, ich weiß nicht ob das richtig ist

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 12:07 #305134 by Aciera

So war halt mein 1. Gedanke, wenn das nicht funktioniert wird das mit dem Gewinde auch nicht funktionieren, aber mit der Orientierung ist auch an einer Drehmaschine hilfreich zB. dass man den Futterschlüssel immer an der gleichen Stelle einstecken kann ;)


Schon klar. Ich sehe auch keinen Grund warum du das nicht auch irgenwann hinbekommen solltest, Spindelorientierung ist nun halt mal nicht die einfachste Sache, speziell für Neueinsteiger. Nur kann ja wohl nicht von Verzweiflung die Rede sein nur weil du den Drehfutterschlüssel nicht immer an der gleichen Stelle ansetzen kannst.
An deiner Stelle würde ich das Thema Spindelorientierung erstmal beiseite legen und alles andere zum Laufen bekommen. Wenn du dich dann etwas mehr in LinuxCNC und HAL eingearbeitet hast kannst du dich immernoch um solche Luxusprobleme kümmern.

aber das Z-Signal habe ich dann an IDX+ und IDX- angeschlossen, ich weiß nicht ob das richtig ist

Ja, das ist so richtig.

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 12:21 #305135 by WKS-3D

So war halt mein 1. Gedanke, wenn das nicht funktioniert wird das mit dem Gewinde auch nicht funktionieren, aber mit der Orientierung ist auch an einer Drehmaschine hilfreich zB. dass man den Futterschlüssel immer an der gleichen Stelle einstecken kann ;)


Schon klar. Ich sehe auch keinen Grund warum du das nicht auch irgenwann hinbekommen solltest, Spindelorientierung ist nun halt mal nicht die einfachste Sache, speziell für Neueinsteiger. Nur kann ja wohl nicht von Verzweiflung die Rede sein nur weil du den Drehfutterschlüssel nicht immer an der gleichen Stelle ansetzen kannst.
An deiner Stelle würde ich das Thema Spindelorientierung erstmal beiseite legen und alles andere zum Laufen bekommen. Wenn du dich dann etwas mehr in LinuxCNC und HAL eingearbeitet hast kannst du dich immernoch um solche Luxusprobleme kümmern.

aber das Z-Signal habe ich dann an IDX+ und IDX- angeschlossen, ich weiß nicht ob das richtig ist

Ja, das ist so richtig.


Ok, wenn das eine nichts mit dem anderen zu tun hat, dann ist es in der Tat ein Luxusproblem und kann auch später gelöst werden.
Wäre nur schön gewesen, wenn ich das hätte vorab lösen können, wenn der ganze Kram noch hier bei mir auf dem Schreibtisch liegt :D

Dann komme ich zum nächsten auf der ToDo Liste, Werkzeugrevolver drehen in Verbindung mit Pneumatikventil schalten.
Das muss zuerst auf dem Schreibtisch funktionieren, weil ich mir bei Fehlern den Revolver beschädige.

Gibt es dazu irgendwelche hilfreiche Seiten im Netz? Bisher habe ich nicht viel dazu gefunden oder das Ergebnis wurde leider nicht veröffentlicht.

Danke und Gruß
Olli

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 12:25 #305136 by Aciera
Zu deinem Orientierungsproblem, was ist denn das hier für eine hal komponente:
loadrt comp names=spindle.0.mode.1

Kannst du die anhängen oder sagt der talla83 dazu etwas?

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 12:44 #305138 by WKS-3D
Das ist zum umschalten zwischen Velocity und Position Mode, weil der Encoder ab einer bestimmten Drehzahl nicht mehr mitkommt, allerdings weiß ich nicht wo ich das beim Servotreiber anschließen soll, da ist ein "Control mode switching input" aber das ist nur ein Eingang, ich bräuchte aber zwei. Talla habe ich schon gefragt, leider bisher noch keine Antwort

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 12:57 #305144 by Aciera

Dann komme ich zum nächsten auf der ToDo Liste, Werkzeugrevolver drehen in Verbindung mit Pneumatikventil schalten.

Dazu würde ich ein neues Thema aufmachen und erstmal den Werkzeugwechsler beschreiben. Also Art des Antriebes, ob Sensoren eingebaut sind und wenn ja wofür, Art der Verriegelung. 
The following user(s) said Thank You: tommylight

Please Log in or Create an account to join the conversation.

More
14 Jul 2024 13:07 #305147 by WKS-3D
Ja danke, mach ich :)

Please Log in or Create an account to join the conversation.

Time to create page: 0.159 seconds
Powered by Kunena Forum