linuxcnc+ethercat drives the AKD servo motor it cannot be moved
30 Jun 2021 07:51 - 30 Jun 2021 07:56 #213316
by wang
hi everyone
linuxcnc+ethercat drives the AKD servo motor. After configuring ini, xml, hal files, it cannot be moved and the following deviation level fault occurs.
I think that because the motor cannot be rotated, but the position command can be executed, there is a deviation between the two (F439 follow-up deviation level fault)
Below is my configuration file
xml
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="5">
<slave idx="0" type="generic" vid="0000006a" pid="0x00414b44" configPdos="true">
<sdoConfig idx="6060" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="60C2" subIdx="1">
<sdoDataRaw data="02"/>
</sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1725">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="float" scale="1000"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1B26">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="float" scale="1000"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
</slave>
</master>
</masters>
ini
# EMC controller parameters for a simulated machine.
# 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 = 1.1
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-HAL-SIM-AXIS
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
#DEBUG = 0x7FFFFFFF
DEBUG = 0
# Sections for display options
[DISPLAY]
# Name of display program, e.g., axis
DISPLAY = axis
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = doc/help.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
MAX_SPINDLE_OVERRIDE = 1.0
MAX_LINEAR_VELOCITY = 5
DEFAULT_LINEAR_VELOCITY = .25
DEFAULT_SPINDLE_SPEED = 200
# Prefix to be used
PROGRAM_PREFIX = ../../nc_files/
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
#EDITOR = gedit
TOOL_EDITOR = tooledit
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
# 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.001
# Part program interpreter section
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = sim.var
# Motion control section
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000
# 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 = sim.tbl
TOOL_CHANGE_POSITION = 0 0 0
TOOL_CHANGE_QUILL_UP = 1
# 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 = core_sim.hal
HALFILE = sim_spindle_encoder.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal
HALFILE = check_xyz_constraints.hal
HALFILE = deltaPos.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
# Single file that is executed after the GUI has started. Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
#POSTGUI_HALFILE = test_postgui.hal
HALUI = halui
# Trajectory planner section
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
MAX_LINEAR_VELOCITY = 4
DEFAULT_LINEAR_ACCELERATION = 100
MAX_LINEAR_ACCELERATION = 100
POSITION_FILE = position.txt
[KINS]
KINEMATICS = trivkins
JOINTS = 3
# Axes sections
[AXIS_X]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
[AXIS_Y]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
[AXIS_Z]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -8.0
MAX_LIMIT = 0.12
# Joints sections
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
FERROR = 0.050
MIN_FERROR = 0.010
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 20.0
HOME_LATCH_VEL = 20.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
HOME_IS_SHARED = 1
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
FERROR = 0.050
MIN_FERROR = 0.010
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 20.0
HOME_LATCH_VEL = 20.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -8.0
# Normally the Z max should be 0.000!
# The only reason it's greater than 0 here is so that the splash screen
# gcode will run.
MAX_LIMIT = 0.12
FERROR = 0.050
MIN_FERROR = 0.010
HOME_OFFSET = 1.0
HOME_SEARCH_VEL = 20.0
HOME_LATCH_VEL = 20.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
HOME_IS_SHARED = 1
hal
loadusr -W lcec_conf /home/qxh-wyk/linuxcnc-dev/configs/sim/axis/deltaPos.xml
loadrt lcec
addf lcec.read-all servo-thread
addf lcec.write-all servo-thread
setp lcec.0.0.drivecontrol-1 1
setp lcec.0.0.drivecontrol-2 1
#net Xachse_fb lcec.0.0.pos => joint.0.motor-pos-fb
net Xpos => lcec.0.0.poscommand
net Xachse_AF joint.0.amp-enable-out => lcec.0.0.drivecontrol-0
net Xachse_AF => lcec.0.0.drivecontrol-3
net Xachse_AF => lcec.0.0.drivecontrol-5
I know my configuration is a bit simple, because I am a novice and need some help
At present, I can use the axis interface of linuxcnc to control the switch of AKD through ethercat, but I cannot control the motor rotation freely.
linuxcnc+ethercat drives the AKD servo motor. After configuring ini, xml, hal files, it cannot be moved and the following deviation level fault occurs.
I think that because the motor cannot be rotated, but the position command can be executed, there is a deviation between the two (F439 follow-up deviation level fault)
Below is my configuration file
xml
Warning: Spoiler!
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="5">
<slave idx="0" type="generic" vid="0000006a" pid="0x00414b44" configPdos="true">
<sdoConfig idx="6060" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="60C2" subIdx="1">
<sdoDataRaw data="02"/>
</sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1725">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="float" scale="1000"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1B26">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="float" scale="1000"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
</slave>
</master>
</masters>
ini
Warning: Spoiler!
# EMC controller parameters for a simulated machine.
# 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 = 1.1
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-HAL-SIM-AXIS
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
#DEBUG = 0x7FFFFFFF
DEBUG = 0
# Sections for display options
[DISPLAY]
# Name of display program, e.g., axis
DISPLAY = axis
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = doc/help.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
MAX_SPINDLE_OVERRIDE = 1.0
MAX_LINEAR_VELOCITY = 5
DEFAULT_LINEAR_VELOCITY = .25
DEFAULT_SPINDLE_SPEED = 200
# Prefix to be used
PROGRAM_PREFIX = ../../nc_files/
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
#EDITOR = gedit
TOOL_EDITOR = tooledit
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
# 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.001
# Part program interpreter section
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = sim.var
# Motion control section
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000
# 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 = sim.tbl
TOOL_CHANGE_POSITION = 0 0 0
TOOL_CHANGE_QUILL_UP = 1
# 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 = core_sim.hal
HALFILE = sim_spindle_encoder.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal
HALFILE = check_xyz_constraints.hal
HALFILE = deltaPos.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
# Single file that is executed after the GUI has started. Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
#POSTGUI_HALFILE = test_postgui.hal
HALUI = halui
# Trajectory planner section
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
MAX_LINEAR_VELOCITY = 4
DEFAULT_LINEAR_ACCELERATION = 100
MAX_LINEAR_ACCELERATION = 100
POSITION_FILE = position.txt
[KINS]
KINEMATICS = trivkins
JOINTS = 3
# Axes sections
[AXIS_X]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
[AXIS_Y]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
[AXIS_Z]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -8.0
MAX_LIMIT = 0.12
# Joints sections
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
FERROR = 0.050
MIN_FERROR = 0.010
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 20.0
HOME_LATCH_VEL = 20.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
HOME_IS_SHARED = 1
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
FERROR = 0.050
MIN_FERROR = 0.010
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 20.0
HOME_LATCH_VEL = 20.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -8.0
# Normally the Z max should be 0.000!
# The only reason it's greater than 0 here is so that the splash screen
# gcode will run.
MAX_LIMIT = 0.12
FERROR = 0.050
MIN_FERROR = 0.010
HOME_OFFSET = 1.0
HOME_SEARCH_VEL = 20.0
HOME_LATCH_VEL = 20.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
HOME_IS_SHARED = 1
hal
Warning: Spoiler!
loadusr -W lcec_conf /home/qxh-wyk/linuxcnc-dev/configs/sim/axis/deltaPos.xml
loadrt lcec
addf lcec.read-all servo-thread
addf lcec.write-all servo-thread
setp lcec.0.0.drivecontrol-1 1
setp lcec.0.0.drivecontrol-2 1
#net Xachse_fb lcec.0.0.pos => joint.0.motor-pos-fb
net Xpos => lcec.0.0.poscommand
net Xachse_AF joint.0.amp-enable-out => lcec.0.0.drivecontrol-0
net Xachse_AF => lcec.0.0.drivecontrol-3
net Xachse_AF => lcec.0.0.drivecontrol-5
I know my configuration is a bit simple, because I am a novice and need some help
At present, I can use the axis interface of linuxcnc to control the switch of AKD through ethercat, but I cannot control the motor rotation freely.
Last edit: 30 Jun 2021 07:56 by wang.
Please Log in or Create an account to join the conversation.
30 Jun 2021 09:01 #213321
by db1981
Replied by db1981 on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
Hi,
is linuxcnc showing the correct position if you turn the motor shaft by hand (scaling...)
please show your complete halfile.
is linuxcnc showing the correct position if you turn the motor shaft by hand (scaling...)
please show your complete halfile.
The following user(s) said Thank You: wang
Please Log in or Create an account to join the conversation.
30 Jun 2021 09:09 #213322
by wang
Replied by wang on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
No, rotate the motor manually, linuxcnc has no feedback
The above hal is my completed hal file
I am a newbie and look forward to your guidance
The above hal is my completed hal file
I am a newbie and look forward to your guidance
Please Log in or Create an account to join the conversation.
30 Jun 2021 10:50 - 30 Jun 2021 10:52 #213327
by db1981
Replied by db1981 on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
hi,
you have to move this lines:
loadusr -W lcec_conf /home/qxh-wyk/linuxcnc-dev/configs/sim/axis/deltaPos.xml
loadrt lcec
addf lcec.read-all servo-thread
addf lcec.write-all servo-thread
to the core_sim.hal. At the actual placement in your hal structure, the values from ethercat are not recognized by linuxcnc's motion part...
put "addf lcec.read-all servo-thread" as the first line in front of all others addf's commands. and "addf lcec.write-all servo-thread" as the last.
read here : forum.linuxcnc.org/24-hal-components/223...er?start=1270#212470
you have to move this lines:
loadusr -W lcec_conf /home/qxh-wyk/linuxcnc-dev/configs/sim/axis/deltaPos.xml
loadrt lcec
addf lcec.read-all servo-thread
addf lcec.write-all servo-thread
to the core_sim.hal. At the actual placement in your hal structure, the values from ethercat are not recognized by linuxcnc's motion part...
put "addf lcec.read-all servo-thread" as the first line in front of all others addf's commands. and "addf lcec.write-all servo-thread" as the last.
read here : forum.linuxcnc.org/24-hal-components/223...er?start=1270#212470
Last edit: 30 Jun 2021 10:52 by db1981.
The following user(s) said Thank You: wang
Please Log in or Create an account to join the conversation.
30 Jun 2021 11:04 #213328
by wang
Replied by wang on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
Thank you for your guidance, I will try it, thank you very much
Please Log in or Create an account to join the conversation.
30 Jun 2021 11:33 - 30 Jun 2021 11:36 #213332
by wang
Replied by wang on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
hi
According to your guidance I will
These lines are moved to core_sim.hal
Is still placed in deltaPos.hal
Although the rotation is not controlled, it is obvious that the shaft is braked. This is different from the previous feeling. Thank you for your guidance.
For single-axis testing, should I click this plus sign to see if the motor turns
According to your guidance I will
loadusr -W lcec_conf /home/qxh-wyk/linuxcnc-dev/configs/sim/axis/deltaPos.xml
loadrt lcec addf
lcec.read-all servo-thread
These lines are moved to core_sim.hal
addf lcec.write-all servo-thread
Although the rotation is not controlled, it is obvious that the shaft is braked. This is different from the previous feeling. Thank you for your guidance.
For single-axis testing, should I click this plus sign to see if the motor turns
Attachments:
Last edit: 30 Jun 2021 11:36 by wang.
Please Log in or Create an account to join the conversation.
30 Jun 2021 11:39 #213334
by wang
Replied by wang on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
By the way, my operating environment is
Ubuntu16.04+manually build linuxcnc2.9
Ubuntu16.04+manually build linuxcnc2.9
Please Log in or Create an account to join the conversation.
30 Jun 2021 19:40 #213357
by wang
Replied by wang on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
The following is part of the results of dmesg, whether there is an error that caused the motor to be unable to control the rotation
Attachments:
Please Log in or Create an account to join the conversation.
30 Jun 2021 20:11 #213363
by db1981
Replied by db1981 on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
dmesg reads ok ....
i think its an scaling problem.
do you get position feedback if you start linuxcnc (do not enable the motor) and turn the shaft by hand?
i think its an scaling problem.
do you get position feedback if you start linuxcnc (do not enable the motor) and turn the shaft by hand?
Please Log in or Create an account to join the conversation.
30 Jun 2021 20:30 #213367
by db1981
Replied by db1981 on topic linuxcnc+ethercat drives the AKD servo motor it cannot be moved
normaly scaling should be so:
-reading (posfeedback)
scale = 0.001 (1000 incs = 1 Machine Unit)
inside lcec : sint_to_float -> raw_value; raw_value * scale =hal_value
-writing (pos command)
scale = 1000 (1 Machine Unit = 1000 incs [enc_counts])
inside lcec : hal_value * scale = raw_value; raw_value ->float_to_sint
-reading (posfeedback)
scale = 0.001 (1000 incs = 1 Machine Unit)
inside lcec : sint_to_float -> raw_value; raw_value * scale =hal_value
-writing (pos command)
scale = 1000 (1 Machine Unit = 1000 incs [enc_counts])
inside lcec : hal_value * scale = raw_value; raw_value ->float_to_sint
Please Log in or Create an account to join the conversation.
Time to create page: 0.116 seconds