Advanced Search

Search Results (Searched for: stepper spindle)

Today 07:16

Can not get stepper motors to move with Gecko g250x drivers

Category: PnCConf Wizard

As I stated previously, my knowledge of electronics is somewhat dated.

I thought if I connected the V- (48v PSU) and COM (5v/12v PSU) to earth, I was potentially creating a Ground Loop, which I understood was potentially harmful to electronics. But I do realize that this means I have a floating ground.

So, I tied V- and COM to earth. However, this did not resolve the issue I am having.

I did find that my spindle contactor was closed as soon as I powered the system, so I have something misconfigured there.
18 Apr 2024 21:49

Arcs / Circles not concentric

Category: General LinuxCNC Questions

Greetings,

I have encountered a (for me) rather strange issue that I, even after a day of experimenting, can't seem to fully understand.
I have a stepper-motor driven CNC that used to work marvelous for years until recently, when I decided to update the machine to LinuxCNC 2.9.1. That update gave me nothing but pain, i.e. latency increased by a factor of 10, my touch screen was no longer working, operation of gmoccapy was incredibly sluggish etc.

I was quite busy otherwise, so I simply ignored the problem for a while, stuck to operating the machine with an external keyboard and continued. Yesterday, I eventually had to mill some parts as part of an official project, so I decided I'd finally tackle the problem and tried the naive approach first, that is, updating to 2.9.2. That didn't do much at all, plus I discovered something completely different that has been bugging me every since: circles (or arcs, depending how you want to look at it) are no longer being milled concentric.

The arc/circle itself is fine, i.e. perfectly round, but given an arc and a circle with identical reference (center) points, they are slightly offset to each other. Naturally, I checked the DXF, both entities have the same center point - LinuxCNC also draws them correctly on top of each other when processing the GCODE. I also uploaded the code generated by my cam software to an online GCODE viewer, again, both entities are sitting on top of each other just fine.

Facing this new problem, I bit the bullet and downgraded back to 2.8.4, which resolved almost all of my problems, i.e. the touch screen works again, UI response time is instant and so on. It also made the actual issue better, out of 4 pairs of arcs/circles, only two pairs are now offset, and the offsets have become smaller in general. In general, we're talking of an absolute error distance of 1mm to 1.5mm though.

I'll attach the generated GCODE just in case someone wants to have a look at it, it's a really basic operation for a 6mm D - shaft encoder cap.
 

File Attachment:

File Name: gcode.txt
File Size:11 KB


Maybe I'm coping here, but I somehow doubt that it's e.g. step loss since the machine worked in an identical configuration with precision for literally years (and is well maintained). The Gecko drivers, motors and power supply are definitely capable of driving the machine. Plus, I'm cutting decorative knobs out of wood here with a 2kW spindle, so nothing demanding. I'm also running Mesa interface cards. I'll run a few more ops and check position accuracy with a dial test indicator again, but so far, everything looked good.

Does anyone have any idea what I could check to narrow my problem down further? Any ideas, approaches, pointers would be appreciated.

Cheers,

James

 
18 Apr 2024 14:00

Steppers work ok in pncconf tests but not with Axis

Category: AXIS

# Generated by PNCconf at Wed Apr 17 15:26:19 2024
# 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
loadrt hostmot2
loadrt hm2_pci config="num_encoders=1 num_pwmgens=0 num_stepgens=5 sserial_port_0=00xxxx"
setp hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s

addf hm2_5i25.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_5i25.0.write servo-thread

# external output signals


# external input signals


# --- BOTH-X ---
net both-x <= hm2_5i25.0.7i76.0.0.input-00

# --- HOME-X ---
net home-x <= hm2_5i25.0.7i76.0.0.input-01

# --- BOTH-Y ---
net both-y <= hm2_5i25.0.7i76.0.0.input-02

# --- HOME-Y ---
net home-y <= hm2_5i25.0.7i76.0.0.input-03

# --- BOTH-Z ---
net both-z <= hm2_5i25.0.7i76.0.0.input-04

# --- HOME-Z ---
net home-z <= hm2_5i25.0.7i76.0.0.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.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_5i25.0.stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [JOINT_0]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [JOINT_0]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [JOINT_0]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [JOINT_0]STEP_SCALE
setp hm2_5i25.0.stepgen.00.step_type 0
setp hm2_5i25.0.stepgen.00.control-type 1
setp hm2_5i25.0.stepgen.00.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp hm2_5i25.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_5i25.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i25.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_5i25.0.stepgen.00.enable

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

