Advanced Search

Search Results (Searched for: stepper spindle)

27 Mar 2024 16:15

I need a simple CSP example for CiA 402

Category: EtherCAT

I've been providing details in github.com/linuxcnc-ethercat/linuxcnc-ethercat/issues/180, but here's a quick summary of the hardware involved:
  • Leadshine 2CL3-EC507 (2-axis closed-loop stepper) with 2 steppers
  • Rovix ESD-A6 (6-axis open-loop 24V stepper) with 4 steppers
  • RTelligent ECT60 (1-axis closed-loop stepper) with 1 stepper
  • RTelligent ECR60 X2 (2-axis open-loop stepper) with 2 steppers
  • RTelligent DRV400E (1-axis DC servo) with 1 brushless drive
  • Omron MX2 (VFD) with a cheap spindle
I also have a Leadshine CANopen stepper drive on the way, to see how terribly painful it is do to EL6751->CANopen CiA 402.  I expect that the answer is "too painful to actually use", but people keep asking...
23 Mar 2024 21:31
Replied by garja on topic Huanyang Wiring To Mesa 7i96s

Huanyang Wiring To Mesa 7i96s

Category: General LinuxCNC Questions

=14.0ptI’m back again with a problem I’m not certain about. I wired everything the way that PCW said to wire it. The problem I have run into is when it comes to running the configuration wizard. =14.0pt =14.0ptIn the TB1/TB2 section, I don’t have any pin options, only the option to choose “Spindle PWM” and then I selected Pin Type of “PWM Gen-P”. Is that correct? I assume it’s like setting up stepper motors where no pins are included in the setup, just what function is being used. =14.0pt =14.0ptWhen it comes to TB3, I expected I’d find output pins 21-24 listed in the configuration, just the same way pins 00 – 10 were listed on the input side. I am not sure if 01 would be pin 20, 02 pin 21, 03 pin 22, 04 pin 23 and 05 pin 24? Is that correct? Pins 21
23 Mar 2024 16:10

Can't get backlash compensation to work

Category: Milling Machines

I have a new build using the 7i96s + 7i85s and closed loop stepper motors. I've worked through pncconf and am able to drive my motors and am getting encoder feedback. I'm trying to take a few thou (0.025-0.075mm) of backlash out of various axes by testing in Axis, but no matter what I set the backlash setting to on each axis, I still get the same backlash reading from my dial indicator. (Even when I set 1mm+ of backlash.) I've ensured STEPGEN_MAXACCEL is 2x MAX_ACCELERATION for each axis. Anyone know what I'm doing wrong?

One more note: pncconf did automatically assign the stepgen position-fb signals to the pos-fb net of each axis, which I had to comment out just to get Axis to open the configuration without throwing an error.

HAL file:
# Generated by PNCconf at Thu Mar 21 17:28:52 2024
# Using LinuxCNC version:  Master (2.9)
# 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_eth board_ip="10.10.10.10" config="num_encoders=5 num_pwmgens=1 num_stepgens=9 sserial_port_0=0xxxxxxx" 
setp    hm2_7i96s.0.pwmgen.pwm_frequency 20000
setp    hm2_7i96s.0.pwmgen.pdm_frequency 6000000
setp    hm2_7i96s.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s

addf hm2_7i96s.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.y.do-pid-calcs       servo-thread
addf pid.z.do-pid-calcs       servo-thread
addf pid.s.do-pid-calcs       servo-thread
addf hm2_7i96s.0.write         servo-thread
setp hm2_7i96s.0.dpll.01.timer-us -50
setp hm2_7i96s.0.stepgen.timer-number 1

# external output signals


# external input signals

# --- MIN-X ---
net min-x     <=  hm2_7i96s.0.inm.00.input-00

# --- MAX-X ---
net max-x     <=  hm2_7i96s.0.inm.00.input-01

# --- MIN-Y ---
net min-y     <=  hm2_7i96s.0.inm.00.input-02

# --- MAX-Y ---
net max-y     <=  hm2_7i96s.0.inm.00.input-03

# --- MIN-Z ---
net min-z     <=  hm2_7i96s.0.inm.00.input-04

# --- MAX-Z ---
net max-z     <=  hm2_7i96s.0.inm.00.input-05


#*******************
#  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.012700

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

# Step Gen signals/setup

setp   hm2_7i96s.0.stepgen.00.dirsetup        [JOINT_0]DIRSETUP
setp   hm2_7i96s.0.stepgen.00.dirhold         [JOINT_0]DIRHOLD
setp   hm2_7i96s.0.stepgen.00.steplen         [JOINT_0]STEPLEN
setp   hm2_7i96s.0.stepgen.00.stepspace       [JOINT_0]STEPSPACE
setp   hm2_7i96s.0.stepgen.00.position-scale  [JOINT_0]STEP_SCALE
setp   hm2_7i96s.0.stepgen.00.step_type        0
setp   hm2_7i96s.0.stepgen.00.control-type     1
setp   hm2_7i96s.0.stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   hm2_7i96s.0.stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-vel-cmd    <= joint.0.vel-cmd
net x-output     => hm2_7i96s.0.stepgen.00.velocity-cmd
# net x-pos-fb     <= hm2_7i96s.0.stepgen.00.position-fb
net x-pos-fb     => joint.0.motor-pos-fb
net x-enable     <= joint.0.amp-enable-out
net x-enable     => hm2_7i96s.0.stepgen.00.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96s.0.encoder.00.counter-mode 0
setp    hm2_7i96s.0.encoder.00.filter 1
setp    hm2_7i96s.0.encoder.00.index-invert 0
setp    hm2_7i96s.0.encoder.00.index-mask 0
setp    hm2_7i96s.0.encoder.00.index-mask-invert 0
setp    hm2_7i96s.0.encoder.00.scale  [JOINT_0]ENCODER_SCALE

net x-pos-fb               <=  hm2_7i96s.0.encoder.00.position
net x-vel-fb               <=  hm2_7i96s.0.encoder.00.velocity
net x-pos-fb               =>  joint.0.motor-pos-fb
net x-index-enable    joint.0.index-enable  <=>  hm2_7i96s.0.encoder.00.index-enable
net x-pos-rawcounts        <=  hm2_7i96s.0.encoder.00.rawcounts

# ---setup home / limit switch signals---

net x-home-sw     =>  joint.0.home-sw-in
net min-x     =>  joint.0.neg-lim-sw-in
net max-x     =>  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.012700

