Skip to content

Commit

Permalink
Restructure dir for EL72xx high velo tests
Browse files Browse the repository at this point in the history
  • Loading branch information
anderssandstrom committed Oct 26, 2023
1 parent 7d394af commit 6d5bcb4
Show file tree
Hide file tree
Showing 19 changed files with 334 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7.0.6
94 changes: 94 additions & 0 deletions examples/test/el70xx/high_speed/el7031_owis_stage/cfg/linear.ax
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#General
epicsEnvSet("ECMC_MOTOR_NAME", "Axis1")
epicsEnvSet("ECMC_R", "Axis1-")
epicsEnvSet("ECMC_AXIS_NO", "1")
epicsEnvSet("ECMC_DESC", "Axis 1")
epicsEnvSet("ECMC_EGU", "deg") # Motor Record Unit
epicsEnvSet("ECMC_PREC", "3") # Motor Record Precision
epicsEnvSet("ECMC_AXISCONFIG", "") # Extra parameters to driver
epicsEnvSet("ECMC_EC_AXIS_HEALTH", "") # Entry for axis health output (example: ec0.s1.binaryOutput01.0)
epicsEnvSet("ECMC_MOD_RANGE" , "0") # Modulo range (traj setpoints and encoder values will be in range 0..ECMC_MOD_RANGE)
epicsEnvSet("ECMC_MOD_TYPE", "0") # For positioning and MOD_RANGE>0: 0 = Normal, 1 = Always Fwd, 2 = Always Bwd, 3 = Closest Distance

#Encoder
epicsEnvSet("ECMC_ENC_SCALE_NUM" "1")
epicsEnvSet("ECMC_ENC_SCALE_DENOM" "12800")
epicsEnvSet("ECMC_ENC_TYPE" "0") # Type: 0=Incremental, 1=Absolute
epicsEnvSet("ECMC_ENC_BITS" "16") # Total bit count of encoder raw data
epicsEnvSet("ECMC_ENC_ABS_BITS", "0") # Absolute bit count (for absolute encoders) always least significant part of ECMC_ENC_BITS
epicsEnvSet("ECMC_ENC_ABS_OFFSET" "0") # Encoder offset in eng units (for absolute encoders)
epicsEnvSet("ECMC_EC_ENC_ACTPOS", "ec0.s${DRIVE_ID}.positionActual01") # Ethercat entry for actual position input (encoder)
epicsEnvSet("ECMC_EC_ENC_RESET", "") # Reset (if no encoder reset bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_0", "") # Error 0 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_1", "") # Error 1 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_2", "") # Error 2 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_WARNING", "") # Warning (if no encoder warning bit then leave empty)

#Drive
epicsEnvSet("ECMC_DRV_TYPE" "0") # Stepper: 0. Ds${DRIVE_ID}02: 1 (Ds${DRIVE_ID}02 = servos and advanced stepper drives)
epicsEnvSet("ECMC_DRV_SCALE_NUM" "40.0") # Fastest speed in engineering units
epicsEnvSet("ECMC_DRV_SCALE_DENOM" "32768.0") # I/O range for ECMC_EC_ALIAS_DRV_VELO_SET
epicsEnvSet("ECMC_EC_DRV_CONTROL", "ec0.s${DRIVE_ID}.driveControl01.0") # Ethercat entry for control word or bit output
epicsEnvSet("ECMC_EC_DRV_STATUS", "ec0.s${DRIVE_ID}.driveStatus01.1") # Ethercat entry for status word or bit input
epicsEnvSet("ECMC_EC_DRV_VELOCITY", "ec0.s${DRIVE_ID}.velocitySetpoint01") # Ethercat entry for velocity setpoint output
epicsEnvSet("ECMC_EC_DRV_REDUCE_TORQUE", "ec0.s${DRIVE_ID}.driveControl01.2") # Ethercat entry for reduce torque output
epicsEnvSet("ECMC_EC_DRV_BRAKE", "") # Ethercat entry for brake output
epicsEnvSet("ECMC_DRV_BRAKE_OPEN_DLY_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_EC_DRV_RESET", "ec0.s${DRIVE_ID}.driveControl01.1") # Reset
epicsEnvSet("ECMC_EC_DRV_ALARM_0", "ec0.s${DRIVE_ID}.driveStatus01.3") # Error
epicsEnvSet("ECMC_EC_DRV_ALARM_1", "ec0.s${DRIVE_ID}.driveStatus01.7") # Stall
epicsEnvSet("ECMC_EC_DRV_ALARM_2", "ec0.s${DRIVE_ID}.driveStatus01.14") # Sync error
epicsEnvSet("ECMC_EC_DRV_WARNING", "ec0.s${DRIVE_ID}.driveStatus01.2") # Warning

