Fashion Star CANBUS Servo Communication Protocol Specification
1. Document Overview
1.1 Applicable Products
Applicable Products
This document applies to Fashion Star CANBUS servo products.
Rated voltage, output capability, temperature sensors, and some parameter ranges may vary by model. For model-specific differences, also refer to the corresponding datasheet.
This specification is organized in the order of “connect first, check the tables next, and control the servo last.” For first-time use, read Chapter 2 first. When developing a program, focus on Chapters 4–6. For motion, stop, or configuration operations, refer to Chapters 7–9.
1.2 Intended Audience
Intended Audience
- Users of servo devices
- Robot and automation-system integrators
- PC configuration software and CAN host-controller developers
- Product configuration, testing, and maintenance personnel
1.3 Protocol Version
| Item | Content |
|---|---|
| Protocol name | Fashion Star CANBUS servo communication protocol |
| Protocol version | V1.1.1 |
| Release date | 2026-08-05 |
| CAN type | Classical CAN |
| CAN frame format | CAN 2.0A standard data frame |
1.4 Document Notation
| Symbol | Meaning |
|---|---|
0x12 |
Hexadecimal number |
Data[n] |
Byte n+1 in the CAN data field |
ServoID |
servo ID |
DLC |
Actual number of bytes in the CAN data field |
R |
Readable |
W |
Writable |
R/W |
Read/write |
— |
None, undefined, or not applicable |
1.5 Important Notes
Important Notes
- This protocol uses 11-bit standard CAN data frames. Extended frames, remote frames, and CAN-FD are not used.
- The host controller and servo must be configured to use the same CAN baud rate.
- All multibyte parameters use little-endian byte order, with the low byte first.
- Parameters such as angle and speed must be converted using the scales specified in this document. Do not treat raw values as engineering values directly.
- Before changing the servo ID, CAN baud rate, zero point, turn count, or PID parameters, confirm that the target servo and mechanical structure are in a safe state.
- When multiple servo units are present on the same bus, do not broadcast read commands or write-and-respond commands that generate responses.
2. Quick Start
2.1 CAN Interface and Communication Conditions
The CAN bus must include CAN_H, CAN_L, and a common reference ground. Termination resistors should be configured at both ends of the bus according to the system design; 120 Ω is a common value.
The host controller and servo must meet the following requirements:
- Connect CAN_H to CAN_H.
- Connect CAN_L to CAN_L.
- Use the same CAN baud rate.
- Use standard data frames for both host transmission and reception.
- Set the CAN ID to
0x321.
2.2 Default Communication Parameters
| Item | Default value |
|---|---|
| CAN baud rate | 500 Kbps |
| CAN ID | 0x321 |
| Frame format | 11-bit standard data frame |
| Frame type | Data frame |
| Maximum DLC | 8 Byte |
| Ordinary servo ID range | 0~254 |
2.3 CAN Standard Frame Format
Commands sent by the host controller and data returned by the servo both use:
CAN ID = 0x321
IDE = Standard (standard frame)
RTR = Data (data frame)
The servo ID is not placed in the CAN ID. It is placed in Data[1] of the CAN data field.
2.4 Difference Between Servo ID and CAN ID
| Item | CAN ID | Servo ID |
|---|---|---|
| Purpose | CAN bus arbitration identifier | Distinguishes different servo units on the same bus |
| Location in this protocol | CAN frame identifier | Data[1] of the CAN data field |
| Value in this protocol | Fixed at 0x321 |
0~254 |
For example, when reading servo ID 1 and servo ID 2, the CAN ID is 0x321 in both cases. The only difference is the second byte in the data field.
2.5 First Servo Read
Using the default 500 Kbps baud rate and servo ID 1 as an example, read the servo model address 0x01:
TX CAN ID=0x321 DLC=3 Data: 72 01 01
Normal response format:
RX CAN ID=0x321 DLC=5 Data: 76 01 01 LL HH
Where:
0x72: Read one parameter.0x01: Target Servo ID.0x01: Servo model parameter address.LL HH: Low and high bytes of the model parameter.
A correct response indicates that the CAN wiring, baud rate, CAN ID, and servo ID are basically configured correctly.
2.6 Connecting the Servo with the Supplied PC Configuration Software
When using the Fashion Star adapter board and the CANBUS Servo PC configuration software:
- Connect the adapter board to the computer.
- Connect the adapter board's CAN_H and CAN_L correctly to the servo.
- Provide the servo with a power supply that meets its specifications.
- Open the PC configuration software in a browser that supports Web Serial.
- Click “Connect serial port”.
- Select the current CAN baud rate of the servo.
- Set the scan range and start scanning.
- After the servo is found, select the target ID for monitoring, control, or parameter configuration.
3. Communication Protocol Basics
3.1 CAN Frame Parameters
| Item | Requirement |
|---|---|
| CAN type | Classical CAN |
| Frame format | CAN 2.0A standard frame |
| Identifier length | 11 bit |
| CAN ID | 0x321 |
| Frame type | Data frame |
| Data length | Determined by the command, up to 8 Byte |
| Extended frame | Not used |
| Remote frame | Not used |
| CAN-FD | Not used |
3.2 CAN Data-Field Structure
All public commands begin with a command byte:
Data[0] = Command
Data[1] = ServoID
Data[2...] = Command parameters such as Address and Value
The specific DLC and field order for each command are defined in Chapter 4.
3.3 Byte Numbering
This document numbers data-field bytes starting from 0:
Data[0] Data[1] Data[2] ... Data[7]
Some original materials may label them Byte1–Byte8. The correspondence is:
Byte1 = Data[0]
Byte2 = Data[1]
...
Byte8 = Data[7]
3.4 Command Byte
The command byte is the hexadecimal value corresponding to an ASCII character, and it is case-sensitive. For example:
| ASCII | Hex | Function |
|---|---|---|
r |
0x72 |
Read one parameter |
R |
0x52 |
Read two parameters |
w |
0x77 |
Write one parameter |
W |
0x57 |
Write two parameters |
r and R, as well as w and W, are different commands and must not be interchanged.
3.5 Servo ID
- The ordinary Servo ID range is
0x00~0xFE, which is decimal0~254. 0xFFis the broadcast ID and is used only to execute synchronized motion that has already been buffered separately in each Servo unit.- Read commands and commands that require a response must not use the broadcast ID.
3.6 16-Bit Parameters and Little-Endian Order
16-bit parameters are transmitted with the low byte first:
Value16 = ValueLow | (ValueHigh << 8)
For example, the data order for hexadecimal value 0x1234 is:
34 12
3.7 Combining 32-Bit Parameters
A 32-bit parameter consists of two adjacent 16-bit addresses:
Value32 = WordLow | (WordHigh << 16)
The lower address stores the low 16 bits, and the higher address stores the high 16 bits. Each 16-bit word is still transmitted with its low byte first.
For example, the target angle consists of 0x53/0x54:
0x53 = Low 16 bits
0x54 = High 16 bits
3.8 Signed-Number Encoding
Single-turn angle, target-angle, and angle-limit parameters use two's-complement representation. During parsing, convert them according to the parameter type to:
- signed 16-bit; or
- signed 32-bit.
Negative angles must not be converted to 0~360° before transmission.
3.9 Response Matching and Timeout Handling
After receiving a response, the host controller should check at least the following:
- Whether the CAN ID is
0x321. - Whether the DLC matches the command definition.
- Whether the response command byte is correct.
- Whether the Servo ID matches the request.
- Whether the parameter address matches the request.
- Whether the two addresses and their order in a dual-parameter response are correct.
The host controller may set communication timeouts and retry counts according to the bus load. Avoid sending another response-generating request before the previous request has completed.
4. Commands and Packet Formats
4.1 Command Summary
| ASCII | Hex | Direction | Function | DLC | Response |
|---|---|---|---|---|---|
r |
0x72 |
Host → servo | Read one parameter | 3 | v, DLC = 5 |
R |
0x52 |
Host → servo | Read two parameters | 4 | V, DLC = 8 |
w |
0x77 |
Host → servo | Write one parameter | 5 | No response |
W |
0x57 |
Host → servo | Write two parameters | 8 | No response |
x |
0x78 |
Host → servo | Write one parameter and return the value | 5 | v, DLC = 5 |
X |
0x58 |
Host → servo | Write two parameters and return the values | 8 | V, DLC = 8 |
Q |
0x51 |
Host → servo | Begin continuous writes | 2 | No response |
q |
0x71 |
Host → servo | End continuous writes and commit | 2 | No response |
v |
0x76 |
servo → Host | Single-parameter response | 5 | — |
V |
0x56 |
servo → Host | Dual-parameter response | 8 | — |
4.2 Read One Parameter r/v
Request format:
| Data[0] | Data[1] | Data[2] |
|---|---|---|
0x72 |
Servo ID | Address |
Response format:
| Data[0] | Data[1] | Data[2] | Data[3] | Data[4] |
|---|---|---|---|---|
0x76 |
Servo ID | Address | ValueLow | ValueHigh |
Example: Read the single-turn angle at 0x18 for ID 1:
TX DLC=3: 72 01 18
RX DLC=5: 76 01 18 LL HH
4.3 Read Two Parameters R/V
Request format:
| Data[0] | Data[1] | Data[2] | Data[3] |
|---|---|---|---|
0x52 |
Servo ID | AddressA | AddressB |
Response format:
| Data[0] | Data[1] | Data[2] | Data[3] | Data[4] | Data[5] | Data[6] | Data[7] |
|---|---|---|---|---|---|---|---|
0x56 |
Servo ID | AddressA | ValueA_L | ValueA_H | AddressB | ValueB_L | ValueB_H |
Example: Read the low and high words of the multi-turn angle for ID 1:
TX DLC=4: 52 01 15 16
RX DLC=8: 56 01 15 L0 L1 16 H0 H1
4.4 Write One Parameter w
Packet format:
| Data[0] | Data[1] | Data[2] | Data[3] | Data[4] |
|---|---|---|---|---|
0x77 |
Servo ID | Address | ValueLow | ValueHigh |
This command does not return a response after writing.
Example: Write stop-and-hold value 0x0011 to address 0x7B of ID 1:
77 01 7B 11 00
4.5 Write One Parameter and Return the Value x/v
Request format:
78 ServoID Address ValueLow ValueHigh
Response format:
76 ServoID Address ActualValueLow ActualValueHigh
The response returns the actual parameter value after the servo write. The host controller must compare the returned value with the target value and must not assume that the write was completely accepted merely because a response was received.
4.6 Write Two Parameters W
Packet format:
| Data[0] | Data[1] | Data[2] | Data[3] | Data[4] | Data[5] | Data[6] | Data[7] |
|---|---|---|---|---|---|---|---|
0x57 |
Servo ID | AddressA | ValueA_L | ValueA_H | AddressB | ValueB_L | ValueB_H |
This command does not return a response after writing.
4.7 Write Two Parameters and Return the Values X/V
Request format:
58 ServoID AddressA ValueA_L ValueA_H AddressB ValueB_L ValueB_H
Response format:
56 ServoID AddressA ActualA_L ActualA_H AddressB ActualB_L ActualB_H
4.8 Begin Continuous Writes Q
51 ServoID
After receiving this command, the servo enters continuous-write buffer mode.
4.9 End Continuous Writes q
71 ServoID
After receiving this command, the servo commits the buffered contents and exits continuous-write mode.
Continuous-write rules:
- The buffer can receive up to eight groups of
worWwrites. - During buffering,
x/Xare equivalent tow/Wrespectively and do not generate responses. - Read commands
r/Rmay be used during buffering. - After the eighth write, the servo automatically writes the current buffered contents.
- To support different firmware versions, the host controller should still explicitly send
qto finish. Q, the writes, andqshould use the same Servo ID.
4.10 Broadcast Execution Rules
ServoID=0xFF may be used only to synchronously execute motion commands that have already been buffered separately in multiple servo units.
Broadcast execution does not generate a response. Do not use 0xFF broadcasts for reads, ordinary writes, parameter configuration, or protected-area operations.
5. Memory Table
5.1 Table Description
The memory table uses the following fields:
| Field | Meaning |
|---|---|
| Address | Parameter address |
| Parameter name | Parameter purpose |
| Type | Raw data type |
| Access | Readable, writable, or write-only |
| Unit/Range | Engineering unit and valid range |
| Activation | Takes effect immediately after writing, on execution, or after power cycling |
| Notes | Additional information |
Parameters without a specified engineering unit should be treated as raw 16-bit values. Do not apply an assumed conversion.
5.2 Memory Address Overview
| Address range | Category |
|---|---|
0x01~0x04 |
Device information |
0x10~0x18 |
Real-time status |
0x28 |
Motion damping mode |
0x50~0x59 |
Angle motion control |
0x78~0x7B |
Parameter reset, calibration, and stop control |
0x80~0x90 |
Communication, protection, and power-on configuration |
0x91~0x93 |
Angle limits |
0xC8~0xD5 |
PID and protected parameters |
0xFF |
Protected-area unlock control |
5.3 Device Information Parameters 0x01~0x04
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0x01 |
servo model | uint16 | R | Model code | — | Read-only |
0x02 |
Firmware version | uint16 | R | Version code | — | |
0x03 |
servo serial-number low word | uint16 | R | — | — | Low 16 bits of the serial number |
0x04 |
servo serial-number high word | uint16 | R | — | — | High 16 bits of the serial number |
5.4 Real-Time Status Parameters 0x10~0x18
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0x10 |
servo voltage | uint16 | R | Model-dependent | Real-time update | Conversion depends on the specific model |
0x11 |
servo current | uint16 | R | Model-dependent | Real-time update | Conversion depends on the specific model |
0x12 |
servo power | uint16 | R | Model-dependent | Real-time update | Conversion depends on the specific model |
0x13 |
servo temperature | uint16 | R | Model-dependent | Real-time update | Conversion depends on the specific model |
0x14 |
servo status | uint16 | R | Bit flags | Real-time update | See the low 8 bits in Section 6.8 |
0x15 |
Multi-turn current angle, low word | uint16 | R | 0.1° |
Real-time update | Forms a signed 32-bit value with 0x16 |
0x16 |
Multi-turn current angle, high word | uint16 | R | 0.1° |
Real-time update | Forms a signed 32-bit value with 0x15 |
0x17 |
Current turn count | 16-bit | R | Turns | Real-time update | Direction and overflow rules depend on the specific model |
0x18 |
Current single-turn angle | signed 16-bit | R | -180.0°~180.0° |
Real-time update | Raw unit: 0.1° |
5.5 Motion Damping Parameter 0x28
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0x28 |
Motion-damping-mode power | uint16 | R/W | 0~1000 mW |
Takes effect immediately after writing | An independent motion mode; this is not the stop-damping power |
After power is written to 0x28, the servo immediately enters motion damping mode. It is not necessary to write 0x59 or 0x7B.
5.6 Angle-Motion Parameters 0x50~0x59
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0x50 |
Time to target angle, low word | uint16 | R/W | ms | Parameter write | Forms a uint32 value with 0x51 |
0x51 |
Time to target angle, high word | uint16 | R/W | ms | Parameter write | Forms a uint32 value with 0x50 |
0x52 |
Motion mode | uint16 | R/W | 0/1/2 |
Parameter write | See Chapter 7 |
0x53 |
Target angle, low word | uint16 | R/W | 0.1° |
Parameter write | Forms a signed 32-bit value with 0x54 |
0x54 |
Target angle, high word | uint16 | R/W | 0.1° |
Parameter write | Forms a signed 32-bit value with 0x53 |
0x55 |
Angle-mode execution power | uint16 | R/W | 0~65535 mW |
Parameter write | Limited to 0~1000 mW in stop-damping mode |
0x56 |
Startup acceleration time | uint16 | R/W | ms | Parameter write | Used in acceleration/deceleration modes |
0x57 |
Deceleration time near target | uint16 | R/W | ms | Parameter write | Used in acceleration/deceleration modes |
0x58 |
Maximum speed | uint16 | R/W | 0.1°/s |
Parameter write | Used in speed mode |
0x59 |
Execute angle motion | uint16 | R/W | 0/1 |
Write 1 to execute |
Executes 0x50~0x58 parameters |
5.7 Reset, Calibration, and Stop Parameters 0x78~0x7B
| Address | Parameter name | Type | Access | Write value | Activation | Notes |
|---|---|---|---|---|---|---|
0x78 |
Restore factory parameters | uint16 | W | 1 |
Executes on write | Restores factory parameter settings |
0x79 |
Clear current turn count | uint16 | W | 1 |
Executes on write | Clears the multi-turn count |
0x7A |
Zero-point setting flag | uint16 | W | 0: Set the current position as zero; nonzero: restore the factory zero point |
Executes on write | A nonzero value restores only the factory zero point, not other parameters |
0x7B |
Stop mode | uint16 | W | 0x10/0x11/0x12 |
Executes on write | See Chapter 8 |
5.8 Communication, Protection, and Power-On Configuration 0x80~0x90
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0x80 |
Control response | uint16 | R/W | Model-dependent | Model-dependent | Definitions may vary by model |
0x81 |
servo ID | uint16 | R/W | 0~254 |
Takes effect immediately | Subsequent communication uses the new ID |
0x82 |
CAN baud-rate index | uint16 | R/W | 0~9 |
Firmware-dependent | May take effect immediately or after a power cycle |
0x83 |
Stall-protection function | uint16 | R/W | 0=Off, 1=On |
Configuration write | — |
0x84 |
Stall-protection power limit | uint16 | R/W | 0~65535 mW |
Configuration write | — |
0x85 |
Low-voltage protection threshold | uint16 | R/W | 0~65535 mV |
Configuration write | — |
0x86 |
High-voltage protection threshold | uint16 | R/W | 0~65535 mV |
Configuration write | — |
0x87 |
Temperature protection value | uint16 | R/W | Model-dependent | Configuration write | Raw-value conversion depends on the specific model |
0x88 |
Power protection value | uint16 | R/W | 0~65535 mW |
Configuration write | — |
0x89 |
Current protection value | uint16 | R/W | 0~65535 mA |
Configuration write | — |
0x8A |
Acceleration | uint16 | R/W | Model-dependent | Configuration write | Raw 16-bit parameter |
0x8B |
Power-protection hysteresis | uint16 | R/W | 0 or 50~99% |
Configuration write | 0 means disabled |
0x8C |
Power-on holding-force switch | uint16 | R/W | 0=Off, 1=On |
Configuration write | — |
0x8E |
Angle-limit switch | uint16 | R/W | 0=Off, 1=On |
Configuration write | Used with 0x91~0x93 |
0x8F |
Power-on soft-start switch | uint16 | R/W | 0=Off, 1=On |
Configuration write | — |
0x90 |
Power-on soft-start time | uint16 | R/W | 0~65535 ms |
Configuration write | — |
5.9 Angle-Limit Parameters 0x91~0x93
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0x91 |
Upper angle limit | signed 16-bit | R/W | 0.1° |
Configuration write | Used with the angle-limit switch |
0x92 |
Lower angle limit | signed 16-bit | R/W | 0.1° |
Configuration write | Used with the angle-limit switch |
0x93 |
Center offset | signed 16-bit | R/W | 0.1° |
Configuration write | — |
5.10 PID and Protected Parameters 0xC8~0xD5
| Address | Parameter name | Type | Access | Unit/Range | Activation | Notes |
|---|---|---|---|---|---|---|
0xC8 |
Kp | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xC9 |
Kd | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xCA |
Ki | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xCB |
PwmBias | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xCC |
HoldKp | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xCD |
HoldKd | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xCE |
HoldPwmBias | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xCF |
FullDeg | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xD0 |
PwmLimit | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xD1 |
NegativeDirectionMap | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xD2 |
PwmFreq | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xD3 |
DeadBand | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xD4 |
MotorDirMap | uint16 | R/W, protected | Model-dependent | After unlock | — |
0xD5 |
VersionInfo | uint16 | R/W, protected | Model-dependent | After unlock | — |
Unless the corresponding model-specific configuration documentation is available, changing protected parameters is not recommended.
5.11 Protected-Area Unlock Address 0xFF
Unlock the protected area:
77 ServoID FF E6 00
Then send the following within 500 ms:
77 ServoID FF 09 00
Relock the protected area after completing protected-area reads or writes:
77 ServoID FF 00 00
The unlocked state remains until it is actively relocked or the servo is powered on again. Some firmware versions return a correctly formatted response with values of 0 when the protected area is read while locked. Therefore, perform the unlock procedure before reliably reading PID parameters.
6. Parameter Encoding and Status Parsing
6.1 Single-Turn Angle Encoding
The single-turn angle is stored at address 0x18. Its raw type is signed 16-bit, and its unit is 0.1°:
AngleDegree = signed16(RawValue) / 10
Valid engineering range:
-180.0°~180.0°
6.2 Multi-Turn Angle Encoding
The multi-turn angle consists of 0x15/0x16 and forms a signed 32-bit value:
Raw32 = Word_0x15 | (Word_0x16 << 16)
AngleDegree = signed32(Raw32) / 10
6.3 Target-Angle Encoding
The target angle consists of 0x53/0x54 and forms a signed 32-bit value:
RawAngle = round(AngleDegree × 10)
WordLow = RawAngle & 0xFFFF
WordHigh = (RawAngle >> 16) & 0xFFFF
The current product supports the following target-angle range:
-368640.0° to 368640.0° (±1024 turns)
6.4 Time-Parameter Encoding
0x50/0x51: uint32, in ms.0x56: uint16, in ms.0x57: uint16, in ms.
Speed mode does not use or transmit the motion-time memory address 0x50/0x51. The command byte Q=0x51 is still used only in the continuous-write process; the two concepts are unrelated.
6.5 Speed-Parameter Encoding
The maximum-speed address is 0x58, with a raw unit of 0.1°/s:
RawSpeed = round(SpeedDegreePerSecond × 10)
6.6 Power-Parameter Encoding
| Address | Function | Unit/Range |
|---|---|---|
0x28 |
Motion-damping-mode power | 0~1000 mW, takes effect on write |
0x55 |
Angle-mode execution power | 0~65535 mW |
0x55 |
Stop-damping power | Limited to 0~1000 mW in the stop-damping scenario |
6.7 Voltage, Current, Power, and Temperature
0x10~0x13 return 16-bit raw measurement values. Different models may use different sensors or conversion parameters. Engineering-value conversion must follow the documentation for the specific model.
When using the supplied Fashion Star PC configuration software, the PC configuration software converts and displays values according to the currently supported models.
6.8 Status-Register Bit Definitions
The low 8 bits of address 0x14 are defined as follows:
| Bit | Status | Condition for setting to 1 | Condition for clearing |
|---|---|---|---|
| BIT0 | Executing command | A motion command is being executed | Automatically cleared after execution |
| BIT1 | Execution error | A motion command failed | Cleared after the next successful execution |
| BIT2 | Stall error | A stall is detected | Cleared after the stall is removed |
| BIT3 | Overvoltage | Voltage is above the protection threshold | Cleared after voltage returns to normal |
| BIT4 | Undervoltage | Voltage is below the protection threshold | Cleared after voltage returns to normal |
| BIT5 | Current error | Current protection is triggered | Cleared after current returns to normal |
| BIT6 | Power error | Power protection is triggered | Cleared after power returns to normal |
| BIT7 | Temperature error | Temperature protection is triggered | Cleared after temperature returns to normal |
BIT8–BIT15 are undefined in the current version and must be ignored by the receiver.
7. Motion Control
7.1 Motion-Control Sequence
The general sequence for angle motion is:
- Write the motion mode
0x52. - Write the target angle
0x53/0x54. - Write the time, acceleration/deceleration, or speed parameters required by the selected mode.
- Write the execution power
0x55. - Write
1to0x59to execute the motion.
These parameters may also be submitted together using the continuous-write method in Sections 4.8 and 4.9.
7.2 Simple Mode
0x52 = 0
Parameters used:
- Target angle
0x53/0x54. - Motion time
0x50/0x51. - Execution power
0x55. - Execute command
0x59=1.
7.3 Time-Based Acceleration/Deceleration Mode
0x52 = 1
Parameters used:
- Target angle
0x53/0x54. - Motion time
0x50/0x51. - Acceleration time
0x56. - Deceleration time
0x57. - Execution power
0x55. - Execute command
0x59=1.
7.4 Speed-Based Acceleration/Deceleration Mode
0x52 = 2
Parameters used:
- Target angle
0x53/0x54. - Maximum speed
0x58. - Acceleration time
0x56. - Deceleration time
0x57. - Execution power
0x55. - Execute command
0x59=1.
7.5 Motion-Mode Parameter Comparison
| Parameter | Simple mode | Time-based acceleration/deceleration | Speed-based acceleration/deceleration |
|---|---|---|---|
Mode 0x52 |
0 |
1 |
2 |
Target angle 0x53/0x54 |
Used | Used | Used |
Execution power 0x55 |
Used | Used | Used |
Motion time 0x50/0x51 |
Used | Used | Not used |
Acceleration time 0x56 |
Not used | Used | Used |
Deceleration time 0x57 |
Not used | Used | Used |
Maximum speed 0x58 |
Not used | Not used | Used |
Execute 0x59=1 |
Used | Used | Used |
7.6 Single-Turn and Multi-Turn Target Angles
The target angle is always transmitted through 0x53/0x54 as signed 0.1° data.
- For single-turn applications, the recommended range is
-180.0°~180.0°. - For multi-turn applications, the current product supports
-368640.0°~368640.0°. - Transmit negative angles directly as signed 32-bit two's-complement values.
7.7 Executing Motion
After all required motion parameters have been written:
77 ServoID 59 01 00
Writing 1 to 0x59 executes the motion.
7.8 Motion Damping Mode 0x28
Motion damping mode is an independent motion mode. It does not use the target angle, motion time, or 0x59.
Write 0~1000 mW to 0x28 to execute it immediately:
77 ServoID 28 PowerLow PowerHigh
7.9 Continuous Writes and Synchronized Motion
A single servo can use Q/q to buffer and submit motion parameters together:
51 01
57 01 53 AL0 AL1 54 AH0 AH1
57 01 50 TL0 TL1 51 TH0 TH1
77 01 52 00 00
77 01 55 PL PH
77 01 59 01 00
71 01
7.10 Broadcast Execution for Multiple Servo Units
For synchronized motion of multiple servo units, first buffer the motion parameters separately for each servo unit, then use broadcast ID 0xFF to execute the buffered motion.
Broadcasts do not generate responses. Do not use broadcasts to read parameters or perform ordinary write-and-respond operations.
8. Stop and Calibration Control
8.1 Stop and Release Torque
Stop motion and release the output:
77 ServoID 7B 10 00
8.2 Stop and Hold Torque
Stop motion and hold the current position:
77 ServoID 7B 11 00
8.3 Stop Damping
Stop-damping power comes from 0x55. You must first write 0~1000 mW, and then send the stop-damping command:
77 ServoID 55 PowerLow PowerHigh
77 ServoID 7B 12 00
Send the two frames consecutively and in order. If the power write fails or the value is out of range, do not continue with 0x7B=0x12.
8.4 Difference Between Motion Damping and Stop Damping
| Function | Power address | Power range | Execution method |
|---|---|---|---|
| Motion damping mode | 0x28 |
0~1000 mW |
Takes effect immediately after the power is written |
| Stop damping | 0x55 |
0~1000 mW |
Write the power first, then write 0x7B=0x12 |
These two damping functions must not be mixed. 0x28 is not the stop-damping power address.
8.5 Clear Multi-Turn Count
77 ServoID 79 01 00
This operation changes the multi-turn position reference. Confirm that the mechanical structure is safe before executing it.
8.6 Set the Zero Point 0x7A
0x7A performs two zero-point operations according to the value written:
| Write value | Function | Example |
|---|---|---|
0 |
Set the current position of the servo as zero | 77 ServoID 7A 00 00 |
| Nonzero | Restore the factory-configured zero point | 77 ServoID 7A 01 00 |
Writing a nonzero value restores only the factory zero point; it does not restore other user parameters.
Before setting the zero point, confirm that the mechanical structure is safe and first place the servo in stop-and-release or stop-damping mode.
8.7 Restore Factory Parameters 0x78
Write 1 to 0x78:
77 ServoID 78 01 00
9. Servo Configuration
9.1 Change the Servo ID
The servo ID is stored at address 0x81, with a valid range of 0~254.
Example: Change ID 1 to ID 2:
78 01 81 02 00
The new ID takes effect immediately. After a successful write, all subsequent communication must use the new ID 2.
9.2 Change the CAN Baud Rate
The CAN baud-rate address is 0x82. Write the baud-rate index to this address.
Example: Change ID 1 to 1 Mbps, index 9:
78 01 82 09 00
9.3 When the Baud-Rate Change Takes Effect
Different servo firmware versions may use either of the following behaviors:
- Switch immediately after the write.
- Save the parameter immediately and switch after a power cycle.
Recommended procedure:
- Connect only the target servo to the bus during the change.
- Write the new baud-rate index.
- Try to read back
0x82at the old baud rate. - If the new index can still be read at the old baud rate, power cycle the servo before switching the host controller.
- If the servo stops responding immediately at the old baud rate, switch the host controller to the new baud rate for verification.
- All servo units on the same bus must use the same baud rate.
9.4 Configure Angle Limits
Angle limits use the following parameters:
0x8E: angle-limit switch.0x91: upper angle limit.0x92: lower angle limit.0x93: center offset.
The upper limit, lower limit, and center offset are all signed 16-bit values with unit 0.1°.
9.5 Configure Protection Parameters
The protection parameters include:
- Stall protection
0x83/0x84. - Low-voltage protection
0x85. - High-voltage protection
0x86. - Temperature protection
0x87. - Power protection
0x88. - Current protection
0x89. - Power-protection hysteresis
0x8B.
Power-protection hysteresis accepts only:
0 = Disabled
50~99 = Percentage hysteresis
9.6 Configure Power-On Behavior
0x8C: power-on holding-force switch.0x8F: power-on soft-start switch.0x90: power-on soft-start time, in ms.
9.7 Read and Modify PID Parameters
PID and motor-control parameters are located at 0xC8~0xD5 and belong to the protected parameter area.
Ordinary users are not advised to modify this area. When modification is required, use the model-specific configuration parameters and the unlock procedure in Section 9.8.
9.8 Unlock and Relock the PID Protected Area
Unlock:
77 ServoID FF E6 00
Continue by sending the following within 500 ms:
77 ServoID FF 09 00
Relock after completion:
77 ServoID FF 00 00
10. Complete Communication Examples
All examples below use the standard CAN ID 0x321 and example Servo ID 0x01. Unless otherwise noted, all bytes are hexadecimal.
10.1 Read the Servo Model
TX DLC=3: 72 01 01
RX DLC=5: 76 01 01 LL HH
10.2 Read the Firmware Version
TX DLC=3: 72 01 02
RX DLC=5: 76 01 02 LL HH
10.3 Read the Single-Turn Angle
TX DLC=3: 72 01 18
RX DLC=5: 76 01 18 LL HH
RawAngle = signed16(LL | (HH << 8))
AngleDegree = RawAngle / 10
10.4 Read the Multi-Turn Angle
TX DLC=4: 52 01 15 16
RX DLC=8: 56 01 15 L0 L1 16 H0 H1
WordLow = L0 | (L1 << 8)
WordHigh = H0 | (H1 << 8)
RawAngle = signed32(WordLow | (WordHigh << 16))
AngleDegree = RawAngle / 10
10.5 Read Real-Time Voltage and Current
TX DLC=4: 52 01 10 11
RX DLC=8: 56 01 10 VL VH 11 CL CH
Physical-value conversion is determined by the specific servo model.
10.6 Move the Servo to a Specified Angle
Example: target angle 90.0°, motion time 1000 ms, simple mode:
57 01 53 84 03 54 00 00 # 90.0°,Raw=900
57 01 50 E8 03 51 00 00 # 1000 ms
77 01 52 00 00 # Simple mode
77 01 55 00 00 # Execution power
77 01 59 01 00 # Execute
10.7 Move in Time-Based Acceleration/Deceleration Mode
57 01 53 AL0 AL1 54 AH0 AH1
57 01 50 TL0 TL1 51 TH0 TH1
77 01 52 01 00
77 01 56 AccelLow AccelHigh
77 01 57 DecelLow DecelHigh
77 01 55 PowerLow PowerHigh
77 01 59 01 00
10.8 Move in Speed-Based Acceleration/Deceleration Mode
57 01 53 AL0 AL1 54 AH0 AH1
77 01 52 02 00
77 01 58 SpeedLow SpeedHigh
77 01 56 AccelLow AccelHigh
77 01 57 DecelLow DecelHigh
77 01 55 PowerLow PowerHigh
77 01 59 01 00
Speed mode does not transmit the motion-time memory address 0x50/0x51. When continuous writes are used, the command byte Q=0x51 is still used as described in Section 4.8.
10.9 Enter Motion Damping Mode
Example with 500 mW power:
77 01 28 F4 01
10.10 Stop and Hold Torque
77 01 7B 11 00
10.11 Stop and Release Torque
77 01 7B 10 00
10.12 Stop Damping
Example with 500 mW stop-damping power:
77 01 55 F4 01
77 01 7B 12 00
10.13 Change the Servo ID
Change ID 1 to ID 2:
78 01 81 02 00
10.14 Change the CAN Baud Rate
Change to 1 Mbps, index 9:
78 01 82 09 00
10.15 Clear the Turn Count
77 01 79 01 00
10.16 Set the Zero Point
77 01 7A 00 00
10.17 Synchronized Motion of Multiple Servo Units
Recommended procedure:
- Send
Q + ServoIDseparately to each servo unit. - Buffer each unit's motion parameters and
0x59=1separately. - Use the broadcast-execution method allowed by the protocol to trigger the buffered servo units synchronously.
- Do not wait for a response to the broadcast.
Before synchronized motion, confirm that all servo units use the same baud rate and that no Servo ID is duplicated.
11. Frequently Asked Questions and Troubleshooting
11.1 Servo Does Not Respond
Check the following in order:
- Whether the servo is powered correctly.
- Whether CAN_H and CAN_L are reversed.
- Whether the host controller and servo use the same baud rate.
- Whether standard frames are being used.
- Whether the CAN ID is
0x321. - Whether the Servo ID is correct.
- Whether the DLC and command format are correct.
- Whether the bus termination resistance and grounding are appropriate.
11.2 Confusing the CAN ID with the Servo ID
The CAN ID is fixed at 0x321. The servo ID is located at Data[1]. Do not place the servo ID in the CAN ID.
11.3 Incorrect Standard-Frame or Extended-Frame Setting
This protocol uses 11-bit standard data frames. If the host controller is configured for 29-bit extended frames, the servo will not communicate normally according to this protocol.
11.4 Inconsistent CAN Baud Rates
All nodes on the same physical CAN bus must use the same baud rate. servo Units with different baud rates cannot be mixed on the same bus.
11.5 Unable to Connect After Changing the Baud Rate
Some firmware versions switch baud rates only after a power cycle. Try both the old and new baud rates and follow the procedure in Section 9.3.
11.6 Angle Values Differ by a Factor of 10
The raw unit of an angle is 0.1°. For example, a raw value of 1600 represents 160.0°, not 1600°.
To transmit 160.0°, encode it as:
160.0 × 10 = 1600
11.7 Incorrect Negative-Angle Parsing
Angles use signed two's-complement values. Parse them as signed 16-bit or signed 32-bit values. Do not treat them as unsigned values or automatically convert negative angles to 0~360°.
11.8 PID Parameters Read as 0
Some firmware versions still return a response when the protected area is locked, but all parameter values may be 0. Run the 0xFF unlock procedure before reading PID parameters, and relock the area after reading.
11.9 Stop Damping Has No Effect
Check that the operations are performed in the correct order:
Write 0x55 = 0 to 1000 mW first
Then write 0x7B = 0x12
Do not treat 0x28 as the stop-damping power address.
11.10 Multiple Servo Units Respond Simultaneously
Do not broadcast read commands or write-and-respond commands. Simultaneous responses from multiple servo units can cause bus data collisions. The broadcast ID is used only to execute buffered synchronized motion.
Appendix A: Quick Command Index
| ASCII | Hex | Function | TX DLC | RX Command/DLC |
|---|---|---|---|---|
r |
0x72 |
Read one parameter | 3 | v / 5 |
R |
0x52 |
Read two parameters | 4 | V / 8 |
w |
0x77 |
Write one parameter | 5 | None |
W |
0x57 |
Write two parameters | 8 | None |
x |
0x78 |
Write one parameter and return the value | 5 | v / 5 |
X |
0x58 |
Write two parameters and return the values | 8 | V / 8 |
Q |
0x51 |
Begin continuous writes | 2 | None |
q |
0x71 |
End continuous writes and commit | 2 | None |
Appendix B: Quick Memory-Address Index
| Address | Parameter | Access | Unit/Range |
|---|---|---|---|
0x01 |
servo model | R | Model code |
0x02 |
Firmware version | R | Version code |
0x03/0x04 |
servo serial number | R | 32-bit |
0x10 |
servo voltage | R | Model-dependent |
0x11 |
servo current | R | Model-dependent |
0x12 |
servo power | R | Model-dependent |
0x13 |
servo temperature | R | Model-dependent |
0x14 |
servo status | R | Bit flags |
0x15/0x16 |
Multi-turn current angle | R | signed 32-bit, 0.1° |
0x17 |
Current turn count | R | Turns |
0x18 |
Current single-turn angle | R | signed 16-bit, 0.1° |
0x28 |
Motion-damping-mode power | R/W | 0~1000 mW, takes effect on write |
0x50/0x51 |
Time to target angle | R/W | uint32, ms |
0x52 |
Motion mode | R/W | 0/1/2 |
0x53/0x54 |
Target angle | R/W | signed 32-bit, 0.1° |
0x55 |
Angle-mode execution power | R/W | 0~65535 mW |
0x56 |
Acceleration time | R/W | ms |
0x57 |
Deceleration time | R/W | ms |
0x58 |
Maximum speed | R/W | 0.1°/s |
0x59 |
Execute angle motion | R/W | Write 1 to execute |
0x78 |
Restore factory parameters | W | Write 1 |
0x79 |
Clear turn count | W | Write 1 |
0x7A |
Zero-point setting flag | W | 0=Current position is zero; nonzero=restore factory zero point |
0x7B |
Stop mode | W | 0x10/0x11/0x12 |
0x80 |
Control response | R/W | Model-dependent |
0x81 |
servo ID | R/W | 0~254 |
0x82 |
CAN baud-rate index | R/W | 0~9 |
0x83 |
Stall-protection function | R/W | 0/1 |
0x84 |
Stall-protection power limit | R/W | mW |
0x85 |
Low-voltage protection threshold | R/W | mV |
0x86 |
High-voltage protection threshold | R/W | mV |
0x87 |
Temperature protection value | R/W | Model-dependent |
0x88 |
Power protection value | R/W | mW |
0x89 |
Current protection value | R/W | mA |
0x8A |
Acceleration | R/W | Model-dependent |
0x8B |
Power-protection hysteresis | R/W | 0 or 50~99% |
0x8C |
Power-on holding-force switch | R/W | 0/1 |
0x8E |
Angle-limit switch | R/W | 0/1 |
0x8F |
Power-on soft-start switch | R/W | 0/1 |
0x90 |
Power-on soft-start time | R/W | ms |
0x91 |
Upper angle limit | R/W | signed 16-bit, 0.1° |
0x92 |
Lower angle limit | R/W | signed 16-bit, 0.1° |
0x93 |
Center offset | R/W | signed 16-bit, 0.1° |
0xC8~0xD5 |
PID and protected parameters | R/W, protected | Model-dependent |
0xFF |
Protected-area unlock/relock | W | Control address |
Appendix C: CAN Baud-Rate Index
| Index | CAN baud rate |
|---|---|
0 |
50 Kbps |
1 |
100 Kbps |
2 |
125 Kbps |
3 |
200 Kbps |
4 |
250 Kbps |
5 |
400 Kbps |
6 |
500 Kbps (default) |
7 |
750 Kbps |
8 |
800 Kbps |
9 |
1 Mbps |
Appendix D: Status-Bit Quick Reference
| Bit | Status |
|---|---|
| BIT0 | Executing command |
| BIT1 | Execution error |
| BIT2 | Stall error |
| BIT3 | Overvoltage |
| BIT4 | Undervoltage |
| BIT5 | Current error |
| BIT6 | Power error |
| BIT7 | Temperature error |