net y-index-enable  =>  pid.y.index-enable
net y-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   hm2_7i96s.0.stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   hm2_7i96s.0.stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   hm2_7i96s.0.stepgen.01.steplen         [JOINT_1]STEPLEN
setp   hm2_7i96s.0.stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   hm2_7i96s.0.stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   hm2_7i96s.0.stepgen.01.step_type        0
setp   hm2_7i96s.0.stepgen.01.control-type     1
setp   hm2_7i96s.0.stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   hm2_7i96s.0.stepgen.01.maxvel           [JOINT_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y-pos-cmd    <= joint.1.motor-pos-cmd
net y-vel-cmd    <= joint.1.vel-cmd
net y-output     => hm2_7i96s.0.stepgen.01.velocity-cmd
# net y-pos-fb     <= hm2_7i96s.0.stepgen.01.position-fb
net y-pos-fb     => joint.1.motor-pos-fb
net y-enable     <= joint.1.amp-enable-out
net y-enable     => hm2_7i96s.0.stepgen.01.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96s.0.encoder.01.counter-mode 0
setp    hm2_7i96s.0.encoder.01.filter 1
setp    hm2_7i96s.0.encoder.01.index-invert 0
setp    hm2_7i96s.0.encoder.01.index-mask 0
setp    hm2_7i96s.0.encoder.01.index-mask-invert 0
setp    hm2_7i96s.0.encoder.01.scale  [JOINT_1]ENCODER_SCALE

net y-pos-fb               <=  hm2_7i96s.0.encoder.01.position
net y-vel-fb               <=  hm2_7i96s.0.encoder.01.velocity
net y-pos-fb               =>  joint.1.motor-pos-fb
net y-index-enable    joint.1.index-enable  <=>  hm2_7i96s.0.encoder.01.index-enable
net y-pos-rawcounts        <=  hm2_7i96s.0.encoder.01.rawcounts

# ---setup home / limit switch signals---

net y-home-sw     =>  joint.1.home-sw-in
net min-y     =>  joint.1.neg-lim-sw-in
net max-y     =>  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.012700

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

# Step Gen signals/setup

setp   hm2_7i96s.0.stepgen.02.dirsetup        [JOINT_2]DIRSETUP
setp   hm2_7i96s.0.stepgen.02.dirhold         [JOINT_2]DIRHOLD
setp   hm2_7i96s.0.stepgen.02.steplen         [JOINT_2]STEPLEN
setp   hm2_7i96s.0.stepgen.02.stepspace       [JOINT_2]STEPSPACE
setp   hm2_7i96s.0.stepgen.02.position-scale  [JOINT_2]STEP_SCALE
setp   hm2_7i96s.0.stepgen.02.step_type        0
setp   hm2_7i96s.0.stepgen.02.control-type     1
setp   hm2_7i96s.0.stepgen.02.maxaccel         [JOINT_2]STEPGEN_MAXACCEL
setp   hm2_7i96s.0.stepgen.02.maxvel           [JOINT_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd    <= joint.2.motor-pos-cmd
net z-vel-cmd    <= joint.2.vel-cmd
net z-output     => hm2_7i96s.0.stepgen.02.velocity-cmd
# net z-pos-fb     <= hm2_7i96s.0.stepgen.02.position-fb
net z-pos-fb     => joint.2.motor-pos-fb
net z-enable     <= joint.2.amp-enable-out
net z-enable     => hm2_7i96s.0.stepgen.02.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96s.0.encoder.02.counter-mode 0
setp    hm2_7i96s.0.encoder.02.filter 1
setp    hm2_7i96s.0.encoder.02.index-invert 0
setp    hm2_7i96s.0.encoder.02.index-mask 0
setp    hm2_7i96s.0.encoder.02.index-mask-invert 0
setp    hm2_7i96s.0.encoder.02.scale  [JOINT_2]ENCODER_SCALE

net z-pos-fb               <=  hm2_7i96s.0.encoder.02.position
net z-vel-fb               <=  hm2_7i96s.0.encoder.02.velocity
net z-pos-fb               =>  joint.2.motor-pos-fb
net z-index-enable    joint.2.index-enable  <=>  hm2_7i96s.0.encoder.02.index-enable
net z-pos-rawcounts        <=  hm2_7i96s.0.encoder.02.rawcounts

# ---setup home / limit switch signals---

net z-home-sw     =>  joint.2.home-sw-in
net min-z     =>  joint.2.neg-lim-sw-in
net max-z     =>  joint.2.pos-lim-sw-in


#******************************
# 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-y  halui.axis.y.select
net jog-y-pos      halui.axis.y.plus
net jog-y-neg      halui.axis.y.minus
net jog-y-analog   halui.axis.y.analog
net y-is-homed     halui.joint.1.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.2.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

#  ---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---

net tool-change-request    <= iocontrol.0.tool-change
net tool-change-confirmed  => iocontrol.0.tool-changed
net tool-number            <= iocontrol.0.tool-prep-number

#  ---Use external manual tool change dialog---

loadusr -W hal_manualtoolchange
net tool-change-request    =>  hal_manualtoolchange.change
net tool-change-confirmed  <=  hal_manualtoolchange.changed
net tool-number            =>  hal_manualtoolchange.number

#  ---ignore tool prepare requests---
net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared

INI file:
# Generated by PNCconf at Thu Mar 21 17:28:52 2024
# Using LinuxCNC version:  Master (2.9)
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

[EMC]
MACHINE = my_LinuxCNC_test4
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 = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/lukecnc/linuxcnc/nc_files
INCREMENTS = 50mm 10mm 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 6.000000
MAX_LINEAR_VELOCITY = 25.000000
MIN_LINEAR_VELOCITY = 0.500000
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 180.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = gedit
GEOMETRY = xyz
CYCLE_TIME = 100

[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 G90 G94 G97 G64 P0.025

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
SERVO_PERIOD = 1000000

[HMOT]
# **** This is for info only ****
CARD0=hm2_7i96s.0

[HAL]
HALUI = halui
HALFILE = my_LinuxCNC_test4.hal
HALFILE = custom.hal
POSTGUI_HALFILE = custom_postgui.hal
SHUTDOWN = shutdown.hal

[HALUI]

[KINS]
JOINTS = 3
KINEMATICS = trivkins coordinates=XYZ

[TRAJ]
COORDINATES =  XYZ
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 3.75
MAX_LINEAR_VELOCITY = 37.50

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
TOOL_CHANGE_QUILL_UP = 1

#******************************************
[AXIS_X]
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 100.0
MIN_LIMIT = -160.0
MAX_LIMIT = 240.0

[JOINT_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 0.025
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 100.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 = 31.25
STEPGEN_MAXACCEL = 200.0
P = 250.0
I = 1.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.025
MAX_OUTPUT = 0.0
ENCODER_SCALE = -800.0
# these are in nanoseconds
DIRSETUP   = 5000
DIRHOLD    = 5000
STEPLEN    = 2000
STEPSPACE  = 2000
STEP_SCALE = -160.0
MIN_LIMIT = -160.0
MAX_LIMIT = 240.0
HOME_OFFSET = 0.0
HOME_SEQUENCE = 1
#******************************************

#******************************************
[AXIS_Y]
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 250.0
MIN_LIMIT = -50.0
MAX_LIMIT = 50.0

[JOINT_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 25.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 = 31.25
STEPGEN_MAXACCEL = 312.50
P = 250.0
I = 0.1
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.05
MAX_OUTPUT = 0.0
ENCODER_SCALE = 800.0
# these are in nanoseconds
DIRSETUP   = 5000
DIRHOLD    = 5000
STEPLEN    = 2000
STEPSPACE  = 2000
STEP_SCALE = 160.0
MIN_LIMIT = -50.0
MAX_LIMIT = 50.0
HOME_OFFSET = 0.0
HOME_SEQUENCE = 2
#******************************************

#******************************************
[AXIS_Z]
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 150.0
MIN_LIMIT = -250.0
MAX_LIMIT = 0.00

[JOINT_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 10.0
MIN_FERROR = 0.025
MAX_VELOCITY = 25.0
MAX_ACCELERATION = 150.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 = 46.88
STEPGEN_MAXACCEL = 300.0
P = 250.0
I = 0.5
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.05
MAX_OUTPUT = 0.0
ENCODER_SCALE = -800.0
# these are in nanoseconds
DIRSETUP   = 5000
DIRHOLD    = 5000
STEPLEN    = 2000
STEPSPACE  = 2000
STEP_SCALE = -160.0
MIN_LIMIT = -250.0
MAX_LIMIT = 0.00
HOME_OFFSET = 0.0
HOME_SEQUENCE = 0
#******************************************
19 Mar 2024 23:42

Closed loop stepper driver configuration help

Category: Basic Configuration

do you have a caliper you trust? Take the backlash adjustment out of the config files if any is coded in there. Start with the X-axis, for instance. Chuck up a square piece of steel in the mill head, or a round piece with at least one flat. Lock or clamp your spindle. Move the head to the right say 10cm or more. Clamp the caliper to the table with the depth spike against the square or flat chucked in the spindle so that as you move to the left, the depth spike is pushed into the caliper measuring the motion. You start with a movement to the right to take up the backlash. When you move to the left, the backlash will then have to be taken-up in that direction and most likely the caliper will read something less than the motion expected. So you move to the right 10cm, push the depth spike up against the flat, move back to the left 10cm and read the caliper. Ideally you should see 10CM. You will see 10cm minus your backlash +/- your resolution. This assumes no tool table is in play as well as absolute mode, but you get the idea.

You can code a little backlash compensation into linux CNC but if you have backlash, the compensation will give you near perfect measurements back and forth, but when you cut something with the perpendicular axis moving, the head is going to drift depending if you are climb milling or conventionally milling. You will notice scallops on the finished faces. Backlash compensation in the software might also cause following errors due to the take-up, don't know on LinuxCNC but that was a fault in Mach3/4(?) because the backlash wasn't accelerated correctly. It was assumed to be loose and it would just take-up the backlash expecting no-load on the servos.

lengthy message, but you should be able to figure out your backlash this way. Pushing on the head works, but it only shows you the backlash at that particular leadscrew setting.. the other trick is to put slightly oversized balls in the ballscrew. That will take up some backlash. You can also use compression washers in your motor mounts if your screws are directly coupled. You loosen your motor, uncouple the screw, pull it out slightly, and then tighten the coupler up. then use the compression washers to tighten the motor into the mount carefully. This can take-up some backlash in the end to end movement of the screw but you don't want to bend anything.

Jerry
18 Mar 2024 16:51 - 18 Mar 2024 16:55
Replied by smplc on topic Axis stopped moving

Axis stopped moving

Category: General LinuxCNC Questions

1. No watchdog LED (CR6) except when closing LinuxCNC that was opened in the command line terminal.
2. All wires okay including stepper drivers and spindle.
3. I tried jogging Z and X axes back and forth and no movement.
4. Step drives have power and their LED's green color lit. The main power supply output is 41 DCV.

Only the power on/off rocker switch wiring was interchanged to mount a new switch. The wires are replaced the same way.

The address was 10.10.10.1 at the .hal file and /interfaces file. I was using that address when version 2.9.1 and 2.9.2 awhile before the axes stopped moving. I changed to the address 10.10.10.10 both files and still no axes moving and no spindle rotating after MDI and S700 M3;. Also, I altered at the .ini file the X-axis limit to the previous setting and saved. However launching LinuxCNC still no axis and spindle movement.

Powering the control box off and on the 7i96s RJ45 LED's colored green and amber/yellow lit and the logic power (CR8) LED colored yellow lit. CR11-14 LED's aren't lit green until pinging the address 10.10.10.10.
18 Mar 2024 00:34

Getting Encoder Reading with 7i96s + 7i85s

Category: PnCConf Wizard

I'm working through PnCConf for a new build but I can't seem to get any kind of encoder readings when I test my stepper motors. I'm using a 7i96s + 7i85s card. The encoders are technically differential and have QAX, QAX/, QBX, and QBX/ signals. (No index pulse.) I was reading odd pulse voltages (only 1-2V with respect to ground) when I tried using the differential pulse, so now I'm running them as TTL (disconnected QAX/ and QBX/ signals) and changed the jumpers on the 7i85s to the "up" position. This gives 0 and 5 volt readings on both QAX and QBX when I rotate the encoder, but I'm still just seeing encoder readings of zero on the hal probe when I test the motor. 

I'm pretty sure I'm using the correct firmware (downloaded from mesa). I flashed the 7i96s_7i85sd.bin, which PnCConf seems to be discovering correctly (at least, I have the option to choose the encoders on the P1 tab). I'm also pretty sure everything is wired correctly, I'm testing encoder 0 on the TB3 connector of the 7i85s and have double checked the wiring multiple times. Also, I can get the 7i96s to drive the stepper, but again only seeing 0's on the encoder reading.

Here's my rough HAL file (I haven't really tuned anything in, mostly trying to get this issued solved first):
# Generated by PNCconf at Sun Mar 17 19:57:24 2024
# Using LinuxCNC version:  Master (2.9)
# 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_eth board_ip="10.10.10.10" config="num_encoders=6 num_pwmgens=1 num_stepgens=9 sserial_port_0=00xxxxxx" 
setp    hm2_7i96s.0.pwmgen.pwm_frequency 20000
setp    hm2_7i96s.0.pwmgen.pdm_frequency 6000000
setp    hm2_7i96s.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s

addf hm2_7i96s.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.y.do-pid-calcs       servo-thread
addf pid.z.do-pid-calcs       servo-thread
addf pid.s.do-pid-calcs       servo-thread
addf hm2_7i96s.0.write         servo-thread
setp hm2_7i96s.0.dpll.01.timer-us -50
setp hm2_7i96s.0.stepgen.timer-number 1

# external output signals


# 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
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.x.maxerror 0.012700

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

# Step Gen signals/setup

setp   hm2_7i96s.0.stepgen.00.dirsetup        [JOINT_0]DIRSETUP
setp   hm2_7i96s.0.stepgen.00.dirhold         [JOINT_0]DIRHOLD
setp   hm2_7i96s.0.stepgen.00.steplen         [JOINT_0]STEPLEN
setp   hm2_7i96s.0.stepgen.00.stepspace       [JOINT_0]STEPSPACE
setp   hm2_7i96s.0.stepgen.00.position-scale  [JOINT_0]STEP_SCALE
setp   hm2_7i96s.0.stepgen.00.step_type        0
setp   hm2_7i96s.0.stepgen.00.control-type     1
setp   hm2_7i96s.0.stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   hm2_7i96s.0.stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-vel-cmd    <= joint.0.vel-cmd
net x-output     => hm2_7i96s.0.stepgen.00.velocity-cmd
net x-pos-fb     <= hm2_7i96s.0.stepgen.00.position-fb
net x-pos-fb     => joint.0.motor-pos-fb
net x-enable     <= joint.0.amp-enable-out
net x-enable     => hm2_7i96s.0.stepgen.00.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96s.0.encoder.00.counter-mode 0
setp    hm2_7i96s.0.encoder.00.filter 1
setp    hm2_7i96s.0.encoder.00.index-invert 0
setp    hm2_7i96s.0.encoder.00.index-mask 0
setp    hm2_7i96s.0.encoder.00.index-mask-invert 0
setp    hm2_7i96s.0.encoder.00.scale  [JOINT_0]ENCODER_SCALE

net x-pos-fb               <=  hm2_7i96s.0.encoder.00.position
net x-vel-fb               <=  hm2_7i96s.0.encoder.00.velocity
net x-pos-fb               =>  joint.0.motor-pos-fb
net x-index-enable    joint.0.index-enable  <=>  hm2_7i96s.0.encoder.00.index-enable
net x-pos-rawcounts        <=  hm2_7i96s.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 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.012700

net y-index-enable  =>  pid.y.index-enable
net y-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   hm2_7i96s.0.stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   hm2_7i96s.0.stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   hm2_7i96s.0.stepgen.01.steplen         [JOINT_1]STEPLEN
setp   hm2_7i96s.0.stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   hm2_7i96s.0.stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   hm2_7i96s.0.stepgen.01.step_type        0
setp   hm2_7i96s.0.stepgen.01.control-type     1
setp   hm2_7i96s.0.stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   hm2_7i96s.0.stepgen.01.maxvel           [JOINT_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y-pos-cmd    <= joint.1.motor-pos-cmd
net y-vel-cmd    <= joint.1.vel-cmd
net y-output     => hm2_7i96s.0.stepgen.01.velocity-cmd
net y-pos-fb     <= hm2_7i96s.0.stepgen.01.position-fb
net y-pos-fb     => joint.1.motor-pos-fb
net y-enable     <= joint.1.amp-enable-out
net y-enable     => hm2_7i96s.0.stepgen.01.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96s.0.encoder.01.counter-mode 0
setp    hm2_7i96s.0.encoder.01.filter 1
setp    hm2_7i96s.0.encoder.01.index-invert 0
setp    hm2_7i96s.0.encoder.01.index-mask 0
setp    hm2_7i96s.0.encoder.01.index-mask-invert 0
setp    hm2_7i96s.0.encoder.01.scale  [JOINT_1]ENCODER_SCALE

net y-pos-fb               <=  hm2_7i96s.0.encoder.01.position
net y-vel-fb               <=  hm2_7i96s.0.encoder.01.velocity
net y-pos-fb               =>  joint.1.motor-pos-fb
net y-index-enable    joint.1.index-enable  <=>  hm2_7i96s.0.encoder.01.index-enable
net y-pos-rawcounts        <=  hm2_7i96s.0.encoder.01.rawcounts

# ---setup home / limit switch signals---

net y-home-sw     =>  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.012700

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

# Step Gen signals/setup

setp   hm2_7i96s.0.stepgen.02.dirsetup        [JOINT_2]DIRSETUP
setp   hm2_7i96s.0.stepgen.02.dirhold         [JOINT_2]DIRHOLD
setp   hm2_7i96s.0.stepgen.02.steplen         [JOINT_2]STEPLEN
setp   hm2_7i96s.0.stepgen.02.stepspace       [JOINT_2]STEPSPACE
setp   hm2_7i96s.0.stepgen.02.position-scale  [JOINT_2]STEP_SCALE
setp   hm2_7i96s.0.stepgen.02.step_type        0
setp   hm2_7i96s.0.stepgen.02.control-type     1
setp   hm2_7i96s.0.stepgen.02.maxaccel         [JOINT_2]STEPGEN_MAXACCEL
setp   hm2_7i96s.0.stepgen.02.maxvel           [JOINT_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd    <= joint.2.motor-pos-cmd
net z-vel-cmd    <= joint.2.vel-cmd
net z-output     => hm2_7i96s.0.stepgen.02.velocity-cmd
net z-pos-fb     <= hm2_7i96s.0.stepgen.02.position-fb
net z-pos-fb     => joint.2.motor-pos-fb
net z-enable     <= joint.2.amp-enable-out
net z-enable     => hm2_7i96s.0.stepgen.02.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96s.0.encoder.02.counter-mode 0
setp    hm2_7i96s.0.encoder.02.filter 1
setp    hm2_7i96s.0.encoder.02.index-invert 0
setp    hm2_7i96s.0.encoder.02.index-mask 0
setp    hm2_7i96s.0.encoder.02.index-mask-invert 0
setp    hm2_7i96s.0.encoder.02.scale  [JOINT_2]ENCODER_SCALE

net z-pos-fb               <=  hm2_7i96s.0.encoder.02.position
net z-vel-fb               <=  hm2_7i96s.0.encoder.02.velocity
net z-pos-fb               =>  joint.2.motor-pos-fb
net z-index-enable    joint.2.index-enable  <=>  hm2_7i96s.0.encoder.02.index-enable
net z-pos-rawcounts        <=  hm2_7i96s.0.encoder.02.rawcounts

# ---setup home / limit switch signals---

net z-home-sw     =>  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


#******************************
# 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-y  halui.axis.y.select
net jog-y-pos      halui.axis.y.plus
net jog-y-neg      halui.axis.y.minus
net jog-y-analog   halui.axis.y.analog
net y-is-homed     halui.joint.1.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.2.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

#  ---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---

net tool-change-request    <= iocontrol.0.tool-change
net tool-change-confirmed  => iocontrol.0.tool-changed
net tool-number            <= iocontrol.0.tool-prep-number

#  ---Use external manual tool change dialog---

loadusr -W hal_manualtoolchange
net tool-change-request    =>  hal_manualtoolchange.change
net tool-change-confirmed  <=  hal_manualtoolchange.changed
net tool-number            =>  hal_manualtoolchange.number

#  ---ignore tool prepare requests---
net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared

Anyone know what I'm doing wrong?
17 Mar 2024 19:07

Tool height setter and 3d probe inputs

Category: General LinuxCNC Questions

Hi,
ive got a 3 axis probe (NC) and a tool height setter(NO), im trying to put them into the same pin so I can use the same motion.probe-input.
I was following this example, but I keep getting an error that my tool_probe.in0 (and I assume in.1) are not defined

forum.linuxcnc.org/10-advanced-configura...nsor?start=10#233776

here is my current HAL. what am I missing here?

# Generated by PNCconf at Tue Jan 18 09:12:59 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 #num_dio=30 num_aio=30
loadrt hostmot2
loadrt hm2_eth board_ip="10.10.10.10" config=" num_encoders=5 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx"
setp    hm2_7i96.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
loadrt abs names=abs.0,abs.spindle
loadrt lowpass names=lowpass.spindle
loadrt scale names=scale.spindle
loadrt near

addf hm2_7i96.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.y.do-pid-calcs       servo-thread
addf pid.z.do-pid-calcs       servo-thread
addf pid.s.do-pid-calcs       servo-thread
addf scale.spindle            servo-thread
addf abs.spindle              servo-thread
addf lowpass.spindle          servo-thread
addf near.0                   servo-thread
addf hm2_7i96.0.write         servo-thread
addf abs.0              servo-thread

# external output signals

# --- COOLANT-MIST ---
net coolant-mist  =>     hm2_7i96.0.ssr.00.out-01


# external input signals

# --- MACHINE-ON ---
net external-machine-on <= hm2_7i96.0.gpio.003.in_not

# --- ESTOP-EXT ---
net estop-ext     <=  hm2_7i96.0.gpio.000.in

# --- PROBE-IN ---
#net probe-in     <=  hm2_7i96.0.gpio.001.in

net toolsetter-in     <=  hm2_7i96.0.gpio.001.in => tool_probe.in0

net probe-in     <=  hm2_7i96.0.gpio.002.in => tool_probe.in1

net tool-or-probe tool_probe.out


# --- Probe Blast---
#net probe-blast => hm2_7i96.0.ssr.00.out-02


#*******************
#  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-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   hm2_7i96.0.stepgen.00.dirsetup        [JOINT_0]DIRSETUP
setp   hm2_7i96.0.stepgen.00.dirhold         [JOINT_0]DIRHOLD
setp   hm2_7i96.0.stepgen.00.steplen         [JOINT_0]STEPLEN
setp   hm2_7i96.0.stepgen.00.stepspace       [JOINT_0]STEPSPACE
setp   hm2_7i96.0.stepgen.00.position-scale  [JOINT_0]STEP_SCALE
setp   hm2_7i96.0.stepgen.00.step_type        0
setp   hm2_7i96.0.stepgen.00.control-type     1
setp   hm2_7i96.0.stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   hm2_7i96.0.stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-vel-cmd    <= joint.0.vel-cmd
net x-output     <= hm2_7i96.0.stepgen.00.velocity-cmd
net x-pos-fb     <= hm2_7i96.0.stepgen.00.position-fb
net x-pos-fb     => joint.0.motor-pos-fb
net x-enable     <= joint.0.amp-enable-out
net x-enable     => hm2_7i96.0.stepgen.00.enable

# ---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 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-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   hm2_7i96.0.stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   hm2_7i96.0.stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   hm2_7i96.0.stepgen.01.steplen         [JOINT_1]STEPLEN
setp   hm2_7i96.0.stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   hm2_7i96.0.stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   hm2_7i96.0.stepgen.01.step_type        0
setp   hm2_7i96.0.stepgen.01.control-type     1
setp   hm2_7i96.0.stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   hm2_7i96.0.stepgen.01.maxvel           [JOINT_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y-pos-cmd    <= joint.1.motor-pos-cmd
net y-vel-cmd    <= joint.1.vel-cmd
net y-output     <= hm2_7i96.0.stepgen.01.velocity-cmd
net y-pos-fb     <= hm2_7i96.0.stepgen.01.position-fb
net y-pos-fb     => joint.1.motor-pos-fb
net y-enable     <= joint.1.amp-enable-out
net y-enable     => hm2_7i96.0.stepgen.01.enable

# ---setup home / limit switch signals---

net y-home-sw     =>  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-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   hm2_7i96.0.stepgen.02.dirsetup        [JOINT_2]DIRSETUP
setp   hm2_7i96.0.stepgen.02.dirhold         [JOINT_2]DIRHOLD
setp   hm2_7i96.0.stepgen.02.steplen         [JOINT_2]STEPLEN
setp   hm2_7i96.0.stepgen.02.stepspace       [JOINT_2]STEPSPACE
setp   hm2_7i96.0.stepgen.02.position-scale  [JOINT_2]STEP_SCALE
setp   hm2_7i96.0.stepgen.02.step_type        0
setp   hm2_7i96.0.stepgen.02.control-type     1
setp   hm2_7i96.0.stepgen.02.maxaccel         [JOINT_2]STEPGEN_MAXACCEL
setp   hm2_7i96.0.stepgen.02.maxvel           [JOINT_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd    <= joint.2.motor-pos-cmd
net z-vel-cmd    <= joint.2.vel-cmd
net z-output     <= hm2_7i96.0.stepgen.02.velocity-cmd
net z-pos-fb     <= hm2_7i96.0.stepgen.02.position-fb
net z-pos-fb     => joint.2.motor-pos-fb
net z-enable     <= joint.2.amp-enable-out
net z-enable     => hm2_7i96.0.stepgen.02.enable

# ---setup home / limit switch signals---

net z-home-sw     =>  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

#*******************
#  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
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.s.maxerror 0.000500

net spindle-index-enable  <=> pid.s.index-enable
net spindle-enable        =>  pid.s.enable
net spindle-vel-cmd-rpm     => pid.s.command
net spindle-vel-fb-rpm      => pid.s.feedback
net spindle-output        <=  pid.s.output

# Step Gen signals/setup

setp   hm2_7i96.0.stepgen.03.dirsetup        [SPINDLE_0]DIRSETUP
setp   hm2_7i96.0.stepgen.03.dirhold         [SPINDLE_0]DIRHOLD
setp   hm2_7i96.0.stepgen.03.steplen         [SPINDLE_0]STEPLEN
setp   hm2_7i96.0.stepgen.03.stepspace       [SPINDLE_0]STEPSPACE
setp   hm2_7i96.0.stepgen.03.position-scale  [SPINDLE_0]STEP_SCALE
setp   hm2_7i96.0.stepgen.03.step_type        0
setp   hm2_7i96.0.stepgen.03.control-type     1
setp   hm2_7i96.0.stepgen.03.maxaccel         [SPINDLE_0]MAX_ACCELERATION
setp   hm2_7i96.0.stepgen.03.maxvel           [SPINDLE_0]MAX_VELOCITY

net spindle-vel-cmd-rps  => hm2_7i96.0.stepgen.03.velocity-cmd

#(enables the DMM drive with the power button)
net machine-is-on <= halui.machine.is-on
net machine-is-on => hm2_7i96.0.ssr.00.out-00

#(enables the spindle stepgen)
net machine-is-enabled <= motion.motion-enabled
net machine-is-enabled => hm2_7i96.0.stepgen.03.enable

# ---Encoder feedback signals/setup---

setp    hm2_7i96.0.encoder.04.counter-mode 0
setp    hm2_7i96.0.encoder.04.filter 1
setp    hm2_7i96.0.encoder.04.index-invert 0
setp    hm2_7i96.0.encoder.04.index-mask 0
setp    hm2_7i96.0.encoder.04.index-mask-invert 0
setp    hm2_7i96.0.encoder.04.scale  [SPINDLE_0]ENCODER_SCALE
net spindle-revs             <=   hm2_7i96.0.encoder.04.position
net spindle-vel-fb-rps       <=   hm2_7i96.0.encoder.04.velocity
net spindle-index-enable     <=>  hm2_7i96.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---

net spindle-vel-cmd-rps    =>  near.0.in1
net spindle-vel-fb-rps-abs =>  near.0.in2

net spindle-at-speed       <=  near.0.out

net spindle-vel-fb-rps         =>  abs.0.in
net spindle-vel-fb-rps-abs abs.0.out

setp near.0.scale 1.000000
setp near.0.difference 2.00

#  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-y  halui.axis.y.select
net jog-y-pos      halui.axis.y.plus
net jog-y-neg      halui.axis.y.minus
net jog-y-analog   halui.axis.y.analog
net y-is-homed     halui.joint.1.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.2.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
net tool-or-probe     =>  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-ext     =>  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
17 Mar 2024 06:00 - 17 Mar 2024 06:01

Dimension accuracy loss under load

Category: Advanced Configuration

  I fixed Tram in Y axis with grub screw but X axis fix requires some modification of spindle holder, so it would take some time and will be done after current project.
Meanwhile, I think I found the source of backlash under the load but I don't know how to fix.

Attached image is the X axis ball screw bearing block. When it's not under the load, only screw/nut is spinning based on movement, but once it starts cutting, the inner bearing block itself spins together from time to time. Also I can see the bearing block wiggles within the bearing pocket. In other words, there is play in bearing and bearing pocket which will wiggle under the load. I suspect this is the source of backlash under the load.

Thing is, I don't know how to fix this.
First, how to unscrew this nut? Once put wrench and turn, it just make stepper motor attached on the other hand lose steps. I don't know how to hold the ball screw while unscrew this nut.
Assuming I unscrew the nut and removed the bearing from the pocket, how to set it in place? It's very thin gap.
I might redesign the whole Z plate but due to this wiggle, my hole cutting is always inaccurate and I'm not sure my new z plate has correct size for bearing to tightly fit.
Any insight would be appreciated.
12 Mar 2024 23:06

Ignoring task mode change while jogging (version 2.8.4-1-gb7824717b on buster)

Category: AXIS

Hi all, here is Ottorino from Italy.
I've been lurking (and learning !!) intermittently for years on this forum and on the knowledge base.
Thanks to you all.

I have a problem, possibly a bug very similar to this one
forum.linuxcnc.org/48-gladevcp/51399-mes...change-while-jogging
but I get the message on Axis.

Before rising a bug on github, I think is more correct and fair to ask here

Here below what I wrote for github, without submitting the bug

 1. the whole stuff has been working fine for a couple of weeks,  while I was setting it up (stepconf) for axis name, directions, homing sequence, joypad movement, gedit, git, emacs  and so on.

 2. When I was finally ready to mill something, the machine started to give problems

 3.When I switch to MDI to send a command such as 

g53 g0 x0y50z20, i.e.any random coordinates, or

g10 l2 p1 X38 Y140 Z25 or

any other command i get the messages

 "Ignoring task mode change while jogging"
 and
 "It is necessary to be in MDI mode to execute MDI commands" (translated from italian).

These messages appear also when I try to set the zero coordinates either with g10 l2... or by pressing the buttons on manual control (F3) of Axis interface.

 4. This happens 8-9 times out of ten, I would say, thus making the CNC unusable

 5. Please note that I keep my ~/linuxcnc dir under subversion with git, so I can go back and forth among configuration history and the problem described above is present also when I get back to the original working setup


## Information about my hardware and software:

Distributor ID:    Debian
Description:    Debian GNU/Linux 10 (buster)
Release:    10
Codename:    buster
freshly installed

Linux 8-CNC 4.19.0-26-rt-amd64 #1 SMP PREEMPT RT Debian 4.19.304-1 (2024-01-09) x86_64 GNU/Linux

Installed by means of iso image from linuxcnc site

 LinuxCNC/AXIS versione 2.8.4-1-gb7824717b  with a USB  Joypad
 
parallel port

The hardware is a Ronchini Minimill with its "2A stepper" controller,
four axis, but the rotary axis not (yet) installed.

The spindle is made by kress and can be activated by the flood output connected to a 220V rele (F8 on keyboard)



 
11 Mar 2024 21:39

7i76e to Durapulse connection

Category: Driver Boards

Anything that I may have missed in here??

# Generated by PNCconf at Wed Nov  1 13:06:00 2023
# Using LinuxCNC version:  2.10.0~pre0
# 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_eth board_ip="10.10.10.10" config="num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=21xxxxxx" 
setp   hm2_7i76e.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.y2,pid.z,pid.w,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle

addf hm2_7i76e.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.y.do-pid-calcs       servo-thread 
addf pid.y2.do-pid-calcs      servo-thread 
addf pid.z.do-pid-calcs       servo-thread 
addf pid.w.do-pid-calcs       servo-thread 
addf pid.s.do-pid-calcs       servo-thread 
addf abs.spindle              servo-thread 
addf lowpass.spindle          servo-thread 
addf hm2_7i76e.0.write        servo-thread 
                                                         
setp hm2_7i76e.0.dpll.01.timer-us -50
setp hm2_7i76e.0.stepgen.timer-number 1

# external output signals
#net estop-out   => hm2_7i76e.0.7i76.0.0.output-07
net coolant-flood => hm2_7i76e.0.7i76.0.0.output-06

# external input signals

# --- MIN-HOME-W ---
net min-home-w     <=  hm2_7i76e.0.7i76.0.0.input-09-not

# --- MIN-HOME-X ---
net min-home-x     <=  hm2_7i76e.0.7i76.0.0.input-08-not

# --- MIN-HOME-Y ---
net min-home-y     <=  hm2_7i76e.0.7i76.0.0.input-12-not

# --- PROBE-IN ---
net probe-in     <=  hm2_7i76e.0.7i76.0.0.input-13-not

# --- MIN-HOME-Y2 ---
net min-home-y2     <=  hm2_7i76e.0.7i76.0.0.input-14-not

# --- MIN-HOME-Z ---
net max-home-z     <=  hm2_7i76e.0.7i76.0.0.input-15-not

#*******************
#  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.012700

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

# Step Gen signals/setup

setp   hm2_7i76e.0.stepgen.00.dirsetup        [JOINT_0]DIRSETUP
setp   hm2_7i76e.0.stepgen.00.dirhold         [JOINT_0]DIRHOLD
setp   hm2_7i76e.0.stepgen.00.steplen         [JOINT_0]STEPLEN
setp   hm2_7i76e.0.stepgen.00.stepspace       [JOINT_0]STEPSPACE
setp   hm2_7i76e.0.stepgen.00.position-scale  [JOINT_0]STEP_SCALE
setp   hm2_7i76e.0.stepgen.00.step_type        0
setp   hm2_7i76e.0.stepgen.00.control-type     1
setp   hm2_7i76e.0.stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   hm2_7i76e.0.stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net x-pos-cmd    <= joint.0.motor-pos-cmd
net x-vel-cmd    <= joint.0.vel-cmd
net x-output     => hm2_7i76e.0.stepgen.00.velocity-cmd
net x-pos-fb     <= hm2_7i76e.0.stepgen.00.position-fb
net x-pos-fb     => joint.0.motor-pos-fb
net x-enable     <= joint.0.amp-enable-out
net x-enable     => hm2_7i76e.0.stepgen.00.enable

# ---setup home / limit switch signals---

net min-home-x     =>  joint.0.home-sw-in
net min-home-x     =>  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.012700

net y-index-enable  =>  pid.y.index-enable
net y-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   hm2_7i76e.0.stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   hm2_7i76e.0.stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   hm2_7i76e.0.stepgen.01.steplen         [JOINT_1]STEPLEN
setp   hm2_7i76e.0.stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   hm2_7i76e.0.stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   hm2_7i76e.0.stepgen.01.step_type        0
setp   hm2_7i76e.0.stepgen.01.control-type     1
setp   hm2_7i76e.0.stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   hm2_7i76e.0.stepgen.01.maxvel           [JOINT_1]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y-pos-cmd    <= joint.1.motor-pos-cmd
net y-vel-cmd    <= joint.1.vel-cmd
net y-output     => hm2_7i76e.0.stepgen.01.velocity-cmd
net y-pos-fb     <= hm2_7i76e.0.stepgen.01.position-fb
net y-pos-fb     => joint.1.motor-pos-fb
net y-enable     <= joint.1.amp-enable-out
net y-enable     => hm2_7i76e.0.stepgen.01.enable

# ---setup home / limit switch signals---
net min-home-y => joint.1.home-sw-in
net min-home-y => joint.1.neg-lim-sw-in
net y-pos-limit => joint.1.pos-lim-sw-in


#*******************
#  Tandem AXIS Y2 JOINT 2
#*******************

setp   pid.y2.Pgain     [JOINT_2]P
setp   pid.y2.Igain     [JOINT_2]I
setp   pid.y2.Dgain     [JOINT_2]D
setp   pid.y2.bias      [JOINT_2]BIAS
setp   pid.y2.FF0       [JOINT_2]FF0
setp   pid.y2.FF1       [JOINT_2]FF1
setp   pid.y2.FF2       [JOINT_2]FF2
setp   pid.y2.deadband  [JOINT_2]DEADBAND
setp   pid.y2.maxoutput [JOINT_2]MAX_OUTPUT
setp   pid.y2.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.y2.maxerror 0.012700

net y2-index-enable  =>  pid.y2.index-enable
net y2-enable        =>  pid.y2.enable
net y2-pos-cmd       =>  pid.y2.command
net y2-pos-fb        =>  pid.y2.feedback
net y2-output        <=  pid.y2.output

# Step Gen signals/setup for tandem axis

setp   hm2_7i76e.0.stepgen.02.dirsetup        [JOINT_2]DIRSETUP
setp   hm2_7i76e.0.stepgen.02.dirhold         [JOINT_2]DIRHOLD
setp   hm2_7i76e.0.stepgen.02.steplen         [JOINT_2]STEPLEN
setp   hm2_7i76e.0.stepgen.02.stepspace       [JOINT_2]STEPSPACE
setp   hm2_7i76e.0.stepgen.02.position-scale  [JOINT_2]STEP_SCALE
setp   hm2_7i76e.0.stepgen.02.step_type        0
setp   hm2_7i76e.0.stepgen.02.control-type     1
setp   hm2_7i76e.0.stepgen.02.maxaccel         [JOINT_2]STEPGEN_MAXACCEL
setp   hm2_7i76e.0.stepgen.02.maxvel           [JOINT_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net y2-pos-cmd    <= joint.2.motor-pos-cmd
net y2-vel-cmd    <= joint.2.vel-cmd
net y2-output     => hm2_7i76e.0.stepgen.02.velocity-cmd
net y2-pos-fb     <= hm2_7i76e.0.stepgen.02.position-fb
net y2-pos-fb     => joint.2.motor-pos-fb
net y2-enable     <= joint.2.amp-enable-out
net y2-enable     => hm2_7i76e.0.stepgen.02.enable

# ---setup home / limit switch signals---
net min-home-y2 => joint.2.home-sw-in
net min-home-y2 => joint.2.neg-lim-sw-in
net y2-pos-limit => joint.2.pos-lim-sw-in

#*******************
#  AXIS Z JOINT 3
#*******************

setp   pid.z.Pgain     [JOINT_3]P
setp   pid.z.Igain     [JOINT_3]I
setp   pid.z.Dgain     [JOINT_3]D
setp   pid.z.bias      [JOINT_3]BIAS
setp   pid.z.FF0       [JOINT_3]FF0
setp   pid.z.FF1       [JOINT_3]FF1
setp   pid.z.FF2       [JOINT_3]FF2
setp   pid.z.deadband  [JOINT_3]DEADBAND
setp   pid.z.maxoutput [JOINT_3]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.012700

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

# Step Gen signals/setup

setp   hm2_7i76e.0.stepgen.03.dirsetup        [JOINT_3]DIRSETUP
setp   hm2_7i76e.0.stepgen.03.dirhold         [JOINT_3]DIRHOLD
setp   hm2_7i76e.0.stepgen.03.steplen         [JOINT_3]STEPLEN
setp   hm2_7i76e.0.stepgen.03.stepspace       [JOINT_3]STEPSPACE
setp   hm2_7i76e.0.stepgen.03.position-scale  [JOINT_3]STEP_SCALE
setp   hm2_7i76e.0.stepgen.03.step_type        0
setp   hm2_7i76e.0.stepgen.03.control-type     1
setp   hm2_7i76e.0.stepgen.03.maxaccel         [JOINT_3]STEPGEN_MAXACCEL
setp   hm2_7i76e.0.stepgen.03.maxvel           [JOINT_3]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net z-pos-cmd    <= joint.3.motor-pos-cmd
net z-vel-cmd    <= joint.3.vel-cmd
net z-output     => hm2_7i76e.0.stepgen.03.velocity-cmd
net z-pos-fb     <= hm2_7i76e.0.stepgen.03.position-fb
net z-pos-fb     => joint.3.motor-pos-fb
net z-enable     <= joint.3.amp-enable-out
net z-enable     => hm2_7i76e.0.stepgen.03.enable

# ---setup home / limit switch signals---
net max-home-z  => joint.3.home-sw-in
net max-home-z  => joint.3.neg-lim-sw-in
net z-neg-limit => joint.3.pos-lim-sw-in


#*******************
#  AXIS W JOINT 4
#*******************

setp   pid.w.Pgain     [JOINT_4]P
setp   pid.w.Igain     [JOINT_4]I
setp   pid.w.Dgain     [JOINT_4]D
setp   pid.w.bias      [JOINT_4]BIAS
setp   pid.w.FF0       [JOINT_4]FF0
setp   pid.w.FF1       [JOINT_4]FF1
setp   pid.w.FF2       [JOINT_4]FF2
setp   pid.w.deadband  [JOINT_4]DEADBAND
setp   pid.w.maxoutput [JOINT_4]MAX_OUTPUT
setp   pid.w.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp   pid.w.maxerror 0.012700

net w-index-enable  =>  pid.w.index-enable
net w-enable        =>  pid.w.enable
net w-pos-cmd       =>  pid.w.command
net w-pos-fb        =>  pid.w.feedback
net w-output        <=  pid.w.output

# Step Gen signals/setup

setp   hm2_7i76e.0.stepgen.04.dirsetup        [JOINT_4]DIRSETUP
setp   hm2_7i76e.0.stepgen.04.dirhold         [JOINT_4]DIRHOLD
setp   hm2_7i76e.0.stepgen.04.steplen         [JOINT_4]STEPLEN
setp   hm2_7i76e.0.stepgen.04.stepspace       [JOINT_4]STEPSPACE
setp   hm2_7i76e.0.stepgen.04.position-scale  [JOINT_4]STEP_SCALE
setp   hm2_7i76e.0.stepgen.04.step_type        0
setp   hm2_7i76e.0.stepgen.04.control-type     1
setp   hm2_7i76e.0.stepgen.04.maxaccel         [JOINT_4]STEPGEN_MAXACCEL
setp   hm2_7i76e.0.stepgen.04.maxvel           [JOINT_4]STEPGEN_MAXVEL

# ---closedloop stepper signals---

net w-pos-cmd    <= joint.4.motor-pos-cmd
net w-vel-cmd    <= joint.4.vel-cmd
net w-output     => hm2_7i76e.0.stepgen.04.velocity-cmd
net w-pos-fb     <= hm2_7i76e.0.stepgen.04.position-fb
net w-pos-fb     => joint.4.motor-pos-fb
net w-enable     <= joint.4.amp-enable-out
net w-enable     => hm2_7i76e.0.stepgen.04.enable

# ---setup home / limit switch signals---
#   net max-home-w  => joint.4.home-sw-in
#   net max-home-w  => joint.4.neg-lim-sw-in
#   net w-neg-limit => joint.4.pos-lim-sw-in
net min-home-w     =>  joint.4.home-sw-in
net min-home-w     =>  joint.4.neg-lim-sw-in
net w-pos-limit    =>  joint.4.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

# ---digital potentiometer output signals/setup---

setp   hm2_7i76e.0.7i76.0.0.spinout-minlim    [SPINDLE_0]OUTPUT_MIN_LIMIT
setp   hm2_7i76e.0.7i76.0.0.spinout-maxlim    [SPINDLE_0]OUTPUT_MAX_LIMIT
setp   hm2_7i76e.0.7i76.0.0.spinout-scalemax  [SPINDLE_0]OUTPUT_SCALE

net spindle-output      => hm2_7i76e.0.7i76.0.0.spinout
net spindle-enable      => hm2_7i76e.0.7i76.0.0.spinena
net spindle-ccw         => hm2_7i76e.0.7i76.0.0.spindir


# ---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


#******************************
# 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-y  halui.axis.y.select                               
net jog-y-pos      halui.axis.y.plus                                 
net jog-y-neg      halui.axis.y.minus                                
net jog-y-analog   halui.axis.y.analog                               
net y-is-homed     halui.joint.1.is-homed                            
net y2-is-homed    halui.joint.2.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.3.is-homed                            
net axis-select-w  halui.axis.w.select                               
net jog-w-pos      halui.axis.w.plus                                 
net jog-w-neg      halui.axis.w.minus                                
net jog-w-analog   halui.axis.w.analog                               
net w-is-homed     halui.joint.4.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

#  ---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---

net tool-change-request    <= iocontrol.0.tool-change
net tool-change-confirmed  => iocontrol.0.tool-changed
net tool-number            <= iocontrol.0.tool-prep-number

#  ---Use external manual tool change dialog---

loadusr -W hal_manualtoolchange                                                                        
net tool-change-request    =>  hal_manualtoolchange.change           
net tool-change-confirmed  <=  hal_manualtoolchange.changed          
net tool-number            =>  hal_manualtoolchange.number           
                                                                                                       
#  ---ignore tool prepare requests---
net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared

 
08 Mar 2024 20:39

How do I find out what setup I'm using (dialect, post-processor, etc)?

Category: General LinuxCNC Questions

It is using a Mesa 5i25 that is inside the PC and has a DB25 port that is the same shape and pinout as a parallel port, but much faster and is wired to a Mesa 7i76 that is on the machine, the stepper/servo drives are wired to it and so are input/outputs, sensors and spindle.
-
For simple 2.5D stuff look at Inkscape, it is very easy to use and can export gcode that LinuxCNC works perfectly with.
05 Mar 2024 04:56

ST-V2 5 Axis BOB clone, 2 different machines have recently failed enable high

Category: Driver Boards

I have a knee mill and a lathe controlled by the same LinuxCNC machine. Recently I noticed the lathe was enabling the steppers on startup. I think this resulted in burning up one of my closed loop steppers. 

Lathe has 2 steppers, rotary encoder and I just finished setting up pwm spindle control. BOB is only connected to PC through LPT cable. 
It has a 36V PSU with buck converted to 12V to power the BOB. The 12V has a second buck converter to 5V connected to PC , PCG. I confirmed on the lathe that the LPT port (disconnected) is setting pin 14 correctly, but I am always getting 5V on pin 14 of BOB. 

I ended up rewiring to pin 16 for the 2 drivers to get it back online. Now I am concerned that I will just keep burning out output pins.

The knee mill drives a relay off the enable pin that controls the stepper driver power supply. Recently I noticed the relay was always on but thought I had diagnosed it to the relay and not the input signal. 

Mill has 5 steppers, 48V PSU for drivers, PC PSU 12V and 5V connected to BOB 12V and 5V respectively.

I went to replace the relay for the mill and discovered it is the same problem. Pin 14 on the BOB is always high, now. It was working correctly before.

Both configurations share a common MPG handwheel and they are connected via 9805 chip and (2) SD-PEX10005 LPT cards.

What could cause these boards to fail in this way?

Any pointers appreciated, I am running out of parts and really need to be making things.

 
28 Feb 2024 07:10

Using HAL lincurve and offset to correct for a not-so-straight axis

Category: Show Your Stuff

I built my own CNC router with the long axis (I called it X for various reasons) at about 2.7m. It's all on 8020 profile and no matter how I tweaked it, I could never get the gantry to move in a straight line. It would shift reliably +/- 0.1mm (or about 0.005in), so I had an accuracy problem that was too large for my liking.

 

I got this same plot over and over at multiple Y locations, so lincurve  would be a good solution here together with offset .

Essentially, lincurve lets you define an equation of sorts, then lets you map the x value to the y value. In this case, I would map the input of my X of where the spindle is to the output offset I want to move my Y axis. The reverse of the error you see in the graph above. Then I use that offset and implement it in the controller using HAL offset.

The "equation" that you give lincurve however is not your usual y=f(x), but multiple points (up to 16) on the x,y graph. The lincurve link above explains it better than I would.

Here is a snippet from my HAL:
net y-index-enable => pid.y.index-enable
net y-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 hm2_7i76e.0.stepgen.01.dirsetup [JOINT_2]DIRSETUP
setp hm2_7i76e.0.stepgen.01.dirhold [JOINT_2]DIRHOLD
setp hm2_7i76e.0.stepgen.01.steplen [JOINT_2]STEPLEN
setp hm2_7i76e.0.stepgen.01.stepspace [JOINT_2]STEPSPACE
setp hm2_7i76e.0.stepgen.01.position-scale [JOINT_2]STEP_SCALE
setp hm2_7i76e.0.stepgen.01.step_type 0
setp hm2_7i76e.0.stepgen.01.control-type 1
setp hm2_7i76e.0.stepgen.01.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp hm2_7i76e.0.stepgen.01.maxvel [JOINT_2]STEPGEN_MAXVEL

# ---closedloop stepper signals---
# Alter Y position dependent on X position in order to straighten X axis
setp x_straight.x-val-00 0.0
setp x_straight.y-val-00 0.04341242632711628
setp x_straight.x-val-01 607.2917010709281
setp x_straight.y-val-01 -0.0941465387965644
setp x_straight.x-val-02 1150.4857125892602
setp x_straight.y-val-02 0.06777797847289474
setp x_straight.x-val-03 1405.8006869324868
setp x_straight.y-val-03 0.10253790211206171
setp x_straight.x-val-04 1662.603323359967
setp x_straight.y-val-04 0.07153820324398952
setp x_straight.x-val-05 1963.5065299510084
setp x_straight.y-val-05 -0.04292886830166562
setp x_straight.x-val-06 2341.4825252892224
setp x_straight.y-val-06 -0.053798901184427095
setp x_straight.x-val-07 2435.0
setp x_straight.y-val-07 -0.10441928397325695
net x-pos-fb => x_straight.in
net y-offset <= x_straight.out
net y-offset => x_straight_offset.offset
net y-pos-cmd-raw <= joint.2.motor-pos-cmd
net y-pos-cmd-raw => x_straight_offset.in
net y-pos-fb-raw <= hm2_7i76e.0.stepgen.01.position-fb
net y-pos-fb-raw => x_straight_offset.fb-in

net y-pos-cmd <= x_straight_offset.out
net y-vel-cmd <= joint.2.vel-cmd
net y-output => hm2_7i76e.0.stepgen.01.velocity-cmd
net y-pos-fb <= x_straight_offset.fb-out
net y-pos-fb => joint.2.motor-pos-fb
net y-enable <= joint.2.amp-enable-out
net y-enable => hm2_7i76e.0.stepgen.01.enable

And voila:
 
25 Feb 2024 14:30

stepper driven turret with index and home switch

Category: Turning

HI folks,

I am currently retrofitting an emco pc turn 50 lathe, it was missing it's electronics ( including the turret board). So far I have the axis, spindle control and feedback figured out. A few years back I configured a pc 5 turret but it had no position feedback or homing. 
My turret setup is comprised of the original "cheese wheel" with the two sensors, and a newly added stepper to drive the turret, the turret needs to move back to switch position and then run in reverse to lock against the ratchet. It has 6 positions. 

It seems to me that the carroussel comp should be able to drive it, though I've been warned by another user that the double trigger on the locking move could be an issue. 

I am unsure of how to link the carroussel comp into my hal file to the tool change routine, as well as how to setup the separate stepgen for the turret, and lastly, as I am already using the encoder pins of the mesa 7i96s for the spindle feedback, can. I use regular input pins to read the position? (case 'I" in the component I assume ).

thanks

 
 
25 Feb 2024 06:00 - 25 Feb 2024 09:48

ESP32/S2/S3 LinuxCNC Controller (6 axis hardware step gen), USB plug-and-play

Category: Computers and Hardware

With mesa it's streaming data as fast as possible to LinuxCNC but that was before offloading to hardware became a thing.
Which is fine.

However with offloading to external hardware you can produce the very nearly the same results with IOs being monitored in real time (down to 50 microseconds) and any changes get raised to host immediately + transfer delay.

Encoders are counted in hardware and updated values are sent to the host the moment they change or based on a frequency depending on the application. 99% of use-cases won't require a sub-millisecond constant streaming of data from whatever peripheral you wish to monitor. Specifically, for axis related motor encoder positions, they must be counted in hardware on the MCU with the data streamed back to the host, the good news is that it already does via the current built-in stepper position feedback and so adding motor encoders would be fairly straightforward. This allows for LinuxCNC to continue to perform closed-loop PID control of motor positions.

Spindle/lathe RPMs for rigid tapping would only require a certain interval - say a 5ms period - the current RPM of the motor feeds into a tuned PID on the host (as long as the encoder pulse counts are handled on the MCU in hardware).

MCU hardware handles all aspects that need to be done at a regular intervals. LinuxCNC simply processes the received data as it arrives from the MCU however LinuxCNC can continue to run its own loops for hal components as normal.

There will always be latency with any encapsulated medium, however given the use-case, all IO is monitored via interrupts, hardware counters and as a result the latency between host and MCU is less of an issue. 

The UDP latency via USB is around a 1.2ms, which when compared to a native ethernet interface at 0.47ms approx is actually very good.

With regards to motion -
All axis commanded position is continuously streamed to the MCU via UDP.
When there is a positional difference the command is added to a pulse queue and sent to the RMT peripheral for step pulse generation based on the positional difference.
The firmware runs in absolute position mode continuously but at high speed (try not to compare to velocity vs position mode in LinuxCNC since this is done in hardware regardless of motor velocity) The ESP32 RMT hardware peripheral maintains a track of the pulses which are converted to a motor position co-ordinate and can be read at any time.

As the host and MCU can easily send 1000 UDP packets per second - each of which include every axis' new commanded position (not pulses, actual axis co-ords) in each packet then positional errors are a non-issue.

Axis position feedback is sent to LinuxCNC immediately once a new commanded position packet is received or until the motor(s) reach their targeted position co-ords. Equally LinuxCNC hal ensures the motors are always at their desired position by comparing desired vs actual position and ensuring packets are generated to ensure they match in every loop. If they don't it will throw a joint follower error.

I will be providing axis follower error scope outputs in LinuxCNC to prove this soon - I'm currently tweaking the LWIP stack it so it's a nice and true flat line.

I could have probably just said "its all offloaded" but that would have been easy!

Hope I've explained it clearly enough

EDIT: formatting and reworded
EDIT2: cornholio, RE USB BULK transfers, The wording on that link is very generalised. It depends on many things, but realistically speaking that's less of an issue today. You really need to push the bus alot for timing to even to start to become even a minor issue. It would require lots of high IO devices on the same roof hub, e.g  disks, 4k webcams etc, then *maybe* you'd see the odd stalled EP. The firmware handles those conditions anyway. Please take note of what I've mentioned above. The proof will be once I have optimised everything and show the results in detail via datasets. Please do take the time to watch the more recent YouTube videos that I've published for an initial idea of performance. The iperf udp jitter results I have should help ease any concerns. Will share in due course...
EDIT3: Do remember its use case specific. The data sizes exchanged between host and MCU over USB is tiny, less than 100 bytes per packet. That helps to additionally ensure the transfers are executed fast. I've tested a 1500 bytes packets (standard mtu) at 10k pps and latency is stable. Its all pretty standard stuff these days. 4G/5G dongles etc
Displaying 106 - 120 out of 168 results.
Time to create page: 0.811 seconds
Powered by Kunena Forum