net home-x => joint.0.home-sw-in
net both-x => joint.0.neg-lim-sw-in
net both-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.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_5i25.0.stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp hm2_5i25.0.stepgen.01.dirhold [JOINT_1]DIRHOLD
setp hm2_5i25.0.stepgen.01.steplen [JOINT_1]STEPLEN
setp hm2_5i25.0.stepgen.01.stepspace [JOINT_1]STEPSPACE
setp hm2_5i25.0.stepgen.01.position-scale [JOINT_1]STEP_SCALE
setp hm2_5i25.0.stepgen.01.step_type 0
setp hm2_5i25.0.stepgen.01.control-type 1
setp hm2_5i25.0.stepgen.01.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp hm2_5i25.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_5i25.0.stepgen.01.velocity-cmd
net y-pos-fb <= hm2_5i25.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_5i25.0.stepgen.01.enable

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

net home-y => joint.1.home-sw-in
net both-y => joint.1.neg-lim-sw-in
net both-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.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_5i25.0.stepgen.02.dirsetup [JOINT_2]DIRSETUP
setp hm2_5i25.0.stepgen.02.dirhold [JOINT_2]DIRHOLD
setp hm2_5i25.0.stepgen.02.steplen [JOINT_2]STEPLEN
setp hm2_5i25.0.stepgen.02.stepspace [JOINT_2]STEPSPACE
setp hm2_5i25.0.stepgen.02.position-scale [JOINT_2]STEP_SCALE
setp hm2_5i25.0.stepgen.02.step_type 0
setp hm2_5i25.0.stepgen.02.control-type 1
setp hm2_5i25.0.stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp hm2_5i25.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_5i25.0.stepgen.02.velocity-cmd
net z-pos-fb <= hm2_5i25.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_5i25.0.stepgen.02.enable

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

net home-z => joint.2.home-sw-in
net both-z => joint.2.neg-lim-sw-in
net both-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---

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



# Generated by PNCconf at Wed Apr 17 15:26:19 2024
# Using LinuxCNC version: 2.8
# If you make changes to this file, they will be
# overwritten when you run PNCconf again

[EMC]
MACHINE = my_LinuxCNC_machine
DEBUG = 0
VERSION = 1.1

[DISPLAY]
DISPLAY = gmoccapy
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/jack/linuxcnc/nc_files
INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 1.000000
MIN_LINEAR_VELOCITY = 0.016670
DEFAULT_ANGULAR_VELOCITY = 12.000000
MAX_ANGULAR_VELOCITY = 180.000000
MIN_ANGULAR_VELOCITY = 1.666667
EDITOR = gedit
GEOMETRY = xyz

