8#ifndef USEREXTENSIONS_SRC_ODRIVECAN_H_
9#define USEREXTENSIONS_SRC_ODRIVECAN_H_
20#define ODRIVE_THREAD_MEM 256
21#define ODRIVE_THREAD_PRIO 25
23enum class ODriveState : uint32_t {
AXIS_STATE_UNDEFINED=0,
AXIS_STATE_IDLE=1,
AXIS_STATE_STARTUP_SEQUENCE=2,
AXIS_STATE_FULL_CALIBRATION_SEQUENCE=3,
AXIS_STATE_MOTOR_CALIBRATION=4,
AXIS_STATE_ENCODER_INDEX_SEARCH=6,
AXIS_STATE_ENCODER_OFFSET_CALIBRATION=7,
AXIS_STATE_CLOSED_LOOP_CONTROL=8,
AXIS_STATE_LOCKIN_SPIN=9,
AXIS_STATE_ENCODER_DIR_FIND=10,
AXIS_STATE_HOMING=11,
AXIS_STATE_ENCODER_HALL_POLARITY_CALIBRATION=12,
AXIS_STATE_ENCODER_HALL_PHASE_CALIBRATION=13};
28enum class ODriveEncoderFlags : uint32_t {
ERROR_NONE = 0,
ERROR_UNSTABLE_GAIN = 0x01,
ERROR_CPR_POLEPAIRS_MISMATCH = 0x02,
ERROR_NO_RESPONSE = 0x04,
ERROR_UNSUPPORTED_ENCODER_MODE = 0x08,
ERROR_ILLEGAL_HALL_STATE = 0x10,
ERROR_INDEX_NOT_FOUND_YET = 0x20,
ERROR_ABS_SPI_TIMEOUT = 0x40,
ERROR_ABS_SPI_COM_FAIL = 0x80,
ERROR_ABS_SPI_NOT_READY = 0x100,
ERROR_HALL_NOT_CALIBRATED_YET = 0x200};
58 if(!
port->sendMessage(msg)){
77 uint32_t
getCpr()
override;
@ AXIS_ERROR_MIN_ENDSTOP_PRESSED
@ AXIS_ERROR_ESTOP_REQUESTED
@ AXIS_ERROR_HOMING_WITHOUT_ENDSTOP
@ AXIS_ERROR_WATCHDOG_TIMER_EXPIRED
@ AXIS_ERROR_UNKNOWN_POSITION
@ AXIS_ERROR_INVALID_STATE
@ AXIS_ERROR_MAX_ENDSTOP_PRESSED
@ ERROR_UNSUPPORTED_ENCODER_MODE
@ ERROR_INDEX_NOT_FOUND_YET
@ ERROR_CPR_POLEPAIRS_MISMATCH
@ ERROR_ILLEGAL_HALL_STATE
@ ERROR_HALL_NOT_CALIBRATED_YET
@ ERROR_ABS_SPI_NOT_READY
@ AXIS_STATE_ENCODER_OFFSET_CALIBRATION
@ AXIS_STATE_ENCODER_INDEX_SEARCH
@ AXIS_STATE_STARTUP_SEQUENCE
@ AXIS_STATE_ENCODER_HALL_PHASE_CALIBRATION
@ AXIS_STATE_CLOSED_LOOP_CONTROL
@ AXIS_STATE_ENCODER_DIR_FIND
@ AXIS_STATE_MOTOR_CALIBRATION
@ AXIS_STATE_FULL_CALIBRATION_SEQUENCE
@ AXIS_STATE_ENCODER_HALL_POLARITY_CALIBRATION
@ INPUT_MODE_MIX_CHANNELS
@ CONTROL_MODE_VOLTAGE_CONTROL
@ CONTROL_MODE_POSITION_CONTROL
@ CONTROL_MODE_TORQUE_CONTROL
@ CONTROL_MODE_VELOCITY_CONTROL
CommandHandler(const char *clsname, uint16_t clsid, uint8_t instance=0)
const ClassIdentifier getInfo()
static bool isCreatable()
static bool isCreatable()
const ClassIdentifier getInfo()
void canRxPendCallback(CANPort *port, CAN_rx_msg &msg) override
void requestMsg(uint8_t cmd)
void setState(ODriveState state)
uint32_t lastVoltageUpdate
volatile ODriveLocalState state
void stopMotor() override
void setTorque(float torque)
void setPos(int32_t pos) override
std::string getHelpstring()
const ClassIdentifier getInfo()=0
void saveFlash() override
void restoreFlash() override
void turn(int16_t power) override
void canErrorCallback(CANPort *port, uint32_t errcode)
volatile uint32_t odriveMotorFlags
int32_t getPos() override
bool hasIntegratedEncoder()
float getPos_f() override
Encoder * getEncoder() override
void startMotor() override
bool reloadPosAfterStartup
void sendMsg(uint8_t cmd, T value)
volatile uint32_t odriveEncoderFlags
bool motorReady() override
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies) override
void setMode(ODriveControlMode controlMode, ODriveInputMode inputMode)
volatile ODriveState odriveCurrentState
EncoderType getEncoderType() override
uint32_t getCpr() override
void sendMsg(uint8_t cmd, float value)
volatile uint32_t odriveControllerFlags
static void * memcpy(void *dst, const void *src, size_t n)
uint8_t data[CAN_MSGBUFSIZE]