提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 概述
  • 功能概览
  • 一、程序编写
    • 1.引入库
    • 2.定义宏
    • 2.主函数
      • 1.定时器配置
      • 2. 通道配置
      • 3.改变 PWM 信号 输出
        • 3.1 使用硬件渐变改变 PWM 信号
        • 3.2 使用软件渐变改变 PWM 信号
  • 总结

概述

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

LED PWM 控制器可以用于生成六路独立的数字波形,具有如下特性:

  • 波形的周期和占空比可配置,占空比精确度可达 18 位
  • 多种时钟源选择,包括 APB 总线时钟、外置主晶振时钟
  • 可在 Light-sleep 模式下工作
  • 支持硬件自动步进式地增加或减少占空比,可用于 LED RGB 彩色梯度发生器

功能概览

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

  1. 定时器配置 指定 PWM 信号的频率和占空比分辨率。
  2. 通道配置 绑定定时器和输出 PWM 信号的 GPIO。
  3. 改变 PWM 信号 输出 PWM 信号来驱动 LED。可通过软件控制或使用硬 件渐变功能来改变 LED 的亮度。

一、程序编写

1.引入库

代码如下(示例):

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/ledc.h"
#include "esp_err.h"

2.定义宏

代码如下:

#if  CONFIG_IDF_TARGET_ESP32C3#define LEDC_LS_TIMER          LEDC_TIMER_1
#define LEDC_LS_MODE           LEDC_LOW_SPEED_MODE#define LEDC_LS_CH0_GPIO       (12)
#define LEDC_LS_CH0_CHANNEL    LEDC_CHANNEL_0
#define LEDC_LS_CH1_GPIO       (13)
#define LEDC_LS_CH1_CHANNEL    LEDC_CHANNEL_1
#endif#define LEDC_TEST_CH_NUM       (2)
#define LEDC_TEST_DUTY         (4000)
#define LEDC_TEST_FADE_TIME    (3000)

2.主函数

1.定时器配置

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

    //1.定时器配置 指定 PWM 信号的频率和占空比分辨率。/** Prepare and set configuration of timers* that will be used by LED Controller*/ledc_timer_config_t ledc_timer = {.duty_resolution = LEDC_TIMER_13_BIT, // resolution of PWM duty.freq_hz = 5000,                      // frequency of PWM signal.speed_mode = LEDC_LS_MODE,           // timer mode.timer_num = LEDC_LS_TIMER,            // timer index.clk_cfg = LEDC_AUTO_CLK,              // Auto select the source clock};ledc_timer_config(&ledc_timer);

频率和占空比分辨率相互关联。PWM 频率越高,占空比分辨率越低,反之亦然。

2. 通道配置

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

通道的配置与定时器设置类似,需向通道配置函数传递包括通道配置参数的结构体 ledc_channel_config_t 。

此时,通道会按照 ledc_channel_config_t 的配置开始运作,并在选定的 GPIO 上生成由定时器设置指定的频率和占空比的 PWM 信号。在通道运作过程中,可以随时通过调用函数 ledc_stop() 将其暂停。

  //2.通道配置 绑定定时器和输出 PWM 信号的 GPIO。/** Prepare individual configuration* for each channel of LED Controller* by selecting:* - controller's channel number* - output duty cycle, set initially to 0* - GPIO number where LED is connected to* - speed mode, either high or low* - timer servicing selected channel*   Note: if different channels use one timer,*         then frequency and bit_num of these channels*         will be the same*/ledc_channel_config_t ledc_channel[LEDC_TEST_CH_NUM] = {#if  CONFIG_IDF_TARGET_ESP32C3{.channel    = LEDC_LS_CH0_CHANNEL,.duty       = 0,.gpio_num   = LEDC_LS_CH0_GPIO,.speed_mode = LEDC_LS_MODE,.hpoint     = 0,.timer_sel  = LEDC_LS_TIMER},{.channel    = LEDC_LS_CH1_CHANNEL,.duty       = 0,.gpio_num   = LEDC_LS_CH1_GPIO,.speed_mode = LEDC_LS_MODE,.hpoint     = 0,.timer_sel  = LEDC_LS_TIMER},
#endif};// Set LED Controller with previously prepared configurationfor (ch = 0; ch < LEDC_TEST_CH_NUM; ch++) {ledc_channel_config(&ledc_channel[ch]);}// Initialize fade service.ledc_fade_func_install(0);

3.改变 PWM 信号 输出

3.1 使用硬件渐变改变 PWM 信号

LED PWM 控制器硬件可逐渐改变占空比的数值。要使用此功能,需用函数 ledc_fade_func_install() 使能渐变,之后用下列可用渐变函数之一配置:

  • ledc_set_fade_with_time()
  • ledc_set_fade_with_step()
  • ledc_set_fade()

最后用 ledc_fade_start() 开启渐变。

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

        for (ch = 0; ch < LEDC_TEST_CH_NUM; ch++) {ledc_set_fade_with_time(ledc_channel[ch].speed_mode,ledc_channel[ch].channel, LEDC_TEST_DUTY, LEDC_TEST_FADE_TIME);ledc_fade_start(ledc_channel[ch].speed_mode,ledc_channel[ch].channel, LEDC_FADE_NO_WAIT);}

3.2 使用软件渐变改变 PWM 信号

