SHC Servo - Memory Table¶
1 Servo Communication Protocol¶
The servo uses the CANopen communication protocol. The factory default CAN baud rate is 125k, configurable in the range 20k~1Mbps, and the default communication address (node) is 1.
SDO commands can access every object dictionary entry of the servo to modify its parameters
PDO commands can control the servo quickly for positioning functions
SYNC commands can quickly and synchronously report the real-time status of all servos on the bus
RPDO1 by default maps the controlword and servo mode objects, used for servo torque switching and mode configuration
RPDO2 by default maps the target position object, used for servo position control
RPDO3 by default maps the target velocity object, used for servo velocity control
RPDO4 by default maps the rated-current object, used for servo rated-current control
TPDO2 by default maps the actual position object; SYNC commands can report the real-time position of all servos on the bus in real time
TPDO1, TPDO3 and TPDO4 have their default mapping switched off
2 Object Dictionary (OD)¶
The CANopen object dictionary (OD: Object Dictionary) is the most central concept of the CANopen protocol. The so-called object dictionary is an ordered group of objects that describes all parameters of the corresponding CANopen node, including where communication data is stored, which is also listed under its index; the object dictionary is addressed by index and sub-index.
3.1 Communication Object Sub-protocol Area¶
| Index | Sub-index | Object | Access | Type | Unit | Default | Mapped PDO | Description |
|---|---|---|---|---|---|---|---|---|
| 1000h | 00h | Device type | R | U32 | – | 00020192h | – | Standard value for a CIA402 device |
| 1001h | 00h | Error register | R | U8 | – | 0 | TPDO | See the special byte/bit explanation |
| 1002h | 00h | Servo status | R | U32 | – | 0 | TPDO | Servo-defined status; see the special byte/bit explanation |
| 1003h | 00h | Pre-defined error field | R/W | U8 | – | 0 | – | Number of errors that occurred; writing 00h clears the error history, writing a non-zero value returns SDO abort 0x06090030; see the special byte/bit explanation |
| 1003h | 01h | Pre-defined error field-1 | R | U32 | – | 0 | – | No error; a read returns SDO abort 0x08000024 |
| 1003h | 02h | Pre-defined error field-2 | R | U32 | – | 0 | – | No error; a read returns SDO abort 0x08000024 |
| 1003h | 03h | Pre-defined error field-3 | R | U32 | – | 0 | – | No error; a read returns SDO abort 0x08000024 |
| 1003h | 04h | Pre-defined error field-4 | R | U32 | – | 0 | – | No error; a read returns SDO abort 0x08000024 |
| 1003h | 05h | Pre-defined error field-5 | R | U32 | – | 0 | – | No error; a read returns SDO abort 0x08000024 |
| 1005h | 00h | SYNC message COB-ID | R | U32 | – | 00000080h | – | Modifying the SYNC COB-ID is not supported |
| 1008h | 00h | Device vendor name | R | str | – | – | 15-byte string | |
| 1009h | 00h | Device hardware model | R | str | – | – | 15-byte string | |
| 1010h | 00h | Save parameters | R | U8 | – | 1 | – | |
| 1010h | 01h | Save all parameters | R/W | U32 | – | – | – | "save" saves all parameters to EPROM |
| 1011h | 00h | Restore parameters | R | U8 | – | 1 | – | |
| 1011h | 01h | Restore all parameters | R/W | U32 | – | – | – | "load" restores all parameters to the factory defaults |
| 1014h | 00h | EMCY message COB-ID | R | U32 | – | 80h+NodeID | – | |
| 1017h | 00h | Producer heartbeat time | R/W | U16 | 100ms | 0 | – | 0 stops the heartbeat function |
| 1018h | 00h | Identity object | R | U8 | – | 4 | – | |
| 1018h | 01h | Servo vendor ID | R | U32 | – | – | ||
| 1018h | 02h | Servo model | R | U32 | – | – | ||
| 1018h | 03h | Servo firmware | R | U32 | – | – | ||
| 1018h | 04h | Servo serial number SN | R | U32 | – | – | ||
| 1200h | 00h | SDO server parameter | R | U8 | – | 2 | – | |
| 1200h | 01h | TSDO object | R | U32 | – | NodeID+600h | – | |
| 1200h | 02h | RSDO object | R | U32 | – | NodeID+580h | – | |
| 1400h | 00h | RPDO1 communication parameter | R | U8 | – | 2 | – | |
| 1400h | 01h | RPDO1 object | R | U32 | – | NodeID+200h | – | |
| 1400h | 02h | Transmission type | R | U8 | – | FF | – | The servo updates the data immediately after receiving the RPDO |
| 1401h | 00h | RPDO2 communication parameter | R | U8 | – | 2 | – | |
| 1401h | 01h | RPDO2 object | R | U32 | – | NodeID+300h | – | |
| 1401h | 02h | Transmission type | R | U8 | – | FF | – | The servo updates the data immediately after receiving the RPDO |
| 1402h | 00h | RPDO3 communication parameter | R | U8 | – | 2 | – | |
| 1402h | 01h | RPDO3 object | R | U32 | – | NodeID+400h | – | |
| 1402h | 02h | Transmission type | R | U8 | – | FF | – | The servo updates the data immediately after receiving the RPDO |
| 1403h | 00h | RPDO4 communication parameter | R | U8 | – | 2 | – | |
| 1403h | 01h | RPDO4 object | R | U32 | – | NodeID+500h | – | |
| 1403h | 02h | Transmission type | R | U8 | – | FF | – | The servo updates the data immediately after receiving the RPDO |
| 1600h | 00h | RPDO1 mapping parameter | R/W | U8 | – | 2 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1600h | 01h | Mapped object address 1 | R/W | U32 | – | 0x60400010 | – | Mapped object address |
| 1600h | 02h | Mapped object address 2 | R/W | U32 | – | 0x60600008 | – | Mapped object address |
| 1600h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1600h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1601h | 00h | RPDO2 mapping parameter | R/W | U8 | – | 1 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1601h | 01h | Mapped object address 1 | R/W | U32 | – | 0x607a0020 | – | Mapped object address |
| 1601h | 02h | Mapped object address 2 | R/W | U32 | – | – | Mapped object address | |
| 1601h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1601h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1602h | 00h | RPDO3 mapping parameter | R/W | U8 | – | 1 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1602h | 01h | Mapped object address 1 | R/W | U32 | – | 0x60ff0020 | – | Mapped object address |
| 1602h | 02h | Mapped object address 2 | R/W | U32 | – | – | Mapped object address | |
| 1602h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1602h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1603h | 00h | RPDO4 mapping parameter | R/W | U8 | – | 1 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1603h | 01h | Mapped object address 1 | R/W | U32 | – | 0x60750020 | – | Mapped object address |
| 1603h | 02h | Mapped object address 2 | R/W | U32 | – | – | Mapped object address | |
| 1603h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1603h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1800h | 00h | TPDO1 communication parameter | R | U8 | – | 2 | – | |
| 1800h | 01h | TPDO1 object | R | U32 | – | NodeID+180h | – | |
| 1800h | 02h | Transmission type | R | U8 | – | 1 | – | The servo reports the TPDO immediately after receiving SYNC |
| 1801h | 00h | TPDO2 communication parameter | R | U8 | – | 2 | – | |
| 1801h | 01h | TPDO2 object | R | U32 | – | NodeID+280h | – | |
| 1801h | 02h | Transmission type | R | U8 | – | 1 | – | The servo reports the TPDO immediately after receiving SYNC |
| 1802h | 00h | TPDO3 communication parameter | R | U8 | – | 2 | – | |
| 1802h | 01h | TPDO3 object | R | U32 | – | NodeID+380h | – | |
| 1802h | 02h | Transmission type | R | U8 | – | 1 | – | The servo reports the TPDO immediately after receiving SYNC |
| 1803h | 00h | TPDO4 communication parameter | R | U8 | – | 2 | – | |
| 1803h | 01h | TPDO4 object | R | U32 | – | NodeID+480h | – | |
| 1803h | 02h | Transmission type | R | U8 | – | 1 | – | The servo reports the TPDO immediately after receiving SYNC |
| 1A00h | 00h | TPDO1 mapping parameter | R/W | U8 | – | 0 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1A00h | 01h | Mapped object address 1 | R/W | U32 | – | 0x60410010 | – | Mapped object address |
| 1A00h | 02h | Mapped object address 2 | R/W | U32 | – | 0x60610008 | – | Mapped object address |
| 1A00h | 03h | Mapped object address 3 | R/W | U32 | – | 0x603f0010 | – | Mapped object address |
| 1A00h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1A01h | 00h | TPDO2 mapping parameter | R/W | U8 | – | 1 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1A01h | 01h | Mapped object address 1 | R/W | U32 | – | 0x60630020 | – | Mapped object address |
| 1A01h | 02h | Mapped object address 2 | R/W | U32 | – | 0x606c0020 | – | Mapped object address |
| 1A01h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1A01h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1A02h | 00h | TPDO3 mapping parameter | R/W | U8 | – | 0 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1A02h | 01h | Mapped object address 1 | R/W | U32 | – | 0x60780010 | – | Mapped object address |
| 1A02h | 02h | Mapped object address 2 | R/W | U32 | – | – | Mapped object address | |
| 1A02h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1A02h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address | |
| 1A03h | 00h | TPDO4 mapping parameter | R/W | U8 | – | 0 | – | Number of mapped object addresses; 0 disables mapping, value range 0~4 |
| 1A03h | 01h | Mapped object address 1 | R/W | U32 | – | – | Mapped object address | |
| 1A03h | 02h | Mapped object address 2 | R/W | U32 | – | – | Mapped object address | |
| 1A03h | 03h | Mapped object address 3 | R/W | U32 | – | – | Mapped object address | |
| 1A03h | 04h | Mapped object address 4 | R/W | U32 | – | – | Mapped object address |
3.2 Manufacturer-specific Sub-protocol Area¶
| Index | Sub-index | Object | Access | Type | Unit | Default | Mapped PDO | Description |
|---|---|---|---|---|---|---|---|---|
| 2000h | 00h | Servo NodeId | R/W | S8 | – | 1 | – | Takes effect immediately |
| 2001h | 00h | Servo baud rate | R/W | U8 | – | 4 | – | 0-7 correspond to baud rates: 1M(0), 800k(1), 500k(2), 250k(3), 125k(4), 100k(5), (50k)6, 20k(7); takes effect after restart |
| 2002h | 00h | Communication timeout | R/W | U8 | ms | 50 | – | |
| 2003h | 00h | Default mode | R/W | S8 | – | 1 | – | See the special byte/bit explanation |
| 2004h | 00h | Torque limit | R/W | S16 | 0.02% | 4800 | – | |
| 2005h | 00h | Start-up torque | R/W | S16 | 0.02% | 0 | – | Range: 0~255 |
| 2006h | 00h | Position dead band | R/W | u8 | 0.022 deg | 2 | – | The smallest unit is one minimum resolution angle |
| 2007h | 00h | Minimum angle limit | R/W | S16 | 0.022 deg | 0 | – | This value is 0 in multi-turn absolute position control |
| 2008h | 00h | Maximum angle limit | R/W | S16 | 0.022 deg | 0 | – | This value is 0 in multi-turn absolute position control |
| 2009h | 00h | Position offset | R/W | S16 | 0.022 deg | 0 | – | The smallest unit is one minimum resolution angle |
| 200Ah | 00h | Servo phase | R/W | U16 | – | – | – | Do not modify unless required; see the special byte/bit explanation |
| 200Bh | 00h | Protection switch | R/W | U16 | – | 7 | – | Setting the corresponding bit to 1 enables that protection, 0 disables it; see the special byte/bit explanation |
| 200Ch | 00h | LED alarm condition | R/W | U16 | – | 15 | – | Setting the corresponding bit to 1 enables the flashing alarm, 0 disables it; see the special byte/bit explanation |
| 200Dh | 00h | Maximum temperature limit | R/W | U16 | °C | 70 | – | Maximum operating temperature limit; if set to 70 the maximum temperature is 70 °C, resolution 1 °C |
| 200Eh | 00h | Minimum input voltage | R/W | U16 | 0.1V | – | – | If the minimum input voltage is set to 40, the minimum operating voltage limit is 4.0V, resolution 0.1V |
| 200Fh | 00h | Maximum input voltage | R/W | U16 | 0.1V | – | – | If the maximum input voltage is set to 260, the maximum operating voltage limit is 26.0V, resolution 0.1V |
| 2010h | 00h | Overload current | R/W | U16 | 6.5mA | – | – | Servo operating overload protection current |
| 2011h | 00h | Over-current protection time | R/W | U16 | 1ms | 3000 | – | Longest working time for which the operating current may exceed the overload current |
| 2012h | 00h | Protection torque | R/W | U16 | – | 0 | – | Reserved address |
| 2013h | 00h | Overload torque | R/W | U16 | – | 0 | – | Reserved address |
| 2014h | 00h | Overload protection time | R/W | U16 | – | 0 | – | Reserved address |
| 2015h | 00h | Position loop P proportional coefficient | R/W | U16 | – | 48 | – | Standard position mode (mode 1), closed-loop position proportional coefficient |
| 2016h | 00h | Position loop D derivative coefficient | R/W | U16 | – | 32 | – | Standard position mode (mode 1), closed-loop position derivative coefficient |
| 2017h | 00h | Position loop I integral coefficient | R/W | U16 | – | 0 | – | Standard position mode (mode 1), closed-loop position integral coefficient |
| 2018h | 00h | Position loop integral limit | R/W | U16 | – | 0 | – | Standard position mode (mode 1), maximum closed-loop position integral limit; 0 means no limit |
| 2019h | 00h | Velocity loop P proportional coefficient | R/W | U16 | – | 100 | – | Standard velocity mode (mode 3), velocity loop proportional coefficient |
| 201Ah | 00h | Velocity loop I integral coefficient | R/W | U16 | – | 100 | – | Standard velocity mode (mode 3), velocity loop integral coefficient |
| 201Bh | 00h | Current loop P proportional coefficient | R/W | U16 | – | – | – | Servo factory default parameter |
| 201Ch | 00h | Current loop I integral coefficient | R/W | U16 | – | – | – | Servo factory default parameter |
| 201Dh | 00h | Maximum speed limit | R/W | U16 | – | 0.183rpm | – | Servo factory default parameter |
| 201Eh | 00h | Maximum acceleration limit | R/W | U16 | 0.366rpm/s | – | – | Servo factory default parameter |
| 201Fh | 00h | Rated current limit | R/W | U16 | 6.5mA | – | – | Servo factory default parameter |
| 2020h | 00h | Maximum torque limit | R/W | S16 | – | 5000 | – | Do not modify unless required |
| 2021h | 00h | H-bridge dead time | R/W | U16 | – | – | – | Servo factory default parameter |
| 2022h | 00h | Derivative control time | R/W | U16 | ms | – | – | Servo factory default parameter |
| 2023h | 00h | Current sampling window time | R/W | U16 | – | – | – | Servo factory default parameter |
| 2024h | 00h | Movement detection threshold | R/W | U16 | – | – | – | Servo factory default parameter |
| 2025h | 00h | Six-step commutation threshold | R/W | U16 | – | – | – | Servo factory default parameter |
| 2026h | 00h | Velocity derivative time | R/W | U16 | ms | 20 | – | Servo factory default parameter |
| 2027h | 00h | Position filter coefficient | R/W | U16 | – | – | – | Servo factory default parameter |
| 2028h | 00h | Velocity filter coefficient | R/W | U16 | – | – | – | Servo factory default parameter |
| 2029h | 00h | Bus current filter coefficient | R/W | U16 | – | – | – | Servo factory default parameter |
| 202Ah | 00h | Position loop derivative filter coefficient | R/W | U16 | – | – | – | Servo factory default parameter |
| 202Bh | 00h | Current voltage | R | S16 | 0.1V | ? | TPDO | Current servo operating voltage |
| 202Ch | 00h | Current temperature | R | S16 | °C | ? | TPDO | Current internal operating temperature of the servo |
| 202Eh | 00h | Magnetic encoder status code | R | U16 | – | ? | – | Status code of the magnetic encoder itself |
| 202Fh | 00h | Encoder error count | R | U16 | – | ? | – | Magnetic encoder communication error count |
| 2031h | 00h | Bus current offset | R | U16 | 6.5mA | ? | – | Automatically detected at power-on |
| 2032h | 00h | Servo status reset | R/W | U16 | 0 | 0 | RPDO | Setting the corresponding bit to 1 resets that fault; the bit is cleared to 0 when the reset succeeds; see the special byte/bit explanation |
| 2033h | 00h | Servo vendor | Default | U32 | – | – | – | Servo factory default parameter |
| 2034h | 00h | Servo model | Default | U32 | – | – | – | Servo factory default parameter |
3.3 Standardised Device Sub-protocol Area¶
| Index | Sub-index | Object | Access | Type | Unit | Default | Mapped PDO | Description |
|---|---|---|---|---|---|---|---|---|
| 603Fh | 00h | Error code | R | U16 | – | 0 | TPDO | See the definition in 1003h (pre-defined error field); can be reset to 0 through 6040h |
| 6040h | 00h | Controlword | R/W | U16 | – | 0 | RPDO | 0: switch servo torque off, 15: switch servo torque on, 11: quick fault stop |
| 6041h | 00h | Statusword | R | U16 | – | 0 | TPDO | See the CANopen communication protocol |
| 6060h | 00h | Modes of operation | R/W | S8 | – | Default mode (2003) | RPDO | See the special byte/bit explanation |
| 6061h | 00h | Modes of operation display | R | S8 | – | Default mode (2003) | TPDO | See the special byte/bit explanation |
| 6062h | 00h | Current target position | R | S32 | 0.022 deg | ? | TPDO | |
| 6063h | 00h | Actual position | R | S32 | 0.022 deg | ? | TPDO | |
| 606Ch | 00h | Actual velocity | R | S32 | – | ? | TPDO | |
| 6072h | 00h | Torque limit | R/W | U16 | 0.02% | Torque limit (2004) | RPDO | |
| 6074h | 00h | Actual torque | R/W | S16 | 0.02% | ? | TPDO | |
| 6075h | 00h | Rated current | R/W | U32 | 6.5mA | Rated current limit (201F) | RPDO | |
| 6078h | 00h | Current feedback | R | S16 | 6.5mA | ? | TPDO | |
| 607Ah | 00h | Target position | R/W | S32 | 0.022 deg | – | RPDO | Servo positioning target position |
| 6083h | 00h | Profile acceleration | R/W | U32 | 0.366rpm/s | Maximum acceleration limit (201E) | RPDO | Acceleration and deceleration share this parameter |
| 6084h | 00h | Profile deceleration | R/W | U32 | 0.366rpm/s | – | RPDO | Not effective |
| 6085h | 00h | Quick-stop deceleration | R/W | U32 | 0.366rpm/s | – | RPDO | Quick-stop deceleration when 11 is written to the controlword |
| 60FFh | 00h | Target velocity | R/W | S32 | 0.183rpm | Maximum speed limit (201D) | RPDO |
3 Special Byte Explanation¶
3.1 Mode Definition¶
| Value | Mode | Description |
|---|---|---|
| 1 | Standard position mode | Target position, velocity, rated current control, acceleration/deceleration control |
| 3 | Standard velocity mode | Velocity, rated current control, acceleration/deceleration control |
| 12 | Motor mode | Rated current control (0.02%), for servo testing |
3.2 Error Register Definition¶
Bit / weight: 0 means normal, 1 means abnormal
- BIT0 (1): ----
- BIT1 (2): Servo over-current
- BIT2 (4): Servo over-voltage/under-voltage
- BIT3 (8): Servo over-temperature
- BIT4 (16): ----
- BIT5 (32): ----
- BIT6 (64): ----
- BIT7 (128): Servo position sensor communication error
3.3 Pre-defined Error Field Definition¶
| Additional information | Error code |
|---|---|
| bit31 ~ bit16 | bit15 ~ bit0 |
| Error code | Alarm content |
|---|---|
| 0000h | Error reset or no error |
| 2300h | Motor over-current |
| 2311h | Motor overload |
| 3210h | Supply over-voltage |
| 3220h | Supply under-voltage |
| 4210h | Over-temperature alarm |
| 7306h | Encoder fault |
3.4 Servo Phase¶
Bit / weight: Description
- BIT0 (1): Drive direction phase; (0) forward, (1) reverse
- BIT1 (2): Position feedback direction phase, (0) forward, (1) reverse
- BIT2 (4): Brushless/brushed, (0) brushless, (1) brushed; takes effect after restart
3.5 Servo Status¶
*Servo status: 0 means normal, 1 means abnormal
Bit / weight: Description
- BIT0 (1): Torque state: 0 means torque off, 1 means torque on
- BIT1 (2): Movement state: 0 the servo is moving, 1 the servo has stopped moving
- BIT2 (4): Target state: 0 the servo has reached the set target position, 1 the servo has not reached the set target position
3.6 LED Alarm Condition¶
LED alarm condition: 0 means off, 1 means on
Bit / weight: Description
- BIT0 (1): ----
- BIT1 (2): Over-current alarm
- BIT2 (4): Voltage alarm
- BIT3 (8): Over-temperature alarm
- BIT4 (16): ----
- BIT5 (32): ----
- BIT6 (64): ----
- BIT7 (128): Encoder alarm
3.7 Protection Switch¶
Unload condition: 0 means off, 1 means on
Bit / weight: Description
- BIT0 (1): ----
- BIT1 (2): Over-current alarm
- BIT2 (4): Voltage alarm
- BIT3 (8): Over-temperature alarm
- BIT4 (16): ----
- BIT5 (32): ----
- BIT6 (64): ----
- BIT7 (128): Encoder alarm
3.8 Status Reset¶
Fault reset: 0 invalid, 1 means reset
Bit / weight: Description
- BIT0 (1): ----
- BIT1 (2): Reset over-current fault
- BIT2 (4): Reset over-voltage/under-voltage; once the voltage returns to normal, writing 32 to the status reset resets the over-voltage/under-voltage state
- BIT3 (8): Reset over-temperature state; once the temperature returns to normal, writing 64 to the status reset resets the over-temperature state
- BIT4 (16): ----
- BIT5 (32): ----
- BIT6 (64): ----
- BIT7 (128): Reset magnetic encoder state; when the magnetic encoder is connected normally, writing 128 to the status reset resets the magnetic encoder state
- BIT14 (16384): Turn-count reset; writing 16384 to the status reset returns the servo to the single-turn position
- BIT15 (32768): Centre setting; writing 32768 to the status reset sets the current position as the 8192 centre