Skip to content

一个轻量级的简易FOC驱动,支持定角度和定速度两种控制模式。

License

Notifications You must be signed in to change notification settings

Dreams-Possible/Light_FOC_Driver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 

Repository files navigation

Light_FOC_Driver - 轻量级FOC电机驱动

License: GPL v3 ESP32 Platform

一个轻量级的简易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磁编码器
  • 三相逆变器/驱动板
  • 电源(根据电机规格选择)

🔧 使用指南

1. 初始化与校准

首次使用时需要进行电角度补偿校准:

// 在foc_init()函数中,使用注释的部分进行校准
void foc_init() {
    // 1. 仅启用注释的校准代码
    // 2. 运行程序
    // 3. 手动旋转电机一整圈
    // 4. 电机会停顿极对数次
    // 5. 记录停顿时最小的角度值,即为补偿角
    // 6. 将补偿角填入配置中
}

2. API接口

核心FOC函数

// 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();

3. 控制模式示例

角度控制模式

// 设置为角度控制模式
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();

🔍 硬件连接

AS5600连接

  • VCC: 3.3V
  • GND: GND
  • SDA: GPIO21 (默认,可配置)
  • SCL: GPIO22 (默认,可配置)

三相PWM连接

  • U相: GPIO32, GPIO33
  • V相: GPIO25, GPIO26
  • W相: GPIO27, GPIO14

注意:具体引脚配置请根据实际硬件在sdkconfig中调整。

📊 性能参数

参数 说明
控制频率 10-20 kHz 可配置的PWM频率
角度分辨率 0.0879° AS5600提供12位分辨率
速度范围 0-5000 RPM 取决于电机和负载
控制精度 ±1° 角度控制模式
响应时间 < 100ms 系统响应时间

🔄 移植指南

本驱动设计为易于移植到其他平台:

  1. 硬件抽象层:所有硬件相关代码都在sp_*文件中
  2. 配置接口:通过头文件宏定义进行配置
  3. 模块化设计:FOC核心算法与硬件驱动分离

移植步骤:

  1. 实现硬件驱动(I2C、PWM、定时器等)
  2. 调整引脚配置和时序参数
  3. 验证传感器读数准确性
  4. 测试电机基本转动
  5. 优化控制参数

🐛 故障排除

常见问题

  1. 电机不转动

    • 检查电源连接
    • 验证PWM输出信号
    • 检查AS5600读数是否正常
  2. 角度读数不稳定

    • 检查I2C连接是否稳定
    • 确保磁铁与AS5600距离合适(1-3mm)
    • 检查电源噪声
  3. 编译错误

    • 确认ESP-IDF版本兼容性
    • 检查CMake配置
    • 验证所有依赖库已安装

调试技巧

  • 使用foc_hd_test()函数进行硬件测试
  • 通过串口监视器查看调试信息
  • 使用示波器检查PWM波形

📄 许可证

本项目采用 GNU General Public License v3.0 许可证 - 查看 LICENSE 文件了解详情。


提示:使用前请仔细阅读硬件规格和安全注意事项,确保正确连接和操作。

安全警告:电机驱动涉及高电压和大电流,操作时请注意安全!

About

一个轻量级的简易FOC驱动,支持定角度和定速度两种控制模式。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published