G97 and encoder feedback
- PaulQUE
- Offline
- Senior Member
Less
More
- Posts: 53
- Thank you received: 1
13 Nov 2021 13:56 - 13 Nov 2021 14:05 #226320
by PaulQUE
G97 and encoder feedback was created by PaulQUE
Hi,
After finally getting the toolchanger to work on my emco compact 5 PC, I'm trying some first cuts. I use Fusion 360 for CAM. The post processor uses spindle control mode with G97. the lathe is equipped with a fixed speed single phase motor, and speed change is done with belt ratios. There is a physical switch to turn it on, and a 100ppr sensor for rpm feedback.
here are the first few commands
G7
G18
G90
G21
G53 X0
G53 Z0
T1 M6
G54
G97 S2000 M3
G95
G90 G0 X27.89 Z0
G1 Z-1.129 F0.01
after setting the first tool, the lathes freezes up at the feed command "G1 Z-1 F0.01"
I suspect linux cnc is just waiting for the spindle to turn but does not see it. Or can't I use G97 because M3 won't do anything since I do not have the motor hooked up to linuxcnc?
In the halshow, velocity and velocity-rpm are properly displaying the spindle speed
here is my setup for the encoder:
# Généré par PNCconf le Wed Oct 20 22:33:22 2021
# Using LinuxCNC version: 2.8
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=0xxxxx"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,
loadrt toolchanger
addf [HMOT](CARD0).read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf [HMOT](CARD0).write servo-thread
addf toolchanger servo-thread
# external input signals
setp hm2_7i96.0.encoder.00.counter-mode TRUE
setp hm2_7i96.0.encoder.00.scale 100
setp hm2_7i96.0.encoder.00.filter TRUE
setp hm2_7i96.0.encoder.00.index-invert 0
setp hm2_7i96.0.encoder.00.index-mask 0
setp hm2_7i96.0.encoder.00.index-mask-invert 0
net spindle-revs [HMOT](CARD0).encoder.00.position
net spindle-vel-fb-rps [HMOT](CARD0).encoder.00.velocity
net spindle-index-enable [HMOT](CARD0).encoder.00.index-enable
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.012700
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.00.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.00.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.00.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.00.step_type 0
setp [HMOT](CARD0).stepgen.00.control-type 1
setp [HMOT](CARD0).stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output <= [HMOT](CARD0).stepgen.00.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.00.enable
# ---setup home / limit switch signals---
net x-home-sw => joint.0.home-sw-in
net x-neg-limit => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in
#*******************
# AXIS Z JOINT 1
#*******************
setp pid.z.Pgain [JOINT_1]P
setp pid.z.Igain [JOINT_1]I
setp pid.z.Dgain [JOINT_1]D
setp pid.z.bias [JOINT_1]BIAS
setp pid.z.FF0 [JOINT_1]FF0
setp pid.z.FF1 [JOINT_1]FF1
setp pid.z.FF2 [JOINT_1]FF2
setp pid.z.deadband [JOINT_1]DEADBAND
setp pid.z.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.1.motor-pos-cmd
net z-vel-cmd <= joint.1.vel-cmd
net z-output <= [HMOT](CARD0).stepgen.01.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net z-pos-fb => joint.1.motor-pos-fb
net z-enable <= joint.1.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net z-home-sw => joint.1.home-sw-in
net z-neg-limit => joint.1.neg-lim-sw-in
net z-pos-limit => joint.1.pos-lim-sw-in
#*******************
# AXIS S ATC
#*******************
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.02.dirsetup [AXIS_2]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [AXIS_2]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [AXIS_2]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [AXIS_2]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [AXIS_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 0
setp [HMOT](CARD0).stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net s-pos-cmd [HMOT](CARD0).stepgen.02.position-cmd
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-enable <= joint.2.amp-enable-out
net s-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net s-home-sw => joint.2.home-sw-in
net s-neg-limit => joint.2.neg-lim-sw-in
net s-pos-limit => joint.2.pos-lim-sw-in
#******************************
#connections de signaux divers
#******************************
# ---signaux HALUI---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.1.is-homed
net s-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---signaux d'arrosage---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---signal de sonde---
net probe-in => motion.probe-input
# ---signaux contrôle mouvement---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---signaux entrée / sortie numérique---
# ---signaux d'A/U---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---signaux changeur manuel d'outil--
net tool-change iocontrol.0.tool-change => toolchanger.toolchange
net tool-changed iocontrol.0.tool-changed <= toolchanger.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolchanger.toolnumber
net tool-oldnumber iocontrol.0.tool-number => toolchanger.currenttoolnumber
net s-pos-cmd toolchanger.position-cmd
net s-is-homed halui.joint.2.is-homed => toolchanger.ishomed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
thanks for the assistance, paul
After finally getting the toolchanger to work on my emco compact 5 PC, I'm trying some first cuts. I use Fusion 360 for CAM. The post processor uses spindle control mode with G97. the lathe is equipped with a fixed speed single phase motor, and speed change is done with belt ratios. There is a physical switch to turn it on, and a 100ppr sensor for rpm feedback.
here are the first few commands
G7
G18
G90
G21
G53 X0
G53 Z0
T1 M6
G54
G97 S2000 M3
G95
G90 G0 X27.89 Z0
G1 Z-1.129 F0.01
after setting the first tool, the lathes freezes up at the feed command "G1 Z-1 F0.01"
I suspect linux cnc is just waiting for the spindle to turn but does not see it. Or can't I use G97 because M3 won't do anything since I do not have the motor hooked up to linuxcnc?
In the halshow, velocity and velocity-rpm are properly displaying the spindle speed
here is my setup for the encoder:
# Généré par PNCconf le Wed Oct 20 22:33:22 2021
# Using LinuxCNC version: 2.8
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=0xxxxx"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,
loadrt toolchanger
addf [HMOT](CARD0).read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf [HMOT](CARD0).write servo-thread
addf toolchanger servo-thread
# external input signals
setp hm2_7i96.0.encoder.00.counter-mode TRUE
setp hm2_7i96.0.encoder.00.scale 100
setp hm2_7i96.0.encoder.00.filter TRUE
setp hm2_7i96.0.encoder.00.index-invert 0
setp hm2_7i96.0.encoder.00.index-mask 0
setp hm2_7i96.0.encoder.00.index-mask-invert 0
net spindle-revs [HMOT](CARD0).encoder.00.position
net spindle-vel-fb-rps [HMOT](CARD0).encoder.00.velocity
net spindle-index-enable [HMOT](CARD0).encoder.00.index-enable
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.012700
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.00.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.00.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.00.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.00.step_type 0
setp [HMOT](CARD0).stepgen.00.control-type 1
setp [HMOT](CARD0).stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output <= [HMOT](CARD0).stepgen.00.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.00.enable
# ---setup home / limit switch signals---
net x-home-sw => joint.0.home-sw-in
net x-neg-limit => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in
#*******************
# AXIS Z JOINT 1
#*******************
setp pid.z.Pgain [JOINT_1]P
setp pid.z.Igain [JOINT_1]I
setp pid.z.Dgain [JOINT_1]D
setp pid.z.bias [JOINT_1]BIAS
setp pid.z.FF0 [JOINT_1]FF0
setp pid.z.FF1 [JOINT_1]FF1
setp pid.z.FF2 [JOINT_1]FF2
setp pid.z.deadband [JOINT_1]DEADBAND
setp pid.z.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.1.motor-pos-cmd
net z-vel-cmd <= joint.1.vel-cmd
net z-output <= [HMOT](CARD0).stepgen.01.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net z-pos-fb => joint.1.motor-pos-fb
net z-enable <= joint.1.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net z-home-sw => joint.1.home-sw-in
net z-neg-limit => joint.1.neg-lim-sw-in
net z-pos-limit => joint.1.pos-lim-sw-in
#*******************
# AXIS S ATC
#*******************
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.02.dirsetup [AXIS_2]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [AXIS_2]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [AXIS_2]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [AXIS_2]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [AXIS_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 0
setp [HMOT](CARD0).stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net s-pos-cmd [HMOT](CARD0).stepgen.02.position-cmd
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-enable <= joint.2.amp-enable-out
net s-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net s-home-sw => joint.2.home-sw-in
net s-neg-limit => joint.2.neg-lim-sw-in
net s-pos-limit => joint.2.pos-lim-sw-in
#******************************
#connections de signaux divers
#******************************
# ---signaux HALUI---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.1.is-homed
net s-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---signaux d'arrosage---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---signal de sonde---
net probe-in => motion.probe-input
# ---signaux contrôle mouvement---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---signaux entrée / sortie numérique---
# ---signaux d'A/U---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---signaux changeur manuel d'outil--
net tool-change iocontrol.0.tool-change => toolchanger.toolchange
net tool-changed iocontrol.0.tool-changed <= toolchanger.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolchanger.toolnumber
net tool-oldnumber iocontrol.0.tool-number => toolchanger.currenttoolnumber
net s-pos-cmd toolchanger.position-cmd
net s-is-homed halui.joint.2.is-homed => toolchanger.ishomed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
thanks for the assistance, paul
Last edit: 13 Nov 2021 14:05 by PaulQUE.
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17973
- Thank you received: 4830
13 Nov 2021 17:57 #226339
by PCW
Replied by PCW on topic G97 and encoder feedback
My first guess is that the spindle count is backwards (does not increase by one each turn)
If it is backwards, you would fix it by changing the encoder scale from 100 to -100
If it is backwards, you would fix it by changing the encoder scale from 100 to -100
Please Log in or Create an account to join the conversation.
- PaulQUE
- Offline
- Senior Member
Less
More
- Posts: 53
- Thank you received: 1
13 Nov 2021 18:07 #226341
by PaulQUE
Replied by PaulQUE on topic G97 and encoder feedback
thanks, just gave that a try, it didn't do much, G97 and M3 are highlighted red in Gmoccapy, is there something I should understand?
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17973
- Thank you received: 4830
13 Nov 2021 18:45 - 13 Nov 2021 20:17 #226345
by PCW
Replied by PCW on topic G97 and encoder feedback
Another possibility is that spindle.0.at-speed is not true
I don't see anywhere in your hal file where this is set
I don't see anywhere in your hal file where this is set
Last edit: 13 Nov 2021 20:17 by PCW.
Please Log in or Create an account to join the conversation.
- PaulQUE
- Offline
- Senior Member
Less
More
- Posts: 53
- Thank you received: 1
13 Nov 2021 18:53 #226346
by PaulQUE
Replied by PaulQUE on topic G97 and encoder feedback
I have not included this line, could you enlight me on how to set this up?
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17973
- Thank you received: 4830
13 Nov 2021 20:16 - 13 Nov 2021 20:16 #226358
by PCW
Replied by PCW on topic G97 and encoder feedback
The simplest way is to just:
setp spindle.0.at-speed true
Ignoring the actual spindle speed
A better way is to sense if the spindle speed is near the requested speed
by using the "near" component to compare the actual spindle speed with
the requested speed.
setp spindle.0.at-speed true
Ignoring the actual spindle speed
A better way is to sense if the spindle speed is near the requested speed
by using the "near" component to compare the actual spindle speed with
the requested speed.
Last edit: 13 Nov 2021 20:16 by PCW.
Please Log in or Create an account to join the conversation.
- PaulQUE
- Offline
- Senior Member
Less
More
- Posts: 53
- Thank you received: 1
13 Nov 2021 20:41 - 13 Nov 2021 20:58 #226365
by PaulQUE
Replied by PaulQUE on topic G97 and encoder feedback
I've added the line, still got the same issue, looking at the spindle count, it seems to increase which ever way I turn the spindle. this is an optical sensor hooked up to phase A only, so I think there is no way for linuxcnc to tell which way the spindle is turning, how could I get arround that ?
looking at the documentation for spindle-at-speed, will setting this parameter to true prevent me from doing threading cycle?
looking at the documentation for spindle-at-speed, will setting this parameter to true prevent me from doing threading cycle?
Last edit: 13 Nov 2021 20:58 by PaulQUE.
Please Log in or Create an account to join the conversation.
- PaulQUE
- Offline
- Senior Member
Less
More
- Posts: 53
- Thank you received: 1
15 Nov 2021 13:40 - 15 Nov 2021 13:42 #226577
by PaulQUE
Replied by PaulQUE on topic G97 and encoder feedback
Quick update,
A significant chunk of code was missing, I am now getting spindle feedback, and G76 works as expected, EXCEPT, the spindle-velocity is suspiciously low, in fact 60 times to slow, (25 instead of 1500) and thus, my axis are moving 25 times slower than expected. There seem to be a confusion between RPS and RPM along the way, any idea what my cause it?
here is the current state of my hal file:
# Généré par PNCconf le Wed Oct 20 22:33:22 2021
# Using LinuxCNC version: 2.8
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=0xxxxx"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,
loadrt toolchanger
loadrt encoder num_chan=1
addf [HMOT](CARD0).read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf [HMOT](CARD0).write servo-thread
addf toolchanger servo-thread
addf encoder.update-counters servo-thread
addf encoder.capture-position servo-thread
# external input signals
setp hm2_7i96.0.encoder.00.counter-mode TRUE
setp hm2_7i96.0.encoder.00.scale 100
#setp hm2_7i96.0.encoder.00.filter TRUE
#setp hm2_7i96.0.encoder.00.index-invert 0
#setp hm2_7i96.0.encoder.00.index-mask 0
#setp hm2_7i96.0.encoder.00.index-mask-invert 0
net spindle-index hm2_7i96.0.encoder.00.input-index
net spindle-phase-a hm2_7i96.0.encoder.00.input-a
net spindle-position [HMOT](CARD0).encoder.00.position spindle.0.revs
net spindle-index-enable [HMOT](CARD0).encoder.00.index-enable spindle.0.index-enable
net spindle-velocity [HMOT](CARD0).encoder.00.velocity spindle.0.speed-in
#net spindle-revs [HMOT](CARD0).encoder.00.position
#net spindle-vel-fb-rps [HMOT](CARD0).encoder.00.velocity
#net spindle-index-enable [HMOT](CARD0).encoder.00.index-enable
#setp spindle.0.at-speed TRUE
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.012700
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.00.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.00.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.00.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.00.step_type 0
setp [HMOT](CARD0).stepgen.00.control-type 1
setp [HMOT](CARD0).stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output <= [HMOT](CARD0).stepgen.00.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.00.enable
# ---setup home / limit switch signals---
net x-home-sw => joint.0.home-sw-in
net x-neg-limit => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in
#*******************
# AXIS Z JOINT 1
#*******************
setp pid.z.Pgain [JOINT_1]P
setp pid.z.Igain [JOINT_1]I
setp pid.z.Dgain [JOINT_1]D
setp pid.z.bias [JOINT_1]BIAS
setp pid.z.FF0 [JOINT_1]FF0
setp pid.z.FF1 [JOINT_1]FF1
setp pid.z.FF2 [JOINT_1]FF2
setp pid.z.deadband [JOINT_1]DEADBAND
setp pid.z.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.1.motor-pos-cmd
net z-vel-cmd <= joint.1.vel-cmd
net z-output <= [HMOT](CARD0).stepgen.01.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net z-pos-fb => joint.1.motor-pos-fb
net z-enable <= joint.1.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net z-home-sw => joint.1.home-sw-in
net z-neg-limit => joint.1.neg-lim-sw-in
net z-pos-limit => joint.1.pos-lim-sw-in
#*******************
# AXIS S ATC
#*******************
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.02.dirsetup [AXIS_2]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [AXIS_2]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [AXIS_2]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [AXIS_2]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [AXIS_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 0
setp [HMOT](CARD0).stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net s-pos-cmd [HMOT](CARD0).stepgen.02.position-cmd
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-enable <= joint.2.amp-enable-out
net s-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net s-home-sw => joint.2.home-sw-in
net s-neg-limit => joint.2.neg-lim-sw-in
net s-pos-limit => joint.2.pos-lim-sw-in
#******************************
#connections de signaux divers
#******************************
# ---signaux HALUI---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.1.is-homed
net s-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---signaux d'arrosage---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---signal de sonde---
net probe-in => motion.probe-input
# ---signaux contrôle mouvement---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---signaux entrée / sortie numérique---
# ---signaux d'A/U---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---signaux changeur manuel d'outil--
net tool-change iocontrol.0.tool-change => toolchanger.toolchange
net tool-changed iocontrol.0.tool-changed <= toolchanger.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolchanger.toolnumber
net tool-oldnumber iocontrol.0.tool-number => toolchanger.currenttoolnumber
net s-pos-cmd toolchanger.position-cmd
net s-is-homed halui.joint.2.is-homed => toolchanger.ishomed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
A significant chunk of code was missing, I am now getting spindle feedback, and G76 works as expected, EXCEPT, the spindle-velocity is suspiciously low, in fact 60 times to slow, (25 instead of 1500) and thus, my axis are moving 25 times slower than expected. There seem to be a confusion between RPS and RPM along the way, any idea what my cause it?
here is the current state of my hal file:
# Généré par PNCconf le Wed Oct 20 22:33:22 2021
# Using LinuxCNC version: 2.8
# Si vous modifiez ce fichier, il sera
# écrasé quand vous relancerez PNCconf
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=0xxxxx"
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,
loadrt toolchanger
loadrt encoder num_chan=1
addf [HMOT](CARD0).read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf [HMOT](CARD0).write servo-thread
addf toolchanger servo-thread
addf encoder.update-counters servo-thread
addf encoder.capture-position servo-thread
# external input signals
setp hm2_7i96.0.encoder.00.counter-mode TRUE
setp hm2_7i96.0.encoder.00.scale 100
#setp hm2_7i96.0.encoder.00.filter TRUE
#setp hm2_7i96.0.encoder.00.index-invert 0
#setp hm2_7i96.0.encoder.00.index-mask 0
#setp hm2_7i96.0.encoder.00.index-mask-invert 0
net spindle-index hm2_7i96.0.encoder.00.input-index
net spindle-phase-a hm2_7i96.0.encoder.00.input-a
net spindle-position [HMOT](CARD0).encoder.00.position spindle.0.revs
net spindle-index-enable [HMOT](CARD0).encoder.00.index-enable spindle.0.index-enable
net spindle-velocity [HMOT](CARD0).encoder.00.velocity spindle.0.speed-in
#net spindle-revs [HMOT](CARD0).encoder.00.position
#net spindle-vel-fb-rps [HMOT](CARD0).encoder.00.velocity
#net spindle-index-enable [HMOT](CARD0).encoder.00.index-enable
#setp spindle.0.at-speed TRUE
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.x.maxerror 0.012700
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.00.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.00.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.00.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.00.step_type 0
setp [HMOT](CARD0).stepgen.00.control-type 1
setp [HMOT](CARD0).stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-vel-cmd <= joint.0.vel-cmd
net x-output <= [HMOT](CARD0).stepgen.00.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.00.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.00.enable
# ---setup home / limit switch signals---
net x-home-sw => joint.0.home-sw-in
net x-neg-limit => joint.0.neg-lim-sw-in
net x-pos-limit => joint.0.pos-lim-sw-in
#*******************
# AXIS Z JOINT 1
#*******************
setp pid.z.Pgain [JOINT_1]P
setp pid.z.Igain [JOINT_1]I
setp pid.z.Dgain [JOINT_1]D
setp pid.z.bias [JOINT_1]BIAS
setp pid.z.FF0 [JOINT_1]FF0
setp pid.z.FF1 [JOINT_1]FF1
setp pid.z.FF2 [JOINT_1]FF2
setp pid.z.deadband [JOINT_1]DEADBAND
setp pid.z.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.1.motor-pos-cmd
net z-vel-cmd <= joint.1.vel-cmd
net z-output <= [HMOT](CARD0).stepgen.01.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net z-pos-fb => joint.1.motor-pos-fb
net z-enable <= joint.1.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.01.enable
# ---setup home / limit switch signals---
net z-home-sw => joint.1.home-sw-in
net z-neg-limit => joint.1.neg-lim-sw-in
net z-pos-limit => joint.1.pos-lim-sw-in
#*******************
# AXIS S ATC
#*******************
# Step Gen signals/setup
setp [HMOT](CARD0).stepgen.02.dirsetup [AXIS_2]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [AXIS_2]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [AXIS_2]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [AXIS_2]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [AXIS_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 0
setp [HMOT](CARD0).stepgen.02.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.02.maxvel [AXIS_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net s-pos-cmd [HMOT](CARD0).stepgen.02.position-cmd
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net s-enable <= joint.2.amp-enable-out
net s-enable => [HMOT](CARD0).stepgen.02.enable
# ---setup home / limit switch signals---
net s-home-sw => joint.2.home-sw-in
net s-neg-limit => joint.2.neg-lim-sw-in
net s-pos-limit => joint.2.pos-lim-sw-in
#******************************
#connections de signaux divers
#******************************
# ---signaux HALUI---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.1.is-homed
net s-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
net spindle-manual-cw halui.spindle.0.forward
net spindle-manual-ccw halui.spindle.0.reverse
net spindle-manual-stop halui.spindle.0.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.axis.jog-speed
net MDI-mode halui.mode.is-mdi
# ---signaux d'arrosage---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---signal de sonde---
net probe-in => motion.probe-input
# ---signaux contrôle mouvement---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---signaux entrée / sortie numérique---
# ---signaux d'A/U---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---signaux changeur manuel d'outil--
net tool-change iocontrol.0.tool-change => toolchanger.toolchange
net tool-changed iocontrol.0.tool-changed <= toolchanger.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolchanger.toolnumber
net tool-oldnumber iocontrol.0.tool-number => toolchanger.currenttoolnumber
net s-pos-cmd toolchanger.position-cmd
net s-is-homed halui.joint.2.is-homed => toolchanger.ishomed
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
Last edit: 15 Nov 2021 13:42 by PaulQUE.
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
Less
More
- Posts: 17973
- Thank you received: 4830
15 Nov 2021 15:31 #226583
by PCW
Replied by PCW on topic G97 and encoder feedback
net spindle-velocity [HMOT](CARD0).encoder.00.velocity spindle.0.speed-in
should be
net spindle-velocity [HMOT](CARD0).encoder.00.velocity-rpm spindle.0.speed-in
should be
net spindle-velocity [HMOT](CARD0).encoder.00.velocity-rpm spindle.0.speed-in
Please Log in or Create an account to join the conversation.
- PaulQUE
- Offline
- Senior Member
Less
More
- Posts: 53
- Thank you received: 1
15 Nov 2021 16:03 #226585
by PaulQUE
Replied by PaulQUE on topic G97 and encoder feedback
well thanks, that was it, I had it scaled to fix the issue but that feels better, and with that, my config is complete, thank you for the tremendous help along the way
Please Log in or Create an account to join the conversation.
Time to create page: 0.097 seconds