调用函数 ledc_set_duty() 可以设置新的占空比。之后,调用函数 ledc_update_duty() 使新配置生效。要查看当前设置的占空比,可使用 get 函数 ledc_get_duty()。

  • ledc_set_duty()
  • ledc_update_duty()
  • ledc_get_duty()
        for (ch = 0; ch < LEDC_TEST_CH_NUM; ch++) {ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, LEDC_TEST_DUTY);ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);}

总结

完整例程:https://download.csdn.net/download/tengyihong/85142299

ESP32C3 LED PWM 控制器相关推荐

  1. ESP32C3 LED PWM使用和ESP32差异说明

    ESP32C3 LED PWM使用和ESP32差异说明 今天在测试合宙ESP32C3的LED PWM功能时发现,有些通道不能用,感觉很奇怪,然后尝试替换通道,0-5通道的可以使用,6-15通道的都没用 ...

  2. Ardunio开发实例-PCA9685-16路PWM控制器控制LED

    PCA9685-16路PWM控制器控制LED PCA9685是I²C总线控制的16通道PWM控制器可以控制LED和舵机,针对红色/绿色/蓝色/琥珀色(RGBA)彩色背光应用进行了优化. 每个LED输出 ...

  3. 利用ESP32-C3实现一个风扇PWM控制器,可网页操作

    1简介 这段代码是一个基于ESP32开发板的PWM控制器,可以通过网页输入控制参数并显示在屏幕上,通过PWM输出引脚控制风扇的转速,还可以测量风扇的转速并在屏幕上显示.此外,代码还具备显示当前时间.显 ...

  4. LED PWM控制芯片PCA9685的Linux 驱动

    本文目的 在调试PCA9685的Linux设备驱动过程中, 发现有值得记录和备忘的事项 . 特此记录,方便自己查阅. PCA9685简介 PCA9685是NXP生产的一款LED驱动芯片, 其主要特性: ...

  5. 太阳能充电调节代码_太阳能LED路灯控制器有什么作用

    无论太阳能LED路灯的大小,都需要性能良好的充放电控制器.为了延长蓄电池的寿命,为了防止蓄电池过充电和深放电,必须限制其充放电条件. 在温度差很大的地区,合格的控制器还应具备温度补偿功能.同时,太阳能 ...

  6. 单片机c语言彩灯依次点亮,基于单片机的LED彩灯控制器

    1 引言 随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯. led 彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚.但目前市场上 ...

  7. LED驱动控制器/数码管显示LED驱动芯片VK1640B,8段*12位,上电复位,多用于各种小型LED数码管显示屏驱动

    品牌:永嘉微电/VINKA 型号:VK1640B 封装:SSOP24 年份:新年份 概述 : VK1640B 是一款 LED(发光二极管显示器)驱动控制专用电路,内部集成有 MCU 数字接口.数据锁存 ...

  8. NCP1251BSN65T1G一款高度集成的 PWM 控制器 用于离线电源

    NCP1251BSN65T1G是一款高度集成的 PWM 控制器,能够在极小型 TSOP-6 封装内提供耐用的高性能离线电源.该控制器供电范围高达 28 V,具有带抖动的 65 kHz 或 100 kH ...

  9. LED彩灯控制器设计 51单片机 流水灯 PROTEUS 仿真

    课程设计题四:LED彩灯控制器设计 要求: 1.至少10个发光管4种花样自动变换,循环往复. 2.彩灯花样变换的快慢节拍可以手动和自动方式控制,手动控制按钮按一次转换一次:自动控制方式每15秒变换一次 ...

最新文章

  1. 如何对以破折号/连字符开头的字符串进行grep?
  2. python判断对象是否有属性
  3. java heap space 解决方法_Java静态方法/变量,非静态方法/变量的区别,今天一并帮你解决
  4. jmap 文件解析_[Java基础] 使用JMAP dump及分析dump文件
  5. IntelliJ IDEA教程之如何clean或者install Maven项目
  6. 二进制包安装MySQL数据库
  7. 重写数组的方法(改变原数组)
  8. 在sql当中为了让数据做缓存做with as的操作
  9. 在有序数列里插入新元素(C语言)
  10. 计算机信息工程专业985,信息工程学院
  11. java实现单向循环链表_java实现的带头单向循环链表
  12. 我竟然用git send-mail通过QQ邮箱提交了push request
  13. c#等待所有子线程执行完毕方法
  14. python3 _笨方法学Python_日记_DAY4
  15. java composite 模式_《JAVA设计模式》中的组合模式Composite
  16. 处女座的砝码-数学推论
  17. 宝塔 无法自动认证,请填写本地服务器的登录信息
  18. 上海万应云——大数据精准招商系统
  19. WinRAR压缩解压文件
  20. HP-UX 11.31 安装RAC 添加共享磁盘的问题

热门文章

  1. 5.3.4 图像颜色映射 (二)
  2. (一)arcpy开发利用arcpy在arcgis中批量裁剪影像
  3. 判别IP地址的网络类别
  4. Open FIFO for write returns “No such device or address“
  5. 每天学习一点点python--2(运算符一)
  6. 电池充电放电试验标准介绍
  7. 【Vue知识点- No2.】vue脚手架、基础API
  8. CydiaSubstrate框架
  9. 跳绳机 高频霍尔开关 MH253
  10. for循环-结束循环