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

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

3天内不再提示

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

科技观察员 来源:circuitdigest 作者:Ashish Choudhary 2022-08-12 15:21 次阅读

在本教程中,我们将讨论ESP32 开发板的 PWM(脉冲宽度调制)引脚。ESP32 开发板的所有 GPIO 引脚(Power、GND、Tx、Rx 和 EN 除外)均可用于获取 PWM 信号。作为ESP32 PWM 示例,我们将构建一个简单的电路,根据 PWM 信号改变 LED 亮度。

所需组件

ESP32

引领

330Ω电阻

10k 锅

面包板

PWM 生成

在解释 ESP32 上的 PWM 生成之前,让我们讨论一些与 PWM 相关的术语。

TON(开启时间):信号为高电平的持续时间。

TOFF(关闭时间):信号为低电平的持续时间。

周期:它是 PWM 信号的开启时间和关闭时间的总和。

TotalPeriod = T ON + T OFF

占空比:在 PWM 信号周期内信号为高电平的时间百分比。

占空比 = T ON /T总计* 100

例如,如果一个总周期为 10ms 的脉冲保持 ON(高)5ms。然后,占空比将是:

占空比 = 5/10 * 100 = 50% 占空比

poYBAGL1_vKAZrAIAAAw58nUBWk412.png

PWM的频率:PWM 信号的频率决定了 PWM 完成一个周期的速度。一个周期是完成一个 PWM 信号的 ON 和 OFF,如上图所示。

ESP32 上的 PWM 生成

Arduino和 NodeMCU 中,我们使用模拟写入()函数将 0 到 254 之间的值“写入”到 LED 引脚。但是ESP32开发板不支持analogWrite()函数。所以我们将使用另一个函数而不是analogWrite(),即ledcWrite()函数。ledcWrite ()与analogWrite()非常相似。它还需要两个参数:我们想要“写入”PWM 值的 PWM 通道和我们想要写入所选通道的 PWM 值。ESP32 有 16 个 PWM 通道,您可以使用任何 GPIO 来生成 PWM 输出。ESP32 提供了三个函数来分配一个 PWM 通道到一个引脚,以及配置 PWM 信号的分辨率、频率和占空比。这些功能是:

ledcAttachPin(gpio, channel)

ledcSetup(channel, frequency, resolution)

ledcWrite(channel, dutycycle)

电路原理

ESP32 PWM的电路图如下所示。

poYBAGL1_u2ATfKJAAFu9_BvnC8196.png

该电路包含一个 LED、一个电阻器和一个 10K 电位器。LED 的负极通过一个 330 Ω 的电阻连接到 ESP32 的 GND。您可以使用 230 Ω 和 500 Ω 之间的任何电阻值。将 LED 正极引脚连接到 GPIO 16,将 Pot 的信号引脚连接到 ESP32 的 ADC1 (VP) 引脚。

ESP32 PWM 代码说明

完整的代码在页面末尾给出。

此代码不需要任何库,因此通过定义引脚开始您的代码,LED 连接到。就我而言,我使用 GPIO 16 连接 LED。

常量 int ledPin = 16; // 16对应GPIO16

之后,在下一行设置 PWM 信号属性。我将 PWM 频率设置为 9000,分辨率设置为 10,您可以更改它以生成不同的 PWM 信号。ESP32 板支持从 1 位到 16 位的 PWM 分辨率。您还需要选择一个 PWM 通道。ESP32 共有 16 个(0 到 15)个 PWM 通道。

常量 int 频率 = 9000;
常量 int ledChannel = 0;
常量 int 分辨率 = 10;

现在在void setup()函数中,使用ledcSetup()函数使用您之前设置的属性配置 LED PWM。在下一行中,定义连接 LED 的 GPIO 引脚。ledcAttachPin()函数用于定义 GPIO 引脚和生成信号的通道。在我的例子中,我使用了 GPIO 16 的 ledPin 和对应于通道 0 的 ledChannel。

无效设置(){
  序列号.开始(9600);
  ledcSetup(ledChannel, 频率, 分辨率);
  ledcAttachPin(ledPin, ledChannel);
}

在void 循环中,读取连接 Pot 的模拟引脚并将读数存储在名为'dutyCycle'的变量中。LED 亮度会随着电位器的旋转而增加或减少。ledcWrite()与analogWrite()非常相似。

无效循环(){
   dutyCycle = 模拟读取(A0);
   ledcWrite(ledChannel, dutyCycle);
   延迟(15);
  }

测试 ESP32 PWM 信号

要测试 ESP32 PWM 信号,请按照电路图连接 LED 和电位器,然后将代码上传到您的 ESP32。确保您选择了正确的板和 COM 端口。现在旋转电位器来增加或减少 LED 亮度。

poYBAGL1_uiASq7nAAS5d-ZcL-E172.png

常量 int ledPin = 16; // 16对应GPIO16
uint16_t 占空比;
// 设置 PWM 属性
常量 int 频率 = 15000;
常量 int ledChannel = 0;
常量 int 分辨率 = 13;
无效设置(){
序列号.开始(9600);
// 配置 LED PWM 功能
ledcSetup(ledChannel, 频率, 分辨率);
// 将通道附加到要控制的 GPIO
ledcAttachPin(ledPin, ledChannel);
}
无效循环(){
dutyCycle = 模拟读取(A0);
Serial.print(dutyCycle);
// 使用 PWM 改变 LED 亮度
ledcWrite(ledChannel, dutyCycle);
延迟(15);
}

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

    关注

    242

    文章

    23272

    浏览量

    660788
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5186

    浏览量

    213898
  • ESP32
    +关注

    关注

    18

    文章

    971

    浏览量

    17243
