SimpleFOC之ESP32(三)—— 闭环控制

本文详细介绍使用ESP32进行电机控制的方法,包括硬件连接指南、I2C及SPI接口编程示例,并提供了不同控制模式的实现步骤。




SimpleFOC教程目录:请点击

一、硬件介绍

1.1、原理图

在这里插入图片描述

1.2、ESP32drive方案

1.2.1、准备清单

序号名称数量
1USB转串口1
2ESP32drive1
3带编码器电机1
412V电源1
5杜邦线若干

在这里插入图片描述

ESP32drive 购买链接:https://item.taobao.com/item.htm?ft=t&id=662591519566,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

1.2.2、硬件连接

在这里插入图片描述

1.3、SimpleFOCShield方案

1.3.1、准备清单

序号名称数量
1ESP32-DevKitC1
2simpleFOCShield V2.0.31
3云台电机1
4USB线1
512V电源1
6杜邦线若干

在这里插入图片描述

ESP32drive 购买链接:https://item.taobao.com/item.htm?ft=t&id=662591519566,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

1.3.2、硬件连接

ESP32-DevKitCV2.0.3
255
269
276
338
3V33V3
GNDGND

如果是AS5600编码器,如下

ESP32-DevKitCAS5600电机
22SCL
21SDA
3V3VCC
GNDGND

如果是AS5047编码器,如下

ESP32-DevKitCAS5047P电机
23MOSI
19MISO
18SCLK
5SS
GNDGND
3V3VCC

ESP32最小系统板和驱动板共地
在这里插入图片描述

二、代码演示 — I2C接口

2.1、I2C接口说明

2.1.1、ESP32有GPIO交换矩阵(IO_MUX),所以I2C接口可以配置为任意IO口;
在这里插入图片描述
2.1.2、在ESP提供的驱动中,I2C接口默认为GPIO21和22,如需修改引脚可参考图中;
在这里插入图片描述
2.1.3、ESP32有2个I2C接口,驱动中已经声明了两个I2C的结构体:Wire和Wire1
在这里插入图片描述

在这里插入图片描述

2.2、速度模式

2.2.1、打开示例
这个示例为角度模式,但是只需修改下控制模式就可以更改为速度模式,
在这里插入图片描述

2.2.2、修改程序
示例为只读文件,修改需先另存为,
在这里插入图片描述
在这里插入图片描述

2.2.3、验证上传
上传完毕后,按复位键重启。
在这里插入图片描述

2.2.4、串口发送指令
输入T20,T为指令,20表示20rad/s,
在这里插入图片描述

2.2.5、观察电机运行

2.3、位置模式

修改控制模式为角度模式,根据实际情况调整下PID,其它与速度模式一样,这个代码本来就是角度模式的示例;
在这里插入图片描述

三、代码演示 — SPI接口

3.1、SPI接口说明

翻遍代码,阅尽人间繁华,终于找到了对SPI接口引脚的定义,
在这里插入图片描述

3.2、修改示例

这个示例本来就是SPI接口的,把第1个修改点改回去就行,其它不用动,
在这里插入图片描述
其它操作参考上面的I2C接口的修改,如果是直接在上面I2C的基础上修改,注意根据电机类型的差异修改对应的参数,比如:极对数、voltage_sensor_align和PID等。


(完)



请继续阅读相关文章:
SimpleFOC之ESP32(一)—— 搭建开发环境
SimpleFOC之ESP32(二)—— 开环控制
SimpleFOC之ESP32(三)—— 闭环控制
SimpleFOC之ESP32(四)—— 电流闭环控制Inline
SimpleFOC之ESP32(五)—— 电流闭环控制Lowside
SimpleFOC之ESP32(六)—— 双电机控制
SimpleFOC之ESP32(七)—— 霍尔电机
SimpleFOC之ESP32(八)—— ABZ编码器电机
SimpleFOC之ESP32(九)—— WIFI、UDP和TCP
SimpleFOC之ESP32(十)—— ESP-NOW和力矩反馈

<think>好的,我现在需要帮用户找到在ESP32上使用SimpleFOC实现速度闭环控制的示例代码。根据用户提供的引用内容,尤其是引用[3]和引用[4],我应该先查看这些引用是否提到了相关的代码示例。 首先,引用[3]提到电流闭环控制Lowside,并区分了电流采样模式,可能涉及到闭环控制的底层设置。而引用[4]明确提到有Arduino FOC的速度闭环和位置闭环控制的代码案例。用户需要的是ESP32上的示例,所以需要确认这些案例是否适用于ESP32平台。 接下来,我需要检查用户提供的引用内容中的具体信息。引用[4]中的案例可能已经包含在SimpleFOC的官方文档或示例中,但用户可能希望有直接的代码参考。根据引用[1]和[3],可能需要调整接口(如SPI或I2C)以及电机参数,如极对数、电压对齐和PID设置。 另外,用户提到的闭环控制可能需要结合速度环的PID参数配置,参考引用[3]中的电流闭环部分,但速度闭环可能更侧重于速度PID的调整。需要确保用户正确初始化电机和传感器,并正确配置速度环。 最后,我应该总结出步骤,指导用户如何从现有示例修改得到速度闭环控制的代码,并指出参考的引用来源,特别是引用[4]中的示例。同时,生成相关问题帮助用户深入理解。</think>关于在ESP32上实现SimpleFOC速度闭环控制的示例代码,根据引用内容建议如下步骤: 1. **基础代码框架** 可参考引用[4]中提到的Arduino FOC速度闭环控制案例,需将硬件驱动部分调整为ESP32专用接口。例如: ```cpp // 初始化电机与传感器 BLDCMotor motor = BLDCMotor(7); // 极对数设置为7 BLDCDriver3PWM driver = BLDCDriver3PWM(IN1_PIN, IN2_PIN, IN3_PIN); Encoder encoder = Encoder(ENC_A, ENC_B, 1024); ``` 2. **速度环配置** 需在闭环控制代码中加入速度PID调节器: ```cpp motor.PID_velocity.P = 0.2; // 比例系数 motor.PID_velocity.I = 20; // 积分系数 motor.voltage_limit = 12; // 电压限制 motor.controller = MotionControlType::velocity; // 设置为速度控制模式 ``` 3. **ESP32接口适配** 根据引用[1]和引用[3],若使用SPI/I2C接口编码器,需调整引脚定义并校准传感器对齐参数: ```cpp encoder.init(&SPI, CS_PIN); // SPI接口编码器初始化 motor.voltage_sensor_align = 3; // 对齐电压值根据电机特性调整 ``` 完整示例代码可参考引用[4]中"_SimpleFOCESP32)—— 闭环控制_"的工程模板,将控制模式从位置环改为速度环,并重新整定PID参数[^1][^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值