深度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 通道。

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS多话题同步回调

文章目录 ExactTime PolicyApproximateTime Policy参考ExactTime Policy 这种方法要求输入的消息的时间戳必须完全相同才调用回调函数。 #include <message_filters/subscriber.h> #include <message_filters/synchronizer.h> #include <message_filters/sync…

qt文件操作

对话框练习 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮 void Widget::on_ztbtn_clicked() {//调用QFontDia…

在Spring Boot中使用Redis 5的Stream

引言 Redis是一个开源的高性能键值对存储系统&#xff0c;而Redis 5引入了新的数据结构——Stream&#xff08;流&#xff09;。Stream可以用于高效地保存和处理事件流数据。在本文中&#xff0c;我们将学习如何在Spring Boot应用程序中使用Redis 5的Stream功能。 步骤 步骤…

01_Flutter之下拉刷新和上拉加载

一.创建页面 由于我们需要请求网络&#xff0c;并将返回的数据渲染到页面上&#xff0c;所以需要继承StatefulWidget&#xff0c;本文涉及的接口&#xff0c;取自鸿神的玩android开放API class ProjectListPage extends StatefulWidget {overrideState<StatefulWidget>…

AMEYA360:士兰微推出600A/1200V IGBT汽车驱动模块,提升充电速度与行驶动力

随着人们对环保意识的提高和汽车驾驶体验感的不断追求&#xff0c;新能源汽车的市场需求逐渐增大&#xff0c;已然成为汽车发展的大趋势&#xff0c;但是新能源汽车充电时间长、续航里程短等问题仍然是汽车厂商和车主们的痛点。因此&#xff0c;需要更好的汽车驱动产品来实现“…

Java和Kotlin的Field在继承中的不同表现

Kotlin是一个宣称与Java兼容性较好的语言&#xff0c;但在接触后发现一些技术还是有“概念上”的冲突&#xff0c;本文就记录下两者对象的Field&#xff08;中文的说法有字段、域、属性、成员变量&#xff0c;下文若出现这些表达&#xff0c;指的都是这个东西&#xff09;在继承…

js摄像头动态检测

利用摄像头每一秒截图一次图像。然后计算2次图像之间的相似度。 如果相似度低于98%就会报警。 var video document.getElementsByClassName(inputvideo)[0]; video.innerHTML "<video classinput_video idcamera autoplay width640px height380px></video>…

工厂模式 与 抽象工厂模式 的区别

工厂模式&#xff1a; // 抽象产品接口 interface Product {void showInfo(); }// 具体产品A class ConcreteProductA implements Product {Overridepublic void showInfo() {System.out.println("This is Product A");} }// 具体产品B class ConcreteProductB impl…

windows10使用wheel安装tensorflow2.13.0/2.10.0

安装过程 安装虚拟环境安装virtualenv安装满足要求的python版本使用virtualenv创建指定python版本的虚拟环境 安装tensorflow2.13.0安装tensorflow-docs直接下载使用wheel下载 在VSCode编辑器中使用虚拟环境下的包 安装虚拟环境 这里笔者使用的是 virtualenv进行虚拟环境搭建的…

大数据平台之元数据

目录 一、表、字段元数据 二、作业元数据 一、表、字段元数据 表、字段元数据主要可以分为原始信息和附加信息两大类&#xff0c;原始信息包含&#xff1a;表名、表备注、字段名、字段类型、字段备注、表的大小、分区信息等&#xff0c;附加信息可以是跟表、字段相关的包含一…

VIRTIO-BLK代码分析(2)VIRTIO驱动分析

QEMU模拟的VIRTIO设备同时也是PCIE设备&#xff0c;Guest中VIRTIO PCIE驱动与之匹配&#xff0c;根据设备驱动模型&#xff0c;最终触发probe函数virtio_pci_probe()。该probe函数使能PCIE设备&#xff0c;并注册VIRTIO设备&#xff0c;并与VIRTIO-BLK匹配&#xff0c;触发VIRT…

通俗易懂讲解大模型:Tokenizer

Tokenizer Tokenizer 是 NLP pipeline 的核心组件之一。Tokenizer 的目标是&#xff1a;将文本转换为模型可以处理的数据。模型只能处理数字&#xff0c;因此 Tokenizer 需要将文本输入转换为数字输入。 通常而言有三种类型的 Tokenizer &#xff1a;Word-based Tokenizer、Cha…

【2594. 修车的最少时间】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个整数数组 ranks &#xff0c;表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你一个整数 cars &#xff0c;表示…

2023国赛数学建模A题思路分析 - 定日镜场的优化设计

# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

校园二手物品交易系统微信小程序设计

系统简介 本网最大的特点就功能全面&#xff0c;结构简单&#xff0c;角色功能明确。其不同角色实现以下基本功能。 服务端 后台首页&#xff1a;可以直接跳转到后台首页。 用户信息管理&#xff1a;管理所有申请通过的用户。 商品信息管理&#xff1a;管理校园二手物品中…

华为云使用脚本初始化Linux数据盘

初始化新挂载的磁盘 登录云服务器&#xff0c;执行以下命令获取自动初始化磁盘脚本。 wget https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/datadisk/LinuxVMDataDiskAutoInitialize.sh 说明&#xff1a; 若回显异常&#xff0c;请检查云服务器是否绑定弹性公…

029:vue项目,勾选后今天不再弹窗提示

第029个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

豪华卧室怎么装?快来看看吧

一阵轻松的叹息&#xff0c;由柔软的质地、新鲜的空气和扎实的设计带来。只需稍微借鉴这些豪华卧室的创意&#xff0c;这一切都可以成为你的。 用华丽的四柱床提升 四柱床的柱子为床框增添了另一种维度&#xff0c;同时保持通风。长长的线条提高了房间的高度&#xff0c;吸引…

MySQL的故事——MySQL架构与历史

MySQL架构与历史 文章目录 MySQL架构与历史一、MySQL逻辑架构二、并发控制三、事务四、多版本并发控制(MVCC) 一、MySQL逻辑架构 第一层&#xff1a;连接处理、授权认证、安全等等 第二层&#xff1a;查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…