Problems homing at higher speed

More
04 Feb 2016 19:58 #69608 by 10K
Replied by 10K on topic Problems homing at higher speed
Ini file:
# Monarch_10EE.ini
# Do not run configuration wizards; must edit by hand
# February 4, 2016
# Uses Mesa 7i92 FPGA board driving Chinese BOB.
# 7i92 configuration file 7i92_G540x2D.bit
# 7i92 on IP 10.10.10.10

[EMC]
MACHINE = Monarch_10EE
DEBUG = 0

[DISPLAY]
DISPLAY = gmoccapy
PREFERENCE_FILE_PATH = gmoccapy_preferences
#DISPLAY = axis
#DISPLAY = gscreen
#DISPLAY = tkemc
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.50
MAX_SPINDLE_OVERRIDE = 2.50
MIN_SPINDLE_OVERRIDE = 0.25
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 3
#PROGRAM_PREFIX = /home/martin/linuxcnc/nc_files
PROGRAM_PREFIX = ../../nc_files/
INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
PYVCP = custompanel.xmlPREFERENCE_FILE_PATH = gmoccapy_preferences
LATHE = 1
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 3.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.250000
MAX_ANGULAR_VELOCITY = 1.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xz

[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 = linuxPYVCP = custompanel.xmlcnc.var
SUBROUTINE_PATH = macros

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

[HOSTMOT2]
DRIVER = hm2_eth board_ip="10.10.10.10"
#DRIVER = hm2_eth board_ip="192.168.1.121"
BOARD0 = 7i92
CONFIG = "num_stepgens=4 num_encoders=0 num_pwmgens=0"

[HAL]
HALUI = halui
HALFILE = Monarch_10EE.hal
POSTGUI_HALFILE = custom_postgui.hal

[TRAJ]
AXES = 3
COORDINATES = X Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 0.10
MAX_VELOCITY = 2.40

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

#[PYTHON]
# The path to start a search for user modules
#PATH_PREPEND = python
# The start point for all.
#TOPLEVEL = python/toplevel.py

#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME_SEARCH_VEL = 0.9
HOME_LATCH_VEL = 0.1
#HOME_FINAL_VEL = 1.0
HOME_IGNORE_LIMITS = YES
HOME_USE_INDEX = NO
HOME_OFFSET = 7.8
HOME = 6.0
HOME_IS_SHARED = 1
HOME_SEQUENCE = 0
VOLATILE_HOME = 1
FERROR = 0.001
MIN_FERROR = 0.0002
MAX_VELOCITY = 1.8
MAX_ACCELERATION = 12.75
# 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.4
STEPGEN_MAXACCEL = 17
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
# these are in nanoseconds
DIRSETUP   = 50000
DIRHOLD    = 50000
STEPLEN    = 2000
STEPSPACE  = 2000
STEP_SCALE = 12800.0
MIN_LIMIT = -0.001
MAX_LIMIT = 7.8
#BACKLASH = 0.0135

#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME_SEARCH_VEL = 0.9
HOME_LATCH_VEL = 0.1
#HOME_FINAL_VEL = 1.0
HOME_IGNORE_LIMITS = YES
HOME_USE_INDEX = NO
HOME_OFFSET = 19.5
HOME = 12
HOME_IS_SHARED = 1
HOME_SEQUENCE = 1
VOLATILE_HOME = 1
FERROR = 0.001
MIN_FERROR = 0.0002
MAX_VELOCITY = 1.25
MAX_ACCELERATION = 4.5
# 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 = 1.65
STEPGEN_MAXACCEL = 6.0
P = 1000.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0
# these are in nanoseconds
DIRSETUP   = 50000
DIRHOLD    = 50000
STEPLEN    = 2000
STEPSPACE  = 2000
STEP_SCALE = 12800.0
MIN_LIMIT = 0.001
MAX_LIMIT = 19.5
BACKLASH = 0.015

#********************
# Spindle 
#********************
#[SPINDLE_14]
#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 = 2000.0
#ENCODER_SCALE = 1.0

Hal file:
# Monarch_10EE.hal/
# Do not run configuration wizards; must edit by hand
# February 4, 2016
# Uses Mesa 7i92 FPGA board driving Chinese BOB.
# 7i92 configuration file 7i92_G540x2D.bit
# 7i92 on IP 10.10.10.10

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt pid names=pid.x,pid.z,pid.s
#loadrt pid num_chan=4
loadrt hostmot2
loadrt [HOSTMOT2]DRIVER config=[HOSTMOT2]CONFIG
setp   hm2_7i92.0.watchdog.timeout_ns 25000000
loadrt encoder num_chan=1
loadrt abs count=1
loadrt scale count=1
loadrt lowpass count=1

addf hm2_7i92.0.read          	servo-thread
addf motion-command-handler   	servo-thread
addf motion-controller        	servo-thread
addf encoder.update-counters 	servo-thread
#addf encoder.capture-position	servo-thread
addf pid.x.do-pid-calcs       	servo-thread
addf pid.z.do-pid-calcs       	servo-thread
addf pid.s.do-pid-calcs       	servo-thread
addf hm2_7i92.0.write         	servo-thread
addf encoder.capture-position 	servo-thread
addf abs.0 			servo-thread
addf scale.0 			servo-thread
addf lowpass.0 			servo-thread

# latch all stepgen position counts 50 usec before nominal read time (add per PCW):
setp hm2_7i92.0.dpll.01.timer-us -50
setp hm2_7i92.0.stepgen.timer-number 1

# ---setup spindle---

setp encoder.0.position-scale 10
setp encoder.0.counter-mode 1
net spindle-position encoder.0.position => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-velocity-feedback-rps encoder.0.velocity => motion.spindle-speed-in
net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
net spindle-phase-a encoder.0.phase-A
net spindle-phase-b encoder.0.phase-B
net spindle-index encoder.0.phase-Z
#net spindle-phase-a <= hm2_7i92.0.gpio.016.in
net spindle-phase-a <= hm2_7i92.0.gpio.015.in
net spindle-index <= hm2_7i92.0.gpio.014.in

# external output signals

# external input signals

# --- ESTOP-EXT ---
net estop-ext     <=  hm2_7i92.0.gpio.013.in_not

# --- BOTH-HOME ---
net both-home-x     <=  hm2_7i92.0.gpio.016.in
#net both-home-x     <=  hm2_7i92.0.gpio.015.in
net both-home-z     <=  hm2_7i92.0.gpio.003.in_not

#*******************
#  AXIS X
#*******************

setp   pid.x.Pgain     [AXIS_0]P
setp   pid.x.Igain     [AXIS_0]I
setp   pid.x.Dgain     [AXIS_0]D
setp   pid.x.bias      [AXIS_0]BIAS
setp   pid.x.FF0       [AXIS_0]FF0
setp   pid.x.FF1       [AXIS_0]FF1
setp   pid.x.FF2       [AXIS_0]FF2
setp   pid.x.deadband  [AXIS_0]DEADBAND
setp   pid.x.maxoutput [AXIS_0]MAX_OUTPUT
setp   pid.x.error-previous-target true
setp   pid.x.maxerror .0005

net x-index-enable  <=> pid.x.index-enable
net x-enable        =>  pid.x.enable
net x-pos-cmd       =>  pid.x.command
net x-vel-cmd       =>  pid.x.command-deriv
net x-pos-fb        =>  pid.x.feedback
net x-output        =>  pid.x.output

# Step Gen signals/setup

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

# ---closedloop stepper signals---

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

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

net both-home-x     =>  axis.0.home-sw-in
net both-home-x     =>  axis.0.neg-lim-sw-in
net both-home-x     =>  axis.0.pos-lim-sw-in

#*******************
#  AXIS Z
#*******************

setp   pid.z.Pgain     [AXIS_2]P
setp   pid.z.Igain     [AXIS_2]I
setp   pid.z.Dgain     [AXIS_2]D
setp   pid.z.bias      [AXIS_2]BIAS
setp   pid.z.FF0       [AXIS_2]FF0
setp   pid.z.FF1       [AXIS_2]FF1
setp   pid.z.FF2       [AXIS_2]FF2
setp   pid.z.deadband  [AXIS_2]DEADBAND
setp   pid.z.maxoutput [AXIS_2]MAX_OUTPUT
setp   pid.z.error-previous-target true
setp   pid.z.maxerror .0005

net z-index-enable  <=> pid.z.index-enable
net z-enable        =>  pid.z.enable
net z-pos-cmd       =>  pid.z.command
net z-vel-cmd       =>  pid.z.command-deriv
net z-pos-fb        =>  pid.z.feedback
net z-output        =>  pid.z.output

# Step Gen signals/setup

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

# ---closedloop stepper signals---

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

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

net both-home-z     =>  axis.2.home-sw-in
net both-home-z     =>  axis.2.neg-lim-sw-in
net both-home-z     =>  axis.2.pos-lim-sw-in

#******************************
# connect miscellaneous signals
#******************************

#  ---HALUI signals---

net joint-select-a        halui.joint.0.select
net x-is-homed            halui.joint.0.is-homed
net jog-x-pos             halui.jog.0.plus
net jog-x-neg             halui.jog.0.minus
net jog-x-analog          halui.jog.0.analog
net joint-select-c        halui.joint.2.select
net z-is-homed            halui.joint.2.is-homed
net jog-z-pos             halui.jog.2.plus
net jog-z-neg             halui.jog.2.minus
net jog-z-analog          halui.jog.2.analog
net jog-selected-pos      halui.jog.selected.plus
net jog-selected-neg      halui.jog.selected.minus
#net spindle-manual-cw     halui.spindle.forward
#net spindle-manual-ccw    halui.spindle.reverse
#net spindle-manual-stop   halui.spindle.stop
net machine-is-on         halui.machine.is-on
net jog-speed             halui.jog-speed 
net MDI-mode              halui.mode.is-mdi

#  ---motion control signals---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled

#  ---estop signals---

net estop-out     <=  iocontrol.0.user-enable-out
net estop-ext     =>  iocontrol.0.emc-enable-in

#  ---coolant signals---

#net coolant-mist      <=  iocontrol.0.coolant-mist
#net coolant-flood     <=  iocontrol.0.coolant-flood

#  ---probe signal---

#net probe-in     =>  motion.probe-input

#manual tool change

#net tool-change gmoccapy.toolchange-change <= iocontrol.0.tool-change
#net tool-changed gmoccapy.toolchange-changed <= iocontrol.0.tool-changed
#net tool-prep-number gmoccapy.toolchange-number <= iocontrol.0.tool-prep-number
#net tool-prep-loop iocontrol.0.tool-prepare <= iocontrol.0.tool-prepared

#loadusr -W hal_manualtoolchange
#net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
#net tool-changed 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

Please Log in or Create an account to join the conversation.

More
04 Feb 2016 20:08 #69609 by PCW
Replied by PCW on topic Problems homing at higher speed
I suspect this is the reason for trouble in Z

# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
The following user(s) said Thank You: 10K

Please Log in or Create an account to join the conversation.

More
04 Feb 2016 20:24 #69611 by 10K
Replied by 10K on topic Problems homing at higher speed
I gave it a shot, and it seems to work!

I commented out the BACKLASH line, and that worked.

I un-commented the line, and doubled the STEPGEN_MAXACCEL, and that works, also.

When I was doing my experiments to set the rates, backlash was the last thing I calculated. That's why I didn't see the problem before. I didn't know they were related.

Just to clarify, should the STEPGEN_MAXACCEL be double the MAX_ACCELERATION, or the 25% larger number I already had in there?

And since I know that the STEPGEN_MAXACCEL number is really the largest my steppers can handle, should I worry that they'll eventually stall if this rate is reached?

Please Log in or Create an account to join the conversation.

More
04 Feb 2016 20:29 #69612 by PCW
Replied by PCW on topic Problems homing at higher speed
If you have backlash compensation, I'm pretty sure stepgen maxaccel should be 2.5X maxaccel

There is actually less of a stalling problem than you might think because this acceleration value
is only reached during reversals when the step motor is near 0 speed and has maximum torque

Please Log in or Create an account to join the conversation.

More
04 Feb 2016 23:27 #69622 by 10K
Replied by 10K on topic Problems homing at higher speed
Thanks. Looking back, I was not clear on my second question.

Let's say in experimenting with the BACKLASH turned off, my machine stalls at an acceleration of 100.

Would I then configure the [AXIS_0] part of the .ini file like this?
  • BACKLASH = (whatever)
  • MAX_ACCELERATION = 40
  • STEPGEN_MAXACCEL = 100
Where 250% of 40 is 100.

Or, is the acceleration limit never actually generated for the steppers, and is only internel to the controller / ferror calculations, and I should configure the [AXIS_0] part of the .ini file like this?
  • BACKLASH = (whatever)
  • MAX_ACCELERATION = 80
  • STEPGEN_MAXACCEL = 200
Where 125% of 80 is still at my limit of 100, but the parameter is set so that ferror is not exceeded.

My confusion is because I don't exactly understand how the program calculates an error when there's no actual feedback loop.

Please Log in or Create an account to join the conversation.

More
04 Feb 2016 23:38 - 04 Feb 2016 23:44 #69623 by PCW
Replied by PCW on topic Problems homing at higher speed
The following error you got was because the trajectory requested during backlash compensation
exceeded the stepgens limits (imposed by stepgen_maxaccel )
There _is_ feedback from the stepgenerator to linuxcnc and that's why you got a following error

Note that your measured stall acceleration will be at some high velocity,
The maximum acceleration needed to stall near 0 speed
( when the backlash compensation and its 2X acceleration are needed ) will be _MUCH_ higher
so doubling the rapids stall acceleration (that you tested) is likely to be fine

( That is I dont think there is any need to lower the machines max acceleration to accomodate backlash compensation )
Last edit: 04 Feb 2016 23:44 by PCW.

Please Log in or Create an account to join the conversation.

More
07 Feb 2016 21:55 #69751 by 10K
Replied by 10K on topic Problems homing at higher speed
Based on your comment, here's what I did:

# Experimental maximums: Velocity = 2.4, Acceleration = 16
# STEPGEN_MAXVEL = experimental maximum.  MAX_VELOCITY = STEPGEN_MAXVEL / 1.25.  
# MAX_ACCELERATION = experimental maximum acceleration / 1.25.
# If BACKLASH is not set: STEPGEN_MAXACCEL = MAX_ACCELERATION * 1.25
# If BACKLASH is set: STEPGEN_MAXACCEL = MAX_ACCELERATION * 2.5
MAX_VELOCITY = 1.8
MAX_ACCELERATION = 12.75
STEPGEN_MAXVEL = 2.4
STEPGEN_MAXACCEL = 31.875
BACKLASH = 0.0135

It's working fine now. Of course, the best thing to do would be to get rid of the excessive backlash! But that's another project, and I'll have to round up one of those tandem acme taps to do it.

Another common along the lines of your earlier post is that when the system is taking up the backlash, there's little load on the steppers since nothing other than the lead screw is actually moving.

Please Log in or Create an account to join the conversation.

Time to create page: 0.141 seconds
Powered by Kunena Forum