Updating the Sherline’s LinuxCNC from 2.7.ancient to 2.8.1, which I did by the simple expedient of replacing the hard drive with an SSD from the heap and doing a clean installation, provided the opportunity of switching from the parallel port to a Mesa 5I25 FPGA card to put timing-critical step generation under hardware control.
I has flashed the card with Mesa’s Probotix PBX-RF BIT file, then invoked it with a configuration string turning off everything except the stepgen modules:
loadrt hm2_pci config="num_encoders=0 num_pwmgens=0 num_stepgens=4"
Which produces a simple pinout on the back panel DB-25 connector:
hm2_pci: loading Mesa AnyIO HostMot2 driver version 0.7
hm2_pci: discovered 5i25 at 0000:04:02.0
hm2/hm2_5i25.0: Low Level init 0.15
hm2/hm2_5i25.0: 34 I/O Pins used:
hm2/hm2_5i25.0: IO Pin 000 (P3-01): IOPort
hm2/hm2_5i25.0: IO Pin 001 (P3-14): IOPort
hm2/hm2_5i25.0: IO Pin 002 (P3-02): StepGen #0, pin Step (Output)
hm2/hm2_5i25.0: IO Pin 003 (P3-15): IOPort
hm2/hm2_5i25.0: IO Pin 004 (P3-03): StepGen #0, pin Direction (Output)
hm2/hm2_5i25.0: IO Pin 005 (P3-16): IOPort
hm2/hm2_5i25.0: IO Pin 006 (P3-04): StepGen #1, pin Step (Output)
hm2/hm2_5i25.0: IO Pin 007 (P3-17): IOPort
hm2/hm2_5i25.0: IO Pin 008 (P3-05): StepGen #1, pin Direction (Output)
hm2/hm2_5i25.0: IO Pin 009 (P3-06): StepGen #2, pin Step (Output)
hm2/hm2_5i25.0: IO Pin 010 (P3-07): StepGen #2, pin Direction (Output)
hm2/hm2_5i25.0: IO Pin 011 (P3-08): StepGen #3, pin Step (Output)
hm2/hm2_5i25.0: IO Pin 012 (P3-09): StepGen #3, pin Direction (Output)
hm2/hm2_5i25.0: IO Pin 013 (P3-10): IOPort
hm2/hm2_5i25.0: IO Pin 014 (P3-11): IOPort
hm2/hm2_5i25.0: IO Pin 015 (P3-12): IOPort
hm2/hm2_5i25.0: IO Pin 016 (P3-13): IOPort
The Sherline CNC driver requires an adapter to swap the Step and Direction signals on the output connector.
The Sherline controller expects active-low Step signals:
# invert step output bits
setp [HMOT](FPGA0).gpio.002.invert_output 1
setp [HMOT](FPGA0).gpio.006.invert_output 1
setp [HMOT](FPGA0).gpio.009.invert_output 1
setp [HMOT](FPGA0).gpio.011.invert_output 1
The Y and Z drivers needed the same Direction swap as before:
# invert direction output bits
setp [HMOT](FPGA0).gpio.008.invert_output 1
setp [HMOT](FPGA0).gpio.010.invert_output 1
Because the 5I25 uses 3.3 V logic with interface drivers to match the “parallel port” 5 V levels, it has different electrical characteristics than the parallel port built into the Dell Optiplex 760. Putting a 100 nF cap across the Probe input reduced, but did not eliminate, what looked like a nice 60 Hz signal on that long wire, so I added a firmware debouncer:
loadrt debounce cfg=2
addf debounce.0 servo-thread
setp debounce.0.delay 3
net probe-raw debounce.0.1.in [HMOT](FPGA0).gpio.003.in_not
net probe-in debounce.0.1.out
The additional 3 ms delay doesn’t amount to much distance, even were I to probe at the machine’s top 10 mm/s speed.
Although the seemingly identical Home switch input seemed stable, it got the same treatment:
net home-raw debounce.0.0.in [HMOT](FPGA0).gpio.013.in_not
net all-home debounce.0.0.out
The PID loops have a very simple setup, with P = 1000 and FF1 = 1, which seems entirely adequate without any attempt at tuning. The following errors seems to stay under 20 ppm, in the machine’s native inches, while cutting the standard Axis “splash G-Code” file with all the speeds cranked up to 24 in/min = 610 mm/min:

Claiming a 20 µinch error for a Sherline is certainly aspirational.
The INI and HAL files as a GitHub Gist:
# 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 | |
#****************************************** |
Adapting the HAL code driving my Joggy Thing to its new home didn’t go quite as smoothly, about which, more later.
One thought on “LinuxCNC: Mesa 5I25 For The Sherline Mill”
Comments are closed.