# 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 |