# 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