跳转到主要内容

CAN Protocol (Chassis)

 

     
     
Reset
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX00
XX: driver id, can be 1 or 2 or 3 
8/
datafunctiondata typedescription
byte[0]/uint8Fixed value 0x55
byte[1]/uint8Fixed value 0x55
byte[2]/uint8Fixed value 0x55
byte[3]/uint8Fixed value 0x55
byte[4]/uint8Fixed value 0x55
byte[5]/uint8Fixed value 0x55
byte[6]/uint8Fixed value 0x55
byte[7]/uint8Fixed value 0x55
 
Driver mode switch
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX01
XX: driver ID. Can be 1 or 2 or 3
8/
datafunctiondata typedescription
byte[0]modeuint82-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]/uint8Fixed value 0x55
byte[2]/uint8Fixed value 0x55
byte[3]/uint8Fixed value 0x55
byte[4]/uint8Fixed value 0x55
byte[5]/uint8Fixed value 0x55
byte[6]/uint8Fixed value 0x55
byte[7]/uint8Fixed value 0x55
 
Open loop mode control
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX02
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]pwm_duty [15:8]int16range [-3000,3000]
byte[1]pwm_duty [7:0]
byte[2]/uint8Fixed value 0x55
byte[3]/uint8Fixed value 0x55
byte[4]/uint8Fixed value 0x55
byte[5]/uint8Fixed value 0x55
byte[6]/uint8Fixed value 0x55
byte[7]/uint8Fixed value 0x55
 
Velocity mode control
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX03
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]pwm_duty [15:8]int16range [-3000,3000]
byte[1]pwm_duty [7:0]
byte[2]velocity [15:8]int16unit: rpm, range [-500,500]
byte[3]velocity [7:0]
byte[4]/uint8Fixed value 0x55
byte[5]/uint8Fixed value 0x55
byte[6]/uint8Fixed value 0x55
byte[7]/uint8Fixed value 0x55
 
Position velocity mode control
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX04
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]pwm_duty [15:8]int16range [-3000,3000]
byte[1]pwm_duty [8:0]
byte[2]velocity [15:8]int16unit: rpm, range [-500,500]
byte[3]velocity [8:0]
byte[4]position[31:24]int32range [-4096,4096]
byte[5]position[23:16]
byte[6]position[15:8]
byte[7]position[7:0]
 
Current loop mode control
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX05
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]current [15:8]int16unit: 10mA, range [-7000,7000]
byte[1]current [7:0]
byte[2]/uint8Fixed value 0x55
byte[3]/uint8Fixed value 0x55
byte[4]/uint8Fixed value 0x55
byte[5]/uint8Fixed value 0x55
byte[6]/uint8Fixed value 0x55
byte[7]/uint8Fixed value 0x55
 
Velocity current mode control
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX06
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]current [15:8]int16unit: 10mA, range [-7000,7000]
byte[1]current [7:0]
byte[2]velocity [15:8]int16unit: rpm, range [-500,500]
byte[3]velocity [7:0]
byte[4]/uint8Fixed value 0x55
byte[5]/uint8Fixed value 0x55
byte[6]/uint8Fixed value 0x55
byte[7]/uint8Fixed value 0x55
 
Position velocity current mode control
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX07
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]current [15:8]int16unit: 10mA, range [-7000,7000]
byte[1]current [8:0]
byte[2]velocity [15:8]int16unit: rpm, range [-500,500]
byte[3]velocity [8:0]
byte[4]position[31:24]int32range [-4096,4096]
byte[5]position[23:16]
byte[6]position[15:8]
byte[7]position[7:0]
 
Set motor acceleration or deceleration
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX30
XX: driver ID. Can be 1 or 2 or 3 
8/
datafunctiondata typedescription
byte[0]open loop acc [15:8]uint16if 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]uint16if 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]uint16if 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]uint16if 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
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX40
XX: driver ID. Can be 1 or 2 or 3 
8The driver has default parameters that are sent when they need to be modified
datafunctiondata typedescription
byte[0]P [31:24]floatProportion param
byte[1]P[23:16]
byte[2]P[15:8]
byte[3]P[7:0]
byte[4]I [31:24]floatIntegral param
byte[5]I[23:16]
byte[6]I[15:8]
byte[7]I[7:0]
 
