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

图片

关于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 通道。

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科创工作室li

你的鼓励将是大学生的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值