|
# DO NOT RUN PNCCONF EVER AGAIN |
|
|
|
loadrt [KINS]KINEMATICS |
|
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS |
|
loadrt hostmot2 |
|
loadrt hm2_pci config="num_encoders=0 num_pwmgens=0 num_stepgens=4" |
|
|
|
loadrt debounce cfg=2 |
|
addf debounce.0 servo-thread |
|
setp debounce.0.delay 3 |
|
|
|
setp [HMOT](FPGA0).watchdog.timeout_ns 5000000 |
|
|
|
loadrt pid names=pid.x,pid.y,pid.z,pid.a |
|
|
|
addf [HMOT](FPGA0).read servo-thread |
|
|
|
addf motion-command-handler servo-thread |
|
addf motion-controller servo-thread |
|
|
|
addf pid.x.do-pid-calcs servo-thread |
|
addf pid.y.do-pid-calcs servo-thread |
|
addf pid.z.do-pid-calcs servo-thread |
|
addf pid.a.do-pid-calcs servo-thread |
|
|
|
addf [HMOT](FPGA0).write servo-thread |
|
|
|
# external output signals |
|
|
|
#setp [HMOT](FPGA0).gpio.000.out 1 |
|
net estop-out [HMOT](FPGA0).gpio.000.out |
|
|
|
#net all-amps-enabled logic.0.and [HMOT](FPGA0).gpio.007.out |
|
|
|
# Home switch |
|
|
|
net home-raw debounce.0.0.in [HMOT](FPGA0).gpio.013.in_not |
|
net all-home debounce.0.0.out |
|
|
|
# Probe switch |
|
|
|
net probe-raw debounce.0.1.in [HMOT](FPGA0).gpio.003.in_not |
|
net probe-in debounce.0.1.out |
|
|
|
|
|
#******************* |
|
# 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.000500 |
|
|
|
net x-index-enable <=> pid.x.index-enable |
|
net x-amp-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](FPGA0).stepgen.00.dirsetup [JOINT_0]DIRSETUP |
|
setp [HMOT](FPGA0).stepgen.00.dirhold [JOINT_0]DIRHOLD |
|
setp [HMOT](FPGA0).stepgen.00.steplen [JOINT_0]STEPLEN |
|
setp [HMOT](FPGA0).stepgen.00.stepspace [JOINT_0]STEPSPACE |
|
setp [HMOT](FPGA0).stepgen.00.position-scale [JOINT_0]STEP_SCALE |
|
setp [HMOT](FPGA0).stepgen.00.step_type 0 |
|
setp [HMOT](FPGA0).stepgen.00.control-type 1 |
|
setp [HMOT](FPGA0).stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL |
|
setp [HMOT](FPGA0).stepgen.00.maxvel [JOINT_0]STEPGEN_MAXVEL |
|
|
|
# invert step output bit |
|
setp [HMOT](FPGA0).gpio.002.invert_output 1 |
|
|
|
# —closedloop stepper signals— |
|
|
|
net x-pos-cmd <= joint.0.motor-pos-cmd |
|
net x-vel-cmd <= joint.0.vel-cmd |
|
net x-output <= [HMOT](FPGA0).stepgen.00.velocity-cmd |
|
net x-pos-fb <= [HMOT](FPGA0).stepgen.00.position-fb |
|
net x-pos-fb => joint.0.motor-pos-fb |
|
net x-amp-enable <= joint.0.amp-enable-out |
|
net x-amp-enable => [HMOT](FPGA0).stepgen.00.enable |
|
|
|
# —setup home / limit switch signals— |
|
|
|
net all-home => 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 Y JOINT 1 |
|
#******************* |
|
|
|
setp pid.y.Pgain [JOINT_1]P |
|
setp pid.y.Igain [JOINT_1]I |
|
setp pid.y.Dgain [JOINT_1]D |
|
setp pid.y.bias [JOINT_1]BIAS |
|
setp pid.y.FF0 [JOINT_1]FF0 |
|
setp pid.y.FF1 [JOINT_1]FF1 |
|
setp pid.y.FF2 [JOINT_1]FF2 |
|
setp pid.y.deadband [JOINT_1]DEADBAND |
|
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT |
|
setp pid.y.error-previous-target true |
|
|
|
# This setting is to limit bogus stepgen |
|
# velocity corrections caused by position |
|
# feedback sample time jitter. |
|
setp pid.y.maxerror 0.000500 |
|
|
|
net y-index-enable <=> pid.y.index-enable |
|
net y-amp-enable => pid.y.enable |
|
net y-pos-cmd => pid.y.command |
|
net y-pos-fb => pid.y.feedback |
|
net y-output <= pid.y.output |
|
|
|
# Step Gen signals/setup |
|
|
|
setp [HMOT](FPGA0).stepgen.01.dirsetup [JOINT_1]DIRSETUP |
|
setp [HMOT](FPGA0).stepgen.01.dirhold [JOINT_1]DIRHOLD |
|
setp [HMOT](FPGA0).stepgen.01.steplen [JOINT_1]STEPLEN |
|
setp [HMOT](FPGA0).stepgen.01.stepspace [JOINT_1]STEPSPACE |
|
setp [HMOT](FPGA0).stepgen.01.position-scale [JOINT_1]STEP_SCALE |
|
setp [HMOT](FPGA0).stepgen.01.step_type 0 |
|
setp [HMOT](FPGA0).stepgen.01.control-type 1 |
|
setp [HMOT](FPGA0).stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL |
|
setp [HMOT](FPGA0).stepgen.01.maxvel [JOINT_1]STEPGEN_MAXVEL |
|
|
|
# invert step output bit |
|
setp [HMOT](FPGA0).gpio.006.invert_output 1 |
|
|
|
# invert direction output bit |
|
setp [HMOT](FPGA0).gpio.008.invert_output 1 |
|
|
|
|
|
# —closedloop stepper signals— |
|
|
|
net y-pos-cmd <= joint.1.motor-pos-cmd |
|
net y-vel-cmd <= joint.1.vel-cmd |
|
net y-output <= [HMOT](FPGA0).stepgen.01.velocity-cmd |
|
net y-pos-fb <= [HMOT](FPGA0).stepgen.01.position-fb |
|
net y-pos-fb => joint.1.motor-pos-fb |
|
net y-amp-enable <= joint.1.amp-enable-out |
|
net y-amp-enable => [HMOT](FPGA0).stepgen.01.enable |
|
|
|
# —setup home / limit switch signals— |
|
|
|
net all-home => joint.1.home-sw-in |
|
net y-neg-limit => joint.1.neg-lim-sw-in |
|
net y-pos-limit => joint.1.pos-lim-sw-in |
|
|
|
#******************* |
|
# AXIS Z JOINT 2 |
|
#******************* |
|
|
|
setp pid.z.Pgain [JOINT_2]P |
|
setp pid.z.Igain [JOINT_2]I |
|
setp pid.z.Dgain [JOINT_2]D |
|
setp pid.z.bias [JOINT_2]BIAS |
|
setp pid.z.FF0 [JOINT_2]FF0 |
|
setp pid.z.FF1 [JOINT_2]FF1 |
|
setp pid.z.FF2 [JOINT_2]FF2 |
|
setp pid.z.deadband [JOINT_2]DEADBAND |
|
setp pid.z.maxoutput [JOINT_2]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.000500 |
|
|
|
net z-index-enable <=> pid.z.index-enable |
|
net z-amp-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](FPGA0).stepgen.02.dirsetup [JOINT_2]DIRSETUP |
|
setp [HMOT](FPGA0).stepgen.02.dirhold [JOINT_2]DIRHOLD |
|
setp [HMOT](FPGA0).stepgen.02.steplen [JOINT_2]STEPLEN |
|
setp [HMOT](FPGA0).stepgen.02.stepspace [JOINT_2]STEPSPACE |
|
setp [HMOT](FPGA0).stepgen.02.position-scale [JOINT_2]STEP_SCALE |
|
setp [HMOT](FPGA0).stepgen.02.step_type 0 |
|
setp [HMOT](FPGA0).stepgen.02.control-type 1 |
|
setp [HMOT](FPGA0).stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACCEL |
|
setp [HMOT](FPGA0).stepgen.02.maxvel [JOINT_2]STEPGEN_MAXVEL |
|
|
|
# invert step output bit |
|
setp [HMOT](FPGA0).gpio.009.invert_output 1 |
|
|
|
# invert direction output bit |
|
setp [HMOT](FPGA0).gpio.010.invert_output 1 |
|
|
|
# —closedloop stepper signals— |
|
|
|
net z-pos-cmd <= joint.2.motor-pos-cmd |
|
net z-vel-cmd <= joint.2.vel-cmd |
|
net z-output <= [HMOT](FPGA0).stepgen.02.velocity-cmd |
|
net z-pos-fb <= [HMOT](FPGA0).stepgen.02.position-fb |
|
net z-pos-fb => joint.2.motor-pos-fb |
|
net z-amp-enable <= joint.2.amp-enable-out |
|
net z-amp-enable => [HMOT](FPGA0).stepgen.02.enable |
|
|
|
# —setup home / limit switch signals— |
|
|
|
net all-home => joint.2.home-sw-in |
|
net z-neg-limit => joint.2.neg-lim-sw-in |
|
net z-pos-limit => joint.2.pos-lim-sw-in |
|
|
|
#******************* |
|
# AXIS A JOINT 3 |
|
#******************* |
|
|
|
setp pid.a.Pgain [JOINT_3]P |
|
setp pid.a.Igain [JOINT_3]I |
|
setp pid.a.Dgain [JOINT_3]D |
|
setp pid.a.bias [JOINT_3]BIAS |
|
setp pid.a.FF0 [JOINT_3]FF0 |
|
setp pid.a.FF1 [JOINT_3]FF1 |
|
setp pid.a.FF2 [JOINT_3]FF2 |
|
setp pid.a.deadband [JOINT_3]DEADBAND |
|
setp pid.a.maxoutput [JOINT_3]MAX_OUTPUT |
|
setp pid.a.error-previous-target true |
|
|
|
# This setting is to limit bogus stepgen |
|
# velocity corrections caused by position |
|
# feedback sample time jitter. |
|
setp pid.a.maxerror 0.000500 |
|
|
|
net a-index-enable <=> pid.a.index-enable |
|
net a-amp-enable => pid.a.enable |
|
net a-pos-cmd => pid.a.command |
|
net a-pos-fb => pid.a.feedback |
|
net a-output <= pid.a.output |
|
|
|
# Step Gen signals/setup |
|
|
|
setp [HMOT](FPGA0).stepgen.03.dirsetup [JOINT_3]DIRSETUP |
|
setp [HMOT](FPGA0).stepgen.03.dirhold [JOINT_3]DIRHOLD |
|
setp [HMOT](FPGA0).stepgen.03.steplen [JOINT_3]STEPLEN |
|
setp [HMOT](FPGA0).stepgen.03.stepspace [JOINT_3]STEPSPACE |
|
setp [HMOT](FPGA0).stepgen.03.position-scale [JOINT_3]STEP_SCALE |
|
setp [HMOT](FPGA0).stepgen.03.step_type 0 |
|
setp [HMOT](FPGA0).stepgen.03.control-type 1 |
|
setp [HMOT](FPGA0).stepgen.03.maxaccel [JOINT_3]STEPGEN_MAXACCEL |
|
setp [HMOT](FPGA0).stepgen.03.maxvel [JOINT_3]STEPGEN_MAXVEL |
|
|
|
# invert step output bit |
|
setp [HMOT](FPGA0).gpio.011.invert_output 1 |
|
|
|
# —closedloop stepper signals— |
|
|
|
net a-pos-cmd <= joint.3.motor-pos-cmd |
|
net a-vel-cmd <= joint.3.vel-cmd |
|
net a-output <= [HMOT](FPGA0).stepgen.03.velocity-cmd |
|
net a-pos-fb <= [HMOT](FPGA0).stepgen.03.position-fb |
|
net a-pos-fb => joint.3.motor-pos-fb |
|
net a-amp-enable <= joint.3.amp-enable-out |
|
net a-amp-enable => [HMOT](FPGA0).stepgen.03.enable |
|
|
|
# —setup home / limit switch signals— |
|
|
|
net all-home => joint.3.home-sw-in |
|
net a-neg-limit => joint.3.neg-lim-sw-in |
|
net a-pos-limit => joint.3.pos-lim-sw-in |
|
|
|
|
|
#****************************** |
|
# connect miscellaneous signals |
|
#****************************** |
|
|
|
# —HALUI signals— |
|
|
|
net axis-select-x halui.axis.x.select |
|
net x-is-homed halui.joint.0.is-homed |
|
|
|
net axis-select-y halui.axis.y.select |
|
net y-is-homed halui.joint.1.is-homed |
|
|
|
net axis-select-z halui.axis.z.select |
|
net z-is-homed halui.joint.2.is-homed |
|
|
|
net axis-select-a halui.axis.a.select |
|
net a-is-homed halui.joint.3.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 MDI-mode halui.mode.is-mdi |
|
|
|
# —coolant signals— |
|
|
|
net coolant-mist <= iocontrol.0.coolant-mist |
|
net coolant-flood <= iocontrol.0.coolant-flood |
|
|
|
# —probe signal— |
|
|
|
net probe-in => motion.probe-input |
|
|
|
# —motion control signals— |
|
|
|
net in-position <= motion.in-position |
|
net machine-is-enabled <= motion.motion-enabled |
|
|
|
# —digital in / out signals— |
|
|
|
# —estop signals— |
|
|
|
net estop-out <= iocontrol.0.user-enable-out |
|
net estop-out => iocontrol.0.emc-enable-in |
|
|
|
# —manual tool change signals— |
|
|
|
loadusr -W hal_manualtoolchange |
|
net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change |
|
net tool-change-confirmed iocontrol.0.tool-changed <= hal_manualtoolchange.changed |
|
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number |
|
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared |
|
|