Files
mayo-mill-probasic/mayo-mill-remora.hal

128 lines
4.9 KiB
Plaintext

# Basic HAL config file for NVEM controller board running Remora firmware
# Configured for 3 joints (A, Y, Z axes) with home and limit switches
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
# load the Remora real-time component
loadrt remora-eth PRU_base_freq=75000
loadrt estop_latch names=estop_latch
loadrt and2 names=run_and,step_and
loadrt toggle names=hold_button_toggle
loadrt toggle2nist names=hold_toggle,paused_toggle
# add the remora and motion functions to threads
addf remora.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf remora.update-freq servo-thread
addf remora.write servo-thread
addf estop_latch servo-thread
addf run_and servo-thread
addf step_and servo-thread
addf hold_toggle servo-thread
addf hold_button_toggle servo-thread
#toggle2nist states & mux selectors
# net program-is-paused hold_toggle.is-on <= halui.program.is-paused
# vfdmod - uncomment the below if using vfdmod (default). There are also a couple items to edit in spindle_load.hal
# loadusr -W vfdmod vfdmod.ini
# net spindle-speed-cmd vfdmod.spindle.rpm-in <= spindle.0.speed-out
# net spindle-speed-fb vfdmod.spindle.rpm-out <= spindle.0.speed-in
# net spindle-at-speed vfdmod.spindle.at-speed <= spindle.0.at-speed
# net spindle-forward vfdmod.control.run-forward <= spindle.0.forward
# net spindle-reverse vfdmod.control.run-reverse <= spindle.0.reverse
# estop and SPI comms enable and feedback
net user-enable-out <= iocontrol.0.user-enable-out => remora.enable
net user-request-enable <= iocontrol.0.user-request-enable => remora.reset estop_latch.reset
#Halt is shared with motor alarms and is in the estop loop.
#estop_latch returns 'ok' when fault-in is false, ok-in is true, and reset changes from false to true.
net estop-fault_in remora.input.07 => estop_latch.fault-in
net remora-status remora.status => estop_latch.ok-in
net estop-status estop_latch.ok-out => iocontrol.0.emc-enable-in
# joint 0 setup (X axis)
setp remora.joint.0.scale [JOINT_0]SCALE
setp remora.joint.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp remora.joint.0.pgain [JOINT_0]P_GAIN
setp remora.joint.0.ff1gain [JOINT_0]FF1_GAIN
setp remora.joint.0.deadband [JOINT_0]DEADBAND
net j0pos-cmd joint.0.motor-pos-cmd => remora.joint.0.pos-cmd
net j0pos-fb remora.joint.0.pos-fb => joint.0.motor-pos-fb
net j0enable joint.0.amp-enable-out => remora.joint.0.enable
net x-home joint.0.home-sw-in => remora.input.00
# joint 1 setup (Y axis)
setp remora.joint.1.scale [JOINT_1]SCALE
setp remora.joint.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp remora.joint.1.pgain [JOINT_1]P_GAIN
setp remora.joint.1.ff1gain [JOINT_1]FF1_GAIN
setp remora.joint.1.deadband [JOINT_1]DEADBAND
net j1pos-cmd joint.1.motor-pos-cmd => remora.joint.1.pos-cmd
net j1pos-fb remora.joint.1.pos-fb => joint.1.motor-pos-fb
net j1enable joint.1.amp-enable-out => remora.joint.1.enable
net y-home joint.1.home-sw-in => remora.input.01
# joint 2 setup (Z axis)
setp remora.joint.2.scale [JOINT_2]SCALE
setp remora.joint.2.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp remora.joint.2.pgain [JOINT_2]P_GAIN
setp remora.joint.2.ff1gain [JOINT_2]FF1_GAIN
setp remora.joint.2.deadband [JOINT_2]DEADBAND
net j2pos-cmd joint.2.motor-pos-cmd => remora.joint.2.pos-cmd
net j2pos-fb remora.joint.2.pos-fb => joint.2.motor-pos-fb
net j2enable joint.2.amp-enable-out => remora.joint.2.enable
net z-home joint.2.home-sw-in => remora.input.02
# Motor enables
net j0enable => remora.output.00
net j1enable => remora.output.01
net j2enable => remora.output.02
# Flood and mist outputs
# net flood remora.output.02 <= iocontrol.0.coolant-flood
# net mist remora.output.03 <= iocontrol.0.coolant-mist
# User buttons
#Halt is shared with motor alarms and is up in the estop loop.
#Hold logic
# net hold_button remora.input.05 => hold_button_toggle.in
# net hold_toggle_latch hold_button_toggle.out => hold_toggle.in
# net hold_on halui.program.pause <= hold_toggle.on
# net hold_off halui.program.resume <= hold_toggle.off
#Cycle start logic. When not running, start the program. When in feed hold, single step through the program.
# net run-step_button remora.input.06 => run_and.in0 step_and.in0
# net program-is-idle halui.program.is-idle => run_and.in1 #if not running AND button pressed
# net program-run run_and.out => halui.program.run #run program
# net program-is-paused => step_and.in1 #if paused AND button pressed
# net single-step step_and.out => halui.program.step #single step
# Probe
net probe-in motion.probe-input <= remora.input.08
# Manual toolchange
net tool-change-request <= iocontrol.0.tool-change
net tool-change-confirmed => iocontrol.0.tool-changed
net tool-number <= iocontrol.0.tool-prep-number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared