17-软件脉冲宽度调制(SW_PWM)

2024-04-22 17:28
文章标签 软件 17 pwm sw 调制 宽度 脉冲

本文主要是介绍17-软件脉冲宽度调制(SW_PWM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ESP32-S3的软件脉冲宽度调制(SW_PWM)

引言

ESP32-S3 LED 控制器LEDC 主要用于控制 LED,也可产生PWM信号用于其他设备的控制。该控制器有 8 路通道,可以产生独立的波形,驱动 RGB LED 等设备。LED PWM 控制器可在无需CPU 干预的情况下自动改变占空比,实现亮度渐变。ESP32-S3 IDF 提供了两种方式改变 PWM,一种是通过软件改变 PWM 占空比,另一种是通过硬件改变PWM 占空比,本博客讲解软件脉冲宽度调制的方法

什么是脉冲宽度调制(PWM)🤔

脉冲宽度调制(PWM)是一种在数字系统中模拟模拟信号的方法。通过改变脉冲的宽度,我们可以控制电源的输出,从而控制例如LED的亮度或电机的速度。

ESP32-S3的SW_PWM 控制器

ESP32-S3 的LED PWM 控制器,简写为LEDC,用于生成控制LED 的脉冲宽度调制信号。 LED PWM 控制器具有八个独立的 PWM 生成器(即八个通道)。每个 PWM 生成器会从四个通用定时器中选择一个,以该定时器的计数值作为基准生成 PWM 信号👇。

✨LED PWM 控制器具有如下特性:

  • 八个独立的 PWM 生成器(即八个通道)
  • 四个独立定时器,可实现小数分频
  • 占空比自动渐变(即 PWM 信号占空比可逐渐增加或减小,无须处理器干预),渐变完成时产生中断
  • 输出 PWM 信号相位可调
  • 低功耗模式 (Light-sleep mode) 下可输出 PWM 信号
  • PWM 最大精度为 14 位
    在这里插入图片描述
    为了实现PWM 输出,先需要设置指定通道的PWM 参数:频率、分辨率、占空比,然后将该通道映射到指定引脚,同时LED PWM 控制器可在没有CPU 干预的情况下自动改变占空比,实现亮度以及颜色渐变。
    在这里插入图片描述

ESP32-S3的SW_PWM功能允许我们通过软件来控制PWM,而不需要额外的硬件。这意味着我们可以使用任何GPIO引脚作为PWM输出,极大地提高了系统的灵活性。

如何使用ESP32-S3的SW_PWM

要使用ESP32-S3的SW_PWM,我们需要进行以下步骤:

  1. 配置LEDC 使用的定时器为定时器 1
  2. 配置LEDC 使用的通道为通道 1
  3. 配置LEDC 定时器占空比值

✨注意,与 ESP32 不同,ESP32-S3 仅支持设置通道为低速模式

1️⃣配置 LEDC 使用的定时器为定时器1

需要注意的一点是,在首次配置LEDC 时,建议先配置定时器(调用函数 ledc_timer_config()),再配置通道(调用函数 ledc_channel_config())。这样可以确保 IO 引脚上的PWM 信号自输出开始那一刻起,其频率就是正确的。

✨要设置定时器,可调用函数ledc_timer_config()

esp_err_t ledc_timer_config(const ledc_timer_config_t *timer_conf);

函数形参描述:

形参描述
timer_conf指向配置LEDC定时器的结构体指针

函数返回值描述:

返回值描述
ESP_OK返回0,配置成功
ESP_ERR_INVALID_ARG参数错误
ESP_FAIL无法根据给定的频率和当前的duty_solution找到合适的预分频器编号

该函数使用ledc_timer_config_t类型的结构体变量传入LEDC的配置参数。

2️⃣配置 LEDC 使用的通道为通道1

✨调用ledc_channel_config()来配置通道

esp_err_t ledc_channel_config(const ledc_channel_config_t *ledc_conf);

函数形参描述:

形参描述
ledc_conf指向配置LEDC通道的结构体指针

函数返回值描述:

返回值描述
ESP_OK返回0,配置成功
ESP_ERR_INVALID_ARG参数错误

该函数使用ledc_channel_config_t类型的结构体变量传入LEDC的通道配置参数。

3️⃣配置LEDC 定时器占空比值

ledc_set_duty 函数用于设置指定LEDC通道的占空比值

esp_err_t ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty);

函数形参描述:

形参描述
speed_modeLEDC的速度模式,指定LED控制器的速度模式
channelLEDC通道的索引,指定要配置的通道
dutyLEDC通道的占空比值,即PWM信号的占空比

🔮占空比怎么计算
如果设置了某个通道的PWM分辨率为16位,那么duty的值理论上可以在0到65535之间变化(因为2^16 = 65536,包括0和65535两个极端值),如果配置占空比为 70 % 70\% 70%
d u t y = 70 % × 65535 = 0.7 × 65535 ≈ 45874 duty=70\% \times 65535 = 0.7 \times 65535 \approx 45874 duty=70%×65535=0.7×6553545874

函数返回值描述:
该函数返回ESP_OK(0)表示配置成功👌。

ledc_update_duty 函数用于更新指定LEDC通道的占空比值。
在调用 ledc_set_duty 函数设置占空比后,必须调用 ledc_update_duty 函数才能使设置生效。它的功能是更新指定通道的占空比,确保之前设置的占空比值在LEDC的通道中生效。

函数原型:

esp_err_t ledc_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel);

函数形参描述:

形参描述
speed_modeLEDC的速度模式,指定LED控制器的速度模式
channelLEDC通道的索引,指定要更新占空比的通道

函数返回值描述:
该函数返回ESP_OK(0)表示更新成功👌。

示例如何使用ESP32-S3的SW_PWM来控制一个LED的亮度:

#include "driver/ledc.h"#define LEDC_TIMER          LEDC_TIMER_1          // LEDC定时器
#define LEDC_MODE           LEDC_LOW_SPEED_MODE   // LEDC模式
#define LEDC_CH1_GPIO       (10)                 // LEDC通道1 GPIO引脚
#define LEDC_CH1_CHANNEL    LEDC_CHANNEL_1       // LEDC通道1
#define LEDC_TEST_DUTY      (4000)               // LEDC测试占空比
#define LEDC_TEST_FADE_TIME (3000)               // LEDC测试淡入淡出时间void app_main(void)
{// ①:配置LEDC使用的定时器为定时器1ledc_timer_config_t ledc_timer = {.duty_resolution = LEDC_TIMER_13_BIT, // PWM占空比分辨率.freq_hz = 5000,                      // PWM信号频率.speed_mode = LEDC_MODE,              // 定时器模式.timer_num = LEDC_TIMER               // 定时器索引};// 使用之前准备好的配置设置定时器ledc_timer_config(&ledc_timer);// ②:配置LEDC使用的通道为通道1ledc_channel_config_t ledc_channel = {.channel    = LEDC_CH1_CHANNEL, // LEDC通道号设置为通道1.duty       = 0,                 // 初始占空比为0.gpio_num   = LEDC_CH1_GPIO,    // GPIO引脚设置为LEDC_CH1_GPIO.speed_mode = LEDC_MODE,        // 使用LEDC模式.hpoint     = 0,                 // 占空比更新点设为0.timer_sel  = LEDC_TIMER        // 使用LEDC定时器1};// 使用之前准备好的配置设置LEDC通道ledc_channel_config(&ledc_channel);// ③:配置LEDC定时器占空比值ledc_set_duty(ledc_channel.speed_mode, ledc_channel.channel, LEDC_TEST_DUTY);ledc_update_duty(ledc_channel.speed_mode, ledc_channel.channel);
}

结论

参考资料乐鑫官方文档👇
🚩LED PWM 控制器

这篇关于17-软件脉冲宽度调制(SW_PWM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/926406

相关文章

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

excel翻译软件有哪些?如何高效提翻译?

你是否曾在面对满屏的英文Excel表格时感到头疼?项目报告、数据分析、财务报表... 当这些重要的信息被语言壁垒阻挡时,效率和理解度都会大打折扣。别担心,只需3分钟,我将带你轻松解锁excel翻译成中文的秘籍。 无论是职场新人还是老手,这一技巧都将是你的得力助手,让你在信息的海洋中畅游无阻。 方法一:使用同声传译王软件 同声传译王是一款专业的翻译软件,它支持多种语言翻译,可以excel

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