[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 = G20 G40 G90 G94 G97 G64 P0.001

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

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

[HAL]
HALUI = halui
HALFILE = my_LinuxCNC_machine.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

[HALUI]
MDI_COMMAND = G10 L20 P0 X0 ( Set X to zero )
MDI_COMMAND = G10 L20 P0 Y0 ( Set Y to zero )
MDI_COMMAND = G10 L20 P0 Z0 ( Set Z to zero )

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

[TRAJ]
COORDINATES = XYZ
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 0.23
MAX_LINEAR_VELOCITY = 2.25

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

#******************************************
[AXIS_X]
MAX_VELOCITY = 2.25
MAX_ACCELERATION = 5.0
MIN_LIMIT = -19.0
MAX_LIMIT = 1.25

[JOINT_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 2.25
MAX_ACCELERATION = 5.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 = 2.81
STEPGEN_MAXACCEL = 6.25
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 = 500
DIRHOLD = 500
STEPLEN = 5050
STEPSPACE = 5050
STEP_SCALE = 13546.666
MIN_LIMIT = -19.0
MAX_LIMIT = 1.25
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 0.066667
HOME_LATCH_VEL = 0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_SEQUENCE = 1
#******************************************

#******************************************
[AXIS_Y]
MAX_VELOCITY = 2.25
MAX_ACCELERATION = 5.0
MIN_LIMIT = -14.0
MAX_LIMIT = 1.0

[JOINT_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 2.25
MAX_ACCELERATION = 5.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 = 2.81
STEPGEN_MAXACCEL = 6.25
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 = 500
DIRHOLD = 500
STEPLEN = 5000
STEPSPACE = 5000
STEP_SCALE = 13546.666
MIN_LIMIT = -14.0
MAX_LIMIT = 1.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 0.066667
HOME_LATCH_VEL = 0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_SEQUENCE = 2
#******************************************

#******************************************
[AXIS_Z]
MAX_VELOCITY = 0.216666666667
MAX_ACCELERATION = 5.0
MIN_LIMIT = -17.0
MAX_LIMIT = 0.001

[JOINT_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 0.216666666667
MAX_ACCELERATION = 5.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 = 0.27
STEPGEN_MAXACCEL = 6.25
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 = 500
DIRHOLD = 500
STEPLEN = 5000
STEPSPACE = 5000
STEP_SCALE = -13546.666
MIN_LIMIT = -17.0
MAX_LIMIT = 0.001
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 0.066667
HOME_LATCH_VEL = 0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_SEQUENCE = 0
#******************************************
16 Apr 2024 20:28

No input device matching 'none' was found (1 devices checked)

Category: General LinuxCNC Questions

cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.1.0-20-rt-amd64 root=UUID=be81bdd1-24cc-432f-a985-5fdf3d4cfb6e ro initrd=/install/gtk/initrd.gz quiet

hal
# Generated by PNCconf at Mon Apr 15 17:49:17 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=1 num_pwmgens=1 num_stepgens=5 sserial_port_0=0xxxxxxx"
setp [HMOT](CARD0).pwmgen.pwm_frequency 20000
setp [HMOT](CARD0).pwmgen.pdm_frequency 6000000
setp [HMOT](CARD0).watchdog.timeout_ns 5000000
loadusr -W hal_input -KRAL none

loadrt pid names=pid.x,pid.y,pid.z,pid.s
loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10 numBits=50 numWords=50
loadrt mux16 names=jogspeed

addf [HMOT](CARD0).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 classicladder.0.refresh servo-thread
addf jogspeed servo-thread
addf [HMOT](CARD0).write servo-thread
setp [HMOT](CARD0).dpll.01.timer-us -50
setp [HMOT](CARD0).stepgen.timer-number 1

# external output signals

# --- SPINDLE-ENABLE ---
net spindle-enable => [HMOT](CARD0).outm.00.out-05


# external input signals

# --- MIN-Z ---
net min-z <= [HMOT](CARD0).gpio.000.in

# --- MAX-HOME-Z ---
net max-home-z <= [HMOT](CARD0).gpio.001.in

# --- MAX-X ---
net max-x <= [HMOT](CARD0).gpio.003.in

# --- MIN-HOME-Y ---
net min-home-y <= [HMOT](CARD0).gpio.004.in

# --- MAX-Y ---
net max-y <= [HMOT](CARD0).gpio.005.in

# --- ESTOP-EXT ---
net estop-ext <= [HMOT](CARD0).gpio.006.in


#*******************
# 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 [HMOT](CARD0).stepgen.01.dirsetup [JOINT_0]DIRSETUP
setp [HMOT](CARD0).stepgen.01.dirhold [JOINT_0]DIRHOLD
setp [HMOT](CARD0).stepgen.01.steplen [JOINT_0]STEPLEN
setp [HMOT](CARD0).stepgen.01.stepspace [JOINT_0]STEPSPACE
setp [HMOT](CARD0).stepgen.01.position-scale [JOINT_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.01.step_type 0
setp [HMOT](CARD0).stepgen.01.control-type 1
setp [HMOT](CARD0).stepgen.01.maxaccel [JOINT_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.01.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 => [HMOT](CARD0).stepgen.01.velocity-cmd
net x-pos-fb <= [HMOT](CARD0).stepgen.01.position-fb
net x-pos-fb => joint.0.motor-pos-fb
net x-enable <= joint.0.amp-enable-out
net x-enable => [HMOT](CARD0).stepgen.01.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 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.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 [HMOT](CARD0).stepgen.00.dirsetup [JOINT_1]DIRSETUP
setp [HMOT](CARD0).stepgen.00.dirhold [JOINT_1]DIRHOLD
setp [HMOT](CARD0).stepgen.00.steplen [JOINT_1]STEPLEN
setp [HMOT](CARD0).stepgen.00.stepspace [JOINT_1]STEPSPACE
setp [HMOT](CARD0).stepgen.00.position-scale [JOINT_1]STEP_SCALE
setp [HMOT](CARD0).stepgen.00.step_type 0
setp [HMOT](CARD0).stepgen.00.control-type 1
setp [HMOT](CARD0).stepgen.00.maxaccel [JOINT_1]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.00.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 => [HMOT](CARD0).stepgen.00.velocity-cmd
net y-pos-fb <= [HMOT](CARD0).stepgen.00.position-fb
net y-pos-fb => joint.1.motor-pos-fb
net y-enable <= joint.1.amp-enable-out
net y-enable => [HMOT](CARD0).stepgen.00.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 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.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 [HMOT](CARD0).stepgen.02.dirsetup [JOINT_2]DIRSETUP
setp [HMOT](CARD0).stepgen.02.dirhold [JOINT_2]DIRHOLD
setp [HMOT](CARD0).stepgen.02.steplen [JOINT_2]STEPLEN
setp [HMOT](CARD0).stepgen.02.stepspace [JOINT_2]STEPSPACE
setp [HMOT](CARD0).stepgen.02.position-scale [JOINT_2]STEP_SCALE
setp [HMOT](CARD0).stepgen.02.step_type 0
setp [HMOT](CARD0).stepgen.02.control-type 1
setp [HMOT](CARD0).stepgen.02.maxaccel [JOINT_2]STEPGEN_MAXACCEL
setp [HMOT](CARD0).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 => [HMOT](CARD0).stepgen.02.velocity-cmd
net z-pos-fb <= [HMOT](CARD0).stepgen.02.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => [HMOT](CARD0).stepgen.02.enable

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

net max-home-z => joint.2.home-sw-in
net min-z => joint.2.neg-lim-sw-in
net max-home-z => 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 [HMOT](CARD0).stepgen.04.dirsetup [SPINDLE_0]DIRSETUP
setp [HMOT](CARD0).stepgen.04.dirhold [SPINDLE_0]DIRHOLD
setp [HMOT](CARD0).stepgen.04.steplen [SPINDLE_0]STEPLEN
setp [HMOT](CARD0).stepgen.04.stepspace [SPINDLE_0]STEPSPACE
setp [HMOT](CARD0).stepgen.04.position-scale [SPINDLE_0]STEP_SCALE
setp [HMOT](CARD0).stepgen.04.step_type 0
setp [HMOT](CARD0).stepgen.04.control-type 1
setp [HMOT](CARD0).stepgen.04.maxaccel [SPINDLE_0]STEPGEN_MAXACCEL
setp [HMOT](CARD0).stepgen.04.maxvel [SPINDLE_0]STEPGEN_MAXVEL

net machine-is-on => [HMOT](CARD0).stepgen.04.enable
net spindle-vel-cmd-rps => [HMOT](CARD0).stepgen.04.velocity-cmd
net spindle-vel-fb-rps <= [HMOT](CARD0).stepgen.04.velocity-fb
# ---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 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

# ---USB device jog button signals---

# connect selectable mpg jog speeds
net jog-speed-a => jogspeed.sel0
net jog-speed-b => jogspeed.sel1
net jog-speed <= jogspeed.out-f
setp jogspeed.in00 0.100000
setp jogspeed.in01 1.000000
setp jogspeed.in02 10.000000
setp jogspeed.in03 100.000000

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

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

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


# Load Classicladder without GUI (can reload LADDER GUI in AXIS GUI

loadusr classicladder --nogui custom.clp

ini:
# Generated by PNCconf at Mon Apr 15 17:49:17 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 = GSF1000-5
DEBUG = 0
VERSION = 1.1

[DISPLAY]
DISPLAY = gmoccapy
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/mill/linuxcnc/nc_files
INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 1.000000
MIN_LINEAR_VELOCITY = 0.016670
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 = G20 G40 G90 G94 G97 G64 P0.001

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

[HMOT]
CARD0=hm2_7i96s.0

[HAL]
HALUI = halui
HALFILE = GSF1000-5.hal
HALFILE = custom.hal
POSTGUI_HALFILE = gmoccapy_postgui.hal
POSTGUI_HALFILE = custom_postgui.hal
SHUTDOWN = shutdown.hal

[HALUI]

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

[TRAJ]
COORDINATES = XYZ
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 0.10
MAX_LINEAR_VELOCITY = 1.00

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

#******************************************
[AXIS_X]
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
MIN_LIMIT = -0.0
MAX_LIMIT = 24.0

[JOINT_0]
TYPE = LINEAR
HOME = 12.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.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 = 2.00
STEPGEN_MAXACCEL = 60.00
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 = 10000
DIRHOLD = 10000
STEPLEN = 5000
STEPSPACE = 5000
STEP_SCALE = 1016.0
BACKLASH = 0.0
MIN_LIMIT = -0.0
MAX_LIMIT = 24.0
HOME_OFFSET = 12.0
HOME_SEQUENCE = 2
#******************************************

#******************************************
[AXIS_Y]
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
MIN_LIMIT = -0.0
MAX_LIMIT = 12.0

[JOINT_1]
TYPE = LINEAR
HOME = 6.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.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 = 2.00
STEPGEN_MAXACCEL = 60.00
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 = 10000
DIRHOLD = 10000
STEPLEN = 5000
STEPSPACE = 5000
STEP_SCALE = 1016.0
BACKLASH = 0.0
MIN_LIMIT = -0.0
MAX_LIMIT = 12.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -0.050000
HOME_LATCH_VEL = -0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 3
#******************************************

#******************************************
[AXIS_Z]
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
MIN_LIMIT = -4.0
MAX_LIMIT = 9.0

[JOINT_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.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 = 2.00
STEPGEN_MAXACCEL = 60.00
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 = 10000
DIRHOLD = 10000
STEPLEN = 5000
STEPSPACE = 5000
STEP_SCALE = 1016.0
BACKLASH = 0.0
MIN_LIMIT = -4.0
MAX_LIMIT = 9.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -0.050000
HOME_LATCH_VEL = -0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1
#******************************************

[SPINDLE_0]
MAX_VELOCITY = 2000.0
MAX_ACCELERATION = 300.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 = 2500.00
STEPGEN_MAXACCEL = 375.00
P = 0.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 1250.0
# these are in nanoseconds
DIRSETUP = 10000
DIRHOLD = 10000
STEPLEN = 5000
STEPSPACE = 5000
STEP_SCALE = 200.0

ping 10.10.10.10
PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data.
64 bytes from 10.10.10.10: icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from 10.10.10.10: icmp_seq=2 ttl=64 time=0.095 ms
64 bytes from 10.10.10.10: icmp_seq=3 ttl=64 time=0.098 ms
64 bytes from 10.10.10.10: icmp_seq=4 ttl=64 time=0.077 ms
64 bytes from 10.10.10.10: icmp_seq=5 ttl=64 time=0.094 ms
64 bytes from 10.10.10.10: icmp_seq=6 ttl=64 time=0.101 ms
64 bytes from 10.10.10.10: icmp_seq=7 ttl=64 time=0.104 ms
64 bytes from 10.10.10.10: icmp_seq=8 ttl=64 time=0.075 ms
64 bytes from 10.10.10.10: icmp_seq=9 ttl=64 time=0.118 ms
64 bytes from 10.10.10.10: icmp_seq=10 ttl=64 time=0.073 ms
64 bytes from 10.10.10.10: icmp_seq=11 ttl=64 time=0.080 ms
64 bytes from 10.10.10.10: icmp_seq=12 ttl=64 time=0.075 ms
64 bytes from 10.10.10.10: icmp_seq=13 ttl=64 time=0.081 ms
64 bytes from 10.10.10.10: icmp_seq=14 ttl=64 time=0.097 ms
64 bytes from 10.10.10.10: icmp_seq=15 ttl=64 time=0.093 ms
64 bytes from 10.10.10.10: icmp_seq=16 ttl=64 time=0.072 ms
64 bytes from 10.10.10.10: icmp_seq=17 ttl=64 time=0.081 ms
64 bytes from 10.10.10.10: icmp_seq=18 ttl=64 time=0.079 ms
64 bytes from 10.10.10.10: icmp_seq=19 ttl=64 time=0.101 ms
^C
--- 10.10.10.10 ping statistics ---
19 packets transmitted, 19 received, 0% packet loss, time 18417ms
rtt min/avg/max/mdev = 0.072/0.093/0.176/0.023 ms

for hardware: Dell Vostro 270 with an i5 3.4ghz 4 core cpu with 16g ram, a firepro 2500(i think) gpu, and i have a second ethernet card in one of the other pci slots. to be honest, i have not tried it without all the extra hardware. i did all these upgrades so i didn't have issues with a slow PC right out of the box. i have a dell laptop with linuxcnc on it that i could try if i can't figure out how to get it running with this machine.

i don't know why the ping times are so abismal. they were half that yesterday. from what i am reading, it's virtualbox that is giving me the error. im not running linuxcnc through a VM but i have it on here so i can run the servo setup software. is there issues running VM's with linux cnc? i have no problem reinstalling the OS if that is what needs to happen.
14 Apr 2024 03:59

Spindle speed via SuperPID

Category: General LinuxCNC Questions

Thanks for the reply and sorry for the late response.
The reason I'm using the mx3660x2d firmware is according the docs for the bobs I have pin one is enable, see pic.
 

I'm using 0 - 5v out. I've been doing a lot of messing around with it and can't seem to get the M3 Sxxx to match what the SuperPID displays.
I've switched to qtdragon from axis due to a glade error when adding a spindle tab. The spindle speed in qtdragon matches the SuperPID display.

I believe this is my last ini and hal before giving up.

======================================================================
# Generated by PNCconf at Sat Apr 13 10:38:01 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 = MuttCNC_No-Limits_RPi4
DEBUG = 0
VERSION = 1.1

[DISPLAY]
DISPLAY = qtvcp qtdragon
PREFERENCE_FILE_PATH = WORKINGFOLDER/qtdragon.pref
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_0_OVERRIDE = 1.000000
MIN_SPINDLE_0_OVERRIDE = 0.500000
DEFAULT_SPINDLE_0_SPEED = 500
MIN_SPINDLE_0_SPEED = 100
MAX_SPINDLE_0_SPEED = 2500
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 6.000000
MAX_LINEAR_VELOCITY = 158.333333
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

[MDI_COMMAND_LIST]
MDI_COMMAND = G0 Z0;X0 Y0
MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0

[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]
CARD0=hm2_7c81.0

[HAL]
HALUI = halui
HALFILE = MuttCNC_No-Limits_RPi4.hal
HALFILE = custom.hal
POSTGUI_HALFILE = qtvcp_postgui.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 = 20.83
MAX_LINEAR_VELOCITY = 208.33
POSITION_FILE = position.txt

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

#******************************************
[AXIS_X]
MAX_VELOCITY = 208.33333333333334
MAX_ACCELERATION = 1150.0
MIN_LIMIT = -0.0
MAX_LIMIT = 785.0

[JOINT_0]
TYPE = LINEAR
HOME = 2.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 208.33333333333334
MAX_ACCELERATION = 1150.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 = 260.42
STEPGEN_MAXACCEL = 1437.5
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 0
# these are in nanoseconds
DIRSETUP   = 20000
DIRHOLD    = 20000
STEPLEN    = 5000
STEPSPACE  = 5000
STEP_SCALE = 160.9
MIN_LIMIT = -0.0
MAX_LIMIT = 785.0
HOME_OFFSET = 2.0
HOME_SEQUENCE = 2
#******************************************

#******************************************
[AXIS_Y]
MAX_VELOCITY = 208.33333333333334
MAX_ACCELERATION = 1150.0
MIN_LIMIT = -0.0
MAX_LIMIT = 283.0

[JOINT_1]
TYPE = LINEAR
HOME = 2.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 208.33333333333334
MAX_ACCELERATION = 1150.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 = 260.42
STEPGEN_MAXACCEL = 1437.5
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 0
# these are in nanoseconds
DIRSETUP   = 10000
DIRHOLD    = 10000
STEPLEN    = 5000
STEPSPACE  = 5000
STEP_SCALE = 159.1
MIN_LIMIT = -0.0
MAX_LIMIT = 283.0
HOME_OFFSET = 2.0
HOME_SEQUENCE = 3
#******************************************

#******************************************
[AXIS_Z]
MAX_VELOCITY = 46.666666666666664
MAX_ACCELERATION = 250.0
MIN_LIMIT = -150.0
MAX_LIMIT = 0.0

[JOINT_2]
TYPE = LINEAR
HOME = -2.0
FERROR = 10.0
MIN_FERROR = 1.0
MAX_VELOCITY = 46.666666666666664
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 = 58.33
STEPGEN_MAXACCEL = 312.5
P = 1000
I = 0
D = 0
FF0 = 0
FF1 = 1
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 0
# these are in nanoseconds
DIRSETUP   = 20000
DIRHOLD    = 20000
STEPLEN    = 5000
STEPSPACE  = 5000
STEP_SCALE = -804.2
MIN_LIMIT = -150.0
MAX_LIMIT = 0.0
HOME_OFFSET = -2.0
HOME_SEQUENCE = 1
#******************************************

[SPINDLE_0]
P = 0
I = 0
D = 0
FF0 = 1
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 25000.0
ENCODER_SCALE = 1
OUTPUT_SCALE = 50000
OUTPUT_MIN_LIMIT = 0
OUTPUT_MAX_LIMIT = 25000.0
======================================================================
======================================================================
# Generated by PNCconf at Sat Apr 13 10:38:01 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_rpspi config="firmware=hm2/7c81/MX3660X2.BIT num_encoders=2 num_pwmgens=2 num_stepgens=8 sserial_port_0=00xxxxxx" 
setp    [HMOT](CARD0).pwmgen.pwm_frequency 50
setp    [HMOT](CARD0).pwmgen.pdm_frequency 6000000
setp    [HMOT](CARD0).watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
loadrt scale names=scale.gear
loadrt near
loadrt mux16 names=ratio_select

addf [HMOT](CARD0).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 ratio_select             servo-thread
addf scale.gear               servo-thread
addf near.0                   servo-thread
addf [HMOT](CARD0).write         servo-thread
setp [HMOT](CARD0).dpll.01.timer-us -50
setp [HMOT](CARD0).stepgen.timer-number 1

# external output signals

# --- MACHINE-IS-ENABLED ---
setp [HMOT](CARD0).gpio.000.is_output true
net machine-is-enabled  =>     [HMOT](CARD0).gpio.000.out
setp [HMOT](CARD0).gpio.000.invert_output true

# --- MACHINE-IS-ENABLED ---
setp [HMOT](CARD0).gpio.019.is_output true
net machine-is-enabled  =>     [HMOT](CARD0).gpio.019.out
setp [HMOT](CARD0).gpio.019.invert_output true

# --- COOLANT-FLOOD ---
setp [HMOT](CARD0).gpio.039.is_output true
net coolant-flood  =>     [HMOT](CARD0).gpio.039.out

# --- COOLANT-MIST ---
setp [HMOT](CARD0).gpio.043.is_output true
net coolant-mist  =>     [HMOT](CARD0).gpio.043.out

# --- SPINDLE-ENABLE ---
setp [HMOT](CARD0).gpio.045.is_output true
net spindle-enable  =>     [HMOT](CARD0).gpio.045.out
setp [HMOT](CARD0).gpio.045.invert_output true


# external input signals

# --- ESTOP-EXT ---
net estop-ext     <=  [HMOT](CARD0).gpio.003.in


#*******************
#  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   [HMOT](CARD0).stepgen.04.dirsetup        [JOINT_0]DIRSETUP
setp   [HMOT](CARD0).stepgen.04.dirhold         [JOINT_0]DIRHOLD
setp   [HMOT](CARD0).stepgen.04.steplen         [JOINT_0]STEPLEN
setp   [HMOT](CARD0).stepgen.04.stepspace       [JOINT_0]STEPSPACE
setp   [HMOT](CARD0).stepgen.04.position-scale  [JOINT_0]STEP_SCALE
setp   [HMOT](CARD0).stepgen.04.step_type        0
setp   [HMOT](CARD0).stepgen.04.control-type     1
setp   [HMOT](CARD0).stepgen.04.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   [HMOT](CARD0).stepgen.04.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     => [HMOT](CARD0).stepgen.04.velocity-cmd
net x-pos-fb     <= [HMOT](CARD0).stepgen.04.position-fb
net x-pos-fb     => joint.0.motor-pos-fb
net x-enable     <= joint.0.amp-enable-out
net x-enable     => [HMOT](CARD0).stepgen.04.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.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   [HMOT](CARD0).stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   [HMOT](CARD0).stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   [HMOT](CARD0).stepgen.01.steplen         [JOINT_1]STEPLEN
setp   [HMOT](CARD0).stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   [HMOT](CARD0).stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   [HMOT](CARD0).stepgen.01.step_type        0
setp   [HMOT](CARD0).stepgen.01.control-type     1
setp   [HMOT](CARD0).stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   [HMOT](CARD0).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     => [HMOT](CARD0).stepgen.01.velocity-cmd
net y-pos-fb     <= [HMOT](CARD0).stepgen.01.position-fb
net y-pos-fb     => joint.1.motor-pos-fb
net y-enable     <= joint.1.amp-enable-out
net y-enable     => [HMOT](CARD0).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.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   [HMOT](CARD0).stepgen.02.dirsetup        [JOINT_2]DIRSETUP
setp   [HMOT](CARD0).stepgen.02.dirhold         [JOINT_2]DIRHOLD
setp   [HMOT](CARD0).stepgen.02.steplen         [JOINT_2]STEPLEN
setp   [HMOT](CARD0).stepgen.02.stepspace       [JOINT_2]STEPSPACE
setp   [HMOT](CARD0).stepgen.02.position-scale  [JOINT_2]STEP_SCALE
setp   [HMOT](CARD0).stepgen.02.step_type        0
setp   [HMOT](CARD0).stepgen.02.control-type     1
setp   [HMOT](CARD0).stepgen.02.maxaccel         [JOINT_2]STEPGEN_MAXACCEL
setp   [HMOT](CARD0).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     => [HMOT](CARD0).stepgen.02.velocity-cmd
net z-pos-fb     <= [HMOT](CARD0).stepgen.02.position-fb
net z-pos-fb     => joint.2.motor-pos-fb
net z-enable     <= joint.2.amp-enable-out
net z-enable     => [HMOT](CARD0).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
net ratio_select.out   pid.s.maxoutput 
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-pid-out  pid.s.output    => scale.gear.in
net gear-ratio       ratio_select.out-f => scale.gear.gain
setp ratio_select.in00 0.000200
setp ratio_select.in01 0.000040
net gear-select-a         =>  ratio_select.sel0
net spindle-output        <=  scale.gear.out

# ---PWM Generator signals/setup---

setp   [HMOT](CARD0).pwmgen.01.output-type 1
setp   [HMOT](CARD0).pwmgen.01.scale  [SPINDLE_0]OUTPUT_SCALE
setp    hm2_7c81.0.gpio.020.invert_output true


net spindle-output      => [HMOT](CARD0).pwmgen.01.value
net spindle-enable      => [HMOT](CARD0).pwmgen.01.enable

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

setp    [HMOT](CARD0).encoder.01.counter-mode 1
setp    [HMOT](CARD0).encoder.01.filter 1
setp    [HMOT](CARD0).encoder.01.index-invert 0
setp    [HMOT](CARD0).encoder.01.index-mask 0
setp    [HMOT](CARD0).encoder.01.index-mask-invert 0
setp    [HMOT](CARD0).encoder.01.scale  [SPINDLE_0]ENCODER_SCALE

net spindle-revs             <=   [HMOT](CARD0).encoder.01.position
net spindle-vel-fb-rps       <=   [HMOT](CARD0).encoder.01.velocity
net spindle-vel-fb-rpm       <=   [HMOT](CARD0).encoder.01.velocity-rpm
net spindle-index-enable     <=>  [HMOT](CARD0).encoder.01.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         =>  near.0.in2
net spindle-at-speed       <=  near.0.out
setp near.0.scale 1.000000
setp near.0.difference 3.333333


#******************************
# 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-ext     =>  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

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

Any change I made was through pncconf to keep me from making a change while screwing around that I would later forget about and be scratching my head if something was working...

Thanks.
 
12 Apr 2024 00:03 - 12 Apr 2024 00:04

Spindle speed via SuperPID

Category: General LinuxCNC Questions

Hoping for some help.
I was using a Dell Optiplex 780 SFF with a 5i25 a G540 and a SuperPID. All worked well until the G540 died. I replaced it with some sainsmart bobs and stepperonline motors/drivers. All worked great until the Dell died. I went with a RPi4 and 7c81 with mx3660x2d firmware. I had to remove the relay in order to use the DB25-14 pin as pwm. The output on that pin ranges from 0.90v to 5v when I click the + for the spindle speed in axis. When I do a M3 S8000 the rpm is something like 15000 and the pin voltage is something  like 1.7v. I have the pwm_frequncy set to 50 as I believe is needed. Whats the best way to calibrate the spindle?

Thanks for any help.
I can try to upload my configs if needed.
04 Apr 2024 19:55

Taig Mill/Gecko G540/Mesa Card?

Category: Driver Boards

I am trying to put together my first LinuxCNC build using a Taig Mill. My previous experience is limited to GRBL 3D printers and CNC routers.

I have a Gecko 540 in an enclosure (including power supply and e-stop) with 3 steppers on the Taig. I have an older PC (Intel i7 - one core enabled jitter is below 10K) with a SIIG PCIe Parallel port card. I have the steppers working on this hardware. I have not installed any limit or home switches yet. I have a Digital Loggers relay power strip that I was planning on using for turning on and off the spindle.

I am considering switching to a Mesa ethernet solution - just because it seems to be a more elegant solution. I would also love to utilize a RPI5 I have sitting idle, primarily due to space concerns posed by the old gaming PC chassis. 

So, from my research it seems that a Mesa 7192TF would allow me to connect to the Gecko box and utilize the ethernet connection from the PC or the RPI5. 

Am I on the right path? - or am I missing other components that I need?

TIA

Randale
 
03 Apr 2024 17:09
Replied by PCW on topic Stepper Motor to work like a DC

Stepper Motor to work like a DC

Category: Driver Boards

Not sure what you mean. A step motor always needs a step motor driver,
and those typically use step/dir commands (though other driver interfaces
are available)

You can treat a stepmotor/drive as a simple velocity controlled device (
say for a spindle) in LinuxCNC if that's what you mean.
31 Mar 2024 02:51
Replied by pippin88 on topic Anyone seen this?

Anyone seen this?

Category: EtherCAT

In drive ethercat is definitely the way to go.

Servo drives: costs is $40-60 per drive for ethercat (vs pulse input variants) across multiple brands.
You then don't need a stepgen card. Decent stepgen card is $120-150.
So cost difference is minimal. Ethercat in drive gives you a lot more and is a lot easier than having a stepgen card.
For a new system, there would be no role for ethercat -> stepgen card -> servo/stepper.

But there is a case where converting an existing step/dir setup would be nice. I have a small lathe with a 750W step/dir servo for the spindle. It's good quality, not a cheap servo. The axis are cheap stepper driven. I'd like to change to ethercat servos for the axis. But then I am stuck with what to do for the spindle which is step/dir.
27 Mar 2024 23:50

How to setup simultaneous tandem Y and tandem Z

Category: StepConf Wizard

Most probably yes, it can be done.
What do you mean by "splitting signals"?
That would require 10 outputs for 5 stepper drives and 5 inputs for limit switches, leaving you 2 outputs free for spindle on/pwm.
No idea if StepConf can make such a config, but PncConf might, although that would require a lot of editing.
Just checked, no Z tandem, so make X and Y with tandem Y and then another Y with tandem Y on the other pins, then edit the hal and ini files to reflect Z axis for the last two stepgens/outputs.
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.
Displaying 1 - 15 out of 170 results.
Time to create page: 1.217 seconds
Powered by Kunena Forum