ESP-IDF 配置 SimpleFOC 项目
创建 ESP-IDF 项目
使用VSCode创建第一个ESP-IDF项目_vscode串口监视器在哪-CSDN博客
idf.py create-project motor_test
进入项目文件夹
cd motor_test
设置 freertos 时钟频率
创建项目后执行 idf.py menuconfig
设置(Top) → Component config → FreeRTOS → Kernel
的 (100) configTICK_RATE_HZ
为 1000
(为了使用 arduino
组件)
添加 arduino-esp32 到 components
使用命令进行安装
idf.py add-dependency "espressif/arduino-esp32^3.0.2"
或者手动进行安装
a. 下载 arduino-esp32 ,需要注意 esp-idf 和 arduino-esp32 的版本对照关系
b. 在项目根目录创建 components
文件夹
mkdir -p components
cd components
c. 将下载的 arduino-esp32
放到components
文件夹后,执行 idf.py menuconfig
更新设置。
添加 SimpleFOC 组件
idf.py add-dependency "espressif/esp_simplefoc"
执行 idf.py menuconfig
更新设置。
修改项目为可执行 C++ 代码
a. 修改源文件为 .cpp
后缀(motor_test.cpp
),并修改源码为导出 C 接口
#include <stdio.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_simplefoc.h"
#include "driver/gpio.h"
#if CONFIG_SOC_MCPWM_SUPPORTED
#define USING_MCPWM
#endif
#define PWMA_GPIO GPIO_NUM_5
#define PWMB_GPIO GPIO_NUM_18
#define PWMC_GPIO GPIO_NUM_19
#define ENABLE_GPIO GPIO_NUM_21
BLDCMotor motor = BLDCMotor(7);
BLDCDriver3PWM driver = BLDCDriver3PWM(PWMA_GPIO, PWMB_GPIO, PWMC_GPIO, ENABLE_GPIO);
// 目标变量
float target_velocity = 0.5;
// 串口指令设置
Commander command = Commander(Serial);
void doTarget(char *cmd)
{
command.scalar(&target_velocity, cmd);
}
extern "C" void app_main(void)
{
Serial.begin(115200);
driver.voltage_power_supply = 9;
driver.init();
motor.linkDriver(&driver);
motor.voltage_limit = 9; // [V]
motor.velocity_limit = 30; // [rad/s]
// 开环控制模式设置
motor.controller = MotionControlType::velocity_openloop;
// 初始化硬件
motor.init();
// 增加 T 指令
command.add('T', doTarget, const_cast<char *>("target velocity"));
vTaskDelay(pdMS_TO_TICKS(1000));
for (;;) {
motor.move(target_velocity);
command.run();
vTaskDelay(pdMS_TO_TICKS(1));
}
}
b. 修改 CMakeLists.txt
文件中对象的源文件名称
idf_component_register(SRCS "motor_test.cpp"
INCLUDE_DIRS ".")
代码运行结果:
参考链接:
1. GitHub - yiyangc18/ESP-FOC: the foc driver on esp-idf
2. ESP SimpleFOC - - — ESP-IoT-Solution latest 文档
3. 在 ESP-IDF 中使用 Arduino 框架和Arduino的第三方库_esp-idf arduino-CSDN博客
4. Arduino-as-an-ESP-IDF-component-------—-Arduino-ESP32-latest-documentation