0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在ESP32中使用PWM

CHANBAEK 来源:小小小向日葵 作者:骑驴去相亲 2023-07-13 11:14 次阅读

关于ESP32PWM的简要说明

ESP32 SoC 满载了非常有用的外设,PWM 就是其中之一。是的。ESP32 的芯片中有一个专用的 PWM 硬件模块。脉宽调制或简称PWM是一种成熟且广泛使用的供电技术。

您可以使用 ESP32 的 PWM 来驱动 LED电机(普通直流电机和无刷电机)和智能灯。ESP32 中的 PWM 控制器由两个主要子模块组成:LED 控制或 LEDC 外设和电机控制脉宽调制器或 MCPWM 外设。

尽管我们将 ESP32 中的 PWM 演示限制为衰落 LED,但最好了解一下 ESP32 中带有输入捕获模块的电机控制 PWM (MCPWM) 模块。

如果您曾经使用过无刷直流 (BLDC) 电机,您就会意识到感测转子位置(使用霍尔效应传感器)对于精确速度控制的重要性。

ESP32发光二极管(LEDC)

ESP32 的 LEDC 外设由 16 个能够生成独立波形的 PWM 通道组成,主要用于 RGB LED 控制,但也可用于其他用途。

关于 ESP32 中的 LED PWM 控制器,您应该注意几个有趣的点。

16 个独立的 PWM 通道,分为两组,每组 8 个通道。

1 位和 16 位之间的可编程分辨率。

PWM波的频率取决于PWM的分辨率。

自动增加/减少占空比,无需处理器干预。

配置ESP32的PWM通道

你还记得Arduino编程中的'analogWrite()'函数吗?它是负责在Arduino UNO(和其他“Arduino”板)中生成PWM的功能。

由于 ESP32 的 LED PWM 中的几乎所有内容都是用户可配置的(通道、分辨率和频率),因此我们将使用一组不同的(专用)函数来配置 ESP32 中的 PWM,而不是使用“analogWrite()”功能。

以下是驱动程序公开的所有 LEDC API 的列表。这些函数是为 ESP32 的 Arduino IDE 端口编写的。

ledcSetup(频道、频率、resolution_bits);

ledcAttachPin(pin, channel);

ledcWrite(channel, Occupational cycle);

ledcRead(channel);

ledcWriteTone(通道,频率);

ledcWriteNote(channel, note, octave);

ledcReadFreq(channel);

ledcDetachPin(pin);

在 8 个函数中,我们将专注于前三个,因为它们对于生成 PWM 更有用(也是最低要求)。

在 ESP32 中配置 PWM 通道时需要记住的几个要点:

由于有 16 个 PWM 通道,“channel”参数采用 0 到 15 之间的任何值。

接下来是PWM信号的频率。您可以根据需要设置频率,例如 1 KHz、5 KHz、8 KHz 和 10 KHz。

PWM 的分辨率也是可配置的,ESP32 PWM 可以编程在 1 位到 16 位分辨率之间的任何位置。

PWM频率和分辨率成反比,并且取决于时钟源。因此,在选择频率和分辨率值时要小心。

最后,为PWM输出分配一个GPIO引脚。您可以分配任何 GPIO 引脚,但在分配时要小心(不要使用已经使用的 GPIO 引脚,如 UART、SPI 等)。

下表显示了几种常用的PWM频率和分辨率。

图片

在ESP32中使用PWM的LED衰落

随着 ESP32 中 PWM 的所有必要信息的发布,我们现在可以继续实施我们的第一个项目 ESP32 PWM 使 LED 褪色。这是一个非常简单的项目,连接到 ESP32 GPIO 引脚的 LED 的亮度会逐渐反复增加和减少。[面向初学者的 ESP32 项目]

这个项目更多的是了解 LEDC 的功能:ledcSetup、ledcAttachPin 和 ledcWrite,以及如何在 ESP32 中生成 PWM,而不是衰落的 LED 本身。