#Trajectory
epicsEnvSet("ECMC_VELO", "9")
epicsEnvSet("ECMC_JOG_VEL", "9")
epicsEnvSet("ECMC_JAR", "0.0") # JAR defaults to VELO/ACCL
epicsEnvSet("ECMC_ACCS_EGU_PER_S2", "30")
epicsEnvSet("ECMC_EMERG_DECEL", "100") # Emergency deceleration

#Homing
epicsEnvSet("ECMC_HOME_PROC", "0")
epicsEnvSet("ECMC_HOME_POS", "0.0")
epicsEnvSet("ECMC_HOME_VEL_TO", "5")
epicsEnvSet("ECMC_HOME_VEL_FRM", "4")
epicsEnvSet("ECMC_HOME_ACC", "21")
epicsEnvSet("ECMC_HOME_DEC", "100")
epicsEnvSet("ECMC_HOME_POS_MOVE_ENA", "0") # Enable move to position after successfull homing
epicsEnvSet("ECMC_HOME_POS_MOVE_TARG_POS","0") # Target position to go to after successfull homing

#Controller
epicsEnvSet("ECMC_CNTRL_KP", "15.0")
epicsEnvSet("ECMC_CNTRL_KI", "0.02")
epicsEnvSet("ECMC_CNTRL_KD", "0.0")
epicsEnvSet("ECMC_CNTRL_KFF", "1.0")

#Monitoring
# Switches
epicsEnvSet("ECMC_EC_MON_LOWLIM", "ec0.s${DRIVE_ID}.ONE.0") # Ethercat entry for low limit switch input
epicsEnvSet("ECMC_EC_MON_HIGHLIM", "ec0.s${DRIVE_ID}.ONE.0") # Ethercat entry for high limit switch inpuit
epicsEnvSet("ECMC_EC_MON_HOME_SWITCH", "ec0.s${DRIVE_ID}.ONE.0") # Ethercat entry for home switch input
epicsEnvSet("ECMC_EC_MON_EXT_INTERLOCK", "ec0.s${DRIVE_ID}.ONE.0") # Ethercat entry for external interlock input

# Softlimits (disable with 0,0,0)
epicsEnvSet("ECMC_SOFT_LOW_LIM", "0")
epicsEnvSet("ECMC_SOFT_HIGH_LIM", "0")
epicsEnvSet("ECMC_DXLM_ENABLE", "0")

# Position lag
epicsEnvSet("ECMC_MON_LAG_MON_TOL", "5")
epicsEnvSet("ECMC_MON_LAG_MON_TIME", "100")
epicsEnvSet("ECMC_MON_LAG_MON_ENA", "1")

# At target
epicsEnvSet("ECMC_MON_AT_TARGET_TOL", "0.03")
epicsEnvSet("ECMC_MON_AT_TARGET_TIME", "100")
epicsEnvSet("ECMC_MON_AT_TARGET_ENA", "1")

# Velocity
epicsEnvSet("ECMC_MON_VELO_MAX", "5000.0")
epicsEnvSet("ECMC_MON_VELO_MAX_TRAJ_TIME","100")
epicsEnvSet("ECMC_MON_VELO_MAX_DRV_TIME", "200")
epicsEnvSet("ECMC_MON_VELO_MAX_ENA", "1")

11 changes: 11 additions & 0 deletions examples/test/el70xx/high_speed/el7031_owis_stage/startup.script
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# AD82: The following lines would be generated by "ioc install" if you useed it
# Generated at: 2023-04-12 00:36:43

epicsEnvSet IOC c6025a
epicsEnvSet ENGINEER sandst_a
< /ioc/startup/startup.script_linux

# ---- ioc/system specific startup script(s)
< startup.script_ECMC

iocInit
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# ecmc test system
# Anders Sandström

require ecmccfg v9.0.1_RC3,"EC_RATE=500,ECMC_VER=v9.0.1_RC2"

epicsEnvSet("IOC" ,"$(IOC="ec-base-01:Test:")")
epicsEnvSet("SCRIPTEXEC" ,"$(SCRIPTEXEC="iocshLoad")")

# Configure hardware
${SCRIPTEXEC} ${ecmccfg_DIR}addSlave.cmd, "SLAVE_ID=4, HW_DESC=EL7031"
#${SCRIPTEXEC} ${ecmccfg_DIR}ecmcEP7047-1032-Motor-Micos-Epics-Training.cmd

# Settings from ecmcEP7047-1032-Motor-Micos-Epics-Training.cmd but 24 volt and no induction setting
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8010,0x1,500,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8010,0x2,250,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8010,0x3,24000,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8010,0x4,170,2)"


# mode velo
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8012,0x1,1,1)"

# velo range 1=2000, 3=8000
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8012,0x5,3,1)"

# Filter cut off
#ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x7,0,2)"

# Current boosts (set to 0 according to beckhoff), really makes a difference
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x7,0,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x8,0,2)"

# Current control keep 1/40 ratio
# kp
#ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x1,400,2)"
# ki
#ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x2,4,2)"


ecmcConfigOrDie "Cfg.EcApplyConfig(1)"

# Configure Motion
epicsEnvSet("DEV", "$(IOC)")
epicsEnvSet("DRIVE_ID", "$(ECMC_EC_SLAVE_NUM)")
#$(SCRIPTEXEC) ($(ecmccfg_DIR)configureAxis.cmd, CONFIG=./cfg/linear.ax, CFG_MACROS="DRIVE_ID=${ECMC_EC_SLAVE_NUM}")
$(SCRIPTEXEC) ($(ecmccfg_DIR)configureAxis.cmd, CONFIG=./cfg/linear.ax)

# Other
ecmcConfigOrDie "Cfg.EcSetDiagnostics(1)"
ecmcConfigOrDie "Cfg.EcEnablePrintouts(0)"
ecmcConfigOrDie "Cfg.EcSetDomainFailedCyclesLimit(100)"
#ecmcConfigOrDie "Cfg.SetDiagAxisIndex(1)"
#ecmcConfigOrDie "Cfg.SetDiagAxisFreq(2)"
ecmcConfigOrDie "Cfg.SetDiagAxisEnable(0)"

# go active
$(SCRIPTEXEC) ($(ecmccfg_DIR)setAppMode.cmd)
8 changes: 8 additions & 0 deletions examples/test/el70xx/high_speed/el7041/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
## EL7041-0052
Test "high speed" with EL7041-0052 and a phytron motor.
The setup uses el7041:s highest speed range (32000 fullsteps/s)

# Conclusion
Running a stepper without mechnics with EL7052-0052 over 600 fullsteps/s is almost impossible. An inertia is needed and damper is needed.
Attaching a damper and inertia allows very high speeds, tested up to 26000 fullsteps/s (130Hz (turns/s)).

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7.0.6
94 changes: 94 additions & 0 deletions examples/test/el70xx/high_speed/ep7047_owis_stage/cfg/linear.ax
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#General
epicsEnvSet("ECMC_MOTOR_NAME", "Axis1")
epicsEnvSet("ECMC_R", "Axis1-")
epicsEnvSet("ECMC_AXIS_NO", "1")
epicsEnvSet("ECMC_DESC", "Axis 1")
epicsEnvSet("ECMC_EGU", "deg") # Motor Record Unit
epicsEnvSet("ECMC_PREC", "3") # Motor Record Precision
epicsEnvSet("ECMC_AXISCONFIG", "") # Extra parameters to driver
epicsEnvSet("ECMC_EC_AXIS_HEALTH", "") # Entry for axis health output (example: ec0.s1.binaryOutput01.0)
epicsEnvSet("ECMC_MOD_RANGE" , "0") # Modulo range (traj setpoints and encoder values will be in range 0..ECMC_MOD_RANGE)
epicsEnvSet("ECMC_MOD_TYPE", "0") # For positioning and MOD_RANGE>0: 0 = Normal, 1 = Always Fwd, 2 = Always Bwd, 3 = Closest Distance

#Encoder
epicsEnvSet("ECMC_ENC_SCALE_NUM" "1")
epicsEnvSet("ECMC_ENC_SCALE_DENOM" "12800")
epicsEnvSet("ECMC_ENC_TYPE" "0") # Type: 0=Incremental, 1=Absolute
epicsEnvSet("ECMC_ENC_BITS" "16") # Total bit count of encoder raw data
epicsEnvSet("ECMC_ENC_ABS_BITS", "0") # Absolute bit count (for absolute encoders) always least significant part of ECMC_ENC_BITS
epicsEnvSet("ECMC_ENC_ABS_OFFSET" "0") # Encoder offset in eng units (for absolute encoders)
epicsEnvSet("ECMC_EC_ENC_ACTPOS", "ec0.s${DRIVE_ID}.positionActual01") # Ethercat entry for actual position input (encoder)
epicsEnvSet("ECMC_EC_ENC_RESET", "") # Reset (if no encoder reset bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_0", "") # Error 0 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_1", "") # Error 1 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_ALARM_2", "") # Error 2 (if no encoder error bit then leave empty)
epicsEnvSet("ECMC_EC_ENC_WARNING", "") # Warning (if no encoder warning bit then leave empty)

#Drive
epicsEnvSet("ECMC_DRV_TYPE" "0") # Stepper: 0. Ds${DRIVE_ID}02: 1 (Ds${DRIVE_ID}02 = servos and advanced stepper drives)
epicsEnvSet("ECMC_DRV_SCALE_NUM" "10.0") # Fastest speed in engineering units
epicsEnvSet("ECMC_DRV_SCALE_DENOM" "32768.0") # I/O range for ECMC_EC_ALIAS_DRV_VELO_SET
epicsEnvSet("ECMC_EC_DRV_CONTROL", "ec0.s${DRIVE_ID}.driveControl01.0") # Ethercat entry for control word or bit output
epicsEnvSet("ECMC_EC_DRV_STATUS", "ec0.s${DRIVE_ID}.driveStatus01.1") # Ethercat entry for status word or bit input
epicsEnvSet("ECMC_EC_DRV_VELOCITY", "ec0.s${DRIVE_ID}.velocitySetpoint01") # Ethercat entry for velocity setpoint output
epicsEnvSet("ECMC_EC_DRV_REDUCE_TORQUE", "ec0.s${DRIVE_ID}.driveControl01.2") # Ethercat entry for reduce torque output
epicsEnvSet("ECMC_EC_DRV_BRAKE", "") # Ethercat entry for brake output
epicsEnvSet("ECMC_DRV_BRAKE_OPEN_DLY_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_DRV_BRAKE_CLOSE_AHEAD_TIME", "0") # Brake timing parameter in cycles (default 1kHz)
epicsEnvSet("ECMC_EC_DRV_RESET", "ec0.s${DRIVE_ID}.driveControl01.1") # Reset
epicsEnvSet("ECMC_EC_DRV_ALARM_0", "ec0.s${DRIVE_ID}.driveStatus01.3") # Error
epicsEnvSet("ECMC_EC_DRV_ALARM_1", "ec0.s${DRIVE_ID}.driveStatus01.7") # Stall
epicsEnvSet("ECMC_EC_DRV_ALARM_2", "ec0.s${DRIVE_ID}.driveStatus01.14") # Sync error
epicsEnvSet("ECMC_EC_DRV_WARNING", "ec0.s${DRIVE_ID}.driveStatus01.2") # Warning

