深度ESP32 PWM教程|如何在ESP32中使用PWM?

在本教程中,我们将学习如何在ESP32 SOC中使用PWM。在ESP32中使用PWM,您可以控制LED的亮度,设置伺服电机的位置并调整直流电动机的速度。该ESP32 PWM教程包含ESP32中配置PWM的所有重要信息。

ESP32-PWM-ADC电路

ESP32 PWM的简短说明

ESP32 SOC充满了非常有用的外围设备,PWM就是其中之一。是的。ESP32硅中有一个专用的PWM硬件块。简而言之,脉冲宽度调制或PWM是一种已建立且广泛使用的技术。

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

即使我们将限制ESP32中PWM的演示以褪色LED,但很高兴知道ESP32中的电动机控制PWM(MCPWM)块,并具有输入捕获模块。

如果您曾经使用过无刷DC(BLDC)电动机工作,您将意识到将转子位置(使用霍尔效应传感器)的位置进行精确速度控制的重要性。

ESP32 LED PWM控制器(LEDC)

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

关于LED PWM控制器,ESP32中有几个有趣的观点。

  • 16个独立的PWM通道,分为两组,每组8个通道。
  • 1位和16位之间的可编程分辨率。
  • PWM波的频率取决于PWM的分辨率。
  • 无需处理器干预即可自动增加 /减少占空比。

配置ESP32的PWM频道

您还记得Arduino编程中的“ AnalogWrite()函数?它是负责生成的功能PWM在Arduino Uno中(以及其他“ Arduino”董事会)。

Since, pretty much every thing in LED PWM of ESP32 is user configurable (channel, resolution and frequency), instead of using ‘analogWrite()’ function, we will be using a different (and dedicated) set of functions to configure PWM in ESP32.

这是驾驶员暴露的所有LEDC API的列表。这些功能是为ESP32的Arduino IDE端口编写的。

  • LEDCSETUP(频道,频率,resolution_bits);
  • LEDCATTACHPIN(PIN,频道);
  • LEDCWRITE(渠道,tuncycle);
  • LEDCREAD(频道);
  • LEDCWRITETONE(通道,频率);
  • LEDCWRITENOTE(频道,注意,八度);
  • LEDCREADFREQ(频道);
  • LEDCDETACHPIN(PIN);

在8个函数中,我们将重点放在前三个功能上,因为它们更有用(也是最小)生成PWM。

在ESP32中配置PWM频道时要记住的一些要点:

  • 由于有16个PWM频道,因此“频道”参数为0到15之间的任何值。
  • 接下来是PWM信号的频率。您可以根据自己的要求设置频率,例如1 kHz,5 kHz,8 kHz和10 kHz。
  • PWM的分辨率也是可配置的,ESP32 PWM可以在1位至16位分辨率之间编程。
  • PWM频率和分辨率成反比,并取决于时钟源。因此,选择频率和分辨率的值时要小心。
  • 最后,为PWM输出分配一个GPIO引脚。您可以分配任何GPIO PIN,但分配时要小心(请勿使用已经使用的GPIO引脚uart,SPI等)。

下表显示了一些常用的PWM频率和分辨率。

LEDC的时钟源

LEDC PWM频率

PWM分辨率

80 MHz APB_CLK

1 kHz 16位
80 MHz APB_CLK 5 kHz

14位

80 MHz APB_CLK

10 kHz 13位
8 MHz RTC8M_CLK 1 kHz

13位

8 MHz RTC8M_CLK

8 kHz 10位
1 MHz ref_tick 1 kHz

10位

在ESP32中使用PWM的LED褪色

通过布置了ESP32中PWM的所有必要信息,我们现在可以继续实施使用ESP32 PWM淡化LED的第一个项目。这是一个非常简单的项目,连接到ESP32的GPIO引脚的LED的亮度将逐渐增加并反复减少。ESP32初学者的项目这是给予的

该项目更多地是关于了解LEDC功能:LEDCSETUP,LEDCATTACHPIN和LEDCWRITE以及如何在ESP32中生成PWM比褪色LED本身。

需要组件

  • ESP32 Devkit开发委员会
  • 3 x 5mm LED
  • 220Ω电阻
  • 3 x5kΩ电位仪
  • 面包板
  • 连接电线
  • Micro-USB电缆

电路原理图

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

ESP32-PWM领导的弹性电路

代码

您可以使用任何GPIO引脚来输出PWM信号。因此,我使用的是GPIO 16,它也是UART2 RX引脚。接下来,我们必须使用“ LEDCSETUP”功能设置LEDC频道。第一个论点是频道。0到15之间的任何值都可以作为通道。

下一个参数是频率。您可以提供任何频率,但是为了方便起见,我将频率设置为5 kHz。另外,您必须设置PWM的分辨率。该值必须是1到16之间的数字。我进行了10位分辨率。

有关其余的设置,请参阅以下代码,我在其中评论了重要行。

ESP32-PWM领导-1

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

ESP32 PWM与ADC

PWM在ESP32中的重要功能之一是可以独立配置所有16个通道,即每个通道都可以具有自己的分辨率和频率。为了证明这一点,让我们利用ADC外围设备,并通过转动电位器独立调整三个不同的LEDC PWM通道的thut uti义。

三个5kΩ电位仪连接到ESP32的三个ADC输入引脚。基于ADC的输出,我们将设置三个PWM通道的thuscycle,这些PWM通道配置了不同的参数。

为了简化理解,我将三个LED连接到了三个LED:红色,绿色和蓝色与三个GPIO引脚。这三个GPIO引脚连接到三个不同的LEDC PWM通道,每个通道都以其自身的频率和分辨率初始化。

引领

GPIO PIN PWM频道 PWM频率 PWM分辨率
红色的 GPIO 16 0 5000(5 kHz)

12

绿色

GPIO 17 2 8000(8 kHz) 13
蓝色的 GPIO 4 4 10000(10 kHz)

14

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

电路原理图

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

ESP32-PWM-ADC电路

代码

ESP32-PWM-ADC

结论

ESP32 PWM外围的完整教程。您学会了如何使用ESP32中的PWM淡入LED,如何配置PWM通道,设置频率和分辨率。您还了解了如何独立配置ESP32中的PWM频道。

2个回应

  1. 谢谢您的出色教程。有很多帮助。只是有一个问题。如果我想用我的ESP32来控制四个相同的LED,是否有必要为每个LED设置不同的通道和频率,或者由于不同的GPIO引脚而已经分离了LED?我想我只需要在使用不同的设备时更改参数。正确的?

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map