ODrive is a high-performance servo motor drive module launched by M5Stack, based on the open source motion control solution ODrive. Supports the control of a single three-phase servo motor, the peak drive current can reach 5A. It has high-speed motor control capability while providing encoder signal interface, which can realize high-precision motion control positioning. The module uses UART communication interface and is compatible with the official ODrive configuration tool and protocol (you can also configure different motor motion modes through the host computer tool to make the motor work more smoothly and stably).
Single module version
Matching motor version
Resources | Parameter |
---|---|
Optional servo motor specifications | phases: 3,Voltage: 24V-DC,Rated current: 4A,Rated power: 62W,Rated speed: 3000rpm |
Motor driver chip | DRV83018 |
Maximum drive current | 5A |
Interface Type | 3.96-2P (power supply), 3.96-3P (motor), 2.54-5P (encoder) |
Input power | 12-24V DC |
Net weight | 22.5g |
Gross weight | 42.3g |
Product Size | 54.2*54.2*13.2mm |
Package Size | 95*65*25mm |
M5Core1 | GPIO13 | GPIO5 | 5V | GND |
---|---|---|---|---|
ODrive | RX | TX | 5V | GND |
Remark: In this case, the ODrive module is used to control the high-speed and precise rotation of the servo motor. Press button C to calibrate (do not touch the motor shaft during this period), long press and short press button A to control the motor rotation. Note: The motor parameter configuration in this case is only applicable to the motor model matched with the M5 Odrive kit. When driving other types of motors, please configure the parameters according to the motor used.
//Create an instance, specify the serial port used
ODrive odrive(Serial1);
// Commands
void setPosition(float position);
void setPosition(float position, float velocity_feedforward);
void setPosition(float position, float velocity_feedforward, float current_feedforward);
void setVelocity(float velocity);
void setVelocity(float velocity, float current_feedforward);
void setCurrent(float current);
void setGain(float pos, float vel, float vel_integrator);
void setControlMode(int32_t mode);
void setControlInputPos(float pos);
void trapezoidalMove(float position);
// Getters
float getVelocity();
float getVbusVoltage();
int32_t getEncoderShadowCount();
float getEncoderPosEstimate();
float getMotorTemp();
float getPhaseCurrent();
float getBusCurrent();
bool checkError(int32_t* axis=NULL, int32_t* motor_thermistor=NULL, int32_t* encoder=NULL, int32_t* controller=NULL);
// General params
// State helper
bool runState(int32_t requested_state, uint32_t timeout);
// device will reboot
void eraseConfig();
void reboot();
void saveConfig();
void setDefaultConfig();
float readFloat();
int32_t readInt();
void writeToDeive(const char* data);
void writeConfig(const char* config, float_t value);
void writeConfig(const char* config, int32_t value);
int32_t readConfigInt(const char*config);
float readConfigFloat(const char*config);
odrivetool is the configuration and debugging software for ODrive, through which the motor parameters can be configured. This tutorial will demonstrate the installation and basic use of odrivetool under the Linux
platform.
python3
.pip3 install odrive==0.5.1.post0
~/.local/bin
to the system environment variable, execute the following command, and insert export PATH=$PATH:~/.local/bin
to the end of the text.vim ~/.bashrc
odrivetool
from the command line to run the tool. Connect the ODrive module to the computer and wait for odrivetool to recognize it. After successful connection, enter odrv0.vbus_voltage
to test and obtain the power supply voltage of the drive board.$odrivertool
ODrive control utility v0.5.1.post0
Website: https://odriverobotics.com/
Docs: https://docs.odriverobotics.com/
Forums: https://discourse.odriverobotics.com/
Discord: https://discord.gg/k3ZZ3mS
Github: https://github.com/madcowswe/ODrive/
Please connect your ODrive.
You can also type help() or quit().
Connected to ODrive 306A396A3235 as odrv0
In [1]: odrv0.vbus_voltage
//配置电机电流限制
odrv0.axis0.motor.config.current_lim [A].
//配置电机转速限制值
odrv0.axis0.controller.config.vel_limit
//配置功率耗散电阻的电阻值
odrv0.config.brake_resistance
//保存配置
odrv0.save_configuration()
For more details, Please click here to view Odrive official documents.