Skip to content

Instantly share code, notes, and snippets.

@ednisley
Created February 27, 2021 17:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ednisley/dd619f8df1a9b67d83b9315abe164e60 to your computer and use it in GitHub Desktop.
Save ednisley/dd619f8df1a9b67d83b9315abe164e60 to your computer and use it in GitHub Desktop.
LinuxCNC INI and HAL files: Mesa 5I25 for Sherline CNC mill
# 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
# DO NOT RUN PNCCONF EVER AGAIN
[EMC]
MACHINE = Razor-5i25
DEBUG = 0
VERSION = 1.1
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = /home/ed/linuxcnc/configs/razor-5i25/Sherline.gif
INTRO_TIME = 3
PROGRAM_PREFIX = /mnt/bulkdata/
INCREMENTS = 50mm 10mm 1mm 0.1mm 90 45 10 5 1
GRIDS = 100mm 50mm 25mm 10mm 5mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.200000
MAX_LINEAR_VELOCITY = 0.400000
MIN_LINEAR_VELOCITY = 0.016670
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 180.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = gedit
GEOMETRY = axyz
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[RS274NGC]
PARAMETER_FILE = linuxcnc.var
RS274NGC_STARTUP_CODE = G21 G40 G49 G54 G80 G90 G92.1 G94 G97 G98
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000
[HMOT]
FPGA0 = hm2_5i25.0
[HAL]
TWOPASS = on
HALUI = halui
HALFILE = razor-5i25.hal
#HALFILE = joggy.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
#HALFILE = LIB:halcheck.tcl
[HALUI]
[KINS]
JOINTS = 4
KINEMATICS = trivkins coordinates=XYZA
[TRAJ]
COORDINATES = XYZA
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 0.10
MAX_LINEAR_VELOCITY = 0.4
MAX_ANGULAR_VELOCITY = 45
DEFAULT_ANGULAR_VELOCITY = 25.00
NO_FORCE_HOMING = 1
POSITION_FILE = lastposition.txt
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
#******************************************
[AXIS_X]
MIN_LIMIT = -1.0
MAX_LIMIT = 9.5
MAX_VELOCITY = 0.4
MAX_ACCELERATION = 5.0
[JOINT_0]
TYPE = LINEAR
FERROR = 0.01
MIN_FERROR = 0.001
MAX_VELOCITY = 0.4
MAX_ACCELERATION = 5.0
BACKLASH = 0.003
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 0.6
STEPGEN_MAXACCEL = 20
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 25000
DIRHOLD = 25000
STEPLEN = 25000
STEPSPACE = 25000
STEP_SCALE = 16000
MIN_LIMIT = -1.0
MAX_LIMIT = 9.5
HOME = 5.25
HOME_OFFSET = 9.1
HOME_SEARCH_VEL = 0.3
HOME_LATCH_VEL = 0.03
HOME_FINAL_VEL = 0.4
HOME_USE_INDEX = NO
HOME_IS_SHARED = 1
HOME_SEQUENCE = 1
#******************************************
#******************************************
[AXIS_Y]
MIN_LIMIT = 0.00
MAX_LIMIT = 5.10
MAX_VELOCITY = 0.4
MAX_ACCELERATION = 5.0
[JOINT_1]
TYPE = LINEAR
FERROR = 0.01
MIN_FERROR = 0.001
MAX_VELOCITY = 0.4
MAX_ACCELERATION = 5.0
BACKLASH = 0.003
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 0.6
STEPGEN_MAXACCEL = 10.0
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 25000
DIRHOLD = 25000
STEPLEN = 25000
STEPSPACE = 25000
STEP_SCALE = 16000
MIN_LIMIT = 0.0
MAX_LIMIT = 5.1
HOME = 4.5
HOME_OFFSET = 5.1
HOME_SEARCH_VEL = 0.3
HOME_LATCH_VEL = 0.03
HOME_FINAL_VEL = 0.4
HOME_USE_INDEX = NO
HOME_IS_SHARED = 1
HOME_SEQUENCE = 2
#******************************************
#******************************************
[AXIS_Z]
MIN_LIMIT = 0.0
MAX_LIMIT = 6.680
MAX_VELOCITY = 0.333
MAX_ACCELERATION = 3.0
[JOINT_2]
TYPE = LINEAR
FERROR = 0.01
MIN_FERROR = 0.001
MAX_VELOCITY = 0.333
MAX_ACCELERATION = 3.0
BACKLASH = 0.005
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 0.6
STEPGEN_MAXACCEL = 6
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 25000
DIRHOLD = 25000
STEPLEN = 25000
STEPSPACE = 25000
STEP_SCALE = 16000
MIN_LIMIT = 0.0
MAX_LIMIT = 6.68
HOME = 6.5
HOME_OFFSET = 6.68
HOME_SEARCH_VEL = 0.15
HOME_LATCH_VEL = 0.015
HOME_FINAL_VEL = 0.33
HOME_USE_INDEX = NO
HOME_IS_SHARED = 1
HOME_SEQUENCE = 0
#******************************************
#******************************************
[AXIS_A]
MIN_LIMIT = -9999999
MAX_LIMIT = 9999999
MAX_VELOCITY = 45.0
MAX_ACCELERATION = 250.0
[JOINT_3]
TYPE = ANGULAR
FERROR = 0.1
MIN_FERROR = 0.01
MAX_VELOCITY = 45.0
MAX_ACCELERATION = 250.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 50
STEPGEN_MAXACCEL = 300
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.0
# these are in nanoseconds
DIRSETUP = 25000
DIRHOLD = 25000
STEPLEN = 25000
STEPSPACE = 25000
STEP_SCALE = 160
MIN_LIMIT = -9999999
MAX_LIMIT = 9999999
HOME = 0.0
HOME_OFFSET = 0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_FINAL_VEL = 0
HOME_USE_INDEX = NO
HOME_SEQUENCE = 3
#******************************************
@ednisley
Copy link
Author

More details on my blog at https://wp.me/poZKh-9R8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment