CiA402

Overview

WD DRIVE drivers include a CANopen slave whose motion control follows CiA 402 (IEC 61800-7-201, the CANopen drive and motion control profile). Any standard CANopen master (PLC, motion controller or host software) can command position, velocity and torque, and perform homing, without a vendor-specific protocol.

  • Supported on the rotary motor driver stp42 and the linear motor driver lin.
  • Eight standard operating modes are supported: PP, PV, PT, HM, IP, CSP, CSV and CST. There is also a vendor-specific auto calibration / tuning mode (0x6060 = −1).
  • Communication is CANopen: SDO for configuration and parameter access, PDO for cyclic data, with NMT, heartbeat, EMCY and LSS.
  • The complete object dictionary (index/sub-index, data type, access and PDO mapping) is in the object dictionary reference.

The defaults below are for lin (linear motor). The stp42 differences are collected in User Units and Scaling and Product Default Differences.

Before You Start

Bus wiring

  1. Connect the master and the driver with a standard CAN bus, fitting a 120 Ω termination resistor at both ends.
  2. Keep every node at the same bitrate.
  3. Power the driver from a separate supply within the nameplate voltage range, and route the motor power wiring away from the CAN wiring.

Node ID and bitrate

  • Factory defaults are node ID 1 and 1 Mbit/s.
  • Both can be changed over the bus with LSS (Layer Setting Services) and stored in the driver, so the next power-up uses the new settings.

Power-up behaviour

  • After power-up the driver automatically enters NMT Operational; the master does not need to send NMT Start.
  • The CiA 402 state machine starts in Not ready to switch on, then automatically reaches Switch on disabled (0x0020) and waits for the control word.
  • Objects are accessible over SDO immediately; the high-voltage motor power stage is enabled only in Operation enabled.

Enabling and the State Machine

States and control word

CiA 402 uses a state machine to sequence enabling. The master writes the control word 0x6040 and reads the current state from the status word 0x6041 (low 7 bits, mask 0x006F).

State 0x6041 state bits Description
Not ready to switch on 0x0000 Initial state after power-up
Switch on disabled 0x0020 Communication ready, waiting to be enabled
Ready to switch on 0x0021 Ready (safe state, power stage off)
Switched on 0x0023 High voltage applied, motion still disabled
Operation enabled 0x0027 Normal operating state, motion allowed
Quick stop active 0x0007 Executing a quick stop
Fault reaction active 0x000F Reacting to a fault (ramping down per the option code)
Fault 0x0008 Fault latched, reset required

Common control word commands:

Command Control word (0x6040) From → to
Shutdown 0x0006 Switch on disabled → Ready to switch on
Switch on 0x0007 Ready to switch on → Switched on
Enable operation 0x000F Switched on → Operation enabled
Disable operation 0x0007 (bit3 = 0) Operation enabled → Switched on
Disable voltage 0x0000 Any → Switch on disabled
Quick stop 0x0002 Operation enabled → Quick stop active
Fault reset 0x0080 Fault → Switch on disabled

The one-step command 0x000F (Switch on + Enable operation) is recommended; it completes the Ready → Operation enabled transitions in one write.

Status word bits

Bit Mask Name Meaning
0–5 0x006F State bits See the table above
4 0x0010 Voltage enabled DC bus voltage applied
7 0x0080 Warning A warning is active (temperature / over-voltage / under-voltage / I²t overload); the state machine is unaffected
9 0x0200 Remote Always 1 (control word is always processed)
10 0x0400 Target reached Target reached (mode-specific, see below); for calibration, success
11 0x0800 Internal limit active Target outside the software position limit (0x607D)
12 0x1000 Mode-specific See each mode
13 0x2000 Mode-specific See each mode

Standard enable sequence

Write 0x6040:00 = 0x0006    # Shutdown         → 0x6041 = 0x0021 (ready)
Write 0x6040:00 = 0x0007    # Switch on        → 0x6041 = 0x0023 (switched on)
Write 0x6040:00 = 0x000F    # Enable operation → 0x6041 = 0x0027 (operation enabled)

Safe disable:

Write 0x60FF:00 = 0         # Velocity modes: target velocity to zero
Write 0x6040:00 = 0x0006    # Shutdown → back to ready (safe state)

Note: The mode of operation (0x6060) is accepted only in Operation enabled. Writing 0x6060 while disabled has no effect.

Operating Modes at a Glance

Write 0x6060 to select a mode and read 0x6061 for the active mode. Every mode follows the same skeleton: enable → select mode → write target/parameters → monitor the status word → zero the target → disable.

0x6060 Mode Loop Target object Main feedback Target reached (bit10)
1 PP profile position Position 0x607A 0x6062 / 0x6064 / 0x60F4 Inside position window 0x6067 for 0x6068 ms
2 VL velocity (not supported) — — — —
3 PV profile velocity Velocity 0x60FF 0x606B / 0x606C Inside velocity window 0x606D for 0x606E ms
4 PT profile torque Torque 0x6071 0x6074 / 0x6077 None
6 HM homing Velocity → position 0x6099 etc. 0x6064 / 0x606C Homing landing check
7 IP interpolated position Position 0x60C1 0x6062 / 0x6064 / 0x60F4 Same as PP
8 CSP cyclic sync position Position 0x607A + 0x60B0 0x6062 / 0x6064 / 0x60F4 Same as PP
9 CSV cyclic sync velocity Velocity 0x60FF + 0x60B1 0x606B / 0x606C Same as PV
10 CST cyclic sync torque Torque 0x6071 + 0x60B2 0x6074 / 0x6077 None
−1 Auto calibration / tuning (vendor) — 0x3000 0x6041 bits 10/12/13 Calibration status word

PP — Profile Position (0x6060 = 1)

Moves the motor to a target position with a configured velocity, acceleration and deceleration, using either a trapezoidal or an S-curve profile.

Common parameters

Object Name Default (lin)
0x607A Target position 0
0x6081 Profile velocity 100000
0x6083 / 0x6084 Acceleration / deceleration 5000000 / 5000000
0x607F Max profile velocity (limits 0x6081) 2000000
0x60C5 / 0x60C6 Max acceleration / deceleration (0 = unlimited) 20000000
0x6086 Motion profile type (0 = trapezoidal, 1/2/3 = S-curve) 0
0x607D Software position limit (0x607D:01 min / :02 max) 0 … 395000

Set-point handshake: write the target position 0x607A, then accept the new set-point with a rising edge on control word bit4.

Control word bit Meaning
bit4 (0x0010) New set-point (rising edge)
bit5 (0x0020) 1 = execute immediately; 0 = queue until the current move finishes
bit6 (0x0040) 0 = absolute; 1 = relative (relative to the current demand position)
bit8 (0x0100) Halt: decelerate per 0x6084 and hold position
bit9 (0x0200) Queue transition: 0 = after standstill; 1 = on the fly
  • After a set-point is accepted, bit12 (set-point acknowledge) is set; it clears when the set-point is released (bit4 1→0).
  • A target outside 0x607D sets bit11 (internal limit active) and rejects the set-point.
  • bit10 is set once the target is reached and stays inside the 0x6067 window for 0x6068 ms.
  • A following error above 0x6065 for longer than 0x6066 ms sets bit13 (indication only, no fault).

S-curve (0x6086 = 1/2/3): the jerk limits come from 0x60A4 Profile Jerk 1/2, with 0x60A3 Profile Jerk Use selecting their assignment:

0x60A3 Acceleration phase Deceleration phase
1 Jerk 1 (0x60A4:01) Jerk 1
2 Jerk 1 (0x60A4:01) Jerk 2 (0x60A4:02)
Anything else (default 0) Derived from the max acceleration Derived from the max acceleration

Use the S-curve for high-inertia or precision positioning where vibration matters; the trapezoid (0x6086 = 0) gives the shortest travel time. The ramps of the velocity modes (PV/HM/CSV) are not affected by 0x6086.

PV — Profile Velocity Mode (0x6060 = 3)

Approach the target velocity along the configured acceleration/deceleration ramp; common for continuous motion or conveyors. VL pure velocity mode (0x6060 = 2) is not supported — use PV instead.

Object Name Default (lin)
0x60FF Target velocity 0
0x6083 / 0x6084 Acceleration / deceleration 5000000 / 5000000
0x607F Max profile velocity (limits 0x60FF, 0 = unlimited) 2000000
  • The target velocity is clamped to 0x607F; Halt (bit8) ramps the target to zero.
  • bit10: actual velocity inside the 0x606D window for 0x606E ms.
  • bit12: zero-speed indication, actual velocity below 0x606F for 0x6070 ms.

PT — Profile Torque (0x6060 = 4)

Outputs the target torque directly; the motor settles where load and friction balance it.

Object Name Default (lin)
0x6071 Target torque / force 0
0x6072 Max torque / force (hard limit) 35000 mN
0x6087 Torque / force slope (0 = immediate, unlimited ramp) 5000
0x6080 Max motor speed 2000000

Caution: Torque mode has no velocity loop, so the motor keeps accelerating under the commanded torque until load or friction balances it. Confirm the mechanical travel and limits before use. With Halt (bit8), the target torque ramps to zero per 0x6087.

HM — Homing (0x6060 = 6)

The driver searches in a fixed direction (towards the mechanical block) and detects the block when the phase current rises and the position following error grows at the same time, then retracts to the configured landing point to establish the position reference.

Sequence

  1. Control word bit4 = 1 and bit8 = 0 → start homing and run at the 0x6099:01 speed (the direction is forced negative).
  2. When the collision conditions hold for 0x2130:04, bit12 is set and the position is reset to 0x607C Home offset.
  3. The axis retracts by 0x2130:05 in the opposite direction; once the landing point is stable, bit10 is set and homing is complete.
  4. Cancel homing with bit4 = 0 or bit8 = 1; bit4 must be released before a new search can start.

Block-detection parameters (0x2130)

Sub Name Unit Description
:01 Hard stop force limit mA Push (current) limit during the search; 0 keeps 0x6072
:02 Collision current threshold mA Current threshold for block detection; 0 disables this condition
:03 Following error threshold User units Following-error threshold for block detection; 0 disables this condition
:04 Collision filter time ms How long the conditions must hold
:05 Retract distance User units Retract distance after the block (direction is automatic)

Other parameters: 0x607C Home offset (default 0), 0x6099:01 search speed, 0x609A homing acceleration, and the 0x6067/0x6068 landing window.

Confirm the 0x2130 block-detection parameters before homing. lin ships usable defaults (stp42 ships all zeros, which must be configured explicitly); if both detection conditions are disabled, or the current threshold is above the force limit, the driver refuses to start and sets bit13 (failure). Calibrate these values for your motor and mechanics on the bench and never set all thresholds to 0. A search travel beyond 1.1× the software limit range (0x607D) also aborts and sets bit13.

The search direction is fixed negative; 0x6098 Homing method is not used.

IP — Interpolated Position (0x6060 = 7)

The master sends position set-points at a fixed interpolation period and the driver linearly interpolates between them.

  • bit4 = 1 enables interpolation (bit12 is set): the axis starts seamlessly from the actual position and waits for the first set-point; bit4 = 0 exits, ramping the velocity to zero per 0x60C5/0x60C6 while holding the position demand.
  • The master writes 0x60C1 (interpolated data record) periodically; the period is defined by 0x60C2 (2 ms default).
  • The velocity feed-forward is the segment slope, limited by 0x607F.
  • Halt (bit8) exits interpolation and ramps the velocity to zero; releasing it resumes smoothly from the latest set-point.
  • As the period is short, map 0x60C1 into an RPDO (SDO round-trips are usually too slow).

CSP — Cyclic Synchronous Position (0x6060 = 8)

The master sends target positions periodically and the driver tracks them. The target is 0x607A + 0x60B0 (position offset).

  • A change of set-point opens a new interpolation segment whose duration is derived from the measured send period, without relying on SYNC.
  • If the master holds the target, the demand stays at the target position.
  • Feed-forward comes directly from the master: 0x60B1 velocity feed-forward (limited by 0x607F) and 0x60B2 torque feed-forward.
  • On re-enable, after a long gap, or on the first cycle, if the target is far from the current position, the driver catches up smoothly at 0x607F instead of jumping. With 0x607F = 0 it tracks standard CSP directly with the position loop.
  • After Halt or a stop ramp, the driver smoothly returns to the master target using the profile selected by 0x6086 (trapezoid / S-curve).
  • 0x607F = 0 means unlimited speed; the master is responsible for the trajectory.
  • A target outside 0x607D sets bit11, and out-of-range targets are not tracked.
  • bit12 = Drive follows command: cleared while the target is taken over locally (Halt, stop ramp) and set again after resuming tracking.

PDO mapping example (RPDO1: 0x607A + 0x60B1)

Write 0x1600:00 = 0
Write 0x1600:01 = 0x607A0020   # target position, int32
Write 0x1600:02 = 0x60B10020   # velocity feed-forward, int32
Write 0x1600:00 = 2
Write 0x1400:02 = 254          # event driven
Write 0x1400:01 clear bit31    # enable RPDO1 (COB-ID = 0x200 + node ID)

The master then sends an 8-byte frame (little-endian: target position + velocity feed-forward) at a fixed rate (for example 1 ms).

CSV — Cyclic Synchronous Velocity (0x6060 = 9)

Target velocity = 0x60FF + 0x60B1 (velocity offset), clamped to 0x607F; the torque feed-forward is 0x60B2. With Halt the target is 0.

  • The velocity ramp is limited by 0x60C5 / 0x60C6 (0 = unlimited).
  • bit10: actual velocity inside the 0x606D window for 0x606E ms.
  • bit12: as in CSP, cleared during local takeover.

CST — Cyclic Synchronous Torque (0x6060 = 10)

Target torque = 0x6071 + 0x60B2 (torque offset); with Halt the target is 0.

  • The torque demand ramps per 0x6087 (0 = unlimited), and 0x6080 limits the speed.
  • Like PT, it is pure torque control with no target-reached indication (bit10 is not set). Confirm the mechanical safety before use.

Calibration Mode (vendor-specific, 0x6060 = −1)

Used for motor parameter identification and position-sensor calibration.

  • Select the calibration sub-mode with 0x3000:01; the supported-mode bitmap is in 0x3000:03.
  • Start with a rising edge on control word bit4; abort with bit8 level.
  • Status is mirrored into the status word: bit12 = running, bit10 = success, bit13 = failure.
  • Results are written and stored persistently; the master can read them from 0x3011 (motor identification), 0x3013 (position-sensor calibration) and 0x3014 (phase calibration).
  • The calibration process moves the motor; make sure the mechanics are free to move and the travel is safe.

Running calibration from the host software (wddrive-studio) or the maintenance tool (wddrive-maintain-cli) is recommended; they handle sub-mode selection, status polling and result validation.

Stop Option Codes and Halt

When an option code in 0x605A–0x605E is non-zero, the state machine does not transition immediately; it first executes a deceleration ramp. The status word keeps the pre-transition state during the ramp and changes only once the ramp finishes. The master should wait for the final status word.

Object Name Default Trigger
0x605A Quick stop option code 2 Quick stop command (transition 11)
0x605B Shutdown option code 1 Operation enabled → Ready (transition 8)
0x605C Disable operation option code 1 Operation enabled → Switched on (transition 5)
0x605D Halt option code 1 Halt
0x605E Fault option code 2 Fault reaction (transition 14)

The option-code characteristics:

Value Characteristic
0 Disable the drive immediately, no ramp
1 Slow down ramp: per 0x6084 profile deceleration
2 Quick stop ramp: per 0x6085 quick-stop deceleration (falls back to 0x6084 when 0)
3 Stop on current limit: full-current braking
4 Stop on voltage limit: full-current braking, reduced as the DC bus approaches over-voltage
5–8 Same as 1–4, but for 0x605A only; after the ramp the drive stays in Quick stop active

Halt (bit8) behaviour per mode

Mode Halt behaviour
PP Decelerate per 0x6084 and hold position; resumes the original set-point when released
PV / CSV Target velocity to zero, ramp stop
PT / CST Target torque ramps to zero per 0x6087
HM Aborts homing
IP Exits interpolation, ramps velocity to zero, holds the position demand
CSP Decelerates and holds, then smoothly catches up to the master target when released
Calibration (−1) Aborts the calibration

Protection and Fault Handling

Protection thresholds

Monitored quantity Threshold objects (defaults) Warning Fault code (0x603F)
DC bus voltage 0x2001:01 over-voltage fault 540 (54.0 V), :02 warning 520, :03 under-voltage fault 180, :04 warning 220, :05 filter 100 ms bit7 0x3210 / 0x3220
Output current 0x2002:01 short-circuit 45000 mA, :02 over-current filter 10 ms, :03 I²t overload level 100 %, :04 I²t max time 2000 ms I²t warning → bit7 0x2320 / 0x2310 / 0x2350
Motor temperature 0x2003:01 over-temperature fault 850 (85.0 °C), :02 warning 750 (75 °C) bit7 0x4310

Error codes:

Code Meaning
0x3210 DC bus over-voltage
0x3220 DC bus under-voltage
0x2310 Continuous over-current
0x2320 Motor-side short circuit
0x2350 I²t thermal overload
0x4310 Motor over-temperature

Fault reaction sequence

  1. On a protection trip the drive enters Fault reaction active (0x000F), writes the fault code to 0x603F and ramps down per the 0x605E option code.
  2. When the ramp finishes it automatically enters Fault (0x0008), cutting the high voltage and disabling the power stage.
  3. The master sends Fault reset (0x6040 bit7 = 1; a short pulse is latched), transitioning to Switch on disabled (0x0020).
  4. Re-enable using the normal enable sequence.
Read  0x603F:00           # fault code
Read  0x1003:01 …         # error history (0x1003:00 is the count, write 0 to clear)
Write 0x6040:00 = 0x0080  # Fault reset
Write 0x6040:00 = 0x0006  # re-enable: Shutdown
Write 0x6040:00 = 0x000F  # Switch on + Enable operation

Protection faults are sticky: the fault bit is not cleared automatically when the temperature falls or the over-current passes, so a Fault reset is required. If the root cause remains, the fault trips again after the debounce time — fix the cause first.

User Units and Scaling

All position, velocity, acceleration and torque objects use user units, so trajectories can be planned directly in mechanical units.

Quantity lin (linear) stp42 (rotary)
Position (0x607A / 0x6062 / 0x6064 / 0x607D) 0.001 mm (1 µm) 0.001 rev (1000 = 1 rev)
Velocity (0x60FF / 0x606B / 0x606C / 0x6081 / 0x607F) 0.001 mm/s 0.001 rev/s (5000 = 300 rpm)
Acceleration (0x6083 / 0x6084 / 0x6085 / 0x60C5 / 0x60C6 / 0x609A) 0.001 mm/s² 0.001 rev/s²
Jerk (0x60A4) 0.001 mm/s³ 0.001 rev/s³
Torque / force (0x6071 / 0x6072 / 0x6074 / 0x6076 / 0x6077 / 0x6087 / 0x60B2) mN mN·m
Current (0x6073 / 0x6075, 0x2000:02, 0x2002 thresholds) mA mA
  • The default gear ratio 0x6091 = 1:1 and feed constant 0x6092 = 1000:1 make one user position unit 0.001 mm (lin) or 0.001 rev (stp42). After changing 0x6091 / 0x6092, user units are redefined on the output shaft.
  • 0x6063 (position actual internal value) is the raw internal value without gear-ratio scaling, useful for diagnosing the true physical direction.

Inertia / mass objects (used for feed-forward and velocity-loop tuning):

Product Object Name Default
lin 0x2110 Mover mass 470 g
lin 0x2111 Load mass 0 g
stp42 0x2210 Motor rotor inertia 320 g·cm²
stp42 0x2211 Load inertia ratio (‰, 1000 = 1.0) 0

The velocity-loop gain is proportional to the total inertia/mass; with a zero inertia/mass object the velocity-loop gain is zero (the motor has no force), so fill these in or run calibration first.

Product Default Differences

lin and stp42 share most of the object structure, but some defaults and object existences differ. The table below uses lin as the reference and lists the corresponding stp42 values; when switching product models, re-send the parameters or read them back to confirm.

Object Name lin default stp42 default
0x6072 Max torque / force 35000 mN 720 mN·m
0x6073 Max current 8000 mA 3000 mA
0x6076 Motor rated torque / force 11000 mN 600 mN·m
0x607D:02 Max position limit 395000 (395 mm) 100000 (100 rev)
0x607F Max profile velocity 2000000 8000
0x6080 Max motor speed 2000000 8000
0x6081 Profile velocity 100000 2000
0x6083 / 0x6084 Acceleration / deceleration 5000000 20000
0x6087 Torque / force slope 5000 1000
0x6099:01 Homing search speed 30000 1000
0x609A Homing acceleration 3000000 10000
0x2002:02 Over-current filter time 10 ms 100 ms
0x2113:01 Velocity loop bandwidth 40 Hz 50 Hz
0x2130 Block-detection parameters defaults provided all 0 (must be configured)

Object existence: lin has mover mass / load mass (0x2110 / 0x2111); stp42 has position/velocity encoder resolution (0x608F / 0x6090) and rotor inertia / load inertia ratio (0x2210 / 0x2211).

Motor temperature protection requires a motor temperature sensor; without temperature sampling the 0x2003 thresholds and the 0x4310 fault do not trigger.

Control Loop Tuning

The driver uses a cascaded position (P) → velocity (PI) → current (PI) structure. Each loop can be tuned in one of two ways, selected by the bandwidth object’s :02 Tuning mode:

Method Value Description
Bandwidth (default) 1 PI gains are computed from the bandwidth and written back to the standard gain objects
Manual 0 The standard gain object values are used directly
Loop Bandwidth object Default bandwidth Gain objects
Current d/q 0x2112:01 1000 Hz 0x60F6:01 (Kp) / :02 (Ki)
Velocity 0x2113:01 50 Hz 0x60F9:01 (Kp) / :02 (Ki)
Position 0x2114:01 15 Hz 0x60FB:01 (Kp)
Encoder PLL 0x2115:01 1000 Hz —
  • In bandwidth mode, reading 0x60F6 / 0x60F9 / 0x60FB gives the currently active gains; gains are stored as 1000× the internal value.
  • To trim a single gain, write the corresponding :02 to 0 for manual mode, then write the gain object.
  • Tuning parameters take effect immediately, with no reset required.

Recommendations

  1. Order the bandwidths from high to low: current > velocity > position (defaults 1000 / 50 / 15 Hz).
  2. Run calibration or fill in the inertia/mass before tuning the velocity loop; the current loop depends on the motor resistance/inductance.
  3. If vibration or noise appears, lower the velocity-loop bandwidth first.
  4. After confirming the overall response in bandwidth mode, switch to manual mode to fine-tune Kp / Ki.
Write 0x2113:01 = 60     # velocity bandwidth 50 → 60 Hz, PI recomputed
Read  0x60F9:01          # active Kp
Read  0x60F9:02          # active Ki
Write 0x2113:02 = 0      # switch to manual mode
Write 0x60F9:01 = 350    # Kp = 0.35

Real-Time Feedback

Object Content Unit
0x6064 / 0x6062 / 0x60F4 Position actual / demand / following error User units
0x606C / 0x606B Velocity actual / demand User units/s
0x6077 / 0x6074 Torque actual / demand mN (lin) / mN·m (stp42)
0x2000:01 DC bus voltage 0.1 V
0x2000:02 Output current mA
0x2000:03 Motor temperature 0.1 °C

Polarity (0x607E)

0x607E reverses the sign between the master (network side) and the driver (internal control side), using the standard CiA 402 bit layout:

Bit Mask Meaning Active modes
7 0x80 Position polarity PP / IP / CSP
6 0x40 Velocity polarity PV / CSV
5 0x20 Torque polarity PT / CST

When set, the corresponding command and actual value are inverted together, so the master still sees command and feedback as consistent (following error zero) while the motor moves in the opposite physical direction. The 0x607D software limit applies in the physical frame, so make the limits symmetric when polarity is set. The low 5 bits are reserved and must be written 0.

Typical Sequences

Examples below use read/write object:subindex for SDO access. Node ID defaults to 1.

Enable (prerequisite for all modes)

Write 0x6040:00 = 0x0006    # Shutdown
Write 0x6040:00 = 0x0007    # Switch on
Write 0x6040:00 = 0x000F    # Enable operation → 0x6041 = 0x0027

PP positioning (absolute)

Write 0x6060:00 = 1         # select PP
Write 0x6081:00 = 100000    # profile velocity, 100 mm/s
Write 0x6083:00 = 5000000   # acceleration
Write 0x6084:00 = 5000000   # deceleration
Write 0x607A:00 = 250000    # target position, 250 mm
Write 0x6040:00 = 0x001F    # bit4 new set-point + bit5 immediate + enable bit
# poll 0x6041: bit12 set-point acknowledge → bit10 reached; bit11 limit; bit13 following error

Relative positioning: add bit6 (0x005F); queue instead of immediate: bit5 = 0.

PV forward/reverse (±100 mm/s)

Write 0x6060:00 = 3         # select PV
Write 0x6083:00 = 5000000
Write 0x6084:00 = 5000000
Write 0x60FF:00 = 100000    # +100 mm/s
# wait for 0x6041 bit10
Write 0x60FF:00 = -100000   # reverse
Write 0x60FF:00 = 0         # stop
Write 0x6040:00 = 0x0006    # disable → ready

CSP cyclic synchronous (see the PDO mapping example above)

Write 0x6060:00 = 8         # select CSP
Write 0x607F:00 = 2000000   # max profile velocity (0 = pure position tracking)
# the master sends [0x607A][0x60B1] frames at a fixed rate

Homing

Write 0x2130:01 = 1000      # force limit 1.0 A
Write 0x2130:02 = 700       # collision current threshold 0.7 A
Write 0x2130:03 = 2000      # following-error threshold 2.0 mm
Write 0x2130:04 = 50        # conditions must hold 50 ms
Write 0x2130:05 = 3000      # retract 3.0 mm
Write 0x607C:00 = 0         # home offset
Write 0x6099:01 = 30000     # search speed, 30 mm/s
Write 0x609A:00 = 3000000   # homing acceleration
Write 0x6060:00 = 6         # select HM
Write 0x6040:00 = 0x001F    # bit4 = 1 starts homing (bit8 = 0)
# sequence: bit12 block hit → automatic retract → bit10 homing complete
Write 0x6040:00 = 0x000F    # clear bit4

Notes

  1. Operational on power-up: do not assume a Pre-operational start.
  2. Enable before selecting a mode: 0x6060 is accepted only in Operation enabled; otherwise 0x6061 does not update.
  3. Ready is the safe state: the power stage is off in Ready / Switched on. To finish, zero the target, then send Shutdown (0x0006) and confirm the status word returns to 0x0021.
  4. The status word holds the previous state during a stop ramp: with a non-zero option code the transition is deferred; wait for the final status word instead of assuming an immediate transition.
  5. Fault-reset pulses are not lost: a short reset pulse during Fault reaction active is latched and applied after the drive enters Fault.
  6. Protection faults are sticky: a manual Fault reset is required, and the fault trips again if the root cause remains.
  7. PDO mappings are empty by default: configure them at runtime; disable the PDO first (COB-ID bit31 = 1) and enable it after changing mappings and communication parameters.
  8. The 0x1017 heartbeat time is persistent: it survives power-off; write 0 explicitly when the bus must stay quiet.
  9. Changing control-loop parameters while the motor moves may cause a disturbance; adjust them while stopped or lightly loaded.