Problem Spindelservo und Verzweiflung macht sich breit :(
- WKS-3D
- Offline
- Premium Member
- Posts: 92
- Thank you received: 13
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:
Please Log in or Create an account to join the conversation.
- Aciera
- Offline
- Administrator
- Posts: 3958
- Thank you received: 1714
Warum möchtest du Spindelorientierung an einer Drehmaschine? Zum Gewinde drehen brauchst du keine Spindelorientierung dazu brauchst du nur einen Encoder mit Indexsignal.aber ich bekomme keine Spindelorientierung hin also zB. "M19 R180", dass heißt für mich, auch Gewindedrehen wird nicht klappen
Please Log in or Create an account to join the conversation.
- WKS-3D
- Offline
- Premium Member
- Posts: 92
- Thank you received: 13
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.
- Aciera
- Offline
- Administrator
- Posts: 3958
- Thank you received: 1714
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.
Ja, das ist so richtig.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.
- WKS-3D
- Offline
- Premium Member
- Posts: 92
- Thank you received: 13
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
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.
- Aciera
- Offline
- Administrator
- Posts: 3958
- Thank you received: 1714
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.
- WKS-3D
- Offline
- Premium Member
- Posts: 92
- Thank you received: 13
Please Log in or Create an account to join the conversation.
- Aciera
- Offline
- Administrator
- Posts: 3958
- Thank you received: 1714
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.Dann komme ich zum nächsten auf der ToDo Liste, Werkzeugrevolver drehen in Verbindung mit Pneumatikventil schalten.
Please Log in or Create an account to join the conversation.
- WKS-3D
- Offline
- Premium Member
- Posts: 92
- Thank you received: 13
Please Log in or Create an account to join the conversation.