共计 1531 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
2804 电机搭配 AS5047P 磁性编码器在无人机、机器人关节等高精度场景中广泛应用,但新手常面临以下问题:

- 信号干扰:SPI 接线过长导致编码器数据跳变
- 校准失败:机械安装偏差引发零点偏移(offset)异常
- 参数困惑:电流限制、PID 参数设置不合理导致电机抖动
硬件连接
所需材料清单:
- ODrive 控制器(建议 v3.6 以上版本)
- 2804 无刷电机(KV 值需匹配电源)
- AS5047P 编码器(带磁铁安装环)
- 12-24V 电源(电流≥10A)
接线步骤:
- 断电状态下连接电机三相线到 ODrive 的 M0 接口
- AS5047P 的 SPI 接口接线:
- CLK → ODrive GPIO3
- MISO → ODrive GPIO1
- MOSI → ODrive GPIO2
- CS → ODrive GPIO4
- 编码器 VCC(3.3V)和 GND 接 ODrive 对应引脚
关键提示:使用双绞线减少干扰,磁铁与编码器间隙保持 0.5-1mm
软件配置
1. 环境准备
# 安装 ODriveTool(Python3 环境)pip install odrive
2. 基础配置命令
odrv0.axis0.encoder.config.mode = ENCODER_MODE_SPI_ABS_AMS # 编码器模式
odrv0.axis0.encoder.config.abs_spi_cs_gpio_pin = 4 # CS 引脚号
odrv0.axis0.motor.config.pole_pairs = 7 # 2804 电机极对数
3. 校准流程
- 执行电机校准(需卸下负载):
odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION - 编码器偏移校准:
odrv0.axis0.encoder.config.pre_calibrated = False odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION - 保存配置:
odrv0.save_configuration()
代码示例详解
# 设置电流限制(单位:A)odrv0.axis0.motor.config.current_lim = 10
# 调整速度环 PID(典型初始值)odrv0.axis0.controller.config.vel_gain = 0.02
odrv0.axis0.controller.config.vel_integrator_gain = 0.1
# 查看校准结果
print(odrv0.axis0.encoder.config.absolute_offset) # 正常范围:0-16383
避坑指南
- 现象:编码器值跳动
- 检查:磁铁是否偏心、SPI 线是否屏蔽
-
解决:
odrv0.axis0.encoder.config.bandwidth = 1000降低采样带宽 -
现象:电机启动抖动
- 检查:
motor.config.phase_inductance是否匹配 - 解决:调整
current_control_bandwidth(建议从 500 开始)
性能测试
-
阶跃响应测试:
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL odrv0.axis0.controller.input_vel = 5 # 5 转 / 秒观察电机加速是否平滑
-
位置精度测试:
发送 10°间隔的位置指令,用激光测距仪验证实际位移
总结与延伸
完成基础配置后,可尝试:
- 通过 CAN 总线实现多电机同步控制
- 使用
odrivetool liveplotter实时监控参数 - 参考 ODrive 官方文档探索 FOC 高级调参
推荐学习资源:
- ODrive GitHub Wiki
- AMS AS5047P 数据手册
- 《无刷电机控制实战》电子书
正文完
发表至: 未分类
近两天内