所需组件

ESP32 开发套件开发板

3 个 5 毫米发光二极管

220Ω电阻

3 x 5KΩ 电位计

面包板

连接线

微型 USB 连接线

电路图

下图显示了使用 ESP32 PWM 控制器淡入 LED 淡入淡出的连接。

图片

法典

您可以使用任何 GPIO 引脚来输出 PWM 信号。所以,我正在使用GPIO 16,这也是UART2 RX引脚。接下来,我们必须使用“ledcSetup”功能设置LEDC通道。第一个参数是通道。0 到 15 之间的任何值都可以作为通道给出。

下一个参数是频率。您可以提供任何频率,但为了方便起见,我将频率设置5KHz。此外,您必须设置PWM的分辨率。此值必须是介于1和 16之间的数字。我选择了10位分辨率。

有关其余设置,请参阅以下代码,其中我注释了重要行。

图片

注意:您可以将多个 GPIO 引脚连接到同一个LEDC PWM 通道。如果这样做,所有 GPIO 引脚将共享通道的属性(分辨率和频率)。

ADC的ESP32脉宽调制器

ESP32 中 PWM 的一个重要特点是所有16个通道都可以独立配置,即每个通道都可以有自己的分辨率和频率。为了演示这一点,我们利用ADC外设,通过转动电位计独立调整三个不同LEDC PWM通道的占空比。

三个 5KΩ 电位器连接到 ESP32 的三个 ADC 输入引脚。根据ADC的输出,我们将设置三个PWM通道的占空比,这些通道配置了不同的参数。

为了便于理解,我将三个 LED:红色、绿色和蓝色连接到三个 GPIO 引脚。这三个GPIO引脚连接到三个不同的LEDC PWM通道,每个通道都使用自己的频率和分辨率进行初始化。

图片

要记住的另一个重要点是 ESP32 的 ADC 分辨率为 12 位。因此,我们必须仔细地将其映射到PWM分辨率,以获得全方位的控制。

电路图

下图显示了使用ADC(电位计)调整PWM通道占空比的连接。

图片

法典

图片

结论

有关 ESP32 PWM 外设的完整教程。您学习了如何在 ESP32 中使用 PWM 来淡入 LED 的淡入淡出,如何配置 PWM 通道、设置频率和分辨率。您还学习了如何独立配置 ESP32 中的 PWM 通道。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22449

    浏览量

    645878
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171192
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4900

    浏览量

    209906
  • soc
    soc
    +关注

    关注

    38

    文章

    3745

    浏览量

    215685
  • ESP32
    +关注

    关注

    13

    文章

    896

    浏览量

    15814
