Problems homing at higher speed

More
10 years 8 months ago #69608 by 10K
Replied by 10K on topic Problems homing at higher speed
Ini file:
Code:
# 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:
Code:
# 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 to join the conversation.

More
10 years 8 months ago #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.

Please Log in to join the conversation.

More
10 years 8 months ago #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 to join the conversation.

More
10 years 8 months ago #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 to join the conversation.

More
10 years 8 months ago #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 to join the conversation.

More
10 years 8 months ago #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 )

Please Log in to join the conversation.

More
10 years 8 months ago #69751 by 10K
Replied by 10K on topic Problems homing at higher speed
Based on your comment, here's what I did:

Code:
# 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 to join the conversation.

Time to create page: 0.044 seconds
Powered by Kunena Forum