#Trajectory
epicsEnvSet("ECMC_VELO", "9")
epicsEnvSet("ECMC_JOG_VEL", "9")
epicsEnvSet("ECMC_JAR", "0.0") # JAR defaults to VELO/ACCL
epicsEnvSet("ECMC_ACCS_EGU_PER_S2", "10")
epicsEnvSet("ECMC_EMERG_DECEL", "100") # Emergency deceleration

#Homing
epicsEnvSet("ECMC_HOME_PROC", "0")
epicsEnvSet("ECMC_HOME_POS", "0.0")
epicsEnvSet("ECMC_HOME_VEL_TO", "5")
epicsEnvSet("ECMC_HOME_VEL_FRM", "4")
epicsEnvSet("ECMC_HOME_ACC", "21")
epicsEnvSet("ECMC_HOME_DEC", "100")
epicsEnvSet("ECMC_HOME_POS_MOVE_ENA", "0") # Enable move to position after successfull homing
epicsEnvSet("ECMC_HOME_POS_MOVE_TARG_POS","0") # Target position to go to after successfull homing

#Controller
epicsEnvSet("ECMC_CNTRL_KP", "15.0")
epicsEnvSet("ECMC_CNTRL_KI", "0.02")
epicsEnvSet("ECMC_CNTRL_KD", "0.0")
epicsEnvSet("ECMC_CNTRL_KFF", "1.0")

#Monitoring
# Switches
epicsEnvSet("ECMC_EC_MON_LOWLIM", "ec0.s${DRIVE_ID}.driveStatus01.11") # Ethercat entry for low limit switch input
epicsEnvSet("ECMC_EC_MON_HIGHLIM", "ec0.s${DRIVE_ID}.driveStatus01.12") # Ethercat entry for high limit switch inpuit
epicsEnvSet("ECMC_EC_MON_HOME_SWITCH", "ec0.s${DRIVE_ID}.ONE.0") # Ethercat entry for home switch input
epicsEnvSet("ECMC_EC_MON_EXT_INTERLOCK", "ec0.s${DRIVE_ID}.ONE.0") # Ethercat entry for external interlock input

# Softlimits (disable with 0,0,0)
epicsEnvSet("ECMC_SOFT_LOW_LIM", "0")
epicsEnvSet("ECMC_SOFT_HIGH_LIM", "0")
epicsEnvSet("ECMC_DXLM_ENABLE", "0")

# Position lag
epicsEnvSet("ECMC_MON_LAG_MON_TOL", "5")
epicsEnvSet("ECMC_MON_LAG_MON_TIME", "100")
epicsEnvSet("ECMC_MON_LAG_MON_ENA", "1")

# At target
epicsEnvSet("ECMC_MON_AT_TARGET_TOL", "0.03")
epicsEnvSet("ECMC_MON_AT_TARGET_TIME", "100")
epicsEnvSet("ECMC_MON_AT_TARGET_ENA", "1")

# Velocity
epicsEnvSet("ECMC_MON_VELO_MAX", "5000.0")
epicsEnvSet("ECMC_MON_VELO_MAX_TRAJ_TIME","100")
epicsEnvSet("ECMC_MON_VELO_MAX_DRV_TIME", "200")
epicsEnvSet("ECMC_MON_VELO_MAX_ENA", "1")

11 changes: 11 additions & 0 deletions examples/test/el70xx/high_speed/ep7047_owis_stage/startup.script
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# AD82: The following lines would be generated by "ioc install" if you useed it
# Generated at: 2023-04-12 00:36:43

epicsEnvSet IOC c6025a
epicsEnvSet ENGINEER sandst_a
< /ioc/startup/startup.script_linux

# ---- ioc/system specific startup script(s)
< startup.script_ECMC