收藏 人收藏

    评论

    相关推荐

    利用ESP32 PWM信号控制LED的亮度

    在本教程中,我们将讨论ESP32 开发板的 PWM(脉冲宽度调制)引脚。ESP32 开发板的所有 GPIO 引脚(Power、GND、Tx、Rx 和 EN 除外)均可用于获取 PWM
    的头像 发表于 08-12 15:21 1.4w次阅读
    利用<b class='flag-5'>ESP32</b> <b class='flag-5'>PWM</b>信号控制LED的亮度

    什么是PWM?如何在esp32初始化配置?

    什么是PWM?如何在esp32初始化配置?
    发表于 02-17 07:19

    何在Arduino去搭建ESP32

    何在Arduino去搭建ESP32呢?有哪些需要注意的地方?
    发表于 02-21 06:53

    ESP32-S3哪些GPIO可以连接到那些PWM输出?

    我是 ESP32 的新手,想使用 ESP-IDF 在 ESP32-S3 中使用 LED_PWM 单元。我已经在此链接上阅读了有关它的文档。但
    发表于 03-01 08:18

    何在ESP-IDF的组件中使用传感器服务器和客户端模型?如何使用esp32 ble Mesh协议构建传感器网络?

    我想通过将传感器连接到节点之一来将传感器数据泛洪到BLE Mesh网络的所有设备。我无法理解如何在ESP-IDF的组件中使用传感器服务器和客户端模型,以及如何使用
    发表于 03-09 06:41

    何在Windows 10上启动/设置ESP8266/ESP32 RTOS环境?

    我在 Arduino IDE 上有一些关于 ESP8266/ESP32 的经验。 请告诉我,如何在 Windows 10 上启动/设置 ESP8266/
    发表于 05-19 10:33

    ESP32教程之如何在Windows系统上搭建开发环境

    本文档的主要内容详细介绍的是ESP32教程之如何在Windows系统上搭建开发环境。
    发表于 12-13 15:34 40次下载
    <b class='flag-5'>ESP32</b>教程之如<b class='flag-5'>何在</b>Windows系统上搭建开发环境

    ESP32_PWM学习总结

    esp32——PWM学习总结什么是PWMesp32中初始化配置定时器配置通道配置修改输出占空比方式使用软件改变 PWM 占空比使用硬件改变
    发表于 12-22 19:39 12次下载
    <b class='flag-5'>ESP32_PWM</b>学习总结

    esp32小车实验

    esp32小车实验了解esp32呼吸灯实验驱动直流电机认识第一个传感器使用wifi进行调参了解esp32环境搭建以及初识esp32我们所用的开发板跟视频中是一样的,所以视频中的资料都可
    发表于 01-12 17:16 18次下载
    <b class='flag-5'>esp32</b>小车实验

    何在ESP32/ESP8266上使用MicroPython

    在本教程中,我们将了解 MicroPython,它与 Python 有何不同,以及如何在 ESP32/ESP8266 上开始使用 MicroPython。此外,我们将看到一个 LED 闪烁的示例项目来演示 MicroPython
    发表于 08-19 15:09 1.2w次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP</b>8266上使用MicroPython

    使用Visuino DIY如何在M5StickC ESP32上显示时间

    电子发烧友网站提供《使用Visuino DIY如何在M5StickC ESP32上显示时间.zip》资料免费下载
    发表于 11-21 09:36 0次下载
    使用Visuino DIY如<b class='flag-5'>何在</b>M5StickC <b class='flag-5'>ESP32</b>上显示时间

    【DFRobot Beetle ESP32-C3开发板试用体验】WEBSOKET—PWM—LED

    的,用ESP32C3写一个websocket服务器,用网页来实现控制板载LED灯亮度的例子。 【实现思路】1、ESP32建立webserver。2、书写一个ajax的网页。3、配置LED灯的pwm
    的头像 发表于 11-28 14:11 1145次阅读
    【DFRobot Beetle <b class='flag-5'>ESP32</b>-C3开发板试用体验】WEBSOKET—<b class='flag-5'>PWM</b>—LED

    ESP32 PWM驱动电机

    ESP32 寻迹模块测试 寻迹模块测试 所选设备 ESP32使用PWM 示例代码 寻迹模块测试 所选设备 ’ ESP32 引脚 说明 16 需要先拉低在拉高,才能驱动电机 13
    发表于 03-20 11:37 2次下载
    <b class='flag-5'>ESP32</b> <b class='flag-5'>PWM</b>驱动电机

    如何使用ESP32的LEDC进行PWM控制?

    LEDC(LED控制器)是ESP32中的一个功能强大的PWM(脉冲宽度调制)控制器。
    发表于 05-19 11:14 1938次阅读
    如何使用<b class='flag-5'>ESP32</b>的LEDC进行<b class='flag-5'>PWM</b>控制?

    何在Arduino IDE中安装ESP32开发环境

    要在Arduino IDE中使ESP32开发板,您需要先安装相应的开发环境。以下是在Arduino IDE中安装ESP32开发环境的步骤。
    的头像 发表于 07-13 16:48 1.2w次阅读
    如<b class='flag-5'>何在</b>Arduino IDE中安装<b class='flag-5'>ESP32</b>开发环境