ESP32 + SimpleFOC + 三路AS5600实现三轴FOC电机控制

     使用一块ESP32(具体型号:ESP32 LOLIN D32)开发板,实现三个无刷电机的FOC闭环控制。由于AS5600磁编码器采用固定I2C地址,而ESP32硬件仅提供两路I2C接口,因此需要对SimpleFOC进行一定扩展。经过测试,最终成功实现了三路AS5600角度采集以及三路BLDC电机闭环控制。

一、SimpleFOC默认仅支持两路I2C

AS5600是一款性价比较高的磁编码器,分辨率12位,通过I2C接口读取角度数据。其最大的特点是使用方便,但也存在一个限制:I2C地址固定为0x36,无法通过硬件配置修改地址。

在单个I2C总线上,如果同时连接多个AS5600,就会出现地址冲突问题。ESP32虽然支持两组硬件I2C控制器,但对于三个AS5600来说仍然不够使用。

SimpleFOC库原生支持通过TwoWire对象指定不同的I2C总线,因此可以较容易地实现两路AS5600的读取。然而当需要连接第三个AS5600时,就必须寻找新的解决方案。

二、增加一路软I2C,实现三路AS5600读取

为了在不增加额外硬件的情况下实现第三路AS5600连接,我采用了软件模拟I2C(Soft I2C)的方案。

由于常见的SoftwareWire库在ESP32新版本Arduino框架下兼容性存在问题,因此重新编写了一套轻量级SoftI2C类,用GPIO模拟I2C通信时序,实现AS5600寄存器读取功能。

随后,为了让SimpleFOC能够像使用普通I2C传感器一样使用第三个AS5600,又增加了一个新的传感器类:

  • SoftI2C类
  • MagneticSensorI2CEx类

其中SoftI2C负责底层通信,而MagneticSensorI2CEx则继承SimpleFOC的Sensor基类,实现角度数据读取接口。

这样一来:

  • 第一颗AS5600使用Wire
  • 第二颗AS5600使用Wire1
  • 第三颗AS5600使用SoftI2C

成功解决了固定地址冲突问题,实现三路编码器同时工作。

经过测试,三个AS5600均能够稳定读取角度信息,并实时输出到串口。

三、借助SimpleFOC实现三路电机闭环控制

在解决编码器问题之后,剩下的工作就变得相对简单。

每个电机分别配置:

  • BLDCMotor对象
  • BLDCDriver3PWM驱动器
  • AS5600位置传感器

然后通过SimpleFOC提供的接口完成:

  • 传感器绑定
  • 驱动器绑定
  • 电机初始化
  • FOC初始化
  • 闭环运行

经过调试后,三个电机均能够正常完成电角度校准,并进入闭环控制状态。

后续还增加了串口控制指令,例如:

  • M1P6.28
  • M2P3.14
  • M3P100

通过串口即可直接控制三个电机运动到指定位置,实现多轴协同控制。

四、硬件配置与应用展望

本次实验使用的主要硬件如下:

  • ESP32 LOLIN D32开发板 ×1
  • SimpleFOC Mini驱动板 ×3
  • AS5600磁编码器 ×3
  • 无刷电机 ×3

整个系统仅使用一块ESP32即可实现三路FOC控制,大幅降低了硬件成本和系统复杂度。

完成三轴控制平台搭建后,可以直接利用SimpleFOC开源库提供的丰富功能,实现:

  • 三轴云台控制
  • 机械臂关节控制
  • 机械恐龙运动控制
  • 摄像稳定平台
  • 多自由度机器人

相比传统自行编写FOC算法,SimpleFOC已经完成了电流环、速度环、位置环等大量底层工作,开发者只需关注运动控制逻辑即可,大大缩短开发周期。

经过本次实践验证,通过增加一路软I2C和扩展传感器接口,ESP32完全能够胜任三路AS5600和三路BLDC电机的FOC控制任务,为后续多轴运动控制项目提供了一个低成本、易扩展的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M创动工坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值