一个轻量级的简易FOC(磁场定向控制)驱动,支持定角度和定速度两种控制模式。专为ESP32系列微控制器设计,已在ESP32N16R8主控芯片上验证。封装简单易懂的接口,也可轻松移植至其他平台。
- 双模式控制:支持角度控制模式(FOC_MODE_ANG)和速度控制模式(FOC_MODE_SPD)
- 轻量级设计:代码简洁,资源占用少,易于移植
- 硬件抽象:提供清晰的硬件接口层,方便适配不同硬件平台
- 实时性能:优化的控制算法,确保电机控制的实时性和稳定性
- 易于调试:包含硬件测试函数,便于快速验证硬件连接
Light_FOC_Driver/
├── LICENSE # GPL v3 许可证
├── README.md # 项目说明文档
└── Light_FOC_Driver/
└── sp_stand_start/ # ESP-IDF 项目目录
├── CMakeLists.txt # 项目构建配置
├── sdkconfig # ESP-IDF 配置
├── pytest_hello_world.py # 测试脚本
└── main/ # 主程序源代码
├── foc.c/h # FOC核心算法
├── as5600_driver.c/h # AS5600角度传感器驱动
├── te_pwm.c/h # PWM定时器驱动
├── sp_iic.c/h # I2C通信驱动
├── sp_uart.c/h # UART通信驱动
├── sp_sys.c/h # 系统功能
└── sp_app.c/h # 用户应用入口
- ESP32系列开发板(已在ESP32N16R8验证)
- 三相无刷直流电机(BLDC)
- AS5600磁编码器
- 三相逆变器/驱动板
- 电源(根据电机规格选择)
首次使用时需要进行电角度补偿校准:
// 在foc_init()函数中,使用注释的部分进行校准
void foc_init() {
// 1. 仅启用注释的校准代码
// 2. 运行程序
// 3. 手动旋转电机一整圈
// 4. 电机会停顿极对数次
// 5. 记录停顿时最小的角度值,即为补偿角
// 6. 将补偿角填入配置中
}// FOC硬件基本测试
void foc_hd_test();
// FOC初始化
void foc_init();
// FOC设置模式 (FOC_MODE_ANG 或 FOC_MODE_SPD)
void foc_set_mode(uint8_t mode);
// FOC读取角度(°)
float foc_read_ang();
// FOC读取速度(rpm)
float foc_read_spd();
// FOC设置角度(°)
void foc_set_ang(float angle);
// FOC设置速度(rpm)
void foc_set_spd(float speed);// AS5600读取角度
float as5600_read();// 设置为角度控制模式
foc_set_mode(FOC_MODE_ANG);
// 设置目标角度为90度
foc_set_ang(90.0f);
// 读取当前角度
float current_angle = foc_read_ang();// 设置为速度控制模式
foc_set_mode(FOC_MODE_SPD);
// 设置目标速度为1000 RPM
foc_set_spd(1000.0f);
// 读取当前速度
float current_speed = foc_read_spd();- VCC: 3.3V
- GND: GND
- SDA: GPIO21 (默认,可配置)
- SCL: GPIO22 (默认,可配置)
- U相: GPIO32, GPIO33
- V相: GPIO25, GPIO26
- W相: GPIO27, GPIO14
注意:具体引脚配置请根据实际硬件在
sdkconfig中调整。
| 参数 | 值 | 说明 |
|---|---|---|
| 控制频率 | 10-20 kHz | 可配置的PWM频率 |
| 角度分辨率 | 0.0879° | AS5600提供12位分辨率 |
| 速度范围 | 0-5000 RPM | 取决于电机和负载 |
| 控制精度 | ±1° | 角度控制模式 |
| 响应时间 | < 100ms | 系统响应时间 |
本驱动设计为易于移植到其他平台:
- 硬件抽象层:所有硬件相关代码都在
sp_*文件中 - 配置接口:通过头文件宏定义进行配置
- 模块化设计:FOC核心算法与硬件驱动分离
- 实现硬件驱动(I2C、PWM、定时器等)
- 调整引脚配置和时序参数
- 验证传感器读数准确性
- 测试电机基本转动
- 优化控制参数
-
电机不转动
- 检查电源连接
- 验证PWM输出信号
- 检查AS5600读数是否正常
-
角度读数不稳定
- 检查I2C连接是否稳定
- 确保磁铁与AS5600距离合适(1-3mm)
- 检查电源噪声
-
编译错误
- 确认ESP-IDF版本兼容性
- 检查CMake配置
- 验证所有依赖库已安装
- 使用
foc_hd_test()函数进行硬件测试 - 通过串口监视器查看调试信息
- 使用示波器检查PWM波形
本项目采用 GNU General Public License v3.0 许可证 - 查看 LICENSE 文件了解详情。
提示:使用前请仔细阅读硬件规格和安全注意事项,确保正确连接和操作。
安全警告:电机驱动涉及高电压和大电流,操作时请注意安全!