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.
Comments
One response to “LinuxCNC: Mesa 5I25 For The Sherline Mill”
[…] getting the Sherline mostly working with LinuxCNC 2.8 and the Mesa 5I25 FPGA card, I updated the HAL code turning the Logitech gamepad into The Joggy […]