set position loop(without current loop)PID cmd
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX41
XX: driver ID. Can be 1 or 2 or 3 
8The driver has default parameters that are sent when they need to be modified
datafunctiondata typedescription
byte[0]P [31:24]floatproportion param
byte[1]P[23:16]
byte[2]P[15:8]
byte[3]P[7:0]
byte[4]D [31:24]floatdifferential param
byte[5]D[23:16]
byte[6]D[15:8]
byte[7]D[7:0]
 
set current loop PID cmd
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX42
XX: driver ID. Can be 1 or 2 or 3 
8The driver has default parameters that are sent when they need to be modified
datafunctiondata typedescription
byte[0]P [31:24]floatproportion param
byte[1]P[23:16]
byte[2]P[15:8]
byte[3]P[7:0]
byte[4]I [31:24]floatIntegral param
byte[5]I[23:16]
byte[6]I[15:8]
byte[7]I[7:0]
 
set velocity loop(with current loop)PID cmd
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX43
XX: driver ID. Can be 1 or 2 or 3 
8The driver has default parameters that are sent when they need to be modified
datafunctiondata typedescription
byte[0]P [31:24]floatproportion param
byte[1]P[23:16]
byte[2]P[15:8]
byte[3]P[7:0]
byte[4]I [31:24]floatIntegral param
byte[5]I[23:16]
byte[6]I[15:8]
byte[7]I[7:0]
 
set position loop(with current loop)PID cmd
SenderReceiverCAN IDDLCPeriod(ms)
ControllerMotor driver0x0505XX44
XX: driver ID. Can be 1 or 2 or 3 
8The driver has default parameters that are sent when they need to be modified
datafunctiondata typedescription
byte[0]P [31:24]floatproportion param
byte[1]P[23:16]
byte[2]P[15:8]
byte[3]P[7:0]
byte[4]D [31:24]floatdifferential param
byte[5]D[23:16]
byte[6]D[15:8]
byte[7]D[7:0]
 
motor position velocity current feedback
SenderReceiverCAN IDDLCPeriod(ms)
Motor driverController0x0505XXB1
XX: driver ID. Can be 1 or 2 or 3 
810ms
datafunctiondata typedescription
byte[0]current [15:8]int16unit: 10mA 
byte[1]current [8:0]
byte[2]velocity [15:8]int16unit: rpm
byte[3]velocity [8:0]
byte[4]position[31:24]int32unit: qc
byte[5]position[23:16]
byte[6]position[15:8]
byte[7]position[7:0]
 
Driver status feedback
SenderReceiverCAN IDDLCPeriod(ms)
Motor driverController0x0505XXB2
XX: driver ID. Can be 1 or 2 or 3 
8100ms
datafunctiondata typedescription
byte[0]pwm duty [15:8]int16 
byte[1]pwm duty [8:0]
byte[2]voltage [15:8]uint16unit: 0.01V
byte[3]voltage [8:0]
byte[4]MOSFET temperatureuint8unit: ℃
byte[5]motor temperatureuint8unit: ℃
byte[6]erroruint80-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]warninguint8bit0-can watchdog timeout
bit1-there is a gap in the Hall sensor
 
vcu error feedback
SenderReceiverCAN IDDLCPeriod(ms)
VCUController0x011101BA8100ms
datafunctiondata typedescription
byte[0]reverseuint80
byte[1]reverseuint80
byte[2]reverseuint80
byte[3]erroruint8bit0-Low battery warm
bit1-Low battery error
bit2-reverse
bit3-emergency stop
byte[4]reverseuint80
byte[5]reverseuint80
byte[6]reverseuint80
byte[7]reverseuint80
 
VCU ctrl mode switch
SenderReceiverCAN IDDLCPeriod(ms)
VCUController0x011101118/
datafunctiondata typedescription
byte[0]VCU mode uint80-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]reverseuint80
byte[2]reverseuint80
byte[3]erroruint80
byte[4]reverseuint80
byte[5]reverseuint80
byte[6]reverseuint80
byte[7]reverseuint80
 
 
velocity current mode example
1.switch to velocity curremt mode
CAN IDData
0X0505010106 55 55 55 55 55 55 55
2.set target velocity :500 rpm, current:30000mA
CAN IDData
0X050501060B B8 01 F4 55 55 55 55