VESC6 CAN CommandsTelemetry
VESC6 CAN CommandsTelemetry
VESC6 CAN CommandsTelemetry
Version 0.1
• CAN Frame Definitions
• Standard frames have 11 bit
IDs
• Extended frame have 29 bit
IDs
• CRCs are usually calculated
in hardware for many
microprocessors
• VESC6 commands use
extended frames
• Looks like an error in
extended data frame (non
remote) SRR should be 0
Command Formats Extracted from VESC6 SW
typedef struct { typedef struct {
struct { struct {
uint8_t DLC:4; /**< @brief Data length. */ uint8_t FMI; /**< @brief Filter id. */
uint8_t RTR:1; /**< @brief Frame type. */ uint16_t TIME; /**< @brief Time stamp. */
uint8_t IDE:1; /**< @brief Identifier type. */ };
}; struct {
union { uint8_t DLC:4; /**< @brief Data length. */
struct { uint8_t RTR:1; /**< @brief Frame type. */
uint32_t SID:11; /**< @brief Standard identifier.*/ uint8_t IDE:1; /**< @brief Identifier type. */
}; };
struct { union {
uint32_t EID:29; /**< @brief Extended identifier.*/ struct {
}; uint32_t SID:11; /**< @brief Standard identifier.*/
}; };
union { struct {
uint8_t data8[8]; /**< @brief Frame data. */ uint32_t EID:29; /**< @brief Extended identifier.*/
uint16_t data16[4]; /**< @brief Frame data. */ };
uint32_t data32[2]; /**< @brief Frame data. */ };
}; union {
} CANTxFrame; uint8_t data8[8]; /**< @brief Frame data. */
uint16_t data16[4]; /**< @brief Frame data. */
uint32_t data32[2]; /**< @brief Frame data. */
};
} CANRxFrame;
List of Command Numbers
CAN_PACKET_SET_DUTY = 0,
CAN_PACKET_SET_CURRENT = 1,
CAN_PACKET_SET_CURRENT_BRAKE = 2,
CAN_PACKET_SET_RPM = 3,
CAN_PACKET_SET_POS = 4, • These command numbers are
CAN_PACKET_FILL_RX_BUFFER = 5,
CAN_PACKET_FILL_RX_BUFFER_LONG = 6, put in the second byte of the 29
CAN_PACKET_PROCESS_RX_BUFFER = 7,
CAN_PACKET_PROCESS_SHORT_BUFFER = 8, bit ID for the extended CAN
CAN_PACKET_STATUS = 9,
CAN_PACKET_SET_CURRENT_REL = 10,
CAN_PACKET_SET_CURRENT_BRAKE_REL = 11,
frame. You need an extended
CAN_PACKET_SET_CURRENT_HANDBRAKE = 12,
CAN_PACKET_SET_CURRENT_HANDBRAKE_REL = 13,
frame (29 bits) vs. standard
CAN_PACKET_STATUS_2 = 14,
CAN_PACKET_STATUS_3 = 15,
frame (11 bits) since bits 0-7 are
CAN_PACKET_STATUS_4 = 16,
CAN_PACKET_PING = 17,
reserved for numbering the
CAN_PACKET_PONG = 18,
CAN_PACKET_DETECT_APPLY_ALL_FOC = 19,
individual speed controllers (0-
CAN_PACKET_DETECT_APPLY_ALL_FOC_RES = 20,
CAN_PACKET_CONF_CURRENT_LIMITS = 21, 255). With only 3 bits left, only 8
CAN_PACKET_CONF_STORE_CURRENT_LIMITS = 22,
CAN_PACKET_CONF_CURRENT_LIMITS_IN = 23, commands would be available if
CAN_PACKET_CONF_STORE_CURRENT_LIMITS_IN = 24,
CAN_PACKET_CONF_FOC_ERPMS = 25, you used a standard frame.
CAN_PACKET_CONF_STORE_FOC_ERPMS = 26,
CAN_PACKET_STATUS_5 = 27
Command Duty Cycle (-1 to 1)
Start Top 11 Bits Of ID SRR Frame Type Bottome 18 Bits Remote Spare Data Length Data Field
1 bit bits 26-28 bits 18-25 1 bit 1 bit bits 16-17 bits 8-15 bits 0-7 1 bit 2 bits 4 bits data 7 data 6 data 5 data 4 data 3 data 2 data 1 data 0
0 0 0 1 0 SET_DUTY=0 0-255 Unit ID 0 4 0 0 0 0 Duty Cycle * 100000
Int 32
• Command position
• This is command of the closed loop PID position, but what are the units?
Encoder steps? Hall sensor steps?
• How is this limited by temperature and current limits? Are the gains backed
off or is the torque limited?
Command Relative Current (-1 to 1)
Start Top 11 Bits Of ID SRR Frame Type Bottome 18 Bits Remote Spare Data Length Data Field
1 bit bits 26-28 bits 18-25 1 bit 1 bit bits 16-17 bits 8-15 bits 0-7 1 bit 2 bits 4 bits data 7 data 6 data 5 data 4 data 3 data 2 data 1 data 0
0 0 0 1 0 SET_CURRENT_RELATIVE = 10 0-255 Unit ID 0 4 0 0 0 0 Ratio (-1 to 1) * 100000
Int 32
Start Top 11 Bits Of ID SRR Frame Type Bottom 18 Bits Remote Spare Data Length Data Field
1 bit bits 26-28 bits 18-25 1 bit 1 bit bits 16-17 bits 8-15 bits 0-7 1 bit 2 bits 4 bits data 7 data 6 data 5 data 4 data 3 data 2 data 1 data 0
0 0 0 1 0 CAN_PACKET_CONF_STORE_CURRENT_LIMITS = 22 0-255 Unit ID 0 8 Max Current Limit * 1000 Min Current Limit * 1000
Int 32 Int 32
Start Top 11 Bits Of ID SRR Frame Type Bottom 18 Bits Remote Spare Data Length Data Field
1 bit bits 26-28 bits 18-25 1 bit 1 bit bits 16-17 bits 8-15 bits 0-7 1 bit 2 bits 4 bits data 7 data 6 data 5 data 4 data 3 data 2 data 1 data 0
0 0 0 1 0 CAN_PACKET_CONF_STORE_CURRENT_LIMITS_IN = 24 0-255 Unit ID 0 8 Max Current Limit * 1000 Min Current Limit * 1000
Int 32 Int 32