收藏 人收藏

    评论

    相关推荐

    PWMLED调光中的应用

    模拟信号的数字表示方法,它通过周期性地打开和关闭信号来模拟一个连续的信号。在LED调光中,PWM通过控制
    的头像 发表于 11-28 16:33 724次阅读

    PWM调制技术在LED亮度调节中的使用

    调制技术因其在调节精度、响应速度和能耗方面的优势,成为了LED亮度调节的首选技术之一。 PWM调制技术原理 PWM调制技术是一种通过改变脉冲宽度来
    的头像 发表于 11-18 15:28 942次阅读

    使用ESP32开发板点亮LED

    ,非常适合需要Wi-Fi和蓝牙连接功能的物联网(IoT)项目。ESP32拥有两个CPU核心,支持多种外设接口,包括GPIO(通用输入输出)、UART、SPI、I2C、PWM等,非常适合进行各种硬件控制和通信任务。
    的头像 发表于 10-05 11:44 2128次阅读

    ESP32控制器系列指南

    2024-05-29 Don Wilcher [微控制器] ESP32控制器已成为物联网 (IoT) 和嵌入式控制器领域的核心部分。 ESP32
    的头像 发表于 10-02 18:21 2697次阅读
    <b class='flag-5'>ESP32</b> 微<b class='flag-5'>控制</b>器系列指南

    ESP32控制舵机的正反转原理是什么

    舵机是一种将电信号转换为机械运动的设备,广泛应用于机器人、无人机、汽车等领域。ESP32是一款功能强大的微控制器,具有丰富的外设接口和高性能的处理能力,可以方便地控制舵机实现正反转等动
    的头像 发表于 08-20 09:13 1089次阅读

    esp32esp8266代码共用吗

    本文将介绍ESP32ESP8266两款流行的微控制器在代码共用性方面的可能性与差异性。 一、引言 随着物联网技术的飞速发展,越来越多的智能设备开始进入我们的生活。其中,ESP32
    的头像 发表于 08-19 18:23 1149次阅读

    esp8266和esp32区别是什么

    以下是关于ESP8266和ESP32的主要区别: 处理器和架构 : ESP8266 :使用一个Tensilica L106 80MHz的处理器,属于Xtensa架构。 ESP32 :使
    的头像 发表于 08-19 18:16 5382次阅读

    esp32用什么软件编程

    ESP32是一款由乐鑫(Espressif)推出的低功耗、高性能的Wi-Fi和蓝牙双模微控制器,广泛应用于物联网、智能家居、智能穿戴等领域。要对ESP32进行编程,需要选择合适的编程软件和开发环境
    的头像 发表于 08-19 17:24 3506次阅读

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么区别?ESP32-WROOM-32 后缀字母代表的意思是?

    相信很多人心里都有这样的疑问,今天就教大家怎么区分它们。 32D和32U是同一个芯片ESP32-D0WD的模组,主要区别的天线模式,分别是板载和IPEX外接天线。 32E是用的升级版的芯片
    的头像 发表于 07-17 10:09 9628次阅读
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么区别?<b class='flag-5'>ESP32</b>-WROOM-32 后缀字母代表的意思是?

    ESP32能取代STM32吗?哪个更好?

    不能!首先二者不存在哪个更好的问题,因为这两个芯片使用场景各不相同,在嵌入式系统领域,ESP32和STM32都是常见的单片机系列,它们各自具有一定的优势和适用场景。本文主要探讨ESP32是否能够取代
    的头像 发表于 07-06 08:04 1.2w次阅读
    <b class='flag-5'>ESP32</b>能取代STM32吗?哪个更好?

    使用ESP32的mcpwm模块输出PWM信号,如何让PWM管脚输出低电平?

    我使用ESP32的mcpwm模块可以输出PWM信号,但发现停止PWM输出后,其对应的管脚一直保持为高电平,我想让这个管脚在停止PWM输出后,
    发表于 06-25 07:00

    ESP32如何设置PWM的脉冲数目?

    我想使用ESP32控制步进电机,想通过控制PWM的频率和脉冲的个数进行步进电机的开环控制,请问如何设置P
    发表于 06-13 08:31

    ESP32如何精确控制LED Control功能PWM的脉冲数?

    想用ESP32驱动步进电机(开环,无编码器),需要精确控制PWM的脉冲个数,看了下datasheet是有高/低速时钟计数器达到最大计数值触发中断的功能,但是看了下LEDC的API
    发表于 06-13 06:04

    PWM亮度控制的白色LED驱动器TPS6116xA数据表

    电子发烧友网站提供《带PWM亮度控制的白色LED驱动器TPS6116xA数据表.pdf》资料免费下载
    发表于 03-13 09:34 0次下载
    带<b class='flag-5'>PWM</b><b class='flag-5'>亮度</b><b class='flag-5'>控制</b>的白色<b class='flag-5'>LED</b>驱动器TPS6116xA数据表

    esp32外置flash的大小

    ESP32是一款功能强大的微控制器,广泛应用于物联网和嵌入式设备领域。虽然ESP32内置了一定的闪存空间,但有时候我们可能需要更大的储存空间来存储更多的数据或者程序。因此,一些厂商推出了外置
    的头像 发表于 01-09 11:24 4121次阅读