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 的亮度。

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

二、配置流程

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_fade_start() 开启渐变。

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

4)改变pwm频率

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);

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

总结,用起来很方便,只有几个函数,熟悉就能用

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学习ESP32S3开发板可以按照以下步骤进行: 1. 获取开发板:首先,你需要购买ESP32S3开发板。可以在电子市场或者在线商店购买到。 2. 安装开发环境:ESP32S3开发板使用ESP-IDF(Espressif IoT Development Framework)作为开发环境。你需要下载并安装ESP-IDF。 - 访问Espressif官方网站(https://www.espressif.com/),在下载页面找到ESP-IDF的最新版本。 - 根据官方提供的安装指南,按照你的操作系统(如Windows、Mac或Linux)进行安装。 3. 配置开发环境:在安装完成后,你需要进行一些配置。 - 配置路径:根据安装指南,将ESP-IDF的路径添加到你的系统环境变量中。 - 配置编译器:根据官方指南,设置合适的编译器路径。 4. 学习ESP-IDF文档:ESP-IDF提供了详细的文档,包括API参考、示例代码和开发指南等。仔细阅读文档,了解如何使用ESP32S3开发板和ESP-IDF进行开发。 - 可以从Espressif官方网站下载最新版本的文档。 - 阅读开发指南:开发指南将引导你建立第一个ESP32S3项目并编写代码。 - 查看示例代码:ESP-IDF提供了许多示例代码,可以帮助你学习各种功能和特性。 5. 尝试示例项目:ESP-IDF附带了一些示例项目,你可以尝试运行这些项目,了解开发流程和基本功能。 6. 实践项目:根据你的需求,设计和实践自己的ESP32S3项目。可以从简单的LED控制开始,逐渐扩展到更复杂的应用,如WiFi通信、传感器数据采集等。 7. 参考社区资源:ESP32S3有一个活跃的开发者社区,可以通过论坛、社交媒体或开发者博客等渠道获取更多帮助和资源。 记住,学习是一个不断实践和探索的过程。通过阅读文档、尝试示例代码和实践项目,你将逐渐掌握ESP32S3的开发技能。祝你学习愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值