- Configuring LinuxCNC
- Basic Configuration
- DRO innacuracy. Why would the DRO not reach the commanded position?
DRO innacuracy. Why would the DRO not reach the commanded position?
02 Oct 2019 17:56 #146882
by Scot
Replied by Scot on topic DRO innacuracy. Why would the DRO not reach the commanded position?
It's a rotary encoder, sir.
The DRO reading is about .0009" to .0011" off on one end <the zero end> of the axis and varying from .0001" to .0011" on the other end <the home end>.
Since it has a velocity setting in the .ini file, I'm assuming it is velocity commanded. But since I don't know the difference between the two types, is, I can only tell you it's a brushless servo using Pico-systems amps and PWM controller.
Now 1-3 counts on that axis is not horrible, unless my math is wrong. But from what I'm getting, since I have the input scale for the encoder set to 25400 to match the 2.5mm ball screw and the .8:1, motor to screw, pulley ratio, the steps per inch on that are pretty small, but could cause error if not counted correctly.
The DRO reading is about .0009" to .0011" off on one end <the zero end> of the axis and varying from .0001" to .0011" on the other end <the home end>.
Since it has a velocity setting in the .ini file, I'm assuming it is velocity commanded. But since I don't know the difference between the two types, is, I can only tell you it's a brushless servo using Pico-systems amps and PWM controller.
Now 1-3 counts on that axis is not horrible, unless my math is wrong. But from what I'm getting, since I have the input scale for the encoder set to 25400 to match the 2.5mm ball screw and the .8:1, motor to screw, pulley ratio, the steps per inch on that are pretty small, but could cause error if not counted correctly.
Please Log in or Create an account to join the conversation.
02 Oct 2019 18:20 #146883
by Scot
Replied by Scot on topic DRO innacuracy. Why would the DRO not reach the commanded position?
"Sorry if I wasn't too clear with the user concept I copied. It shows XYZ for mill coordinates. You should be looking at X and Z and only execute rapids or feeds on the axis you are experimenting with. The machine stopping sounds correct if you're trying to command a move that's not configured. I assume there was a joint following error?"
Absolutely no reason to apologize. There is a ton of info and steps to understand and follow. The thing I've learned about computers and CNC is that the number one problem that people experience in programming and debugging them is that things are left out.
The machine stopping was a dumb mistake on my part of leaving out a bolt where it could stop the slide and create an estop event. That was corrected.
I ran your steps again, this time changing one thing we all missed. In the View Menu, there is a selection between commanded and actual positions. I was reading from the actual position, rather than the commanded position and starting from the Actual position as well. So when I started the steps you were so kind to provide, I started that in commanded position and from relative coordinates, first.
The result was that the commanded home landed exactly where I set it up in the .ini file. And the rapid in G53 to the zero points, landed precisely where it was supposed to land.
I have a few more things to get into now. But it appears that the issue I was having is at bear minimum, better understood, including to keep the damned bolts out of the way of the slide! Talk about a rookie move. Then again, I'm a rookie to a servo system.
Now there is a clear difference between the commanded position being exact and the actual position showing that it likely needs tuning. There is a difference that basically adds up to exactly the same thing I had before.
So now I'm not sure how to approach lessening that difference between commanded and actual position, if there is anything that I can do. I can tune it again, which may help. But I may be stuck with some difference between commanded and actual positions. That is, unless you guru's can shed another bit of light on things I'm yet unaware, of.
Thank you, OT-CNC. Your steps actually helped me a bunch. Without them, I may have configured things a bit wonkier than the original problems.
Absolutely no reason to apologize. There is a ton of info and steps to understand and follow. The thing I've learned about computers and CNC is that the number one problem that people experience in programming and debugging them is that things are left out.
The machine stopping was a dumb mistake on my part of leaving out a bolt where it could stop the slide and create an estop event. That was corrected.
I ran your steps again, this time changing one thing we all missed. In the View Menu, there is a selection between commanded and actual positions. I was reading from the actual position, rather than the commanded position and starting from the Actual position as well. So when I started the steps you were so kind to provide, I started that in commanded position and from relative coordinates, first.
The result was that the commanded home landed exactly where I set it up in the .ini file. And the rapid in G53 to the zero points, landed precisely where it was supposed to land.
I have a few more things to get into now. But it appears that the issue I was having is at bear minimum, better understood, including to keep the damned bolts out of the way of the slide! Talk about a rookie move. Then again, I'm a rookie to a servo system.
Now there is a clear difference between the commanded position being exact and the actual position showing that it likely needs tuning. There is a difference that basically adds up to exactly the same thing I had before.
So now I'm not sure how to approach lessening that difference between commanded and actual position, if there is anything that I can do. I can tune it again, which may help. But I may be stuck with some difference between commanded and actual positions. That is, unless you guru's can shed another bit of light on things I'm yet unaware, of.
Thank you, OT-CNC. Your steps actually helped me a bunch. Without them, I may have configured things a bit wonkier than the original problems.
Please Log in or Create an account to join the conversation.
02 Oct 2019 18:25 #146884
by Scot
Replied by Scot on topic DRO innacuracy. Why would the DRO not reach the commanded position?
BTW, I started this project using the mill mode but I figured I could make the basic configuration happen, then move the .ini file to where it needs to be in lathe mode.
Also, my .ini file doesn't appear to have any preamble G-codes, although it may be hidden in there, somewhere. So in case it's hidden and I'm missing something, if you could check that file for me to see if I'm missing something again, it's below. Keep in mind that the only axis that's attached is the y. Yes, I mentioned it was the Z, but that's just my lathe memory speaking. I should have said this earlier. Sorry about any confusion.
# EMC controller parameters for generic controller. Make these what you need
# for your system.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section
[EMC]
# Version of this INI file
VERSION = $Revision$
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-UNIVPWM
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
DEBUG = 0
# DEBUG = 0x00000007
# DEBUG = 0x7FFFFFFF
# Sections for display options
[DISPLAY]
# Name of display program, e.g., xemc
DISPLAY = axis
# DISPLAY = usrmot
# DISPLAY = tkemc
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = tklinucnc.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
# Prefix to be used
PROGRAM_PREFIX = /home/scot/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 2
# Enable popup balloon help
BALLOON_HELP = 1
# Task controller section
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.010
# Part program interpreter section
[RS274NGC]
# EMC controller parameters for generic controller. Make these what you need
# for your system.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section
[EMC]
# Version of this INI file
VERSION = $Revision$
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-UNIVPWM
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
DEBUG = 0
# DEBUG = 0x00000007
# DEBUG = 0x7FFFFFFF
# Sections for display options
[DISPLAY]
# Name of display program, e.g., xemc
DISPLAY = axis
# DISPLAY = usrmot
# DISPLAY = tkemc
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = tklinucnc.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
# Prefix to be used
PROGRAM_PREFIX = /home/scot/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 2
# Enable popup balloon help
BALLOON_HELP = 1
# Task controller section
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.010
# Part program interpreter section
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = univpwm.var
# Motion control section
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Interval between tries to emcmot, in seconds
COMM_WAIT = 0.010
# Servo task period, in nanoseconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = univpwm_load.hal
HALFILE = univpwm_servo.hal
HALFILE = univpwm_motion.hal
HALFILE = univpwm_io.hal
#uncomment the following line to enable the pendant function
#HALFILE = pendant.hal
#uncomment the following line to enable the spindle speed display
#POSTGUI_HALFILE = spindle.hal
#You need to remove axis 3 or provide another path for a spindle encoder to
# feed into EMC for this to work.
# Trajectory planner section
[TRAJ]
AXES = 4
# COORDINATES = X Y Z R P W
COORDINATES = X Y Z
HOME = 0 0 0 0
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = .2
MAX_VELOCITY = 6.124
DEFAULT_ACCELERATION = 15.0
MAX_ACCELERATION = 10.0
# Axes sections
# Scaling: The OUTPUT_SCALE should be the speed
# in UNITS/second (inches/sec or mm/sec) that would be
# reached if the PWM duty cycle was 100%. It depends on
# the power supply voltage, motor RPM/Volt factor, and
# gearing/screw pitch. For example:
#
# Power supply voltage 50V
# Motor RPM/V 1000RPM/24V
# Gearing: 2 motor revs per 1 screw rev
# Screw pitch: 0.2" per turn
#
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
#
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
# should be 3.47
# First axis
[AXIS_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1
BACKLASH = 0.003
INPUT_SCALE = 25400.508
OUTPUT_SCALE = 1
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 1
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 6
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 0.18
FF2 = 0
# Second axis
[AXIS_1]
TYPE = LINEAR
HOME = 5.
MAX_VELOCITY = 6.124
MAX_ACCELERATION = 100.0
PID_MAX_VEL = 1.5
BACKLASH = 0.00
INPUT_SCALE = 25400
OUTPUT_SCALE = 1
MIN_LIMIT = -.25
MAX_LIMIT = 5.35
FERROR = 0.010
MIN_FERROR = 1
HOME_OFFSET = 5.
HOME_SEARCH_VEL = .3
HOME_LATCH_VEL = 0.2
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 24.75
I = 0
D = 0.545
BIAS = 0
FF0 = 0
FF1 = 0.135
FF2 = 0.001104011
# Third axis
[AXIS_2]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1.25
BACKLASH = 0.000
INPUT_SCALE = 25400
OUTPUT_SCALE = 6.124222
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.000126
P = 5
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# Fourth axis
[AXIS_3]
TYPE = ANGULAR
HOME = 0.0
MAX_VELOCITY = 65
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 66
BACKLASH = 0.000
INPUT_SCALE = 11.11111
OUTPUT_SCALE = 5
MIN_LIMIT = -3600.0
MAX_LIMIT = 3600.0
FERROR = 0.010
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.046
P = 150
I = 100
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# section for main IO controller parameters
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# tool table file
TOOL_TABLE = univpwm.tbl
# File containing interpreter variables
PARAMETER_FILE = univpwm.var
# Motion control section
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Interval between tries to emcmot, in seconds
COMM_WAIT = 0.010
# Servo task period, in nanoseconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = univpwm_load.hal
HALFILE = univpwm_servo.hal
HALFILE = univpwm_motion.hal
HALFILE = univpwm_io.hal
#uncomment the following line to enable the pendant function
#HALFILE = pendant.hal
#uncomment the following line to enable the spindle speed display
#POSTGUI_HALFILE = spindle.hal
#You need to remove axis 3 or provide another path for a spindle encoder to
# feed into EMC for this to work.
# Trajectory planner section
[TRAJ]
AXES = 4
# COORDINATES = X Y Z R P W
COORDINATES = X Y Z
HOME = 0 0 0 0
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = .2
MAX_VELOCITY = 6.124
DEFAULT_ACCELERATION = 15.0
MAX_ACCELERATION = 10.0
# Axes sections
# Scaling: The OUTPUT_SCALE should be the speed
# in UNITS/second (inches/sec or mm/sec) that would be
# reached if the PWM duty cycle was 100%. It depends on
# the power supply voltage, motor RPM/Volt factor, and
# gearing/screw pitch. For example:
#
# Power supply voltage 50V
# Motor RPM/V 1000RPM/24V
# Gearing: 2 motor revs per 1 screw rev
# Screw pitch: 0.2" per turn
#
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
#
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
# should be 3.47
# First axis
[AXIS_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1
BACKLASH = 0.003
INPUT_SCALE = 25400.508
OUTPUT_SCALE = 1
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 1
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 6
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 0.18
FF2 = 0
# Second axis
[AXIS_1]
TYPE = LINEAR
HOME = 5.
MAX_VELOCITY = 6.124
MAX_ACCELERATION = 100.0
PID_MAX_VEL = 1.5
BACKLASH = 0.00
INPUT_SCALE = 25400
OUTPUT_SCALE = 1
MIN_LIMIT = -.25
MAX_LIMIT = 5.35
FERROR = 0.010
MIN_FERROR = 1
HOME_OFFSET = 5.
HOME_SEARCH_VEL = .3
HOME_LATCH_VEL = 0.2
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 24.75
I = 0
D = 0.545
BIAS = 0
FF0 = 0
FF1 = 0.135
FF2 = 0.001104011
# Third axis
[AXIS_2]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1.25
BACKLASH = 0.000
INPUT_SCALE = 25400
OUTPUT_SCALE = 6.124222
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.000126
P = 5
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# Fourth axis
[AXIS_3]
TYPE = ANGULAR
HOME = 0.0
MAX_VELOCITY = 65
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 66
BACKLASH = 0.000
INPUT_SCALE = 11.11111
OUTPUT_SCALE = 5
MIN_LIMIT = -3600.0
MAX_LIMIT = 3600.0
FERROR = 0.010
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.046
P = 150
I = 100
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# section for main IO controller parameters
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# tool table file
TOOL_TABLE = univpwm.tbl
Also, my .ini file doesn't appear to have any preamble G-codes, although it may be hidden in there, somewhere. So in case it's hidden and I'm missing something, if you could check that file for me to see if I'm missing something again, it's below. Keep in mind that the only axis that's attached is the y. Yes, I mentioned it was the Z, but that's just my lathe memory speaking. I should have said this earlier. Sorry about any confusion.
# EMC controller parameters for generic controller. Make these what you need
# for your system.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section
[EMC]
# Version of this INI file
VERSION = $Revision$
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-UNIVPWM
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
DEBUG = 0
# DEBUG = 0x00000007
# DEBUG = 0x7FFFFFFF
# Sections for display options
[DISPLAY]
# Name of display program, e.g., xemc
DISPLAY = axis
# DISPLAY = usrmot
# DISPLAY = tkemc
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = tklinucnc.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
# Prefix to be used
PROGRAM_PREFIX = /home/scot/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 2
# Enable popup balloon help
BALLOON_HELP = 1
# Task controller section
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.010
# Part program interpreter section
[RS274NGC]
# EMC controller parameters for generic controller. Make these what you need
# for your system.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section
[EMC]
# Version of this INI file
VERSION = $Revision$
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-UNIVPWM
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
DEBUG = 0
# DEBUG = 0x00000007
# DEBUG = 0x7FFFFFFF
# Sections for display options
[DISPLAY]
# Name of display program, e.g., xemc
DISPLAY = axis
# DISPLAY = usrmot
# DISPLAY = tkemc
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = tklinucnc.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
# Prefix to be used
PROGRAM_PREFIX = /home/scot/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 2
# Enable popup balloon help
BALLOON_HELP = 1
# Task controller section
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.010
# Part program interpreter section
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = univpwm.var
# Motion control section
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Interval between tries to emcmot, in seconds
COMM_WAIT = 0.010
# Servo task period, in nanoseconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = univpwm_load.hal
HALFILE = univpwm_servo.hal
HALFILE = univpwm_motion.hal
HALFILE = univpwm_io.hal
#uncomment the following line to enable the pendant function
#HALFILE = pendant.hal
#uncomment the following line to enable the spindle speed display
#POSTGUI_HALFILE = spindle.hal
#You need to remove axis 3 or provide another path for a spindle encoder to
# feed into EMC for this to work.
# Trajectory planner section
[TRAJ]
AXES = 4
# COORDINATES = X Y Z R P W
COORDINATES = X Y Z
HOME = 0 0 0 0
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = .2
MAX_VELOCITY = 6.124
DEFAULT_ACCELERATION = 15.0
MAX_ACCELERATION = 10.0
# Axes sections
# Scaling: The OUTPUT_SCALE should be the speed
# in UNITS/second (inches/sec or mm/sec) that would be
# reached if the PWM duty cycle was 100%. It depends on
# the power supply voltage, motor RPM/Volt factor, and
# gearing/screw pitch. For example:
#
# Power supply voltage 50V
# Motor RPM/V 1000RPM/24V
# Gearing: 2 motor revs per 1 screw rev
# Screw pitch: 0.2" per turn
#
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
#
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
# should be 3.47
# First axis
[AXIS_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1
BACKLASH = 0.003
INPUT_SCALE = 25400.508
OUTPUT_SCALE = 1
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 1
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 6
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 0.18
FF2 = 0
# Second axis
[AXIS_1]
TYPE = LINEAR
HOME = 5.
MAX_VELOCITY = 6.124
MAX_ACCELERATION = 100.0
PID_MAX_VEL = 1.5
BACKLASH = 0.00
INPUT_SCALE = 25400
OUTPUT_SCALE = 1
MIN_LIMIT = -.25
MAX_LIMIT = 5.35
FERROR = 0.010
MIN_FERROR = 1
HOME_OFFSET = 5.
HOME_SEARCH_VEL = .3
HOME_LATCH_VEL = 0.2
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 24.75
I = 0
D = 0.545
BIAS = 0
FF0 = 0
FF1 = 0.135
FF2 = 0.001104011
# Third axis
[AXIS_2]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1.25
BACKLASH = 0.000
INPUT_SCALE = 25400
OUTPUT_SCALE = 6.124222
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.000126
P = 5
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# Fourth axis
[AXIS_3]
TYPE = ANGULAR
HOME = 0.0
MAX_VELOCITY = 65
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 66
BACKLASH = 0.000
INPUT_SCALE = 11.11111
OUTPUT_SCALE = 5
MIN_LIMIT = -3600.0
MAX_LIMIT = 3600.0
FERROR = 0.010
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.046
P = 150
I = 100
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# section for main IO controller parameters
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# tool table file
TOOL_TABLE = univpwm.tbl
# File containing interpreter variables
PARAMETER_FILE = univpwm.var
# Motion control section
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Interval between tries to emcmot, in seconds
COMM_WAIT = 0.010
# Servo task period, in nanoseconds
SERVO_PERIOD = 1000000
# Hardware Abstraction Layer section
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = univpwm_load.hal
HALFILE = univpwm_servo.hal
HALFILE = univpwm_motion.hal
HALFILE = univpwm_io.hal
#uncomment the following line to enable the pendant function
#HALFILE = pendant.hal
#uncomment the following line to enable the spindle speed display
#POSTGUI_HALFILE = spindle.hal
#You need to remove axis 3 or provide another path for a spindle encoder to
# feed into EMC for this to work.
# Trajectory planner section
[TRAJ]
AXES = 4
# COORDINATES = X Y Z R P W
COORDINATES = X Y Z
HOME = 0 0 0 0
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = .2
MAX_VELOCITY = 6.124
DEFAULT_ACCELERATION = 15.0
MAX_ACCELERATION = 10.0
# Axes sections
# Scaling: The OUTPUT_SCALE should be the speed
# in UNITS/second (inches/sec or mm/sec) that would be
# reached if the PWM duty cycle was 100%. It depends on
# the power supply voltage, motor RPM/Volt factor, and
# gearing/screw pitch. For example:
#
# Power supply voltage 50V
# Motor RPM/V 1000RPM/24V
# Gearing: 2 motor revs per 1 screw rev
# Screw pitch: 0.2" per turn
#
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
#
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
# should be 3.47
# First axis
[AXIS_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1
BACKLASH = 0.003
INPUT_SCALE = 25400.508
OUTPUT_SCALE = 1
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 1
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 6
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 0.18
FF2 = 0
# Second axis
[AXIS_1]
TYPE = LINEAR
HOME = 5.
MAX_VELOCITY = 6.124
MAX_ACCELERATION = 100.0
PID_MAX_VEL = 1.5
BACKLASH = 0.00
INPUT_SCALE = 25400
OUTPUT_SCALE = 1
MIN_LIMIT = -.25
MAX_LIMIT = 5.35
FERROR = 0.010
MIN_FERROR = 1
HOME_OFFSET = 5.
HOME_SEARCH_VEL = .3
HOME_LATCH_VEL = 0.2
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
DEADBAND = 0.000126
P = 24.75
I = 0
D = 0.545
BIAS = 0
FF0 = 0
FF1 = 0.135
FF2 = 0.001104011
# Third axis
[AXIS_2]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 1.20
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 1.25
BACKLASH = 0.000
INPUT_SCALE = 25400
OUTPUT_SCALE = 6.124222
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.0100
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.000126
P = 5
I = 0
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# Fourth axis
[AXIS_3]
TYPE = ANGULAR
HOME = 0.0
MAX_VELOCITY = 65
MAX_ACCELERATION = 20.0
PID_MAX_VEL = 66
BACKLASH = 0.000
INPUT_SCALE = 11.11111
OUTPUT_SCALE = 5
MIN_LIMIT = -3600.0
MAX_LIMIT = 3600.0
FERROR = 0.010
MIN_FERROR = 0.001
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
DEADBAND = 0.046
P = 150
I = 100
D = 0.1
BIAS = 0
FF0 = 0
FF1 = 1
FF2 = 0
# section for main IO controller parameters
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# tool table file
TOOL_TABLE = univpwm.tbl
Please Log in or Create an account to join the conversation.
02 Oct 2019 19:05 - 02 Oct 2019 19:16 #146888
by OT-CNC
Replied by OT-CNC on topic DRO innacuracy. Why would the DRO not reach the commanded position?
Hey sorry to hear you crashed it. So I assume you don't have all the limit switches and soft limits set up yet? I would configure the home switch to be a little before tripping the limit and I would suggest setting home to be as far way as possible in the positive Z direction, away from the spindle. Is this how you have it set up? I know this doesn't address the dro values issue but I want to make sure when you send the saddle home it pulls away from the spindle. This would be for when you power up the machine and hit home all axis button. Not the g54 0,0.
Do you have any binding in the ways on your machine? Or is it pretty smooth? What lathe is it? Lube running?
I just saw your new posts, you can add your preferred preamble in this section below I believe (i can check next time I boot up the machine):
# Part program interpreter section
[RS274NGC]
Also, What happens if you change the backlash setting to 0 ?Are you're jogging the x on the mill config that's controlling the z on the lathe?? If so, I would start with a clean lathe config.
edit: I assume it's the Y since the limits are configured in that
Also, I'm running an older version so someone else should comment but you have the axis repeating some duplicated stuff.
Do you have any binding in the ways on your machine? Or is it pretty smooth? What lathe is it? Lube running?
I just saw your new posts, you can add your preferred preamble in this section below I believe (i can check next time I boot up the machine):
# Part program interpreter section
[RS274NGC]
Also, What happens if you change the backlash setting to 0 ?Are you're jogging the x on the mill config that's controlling the z on the lathe?? If so, I would start with a clean lathe config.
edit: I assume it's the Y since the limits are configured in that
Also, I'm running an older version so someone else should comment but you have the axis repeating some duplicated stuff.
Last edit: 02 Oct 2019 19:16 by OT-CNC. Reason: edit
Please Log in or Create an account to join the conversation.
- Mike_Eitel
-
- Offline
- Platinum Member
-
Less
More
- Posts: 1159
- Thank you received: 185
02 Oct 2019 20:36 #146896
by Mike_Eitel
Replied by Mike_Eitel on topic DRO innacuracy. Why would the DRO not reach the commanded position?
What happens if you make DEADBAND even smaller?
Mike
Mike
The following user(s) said Thank You: Scot
Please Log in or Create an account to join the conversation.
02 Oct 2019 20:58 #146900
by Scot
Replied by Scot on topic DRO innacuracy. Why would the DRO not reach the commanded position?
"Hey sorry to hear you crashed it. "
This isn't my first crash, but thanks, crashes pretty much suck! I've owned a few CNC machines and had a hand's on learning experience with my first. So it crashed a few times. It really sucks when your servos are nema 34 and the machine produces 600ipm rapids and 600 lbs of force. At least with this one, the servos were only powered at 42 volts and nema 23. The force was about half but the PWM board and amps work so well in combination with LinuxCNC that the rapids are an astounding 366 ipm out of that powered servo. Kind of unbelievable in comparison to the last incarnation that it had with 120ipm rapids. And it cost 3K less to achieve over TRIPLE the rapid speed that it had before! So it was not completely horrific, but it made me cry out a bit.
"So I assume you don't have all the limit switches and soft limits set up yet? "
The switches were wired, but I had the soft limits wrong and added an offset that I was not aware of while fiddling. But the first crash came from operator error. That bolt was an easy eyeball miss. But it was a hell of a deceleration, let me tell you! BANG! WHIIIRRRRR! ESTOP!
"I would configure the home switch to be a little before tripping the limit and I would suggest setting home to be as far way as possible in the positive Z direction, away from the spindle."
I'm all over it. The home is at a near-max away from the spindle and there is about 2inches from the slide to the spindle at the zero point. So I ironed out that issue with your help, of course.
"Is this how you have it set up?"
Pretty sure it's solid now. It was set up with problems. Those appear to be righted, now. The axis configuration was off. But it's much better now and responds properly.
"I know this doesn't address the dro values issue but I want to make sure when you send the saddle home it pulls away from the spindle."
The DRO issue was kind of solved, and now and there is space between the soft limits and the switches, too. So the travel can go to the soft zero and unless it's turned by hand, past that switch and while the motor is not powered, the limit switch won't trip. Same goes on the home side. The max home limit is .100" past the hard switch, though I'm vacillating between putting that soft limit on the negative side of the switch so it doesn't trip the switch for sure. It's set up that way on the zero end. The soft limit is -.100" past the zero but the switch is -.25" past the zero. This configuration seems to be the smartest. It gives me a bit of negative room past the zero. But the hard switch is even further. So the soft limit stops the slide before the switch can be tripped. The DRO values have light on them, now, too. I think I can tune the motor to a finer resolution on the following error.
"This would be for when you power up the machine and hit home all axis button. Not the g54 0,0."
Yep. When I fire it up, I send her home to 5". She stops perfectly when the commanded position is displayed. But when actual position is displayed, I've got the same issue as before. She displays an actual position that's a thou-ish short in either direction, but not cumulative. My problem was that I was not looking at the proper commanded/actual values at the right times, I think. Because when the machine flips back into G54 after homing, sending her to zero while looking at the actual position is giving me the same problems. This seems to indicate a tuning issue from what I've read but perhaps a counting issue. Granted, I never tuned a servo before and it took me a few days of banging my head against the wall, but with some help from Jon at PicoSystems and the folks on this list, I got the process very close. I'll likely have to tune it again. But now I know how. The following error I achieved with Halscope closed in on .00025"-ish. I'm going to try to get that error lower as there were a few fine-tuning steps I didn't catch. So it's close, but the error is there and I think it could be made better.
"Do you have any binding in the ways on your machine? Or is it pretty smooth? What lathe is it? Lube running?"
The ways are old, but they are not binding. They could use some lube and I have to get a mini zerk fitting to grease them properly. They were hand greased without wipers, using white lithium grease, many years back but they could use lube.
"I just saw your new posts, you can add your preferred preamble in this section below I believe (i can check next time I boot up the machine):"
"# Part program interpreter section
[RS274NGC]"
So I would put that line in my .ini file? If so, where?
Also, What happens if you change the backlash setting to 0 ?
The backlash is at zero now. There is lash in the screw and likely more than acceptable at .003"-ish. I only have a .001" dial indicator to measure with. I'll have to get a .0001" indicator before I can be sure of that number. Then a new screw is likely going to happen. But I may be able to get away with just reloading the nut with new balls to bring that number down to about a thou. If that doesn't get me what I want, I'll get a new screw. They're cheap, now, when they aren't pre-machined. Unfortunately, the machine I would use to machine the new screw is down and waiting a new controller, too! So I have to take the screw to a machinist. This guy used to grind ball screws in the 70's. He knows how to hold tolerance. So it's not an issue.
"Are you're jogging the x on the mill config that's controlling the z on the lathe?? "
I'm actually working the Y axis on a mill configuration, tied to a lathe. I just started this in the basic Axis config, figuring I could change the Gui/configuration a bit more to a lathe configuration, later. I called it a Z out of habit.
"If so, I would start with a clean lathe config."
That's in the near future. I had to get this thing back to acceptable motion before I made that switch.
"edit: I assume it's the Y since the limits are configured in that"
You assume correctly and you're clearly a thinker.
"Also, I'm running an older version so someone else should comment but you have the axis repeating some duplicated stuff."
Are you referring to that preamble?
Thanks again, OT-CNC! Although I had an issue, your info helped me understand it and repair what I mangled!
Scot
This isn't my first crash, but thanks, crashes pretty much suck! I've owned a few CNC machines and had a hand's on learning experience with my first. So it crashed a few times. It really sucks when your servos are nema 34 and the machine produces 600ipm rapids and 600 lbs of force. At least with this one, the servos were only powered at 42 volts and nema 23. The force was about half but the PWM board and amps work so well in combination with LinuxCNC that the rapids are an astounding 366 ipm out of that powered servo. Kind of unbelievable in comparison to the last incarnation that it had with 120ipm rapids. And it cost 3K less to achieve over TRIPLE the rapid speed that it had before! So it was not completely horrific, but it made me cry out a bit.
"So I assume you don't have all the limit switches and soft limits set up yet? "
The switches were wired, but I had the soft limits wrong and added an offset that I was not aware of while fiddling. But the first crash came from operator error. That bolt was an easy eyeball miss. But it was a hell of a deceleration, let me tell you! BANG! WHIIIRRRRR! ESTOP!
"I would configure the home switch to be a little before tripping the limit and I would suggest setting home to be as far way as possible in the positive Z direction, away from the spindle."
I'm all over it. The home is at a near-max away from the spindle and there is about 2inches from the slide to the spindle at the zero point. So I ironed out that issue with your help, of course.
"Is this how you have it set up?"
Pretty sure it's solid now. It was set up with problems. Those appear to be righted, now. The axis configuration was off. But it's much better now and responds properly.
"I know this doesn't address the dro values issue but I want to make sure when you send the saddle home it pulls away from the spindle."
The DRO issue was kind of solved, and now and there is space between the soft limits and the switches, too. So the travel can go to the soft zero and unless it's turned by hand, past that switch and while the motor is not powered, the limit switch won't trip. Same goes on the home side. The max home limit is .100" past the hard switch, though I'm vacillating between putting that soft limit on the negative side of the switch so it doesn't trip the switch for sure. It's set up that way on the zero end. The soft limit is -.100" past the zero but the switch is -.25" past the zero. This configuration seems to be the smartest. It gives me a bit of negative room past the zero. But the hard switch is even further. So the soft limit stops the slide before the switch can be tripped. The DRO values have light on them, now, too. I think I can tune the motor to a finer resolution on the following error.
"This would be for when you power up the machine and hit home all axis button. Not the g54 0,0."
Yep. When I fire it up, I send her home to 5". She stops perfectly when the commanded position is displayed. But when actual position is displayed, I've got the same issue as before. She displays an actual position that's a thou-ish short in either direction, but not cumulative. My problem was that I was not looking at the proper commanded/actual values at the right times, I think. Because when the machine flips back into G54 after homing, sending her to zero while looking at the actual position is giving me the same problems. This seems to indicate a tuning issue from what I've read but perhaps a counting issue. Granted, I never tuned a servo before and it took me a few days of banging my head against the wall, but with some help from Jon at PicoSystems and the folks on this list, I got the process very close. I'll likely have to tune it again. But now I know how. The following error I achieved with Halscope closed in on .00025"-ish. I'm going to try to get that error lower as there were a few fine-tuning steps I didn't catch. So it's close, but the error is there and I think it could be made better.
"Do you have any binding in the ways on your machine? Or is it pretty smooth? What lathe is it? Lube running?"
The ways are old, but they are not binding. They could use some lube and I have to get a mini zerk fitting to grease them properly. They were hand greased without wipers, using white lithium grease, many years back but they could use lube.
"I just saw your new posts, you can add your preferred preamble in this section below I believe (i can check next time I boot up the machine):"
"# Part program interpreter section
[RS274NGC]"
So I would put that line in my .ini file? If so, where?
Also, What happens if you change the backlash setting to 0 ?
The backlash is at zero now. There is lash in the screw and likely more than acceptable at .003"-ish. I only have a .001" dial indicator to measure with. I'll have to get a .0001" indicator before I can be sure of that number. Then a new screw is likely going to happen. But I may be able to get away with just reloading the nut with new balls to bring that number down to about a thou. If that doesn't get me what I want, I'll get a new screw. They're cheap, now, when they aren't pre-machined. Unfortunately, the machine I would use to machine the new screw is down and waiting a new controller, too! So I have to take the screw to a machinist. This guy used to grind ball screws in the 70's. He knows how to hold tolerance. So it's not an issue.
"Are you're jogging the x on the mill config that's controlling the z on the lathe?? "
I'm actually working the Y axis on a mill configuration, tied to a lathe. I just started this in the basic Axis config, figuring I could change the Gui/configuration a bit more to a lathe configuration, later. I called it a Z out of habit.
"If so, I would start with a clean lathe config."
That's in the near future. I had to get this thing back to acceptable motion before I made that switch.
"edit: I assume it's the Y since the limits are configured in that"
You assume correctly and you're clearly a thinker.
"Also, I'm running an older version so someone else should comment but you have the axis repeating some duplicated stuff."
Are you referring to that preamble?
Thanks again, OT-CNC! Although I had an issue, your info helped me understand it and repair what I mangled!
Scot
Please Log in or Create an account to join the conversation.
02 Oct 2019 21:06 #146902
by Scot
Replied by Scot on topic DRO innacuracy. Why would the DRO not reach the commanded position?
Even by a factor of 10 smaller, it's identical on the problem. It still homes about .0011 short and when the axis is moved the opposite direction, it's about the same, short. But when the direction stays the same, the distance seems to repeat. Although occasionally, it lags then catches up. I'm guessing it's the following error.
The problem I was having seemed to be me not looking at the commanded position, thinking it was the commanded posistion, when I was looking at the actual position.
It created a bunch of confusion and in trying to repair the issue, I figured out what I think is the problem - and that turns out to seem to be a tuning issue.
The following error I settled on before I quit tuning the servo ended up being about .00025" -ish. But I learned I didn't quite have all the info when tuning. So I'm going to do it again and again until I can be sure I can't get that error to about .0001, if it's possible.
I fooled with the Deadband a bit, but nothing really changed. BTW, do you know what the Deadband is? Or why it's used or represented?
Thanks, still learning.
Scot
The problem I was having seemed to be me not looking at the commanded position, thinking it was the commanded posistion, when I was looking at the actual position.
It created a bunch of confusion and in trying to repair the issue, I figured out what I think is the problem - and that turns out to seem to be a tuning issue.
The following error I settled on before I quit tuning the servo ended up being about .00025" -ish. But I learned I didn't quite have all the info when tuning. So I'm going to do it again and again until I can be sure I can't get that error to about .0001, if it's possible.
I fooled with the Deadband a bit, but nothing really changed. BTW, do you know what the Deadband is? Or why it's used or represented?
Thanks, still learning.
Scot
Please Log in or Create an account to join the conversation.
- Configuring LinuxCNC
- Basic Configuration
- DRO innacuracy. Why would the DRO not reach the commanded position?
Time to create page: 0.089 seconds