CAN Protocol (Chassis)
Reset | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX00 XX: driver id, can be 1 or 2 or 3 |
8 | / |
data | function | data type | description | |
byte[0] | / | uint8 | Fixed value 0x55 | |
byte[1] | / | uint8 | Fixed value 0x55 | |
byte[2] | / | uint8 | Fixed value 0x55 | |
byte[3] | / | uint8 | Fixed value 0x55 | |
byte[4] | / | uint8 | Fixed value 0x55 | |
byte[5] | / | uint8 | Fixed value 0x55 | |
byte[6] | / | uint8 | Fixed value 0x55 | |
byte[7] | / | uint8 | Fixed value 0x55 | |
Driver mode switch | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX01 XX: driver ID. Can be 1 or 2 or 3 |
8 | / |
data | function | data type | description | |
byte[0] | mode | uint8 | 2-open loop mode 3-velocity loop mode 4-position velocity loop mode 5-current loop mode 6-velocity current loop mode 7-position velocity current loop mode Note: typically the velocity current loop mode should be used. If you want to switch mode, you need to send reset first |
|
byte[1] | / | uint8 | Fixed value 0x55 | |
byte[2] | / | uint8 | Fixed value 0x55 | |
byte[3] | / | uint8 | Fixed value 0x55 | |
byte[4] | / | uint8 | Fixed value 0x55 | |
byte[5] | / | uint8 | Fixed value 0x55 | |
byte[6] | / | uint8 | Fixed value 0x55 | |
byte[7] | / | uint8 | Fixed value 0x55 | |
Open loop mode control | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX02 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | pwm_duty [15:8] | int16 | range [-3000,3000] | |
byte[1] | pwm_duty [7:0] | |||
byte[2] | / | uint8 | Fixed value 0x55 | |
byte[3] | / | uint8 | Fixed value 0x55 | |
byte[4] | / | uint8 | Fixed value 0x55 | |
byte[5] | / | uint8 | Fixed value 0x55 | |
byte[6] | / | uint8 | Fixed value 0x55 | |
byte[7] | / | uint8 | Fixed value 0x55 | |
Velocity mode control | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX03 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | pwm_duty [15:8] | int16 | range [-3000,3000] | |
byte[1] | pwm_duty [7:0] | |||
byte[2] | velocity [15:8] | int16 | unit: rpm, range [-500,500] | |
byte[3] | velocity [7:0] | |||
byte[4] | / | uint8 | Fixed value 0x55 | |
byte[5] | / | uint8 | Fixed value 0x55 | |
byte[6] | / | uint8 | Fixed value 0x55 | |
byte[7] | / | uint8 | Fixed value 0x55 | |
Position velocity mode control | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX04 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | pwm_duty [15:8] | int16 | range [-3000,3000] | |
byte[1] | pwm_duty [8:0] | |||
byte[2] | velocity [15:8] | int16 | unit: rpm, range [-500,500] | |
byte[3] | velocity [8:0] | |||
byte[4] | position[31:24] | int32 | range [-4096,4096] | |
byte[5] | position[23:16] | |||
byte[6] | position[15:8] | |||
byte[7] | position[7:0] | |||
Current loop mode control | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX05 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | current [15:8] | int16 | unit: 10mA, range [-7000,7000] | |
byte[1] | current [7:0] | |||
byte[2] | / | uint8 | Fixed value 0x55 | |
byte[3] | / | uint8 | Fixed value 0x55 | |
byte[4] | / | uint8 | Fixed value 0x55 | |
byte[5] | / | uint8 | Fixed value 0x55 | |
byte[6] | / | uint8 | Fixed value 0x55 | |
byte[7] | / | uint8 | Fixed value 0x55 | |
Velocity current mode control | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX06 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | current [15:8] | int16 | unit: 10mA, range [-7000,7000] | |
byte[1] | current [7:0] | |||
byte[2] | velocity [15:8] | int16 | unit: rpm, range [-500,500] | |
byte[3] | velocity [7:0] | |||
byte[4] | / | uint8 | Fixed value 0x55 | |
byte[5] | / | uint8 | Fixed value 0x55 | |
byte[6] | / | uint8 | Fixed value 0x55 | |
byte[7] | / | uint8 | Fixed value 0x55 | |
Position velocity current mode control | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX07 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | current [15:8] | int16 | unit: 10mA, range [-7000,7000] | |
byte[1] | current [8:0] | |||
byte[2] | velocity [15:8] | int16 | unit: rpm, range [-500,500] | |
byte[3] | velocity [8:0] | |||
byte[4] | position[31:24] | int32 | range [-4096,4096] | |
byte[5] | position[23:16] | |||
byte[6] | position[15:8] | |||
byte[7] | position[7:0] | |||
Set motor acceleration or deceleration | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX30 XX: driver ID. Can be 1 or 2 or 3 |
8 | / |
data | function | data type | description | |
byte[0] | open loop acc [15:8] | uint16 | if you set 1000,it means that the PWM duty cycle value takes 1 second to go from 0 to 1000 | |
byte[1] | open loop acc [7:0] | |||
byte[2] | open loop dec [15:8] | uint16 | if you set 1000,it means that the PWM duty cycle value takes 1 second to go from 1000 to 0 | |
byte[3] | open loop dec [7:0] | |||
byte[4] | velocity loop acc[15:8] | uint16 | if you set 100,it means that the rpm value takes 10 second to go from 0 rpm to 1000 rpm | |
byte[5] | velocity loop acc [7:0] | |||
byte[6] | velocity loop dec[15:8] | uint16 | if you set 100,it means that the rpm value takes 10 second to go from 1000 rpm to 0 rpm | |
byte[7] | velocity loop dec [7:0] | |||
set velocity loop(without current loop)PID param cmd | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX40 XX: driver ID. Can be 1 or 2 or 3 |
8 | The driver has default parameters that are sent when they need to be modified |
data | function | data type | description | |
byte[0] | P [31:24] | float | Proportion param | |
byte[1] | P[23:16] | |||
byte[2] | P[15:8] | |||
byte[3] | P[7:0] | |||
byte[4] | I [31:24] | float | Integral param | |
byte[5] | I[23:16] | |||
byte[6] | I[15:8] | |||
byte[7] | I[7:0] | |||
set position loop(without current loop)PID cmd | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX41 XX: driver ID. Can be 1 or 2 or 3 |
8 | The driver has default parameters that are sent when they need to be modified |
data | function | data type | description | |
byte[0] | P [31:24] | float | proportion param | |
byte[1] | P[23:16] | |||
byte[2] | P[15:8] | |||
byte[3] | P[7:0] | |||
byte[4] | D [31:24] | float | differential param | |
byte[5] | D[23:16] | |||
byte[6] | D[15:8] | |||
byte[7] | D[7:0] | |||
set current loop PID cmd | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX42 XX: driver ID. Can be 1 or 2 or 3 |
8 | The driver has default parameters that are sent when they need to be modified |
data | function | data type | description | |
byte[0] | P [31:24] | float | proportion param | |
byte[1] | P[23:16] | |||
byte[2] | P[15:8] | |||
byte[3] | P[7:0] | |||
byte[4] | I [31:24] | float | Integral param | |
byte[5] | I[23:16] | |||
byte[6] | I[15:8] | |||
byte[7] | I[7:0] | |||
set velocity loop(with current loop)PID cmd | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX43 XX: driver ID. Can be 1 or 2 or 3 |
8 | The driver has default parameters that are sent when they need to be modified |
data | function | data type | description | |
byte[0] | P [31:24] | float | proportion param | |
byte[1] | P[23:16] | |||
byte[2] | P[15:8] | |||
byte[3] | P[7:0] | |||
byte[4] | I [31:24] | float | Integral param | |
byte[5] | I[23:16] | |||
byte[6] | I[15:8] | |||
byte[7] | I[7:0] | |||
set position loop(with current loop)PID cmd | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Controller | Motor driver | 0x0505XX44 XX: driver ID. Can be 1 or 2 or 3 |
8 | The driver has default parameters that are sent when they need to be modified |
data | function | data type | description | |
byte[0] | P [31:24] | float | proportion param | |
byte[1] | P[23:16] | |||
byte[2] | P[15:8] | |||
byte[3] | P[7:0] | |||
byte[4] | D [31:24] | float | differential param | |
byte[5] | D[23:16] | |||
byte[6] | D[15:8] | |||
byte[7] | D[7:0] | |||
motor position velocity current feedback | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Motor driver | Controller | 0x0505XXB1 XX: driver ID. Can be 1 or 2 or 3 |
8 | 10ms |
data | function | data type | description | |
byte[0] | current [15:8] | int16 | unit: 10mA | |
byte[1] | current [8:0] | |||
byte[2] | velocity [15:8] | int16 | unit: rpm | |
byte[3] | velocity [8:0] | |||
byte[4] | position[31:24] | int32 | unit: qc | |
byte[5] | position[23:16] | |||
byte[6] | position[15:8] | |||
byte[7] | position[7:0] | |||
Driver status feedback | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
Motor driver | Controller | 0x0505XXB2 XX: driver ID. Can be 1 or 2 or 3 |
8 | 100ms |
data | function | data type | description | |
byte[0] | pwm duty [15:8] | int16 | ||
byte[1] | pwm duty [8:0] | |||
byte[2] | voltage [15:8] | uint16 | unit: 0.01V | |
byte[3] | voltage [8:0] | |||
byte[4] | MOSFET temperature | uint8 | unit: ℃ | |
byte[5] | motor temperature | uint8 | unit: ℃ | |
byte[6] | error | uint8 | 0-normal 1-voltage over low 2-voltage over high 3-mosfet overtemperature 4-motor overtemperature 5-motor over current 6-encoder disconnect 7-encoder feedback direction is incorrect 8-encoder leads are not secure 9- hall sensor is abnormal |
|
byte[7] | warning | uint8 | bit0-can watchdog timeout bit1-there is a gap in the Hall sensor |
|
vcu error feedback | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
VCU | Controller | 0x011101BA | 8 | 100ms |
data | function | data type | description | |
byte[0] | reverse | uint8 | 0 | |
byte[1] | reverse | uint8 | 0 | |
byte[2] | reverse | uint8 | 0 | |
byte[3] | error | uint8 | bit0-Low battery warm bit1-Low battery error bit2-reverse bit3-emergency stop |
|
byte[4] | reverse | uint8 | 0 | |
byte[5] | reverse | uint8 | 0 | |
byte[6] | reverse | uint8 | 0 | |
byte[7] | reverse | uint8 | 0 | |
VCU ctrl mode switch | ||||
Sender | Receiver | CAN ID | DLC | Period(ms) |
VCU | Controller | 0x01110111 | 8 | / |
data | function | data type | description | |
byte[0] | VCU mode | uint8 | 0-standby 1-reverse 2-VCU CAN mode 3-free mode 4-passthrough mode Note: After powering on, it is in passthrough mode by default |
|
byte[1] | reverse | uint8 | 0 | |
byte[2] | reverse | uint8 | 0 | |
byte[3] | error | uint8 | 0 | |
byte[4] | reverse | uint8 | 0 | |
byte[5] | reverse | uint8 | 0 | |
byte[6] | reverse | uint8 | 0 | |
byte[7] | reverse | uint8 | 0 |
Velocity current mode example
1. Switch to velocity current mode
CAN ID: 0x05050101, Data: 06 55 55 55 55 55 55 55
2. Set target velocity to 500 rpm, current to 30000mA
CAN ID: 0x05050106, Data: 0B B8 01 F4 55 55 55 55