ESP32S3学习——LEDC LED PWM 控制器

这篇具有很好参考价值的文章主要介绍了ESP32S3学习——LEDC LED PWM 控制器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

芯片:esp32s3

开发环境:espidfv4.4

一、官网相关资料

1)LED 控制器 (LEDC) 主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制。 该控制器有 8 路通道,可以产生独立的波形来驱动 RGB LED 等设备。

LED PWM 控制器可在无需 CPU 干预的情况下自动改变占空比,实现亮度和颜色渐变(因为这个功能,单独作为一个外设?)

2)设置 LEDC 通道分三步完成。注意,与 ESP32 不同,ESP32-S3 仅支持设置通道为低速模式

  1. 定时器配置 指定 PWM 信号的频率和占空比分辨率。

  2. 通道配置 绑定定时器和输出 PWM 信号的 GPIO。

  3. 改变 PWM 信号 输出 PWM 信号来驱动 LED。可通过软件控制或使用硬件渐变功能来改变 LED 的亮度。

另一个可选步骤是可以在渐变终端设置一个中断。(嘛意思)

esp32 ledc,ESP32_IDF学习,单片机,stm32,物联网,iot,mcu

二、配置流程

1)定时器结构体配置l edc_timer_config_t->ledc_timer_config()

要设置定时器,可调用函数 ledc_timer_config(),并将包括如下配置参数的数据结构 ledc_timer_config_t 传递给该函数:

  • 速度模式(值必须为 LEDC_LOW_SPEED_MODE)对于ESP32s3

  • 定时器索引 ledc_timer_t

  • PWM 信号频率

  • PWM 占空比分辨率

频率和占空比分辨率相互关联。PWM 频率越高,占空比分辨率越低,反之亦然。如果 API 不是用来改变 LED 亮度,而是用于其它目的,这种相互关系可能会很重要。更多信息详见 频率和占空比分辨率支持范围 一节。

2)通道配置ledc_channel_config_t ->ledc_channel_config()

定时器设置好后,请配置所需的通道(ledc_channel_t 之一)。配置通道需调用函数 ledc_channel_config()。

需向通道配置函数传递包括通道配置参数的结构体 ledc_channel_config_t 。

在选定的 GPIO 上生成由定时器设置指定的频率和占空比的 PWM 信号。

在通道运作过程中,可以随时通过调用函数 ledc_stop() 将其暂停。

3)改变pwm占空比

1、软件设置

ledc_set_duty() :设置新的占空比

ledc_update_duty() :使新配置生效

ledc_get_duty():获取当前占空比

通过ledc_channel_config(),配置时的结构体

占空比数值范围:0 - (2 ** duty_resolution) - 1

2、硬件设置(??)

LED PWM 控制器硬件可逐渐改变占空比的数值

1.使能渐变->ledc_fade_func_install()

之后用下列可用渐变函数之一配置:

  • ledc_set_fade_with_time()

  • ledc_set_fade_with_step()

  • ledc_set_fade()

最后用 ledc_fade_start() 开启渐变。

如不需要渐变和渐变中断,可用函数 ledc_fade_func_uninstall() 关闭

4)改变pwm频率

  • 通过调用函数 ledc_set_freq() 设置频率。可用函数 ledc_get_freq() 查看当前频率。

  • 通过调用函数 ledc_bind_channel_timer() 将其他定时器绑定到该通道来改变频率和占空比分辨率。

  • 通过调用函数 ledc_channel_config() 改变通道的定时器

5)中断

在 ledc_channel_config_t 中选取参数 ledc_intr_type_t ,在渐变完成时触发中断

要注册处理程序来处理中断,可调用函数 ledc_isr_register()。这个渐变是嘛

6)频率和占空比分辨率支持范围

1、驱动led:5K频率,13位分辨率

2、提供时钟:40M

3、报错:超过占空比和频率范围,占空比分辨率通常用 ledc_timer_bit_t 设置

7)官方示例

使用 LEDC 改变占空比和渐变控制的实例请参照 peripherals/ledc/ledc_fade。

使用 LEDC 基本实例请参照 peripherals/ledc/ledc_basic。

三、上手敲代码

1)使用 LEDC 基本实例请参照 peripherals/ledc/ledc_basic。非常简单

1、readme:该示例使用5 kHz的固定PWM频率,占空比为50%,并输出GPIO引脚

2、结构体配置:定时器和通道

// Prepare and then apply the LEDC PWM timer configuration

ledc_timer_config_t ledc_timer = {

.speed_mode = LEDC_MODE, //esp32s3只支持低速率

.timer_num = LEDC_TIMER, //LEDC_TIMER_0

.duty_resolution = LEDC_DUTY_RES,//13bit

.freq_hz = LEDC_FREQUENCY, // Set output frequency at 5 kHz

.clk_cfg = LEDC_AUTO_CLK//auto就能用

};
// Prepare and then apply the LEDC PWM channel configuration

ledc_channel_config_t ledc_channel = {

.speed_mode = LEDC_MODE,//同样低速

.channel = LEDC_CHANNEL,//通道0

.timer_sel = LEDC_TIMER,//timer0,和定时器结构体参数一致

.intr_type = LEDC_INTR_DISABLE,//关闭中断

.gpio_num = LEDC_OUTPUT_IO,//绑定io5

.duty = 0, // Set duty to 0%

.hpoint = 0

};

结构体初始化:ledc_timer_config(&ledc_timer),ledc_timer_config(&ledc_timer)

3、调整占空比,两步走

ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, LEDC_DUTY):设置新占空比

ledc_update_duty(LEDC_MODE, LEDC_CHANNEL):更新应用

2)使用 LEDC 改变占空比和渐变控制的实例请参照 peripherals/ledc/ledc_fade。

1、readme:不啦不啦,没介绍,四个通道,四种模式

* LEDC 1: Fade up / increase intensity

* LEDC 2: Fade down / decrease intensity

* LEDC 3: Keep a stable intensity

* LEDC 4: LED is not on

2、appmain:配置了n个结构体,参考上一个历程,基本一样配置->初始化

有一点不一样:添加了esp32的高速模式(还不知道效果)

多了了个参数.flags.output_invert = 1:反转IO,极性反转?

3、控制占空比方法位上面提到的硬件控制

1.ledc_fade_func_install(0);:安装,参数嘛意思,还设置了一个回调?

4、用到的几个函数

ledc_set_fade_with_time(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0, LEDC_TEST_FADE_TIME);

ledc_fade_start(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, LEDC_FADE_NO_WAIT);

max_fade_time_ms:最后一个参数,像是在给定时间范围内达到目标值

ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0);

ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);

照猫画虎就完了,都给你封装好了

总结,用起来很方便,只有几个函数,熟悉就能用文章来源地址https://www.toymoban.com/news/detail-742402.html

