ESP32C3 LEDC_PWM
1|0LEDC_PWM
LED 控制器 (LEDC) 主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制,ESP32C3有 6 路通道。设置 LEDC 通道分三步完成。与 ESP32 不同,ESP32-C3 仅支持设置通道为低速模式。
定时器配置 指定 PWM 信号的频率和占空比分辨率。
通道配置 绑定定时器和输出 PWM 信号的 GPIO。
改变 PWM 信号 输出 PWM 信号来驱动 LED。可通过软件控制或使用硬件渐变功能来改变 LED 的亮度。另一个可选步骤是可以在渐变终端设置一个中断。
1|11、定时器配置
设置定时器,可调用函数 ledc_timer_config(),配置参数的数据结构 ledc_timer_config_t 传递给该函数:
速度模式(值必须为 LEDC_LOW_SPEED_MODE)
定时器索引 ledc_timer_t
PWM 信号频率(Hz)
PWM 占空比分辨率
时钟源 ledc_clk_cfg_t
PWM 频率越高,占空比分辨率越低,反之亦然。
官方文档
https://docs.espressif.com/projects/esp-idf/zh_CN/v5.0.1/esp32c3/api-reference/peripherals/ledc.html
ESP32-C3 LEDC 时钟源特性
APB_CLK--------80 MHz
RC_FAST_CLK---20 MHz
XTAL_CLK-------40 MHz
如果 ESP32-C3 的定时器选用了RTCxM_CLK作为其时钟源,驱动会通过内部校准来得知这个时钟源的实际频率。这样确保了输出PWM信号频率的精准性。
ESP32-C3 的所有定时器共用一个时钟源。因此 ESP32-C3 不支持给不同的定时器配置不同的时钟源。
1|22、通道配置
定时器设置好后,配置所需的通道(ledc_channel_t 之一)。配置通道需调用函数 ledc_channel_config()。
通道的配置与定时器设置类似,需向通道配置函数传递包括通道配置参数的结构体 ledc_channel_config_t 。
此时,通道会按照 ledc_channel_config_t 的配置开始运作,并在选定的 GPIO 上生成由定时器设置指定的频率和占空比的 PWM 信号。在通道运作过程中,可以随时通过调用函数 ledc_stop() 将其暂停。
1|33、改变 PWM 信号
通道开始运行、生成具有恒定占空比和频率的 PWM 信号之后,有几种方式可以改变该信号。驱动 LED 时,主要通过改变占空比来变化光线亮度。
在 ESP32-C3 的 LED PWM 控制器中,所有的定时器和通道都只支持低速模式。
(1)使用软件改变 PWM 占空比
调用函数 ledc_set_duty() 可以设置新的占空比。之后,调用函数 ledc_update_duty() 使新配置生效。要查看当前设置的占空比,可使用 get 函数 ledc_get_duty()。
另外一种设置占空比和其他通道参数的方式是调用 通道配置 一节提到的函数 ledc_channel_config()。
传递给函数的占空比数值范围取决于选定的 duty_resolution,应为 0 至 (2 ** duty_resolution) - 1。例如,如选定的占空比分辨率为 10,则占空比的数值范围为 0 至 1023。此时分辨率为 ~0.1%。
(2)使用硬件改变 PWM 占空比
LED PWM 控制器硬件可逐渐改变占空比的数值,使用函数 ledc_fade_func_install() 使能渐变,之后用下列可用渐变函数之一配置:
ledc_set_fade_with_time() 在有限的时间内设置LEDC淡入淡出功能
ledc_set_fade_with_step() 设置LEDC淡入淡出功能
ledc_set_fade() 设置LEDC梯度,函数调用ledc_update_duty函数后,函数即可生效。
最后需要调用 ledc_fade_start() 开启渐变,中止一个正在运行中的渐变需要调用函数 ledc_fade_stop()。(此外,在使能渐变后,每个通道都可以额外通过调用 ledc_cb_register() 注册一个回调函数用以获得渐变完成的事件通知。回调函数的原型被定义在 ledc_cb_t。每个回调函数都应当返回一个布尔值给驱动的中断处理函数,用以表示是否有高优先级任务被其唤醒。由于驱动的中断处理函数被放在了 IRAM 中, 回调函数和其调用的函数也需要被放在 IRAM 中。 ledc_cb_register() 会检查回调函数及函数上下文的指针地址是否在正确的存储区域。
如不需要渐变和渐变中断,可用函数 ledc_fade_func_uninstall() 关闭。)
(3)改变 PWM 频率
LED PWM 控制器 API 有多种方式即时改变 PWM 频率:调用函数 ledc_set_freq() 设置频率。 ledc_get_freq() 查看当前频率。调用函数 ledc_bind_channel_timer() 将其他定时器绑定到该通道来改变频率和占空比分辨率。
通过调用函数 ledc_channel_config() 改变通道的定时器。
1|44、程序实现
1|55、效果
视频:【ESP32C3 LEDC PWM呼吸灯-哔哩哔哩】 https://b23.tv/p3rfUdZ
__EOF__

本文链接:https://www.cnblogs.com/xiaohuzaixue/p/17637565.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界