# Generated by PNCconf at Mon Jul 4 17:11:38 2022 # Using LinuxCNC version: 2.8 # If you make changes to this file, they will be # overwritten when you run PNCconf 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=6 num_pwmgens=0 num_stepgens=0 sserial_port_0=000xxx" setp hm2_5i25.0.watchdog.timeout_ns 5000000 loadrt pid names=pid.x,pid.z,pid.s loadrt abs names=abs.spindle loadrt lowpass names=lowpass.spindle loadrt scale names=scale.spindle loadrt mux16 names=jogincr addf hm2_5i25.0.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-threa addf pid.s.do-pid-calcs servo-thread addf jogincr servo-thread addf scale.spindle servo-thread addf abs.spindle servo-thread addf lowpass.spindle servo-thread addf hm2_5i25.0.write servo-thread # external output signals # --- MACHINE-IS-ENABLED --- net machine-is-enabled => hm2_5i25.0.7i77.0.0.output-01 # --- COOLANT-FLOOD --- net coolant-flood => hm2_5i25.0.7i77.0.0.output-02 # --- X-ENABLE --- net x-enable => hm2_5i25.0.7i77.0.0.output-04 # --- Y-ENABLE --- net y-enable => hm2_5i25.0.7i77.0.0.output-05 # --- Z-ENABLE --- net z-enable => hm2_5i25.0.7i77.0.0.output-06 # --- A-ENABLE --- net a-enable => hm2_5i25.0.7i77.0.0.output-07 # external input signals #******************* # 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 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 # ---PWM Generator signals/setup--- setp hm2_5i25.0.7i77.0.1.analogout0-scalemax [JOINT_0]OUTPUT_SCALE setp hm2_5i25.0.7i77.0.1.analogout0-minlim [JOINT_0]OUTPUT_MIN_LIMIT setp hm2_5i25.0.7i77.0.1.analogout0-maxlim [JOINT_0]OUTPUT_MAX_LIMIT # OUTPUT_SCALE = -10.0 net x-output => hm2_5i25.0.7i77.0.1.analogout0 net x-pos-cmd <= joint.0.motor-pos-cmd net x-enable <= joint.0.amp-enable-out # enable _all_ sserial pwmgens net x-enable => hm2_5i25.0.7i77.0.1.analogena # ---Encoder feedback signals/setup--- setp hm2_5i25.0.encoder.00.counter-mode 0 setp hm2_5i25.0.encoder.00.filter 1 setp hm2_5i25.0.encoder.00.index-invert 0 setp hm2_5i25.0.encoder.00.index-mask 0 setp hm2_5i25.0.encoder.00.index-mask-invert 0 setp hm2_5i25.0.encoder.00.scale [JOINT_0]ENCODER_SCALE net x-pos-fb <= hm2_5i25.0.encoder.00.position net x-vel-fb <= hm2_5i25.0.encoder.00.velocity net x-pos-fb => joint.0.motor-pos-fb net x-index-enable joint.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable net x-pos-rawcounts <= hm2_5i25.0.encoder.00.rawcounts # ---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 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 # ---PWM Generator signals/setup--- setp hm2_5i25.0.7i77.0.1.analogout1-scalemax [JOINT_1]OUTPUT_SCALE setp hm2_5i25.0.7i77.0.1.analogout1-minlim [JOINT_1]OUTPUT_MIN_LIMIT setp hm2_5i25.0.7i77.0.1.analogout1-maxlim [JOINT_1]OUTPUT_MAX_LIMIT net z-output => hm2_5i25.0.7i77.0.1.analogout1 net z-pos-cmd <= joint.1.motor-pos-cmd net z-enable <= joint.1.amp-enable-out # ---Encoder feedback signals/setup--- setp hm2_5i25.0.encoder.01.counter-mode 0 setp hm2_5i25.0.encoder.01.filter 1 setp hm2_5i25.0.encoder.01.index-invert 0 setp hm2_5i25.0.encoder.01.index-mask 0 setp hm2_5i25.0.encoder.01.index-mask-invert 0 setp hm2_5i25.0.encoder.01.scale [JOINT_1]ENCODER_SCALE net z-pos-fb <= hm2_5i25.0.encoder.01.position net z-vel-fb <= hm2_5i25.0.encoder.01.velocity net z-pos-fb => joint.1.motor-pos-fb net z-index-enable joint.1.index-enable <=> hm2_5i25.0.encoder.01.index-enable net z-pos-rawcounts <= hm2_5i25.0.encoder.01.rawcounts # ---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 #******************* # SPINDLE #******************* 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 net spindle-index-enable <=> pid.s.index-enable net spindle-enable => pid.s.enable net spindle-vel-cmd-rpm-abs => pid.s.command net spindle-vel-fb-rpm-abs => pid.s.feedback net spindle-output <= pid.s.output # ---Encoder feedback signals/setup--- setp hm2_5i25.0.encoder.04.counter-mode 0 setp hm2_5i25.0.encoder.04.filter 1 setp hm2_5i25.0.encoder.04.index-invert 0 setp hm2_5i25.0.encoder.04.index-mask 0 setp hm2_5i25.0.encoder.04.index-mask-invert 0 setp hm2_5i25.0.encoder.04.scale [SPINDLE_0]ENCODER_SCALE net spindle-revs <= hm2_5i25.0.encoder.04.position net spindle-vel-fb-rps <= hm2_5i25.0.encoder.04.velocity net spindle-vel-fb-rpm <= hm2_5i25.0.encoder.04.velocity-rpm net spindle-index-enable <=> hm2_5i25.0.encoder.04.index-enable # ---setup spindle control signals--- net spindle-vel-cmd-rps <= spindle.0.speed-out-rps net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs net spindle-vel-cmd-rpm <= spindle.0.speed-out net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs net spindle-enable <= spindle.0.on net spindle-cw <= spindle.0.forward net spindle-ccw <= spindle.0.reverse net spindle-brake <= spindle.0.brake net spindle-revs => spindle.0.revs net spindle-at-speed => spindle.0.at-speed net spindle-vel-fb-rps => spindle.0.speed-in net spindle-index-enable <=> spindle.0.index-enable # --- Setup spindle at speed signals--- sets spindle-at-speed true # Use ACTUAL spindle velocity from spindle encoder # spindle-velocity bounces around so we filter it with lowpass # spindle-velocity is signed so we use absolute component to remove sign # ACTUAL velocity is in RPS not RPM so we scale it. setp scale.spindle.gain 60 setp lowpass.spindle.gain 1.000000 net spindle-vel-fb-rps => scale.spindle.in net spindle-fb-rpm scale.spindle.out => abs.spindle.in net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in net spindle-fb-rpm-abs-filtered lowpass.spindle.out #****************************** # connect miscellaneous signals #****************************** # ---HALUI signals--- 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 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 # ---coolant signals--- net coolant-mist <= iocontrol.0.coolant-mist net coolant-flood <= iocontrol.0.coolant-flood # ---probe signal--- net probe-in => motion.probe-input # ---jogwheel signals to mesa encoder - shared MPG--- net axis-selected-count <= hm2_5i25.0.encoder.05.count # ---mpg signals--- # for axis x MPG setp axis.x.jog-vel-mode 0 net selected-jog-incr => axis.x.jog-scale net axis-select-x => axis.x.jog-enable net axis-selected-count => axis.x.jog-counts # for axis z MPG setp axis.z.jog-vel-mode 0 net selected-jog-incr => axis.z.jog-scale net axis-select-z => axis.z.jog-enable net axis-selected-count => axis.z.jog-counts # connect selectable mpg jog increments net jog-incr-a => jogincr.sel0 net jog-incr-b => jogincr.sel1 net jog-incr-c => jogincr.sel2 net jog-incr-d => jogincr.sel3 net selected-jog-incr <= jogincr.out-f setp jogincr.debounce-time 0.200000 setp jogincr.use-graycode False setp jogincr.suppress-no-input False setp jogincr.in00 0.000000 setp jogincr.in01 0.000100 setp jogincr.in02 0.001000 setp jogincr.in03 0.000000 setp jogincr.in04 0.010000 setp jogincr.in05 0.000000 setp jogincr.in06 0.000000 setp jogincr.in07 0.000000 setp jogincr.in08 0.000000 setp jogincr.in09 0.000000 setp jogincr.in10 0.000000 setp jogincr.in11 0.000000 setp jogincr.in12 0.000000 setp jogincr.in13 0.000000 setp jogincr.in14 0.000000 setp jogincr.in15 0.000000 # ---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