SimpleFOC之ESP32(一)—— 搭建开发环境




SimpleFOC教程目录:请点击

说明

    2016年春天的时候第一次接触ESP8266,用的ESP-12的模块,串口转wifi通信。本来是很简单的工作,串口发送数据完事,按照习惯看下手册,这一看把我绕晕了,它的与众不同的Xtensa内核,FreeRTOS系统和以开发应用的方式编程,简直就是单片机行业中的外星文明,再搭配超低的价格,深深的震撼了我。
  我学习了FreeRTOS,学习了Linux环境下的应用编程,并建议老板在这个芯片上多下点功夫,这个芯片以后一定会大放异彩,但是老板的兴趣显然不在这,没有了支持,我的学习也停留在,只能在ESP8266上做个点亮LED的小应用。
    2020年初因为公司业务发展学习了Python,发现ESP8266可以跑MicroPython,于是又拿出来曾经的模块演示一遍,这时候发现ESP的编程方式主要是在Arduino上,还有Lua和MicroPython这些新兴语言的支持。早期的ESP8266提供SDK API,Lubuntu安装包等,但目前的官方似乎已经不再强调这些,ESP中应用程序的开发已经完全软件化,这与STM32的keil编程方式大相径庭(当然keil的库函数和CubeMX也是软件化的一种体现)。
    硬件编程软件化是一个趋势,ESP会成为单片机多极化发展中的一极,我看好这个芯片!

一、ESP32介绍

  • ESP8266:乐鑫公司最早打出知名度的芯片,只有WIFI通信,32-bit LX6单核处理器,160MHz。
  • ESP32:有WIFI、BL4.2和BLE通信,32-bit LX6双核处理器,240MHz。
    在这里插入图片描述
  • 其它ESP32-S、ESP32-C系列为更高端的芯片,不做介绍。
  • ESP的芯片因为自带wifi和蓝牙,非专业人士设计电磁兼容有难度,所以原厂很体贴的把芯片电路设计好,以模块的方式对外出售,大大降低了普通开发者的使用难度。
  • ESP32官方提供三个系列的模块,分别是:
    • ESP32-SOLO 系列,低档,
    • ESP32-WROOM 系列,中档,
    • ESP32-WROVER 系列,高档,
    • 本系列教程以 ESP32-WROOM-32 模块为例。
      在这里插入图片描述
  • 官方不仅推出了ESP32的模块,还推出了最小系统板ESP32-DevKitC,
    在这里插入图片描述
  • 官方开发板上的USB转串口用的是CP2102,进口芯片价格偏高,市场上有很多改进版本采用国产芯片CH340,根据本人多年经验,国产同样好用。
    在这里插入图片描述

二、Arduino IDE的ESP32开发环境搭建

所谓搭建编译环境,就是在Arduino中添加ESP32的库文件和编译器,
你可以按照下面的步骤自己搭建,也可以直接下载本人搭建好的安装包。20220524
SimpleFOC v2.2.2 和 Arduino-1.8.19+STM32开发环境+ESP32开发环境:
链接: https://pan.baidu.com/s/1xT8sMJKPw3QdRs03gPPpUg
提取码: dayk

ESP32的开发环境搭建网上有很多种,为保持文章的完整性,简单说明。

2.1、安装Arduino IDE

Arduino IDE下载地址:https://www.arduino.cc/en/software
在这里插入图片描述
在这里插入图片描述
此软件免安装,下载的文件,放到不包含中文路径的文件夹中,解压后双击图标 打开软件,如果打开失败,可能是需要安装JDK,请先安装Java的JDK。

2.2、安装SimpleFOC库

  • 打开Arduino IDE,点击 工具—>管理库
    在这里插入图片描述
  • 在打开的小窗口中输入Simple FOC,选择最新版本,点击安装。
    在这里插入图片描述

2.3、安装ESP库文件

◆ 2.3.1、下载库文件

  • https://github.com/espressif,下载arduino-esp32,
    在这里插入图片描述
  • 下载压缩包,
    在这里插入图片描述

◆ 2.3.2、安装ESP32库文件

  • 解压压缩包,并修改文件夹名字为esp32,找到Arduino IDE的安装路径,在hardware文件夹下新建espressif文件夹,把解压后的esp32文件夹移动到当前位置,路径及解压后的文件如下图,
    在这里插入图片描述

◆ 2.3.3、安装ESP32编译器

  • 上面安装的是ESP32的库文件和示例,下面还要再安装编译器。网上主流的教程是:先安装python,然后运行tools文件夹下的 get.exe。(运行get.exe就是启动get.py,这是个python文件,所以必须要安装python。)
    在这里插入图片描述

  • 本人操作时等了半个小时没反应,网上搜到一篇文章比较专业:https://www.jianshu.com/p/a8f3fc166b5d,

  • 简单的说,要下载的编译器就是三个文件,分别是xtensa-esp32-elf-gcc、esptool_py、mkspiffs,安装ESP32编译器的本质就是去github下载这三个文件放入当前的tools文件夹中,
    在这里插入图片描述

  • 三个文件的下载路径如下:

    • https://github.com/espressif/crosstool-NG/releases/download/esp-2021r1/xtensa-esp32-elf-gcc8_4_0-esp-2021r1-win32.zip
    • https://github.com/espressif/arduino-esp32/releases/download/2.0.0-alpha1/esptool-3.1.0-windows.zip
    • https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-win32.zip
    • 可以直接下载,这样就不用再安装python,也不用在黑窗口里等待。
      在这里插入图片描述