到了这里,关于ESP32S3学习——LEDC LED PWM 控制器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP32控制器使用SX1278 LoRa模块的方法

    LoRa是由Semtech公司引入的一种无线射频技术,旨在用于在不消耗大量功率的情况下将双向信息传输到长距离。如果您不熟悉LoRa,请先查看LoRa模块与Arduino开发板的连接方法。 在本篇文章中,我们将学习如何将LoRa模块SX1278与ESP32结合使用。在这里,我们将使用两个LoRa模块-一个

    2023年04月08日
    浏览(39)
  • ESP32S3串口实验

    ESP32S3 一共有三个 UART 通讯接口,设备号从 0~2,即 UART0,UART1,UART2。这三个串口的管脚不 是固定的,是可以重映射到任意的 IO 口的。 ESP32S3 的 BOOT 程序把 UART0 用于程序下载,LOG 输出,我们的第一个实验 hello world 的 LOG 就是从 UART0 输出的。这个实验的 UART1 和 UART2 没有外接

    2024年02月12日
    浏览(41)
  • esp32s3使用多串口

    我按照别人博客中设置串口2,串口打印有问题,因为没有看到esp32s3 多串口,就总结了一下自己的经验 下图为esp32的引脚图 下图为esp32s3的引脚图 ESP32-S3 有三个 UART(通用异步收发器)控制器,即 UART0、UART1、UART2,支持异步通信(RS232 和 RS485)和 IrDA,通信速率可达到 5 Mbps。

    2024年02月04日
    浏览(46)
  • ESP32S3入手体验测试

    🔖所入手的型号是 YD-ESP32-S3 N16R8 ,该款和乐鑫官方推出的 ESP32-S3-DevKitC-1 配置差不多。 🎈乐鑫官方介绍:ESP32-S3-DevKitC-1 v1.1 🔰两者采用的模组:ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组对比: 🍁 YD-ESP32-S3 和 ESP32-S3-DevKitC-1 硬件基本信息: 🛠核心模组配置都是可选。两款开发板从原

    2024年02月05日
    浏览(152)
  • 【esp32】 PWM控制LED亮度原理及代码详解

    PWM:脉冲宽度调制器 比如你有5V电源,要控制一台灯的亮度。你可以用传统的方式,串联一个可调电阻,改变电阻,灯的亮度就会改变。 使用PWM调节的原理: 保持一定的电压或者电流不变,改变一定周期内的导通和关断的时间。等效于,保持导通,改变电压或者电流的大小

    2024年02月06日
    浏览(119)
  • 【ESP32S3 Sense接入百度在线语音识别】

    视频地址: ESP32S3 Sense接入百度在线语音识别 目前这是我使用的ESP32S3官方硬件👍👍👍(小小的身材有大大的力量)只需要35元加摄像头麦克风79元,后期我会整理相关专栏进行Arduino系统学习😘😘😘。有需要可以购买xiao开发板💕💕💕,SeeedXIAO ESP32S3 Sense硬件购买地址:

    2024年04月10日
    浏览(49)
  • ESP32S3系列--SPI主机驱动详解(一)

    SPI是一种串行同步接口,可用于与外围设备进行通信。 ESP32S3自带4个SPI外设,其中SPI0/SPI1内部专用,共用一组信号线,通过一个仲裁器访问外部Flash和PSRAM;SPI2/3各自使用一组独立的信号线;开发者可以使用SPI2/3控制外部SPI从设备(Slave device);其中SPI2作为主设备有6个片选,数据

    2023年04月09日
    浏览(47)
  • 【ESP32S3 Sense接入语音识别+MiniMax模型对话】

    围绕ESP32S3 Sense接入语音识别+MiniMax模型对话展开,首先串口输入“1”字符,随后麦克风采集2s声音数据,对接百度在线语音识别,将返回文本结果丢入MiniMax模型,进而返回第二次结果文本,实现语言对话文本效果。以上一共有两次调用,后期只需加入tts模块就可完整对话。

    2024年04月16日
    浏览(69)
  • ESP32S3 ADC DMA使用记录(坑记录)(大牛欢迎给出建议)

    目前测到三个问题: 一、ADC DMA采样频率sample_freq_hz取值范围611-83333,虽然可以达到83333,但是只能是在while循环里面不停采样才可以,如果想要隔一段时间采样一次则不行,假如隔一段时间使用adc_digi_read_bytes读取40byte数据,结果经常会返回ESP_ERR_INVALID_STATE,且经常读取的数据

    2024年02月11日
    浏览(42)
  • 视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv

    opencv 在 esp32 及 esp32s3 上面的移植 Opencv 简介       OpenCV 是一个基于 Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在 Linux 、 Windows 、 Android 和 Mac OS 操作系统上,它轻量级而且高效—— 由一系列 C 函数和少量 C++ 类构成,同时提供了 Python 、 R

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包