iocInit
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# ecmc test system
# Anders Sandström

require ecmccfg v9.0.1_RC3,"EC_RATE=500,ECMC_VER=v9.0.1_RC2"

epicsEnvSet("IOC" ,"$(IOC="ec-base-01:Test:")")
epicsEnvSet("SCRIPTEXEC" ,"$(SCRIPTEXEC="iocshLoad")")


# Configure hardware
${SCRIPTEXEC} ${ecmccfg_DIR}configureSlave.cmd, "SLAVE_ID=12, HW_DESC=EP7047-1032, CONFIG=-Motor-Micos-Epics-Training"
ecmcConfigOrDie "Cfg.EcApplyConfig(1)"

# Configure Motion
epicsEnvSet("DEV", "$(IOC)")
epicsEnvSet("DRIVE_ID", "$(ECMC_EC_SLAVE_NUM)")
#$(SCRIPTEXEC) ($(ecmccfg_DIR)configureAxis.cmd, CONFIG=./cfg/linear.ax, CFG_MACROS="DRIVE_ID=${ECMC_EC_SLAVE_NUM}")
$(SCRIPTEXEC) ($(ecmccfg_DIR)configureAxis.cmd, CONFIG=./cfg/linear.ax)

dbLoadTemplate(ho.subs,"P=${IOC}:,PORT=${ECMC_ASYN_PORT},AXIS_NAME=${ECMC_MOTOR_NAME},AXIS_NO=${ECMC_AXIS_NO}")

# Other
ecmcConfigOrDie "Cfg.EcSetDiagnostics(1)"
ecmcConfigOrDie "Cfg.EcEnablePrintouts(0)"
ecmcConfigOrDie "Cfg.EcSetDomainFailedCyclesLimit(100)"
#ecmcConfigOrDie "Cfg.SetDiagAxisIndex(1)"
#ecmcConfigOrDie "Cfg.SetDiagAxisFreq(2)"
ecmcConfigOrDie "Cfg.SetDiagAxisEnable(0)"

# go active
$(SCRIPTEXEC) ($(ecmccfg_DIR)setAppMode.cmd)
Original file line number Diff line number Diff line change
@@ -1,12 +1,31 @@
## EL7041-0052
Test "high speed" with EL7041-0052 and a phytron motor.
The setup uses el7041:s highest speed range (32000 fullsteps/s)
# high speed tests:
Test to see if el70x7 is better than el70x1 when it comes to running at higher speeds
The background is that ESS have seen significant differences with EL7047 vs EL7041-0052, where EL7047 was more forgiving and allowed higher speeds without special tuning.

# Conclusion
Running a stepper without mechnics with EL7052-0052 over 600 fullsteps/s is almost impossible. An inertia is needed and damper is needed.
Attaching a damper and inertia allows very high speeds, tested up to 26000 fullsteps/s (130Hz (turns/s)).
## el7037 vs el7031
* Oriental motor PK267JB

## suggested tuning workflow for EL7041 (from beckhoff)
### Test without inertia or damper

El7037 slightly better:
* EL7031 stalls at 1400 deg/s
* EL7037 stalls ar 1550 deg/s

### Test with el7041-0052
* Phytron ZSH 1.57.200.4
Without inertia or damper stalls at apporx 1400 deg/s
With damper can to up to very high speeds (tested 130Hz=36800deg/s) without stall so even higher possible.

# Test owis stage (with damper?!) EP7047 vs EL7031

EP7047 has better perfromance than EL7031. But EL7047 also has 48V supply.

Setting the current boosts to 0 improved the perf with el7031
```
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x7,0,2)"
ecmcConfigOrDie "Cfg.EcAddSdo(${ECMC_EC_SLAVE_NUM},0x8011,0x8,0,2)"
```
# suggested tuning workflow for EL7041 (from beckhoff)

Note: that some of the default values mentioned in the below text is not correct:
* nominal voltage should be 48000
Expand Down

0 comments on commit 6d5bcb4

Please sign in to comment.