深度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,一经查实,立即删除!

相关文章

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…

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

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

js摄像头动态检测

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

windows10使用wheel安装tensorflow2.13.0/2.10.0

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

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…

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;查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…

Matlab图像处理-

有些时候&#xff0c;直接利用图像的灰度直方图选择阈值不是非常直观&#xff0c;这时&#xff0c;可以利用图像三个通道的直方图来进行图像分割&#xff0c;操作步骤如上文所示&#xff0c;下图为原始图片。 下图为三通道直方图。 下图将三个通道的直方图会绘制到一个图表上&a…

【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进…

c高级 day1

使用cut截取出Ubuntu用户的家目录&#xff0c;要求&#xff1a;不能使用":"作为分割 xmind&#xff1a;

从智能手机到智能机器人:小米品牌的高端化之路

原创 | 文 BFT机器人 前言 在前阵子落幕的2023世界机器人大会“合作之夜”上&#xff0c;北京经济技术开发区管委会完成了与世界机器人合作组织、小米机器人等16个重点项目签约&#xff0c;推动机器人创新链和产业链融合&#xff0c;其中小米的投资额达到20亿&#xff01; 据了…

分布式调度Elastic-job

分布式调度Elastic-job 1. 概述 1.1什么是任务调度 我们可以思考⼀下下⾯业务场景的解决⽅案: 某电商平台需要每天上午10点&#xff0c;下午3点&#xff0c;晚上8点发放⼀批优惠券某银⾏系统需要在信⽤卡到期还款⽇的前三天进⾏短信提醒某财务系统需要在每天凌晨0:10分结算前…

PostMan传时间参数一次性发送多次请求

文章目录 1. Date类型的参数&#xff0c; "date": "2023-09-07 22:01:51"格式会报错2. 在Pre-request Script预置时间3. 使用postman一次性发送多次请求 1. Date类型的参数&#xff0c; “date”: "2023-09-07 22:01:51"格式会报错 2. 在Pre-req…

算法 数据结构 斐波那契数列 递归实现斐波那契数列 斐波那契递归的优化 斐波那契数列递归求解 多路递归实现 斐波那契算法系列 数据结构(十一)

1. 什么是斐波那契数列&#xff1a; 之前的例子是每个递归函数只包含一个自身的调用&#xff0c;这称之为 single recursion 如果每个递归函数例包含多个自身调用&#xff0c;称之为 multi recursion 递推关系 下面的表格列出了数列的前几项 F0F1F2F3F4F5F6F7F8F9F10F11F12…