2.5、安装Python

  python的安装方法也顺便说下吧,或许能用上。如果编译器已经安装好了可以不用安装python。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6、选择ESP32开发板

重新打开Arduino IDE,选择ESP32-DevKitC开发板,
在这里插入图片描述

开发板确定后其它参数默认,如下图,
串口选择需要先把开发板接入USB才能识别出来,暂时先不处理,
在这里插入图片描述
ESP32的开发环境搭建完毕。

三、点亮LED

提供两种方案:ESP32-DevKitC方案或者ESP32drive方案,二选一,都可以实现本节实验。

3.1、ESP32-DevKitC方案

◆ 3.1.1、准备清单

序号名称数量
1ESP32-DevKitC1
2USB转串口1

在这里插入图片描述
◆ 3.1.2、硬件连接
在这里插入图片描述

3.2、ESP32drive方案

◆ 3.2.1、准备清单

序号名称数量
1ESP32drive1
2USB转串口1
312V电源1

在这里插入图片描述

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

◆ 3.2.2、硬件连接
USB转串口和ESP32drive的连接,只需接三根线,
GND——GND
RXD——TXD
TXD——RXD
在这里插入图片描述

3.3、示例演示

◆ 3.3.1、打开示例
在这里插入图片描述

◆ 3.3.2、修改代码
硬件上,LED对应的引脚为GPIO2,高电平亮,低电平灭,
在这里插入图片描述

◆ 3.3.3、选择配置
如果USB转串口接入电脑后不能识别,需要先安装驱动,本节实验所用USB转串口芯片为CH340。
在这里插入图片描述

◆ 3.3.4、编译下载

  • 先验证代码,保证没有错误,
  • ESP32模块先进入下载模式:按住Boot键不松手,按下复位键并松开,进入下载模式(此时可以松开Boot键),
  • 点击“上传”,等待上传结束。
    在这里插入图片描述
    ◆ 3.3.5、观察运行
    上传完成后按复位键,LED每隔1秒闪烁。

四、系统打印

### 使用SimpleFOC库在ESP32上进行电机控制 #### 安装开发环境 为了能够在ESP32上使用SimpleFOC库,首先需要搭建合适的开发环境。可以选择ESP32-DevKitC方案或者ESP32drive方案来完成这目标[^4]。 #### 添加SimpleFOC库到项目中 旦安装好Arduino IDE并配置好了ESP32的支持,在Arduino IDE内通过`Sketch -> Include Library -> Manage Libraries...`的方式找到并安装SimpleFOC库。这步骤确保了可以访问用于驱动电机所需的各种函数和类定义。 #### 初始化电机对象 对于单个或多个电机控制系统而言,初始化过程非常重要。当涉及到双电机控制时,可以通过创建两个独立的电机实例来进行管理,并设置各自的参数如极对数、电阻等属性值。例如: ```cpp #include <SimpleFOC.h> // 创建BLDCMotor类型的对象m1, m2代表两台不同的无刷直流电动机 BLDCMotor motor1; BLDCMotor motor2; void setup() { // 设置电机的具体特性参数 motor1.init(POLE_PAIRS); motor2.init(POLE_PAIRS); } ``` 这里假设两台都是相同型号的电机,因此只给出了次初始化调用;实际应用中应根据具体情况进行调整[^1]。 #### 控制模式的选择与实现 SimpleFOC支持多种控制方式,包括但不限于速度模式、位置模式以及力矩模式。针对不同应用场景下的需求,开发者可以在程序里灵活切换这些工作状态之。比如要让台电机按照指定的角度旋转,则可采用如下代码片段展示的位置闭环控制逻辑: ```cpp float target_angle_degrees = 90.0f; // 设定的目标角度为90度 motor.setTargetAngle(target_angle_degrees * DEG_TO_RAD); while (abs(motor.angleError()) > ANGLE_ERROR_THRESHOLD){ motor.move(); delay(1); } ``` 而如果希望同时操作多台设备的话,只需要重复上述流程分别作用于各自对应的电机变量之上即可达成目的。 #### 实现电流闭环控制 除了基本的速度/位置调节之外,有时候还需要更加精细地监控及调控流经线圈内部的实际电流大小。此时就可以借助内置传感器获取实时数据反馈给控制器做进步处理。下面是段有关于此方面的示范性源码: ```cpp CurrentSensor sensor(&adc_pin); // 假设已经声明了个名为adc_pin的对象表示模拟输入端口 sensor.begin(); ... loop(){ float current_reading = sensor.read(); Serial.println(current_reading); // 将读取到的结果传递给相应的电机以便执行下步动作... } ``` 值得注意的是,这段伪代码仅作为概念性的指导材料呈现出来供参考学习之用,在真实环境中可能还需考虑更多细节因素的影响[^3]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值