ODrive 控制 BLDC 电机实战教程(v0.5.2 + v3.6 版本)

作者:科采通
关键词:ODrive、BLDC 电机控制、HALL 编码器、Python、速度控制、硬件调试


一、简介:为什么选择 ODrive 控制 BLDC 电机?

ODrive 是一款开源的高性能电调,能够以较低成本实现对无刷直流电机(BLDC)的伺服控制,广泛应用于教育科研、机器人、小型车项目中。

本教程将基于 ODrive v3.6 硬件 + 固件版本 v0.5.2,完整介绍如何用 Python 和 odrivetool 工具控制带有霍尔编码器的轮式 BLDC 电机,支持单轮和双轮控制。


二、实验环境说明

项目配置
控制器ODrive v3.6 24V
固件版本v0.5.2
操作系统Ubuntu 18.04
电机类型带霍尔传感器的直驱轮
编码器霍尔编码器(HALL)
电源稳压 DC 电源(12V~24V)

产品资料:

ODrive Pro / ODrive S1 | 高性能 DC 电机控制器-科采通


三、Hall 传感器线缆连接

Hall 线色ODrive J4 引脚
Red5V
YellowA
BlueB
GreenZ
BlackGND


四、软件安装步骤

 
sudo apt update
sudo apt upgrade
sudo apt install python3 python3-pip
sudo pip3 install --upgrade odrive
echo "PATH=$PATH:~/.local/bin/" >> ~/.bashrc

运行以下命令验证连接是否正常:

 
odrivetool

确保控制器通电后连接 USB,否则无法识别。


五、固件升级(推荐)

 
odrivetool dfu

根据提示按 Y 继续,升级成功会提示 Device firmware update successful.


六、单轮速度控制配置详解(CONTROL_MODE_VELOCITY_CONTROL)

以下为完整配置代码,适用于极简速度控制场景:

 
odrv0.axis0.motor.config.pole_pairs = 15
odrv0.axis0.motor.config.resistance_calib_max_voltage = 4
odrv0.axis0.motor.config.requested_current_range = 25
odrv0.axis0.motor.config.current_control_bandwidth = 100
odrv0.axis0.motor.config.torque_constant = 8.27 / 16

odrv0.axis0.encoder.config.mode = ENCODER_MODE_HALL
odrv0.axis0.encoder.config.cpr = 90
odrv0.axis0.encoder.config.calib_scan_distance = 150
odrv0.axis0.encoder.config.bandwidth = 100

odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
odrv0.axis0.controller.config.pos_gain = 1
odrv0.axis0.controller.config.vel_gain = 0.02 * odrv0.axis0.motor.config.torque_constant * odrv0.axis0.encoder.config.cpr
odrv0.axis0.controller.config.vel_integrator_gain = 0.1 * odrv0.axis0.motor.config.torque_constant * odrv0.axis0.encoder.config.cpr
odrv0.axis0.controller.config.vel_limit = 10

odrv0.config.enable_brake_resistor = True
odrv0.axis0.motor.config.current_lim = 5
odrv0.axis0.motor.config.calibration_current = 5
odrv0.axis0.encoder.config.hall_polarity_calibrated = True

保存并重启:

odrv0.save_configuration()
odrv0.reboot()


七、校准流程(注意电机响声)

  1. 电机校准

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION

  1. 编码器偏移校准(缓慢旋转前后):

odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION

  1. 设为预校准并保存

odrv0.axis0.motor.config.pre_calibrated = True
odrv0.axis0.encoder.config.pre_calibrated = True
odrv0.save_configuration()
odrv0.reboot()

八、运行电机

进入闭环控制状态:

odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

设置目标速度(单位:转/秒):

odrv0.axis0.controller.input_vel = 2

停止电机:

odrv0.axis0.requested_state = AXIS_STATE_IDLE

九、常见问题与解决办法

🛑 ENCODER_ERROR_ILLEGAL_HALL_STATE

原因:

霍尔信号受干扰(如信号全为 0)。

解决:

在每个霍尔信号线上并联 22~47nF 的陶瓷或薄膜电容接地,消除干扰。


🔧 常用命令速查表

功能命令
查看电压odrv0.vbus_voltage
查看编码器值odrv0.axis0.encoder.shadow_count
读取错误信息dump_errors(odrv0)
重新启动设备odrv0.reboot()
恢复出厂设置odrv0.erase_configuration()


🔁 扩展:双轮速度控制配置

若需控制两台电机(如小车),只需将 axis0 的配置复制一份为 axis1,示例如下:

odrv0.axis1.motor.config.pole_pairs = 15
odrv0.axis1.encoder.config.mode = ENCODER_MODE_HALL
odrv0.axis1.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
# ...略
odrv0.save_configuration()
odrv0.reboot()

# 启动控制
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
odrv0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
odrv0.axis0.controller.input_vel = 2
odrv0.axis1.controller.input_vel = 2


十、总结

本教程通过复现一个完整的 ODrive BLDC 控制流程,帮助你从零开始掌握:

  • ODrive 工具安装

  • BLDC 电机参数配置

  • 编码器调试与去噪技巧

  • 单/双轮速度闭环控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值