1. esp32_LEDC外设 (Arduino)

LEDC外设

介绍


LED 控制 (LEDC) 外设主要用于控制 LED 的强度,但也可用于生成用于其他目的的 PWM 信号。它有 8 个通道,可以生成独立的波形,例如,可用于驱动 RGB LED 设备。

LEDC 通道分为两组,每组 8 个通道。一组 LEDC 通道在高速模式下运行。此模式在硬件中实现,可自动且无干扰地更改 PWM 占空比。另一组通道在低速模式下工作,PWM占空比必须由驱动程序在软件中更改。每组通道也能够使用不同的时钟源。

PWM控制器可以自动逐渐增加或减少占空比,允许在没有任何处理器干扰的情况下进行衰落。

功能概述


在高速或低速模式下设置 LEDC 通道分三个步骤完成:

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

  2. 通过将其与定时器和GPIO相关联来输出PWM信号,从而进行通道配置。

  3. 更改驱动输出的PWM信号以更改LED的强度。这可以在软件的完全控制下完成,也可以通过硬件衰落功能来完成。

常用的库函数


PWM通道初始化设置

//PWM通道初始化设置
uint32_t    ledcSetup(uint8_t channel, uint32_t freq, uint8_t resolution_bits);
  • channel LEDC通道号,取值0-15,共16个通道
  • freq 待设置的PWM脉冲信号的频率
  • resolution_bits 计数位数,即PWM信号的占空比的分辨率,例如 8,则占空比取值范围0~~ 2 8 2^8 28=255

例如:

//初始化LEDC通道2的信号频率为2KHz,计数位数为8
ledcSetup(2,2000,8);

PWM通道的绑定

// 将 LEDC 通道绑定到指定 IO 口上以实现输出
void  ledcAttachPin(uint8_t pin, uint8_t channel);
  • pin 数组引脚编号
  • channel LEDC通信号,取值0-15共16个通道

例如:

//将通道2绑定到GPIO2上
ledcAttachPin(2,2);

PWM占空比的设置

// 指定通道输出一定占空比波形
void  ledcWrite(uint8_t channel, uint32_t duty);
  • channel LEDC通信号
  • duty 占空比数值 ,计数位数为8,那么,占空比设置值为0-255
//将LEDC通道3的频率初始化为1000Hz,计数位数为8,绑定到GPIO2引脚上,输出占空比为25%的PWM信号
ledcSetup(3,1000,8);
ledcAttachPin(2,3);
ledcWrite(3,64);

总结

  1. 使用 ledcSetup() 函数建立 LEDC 通道;
  2. 通过 ledcAttachPin() 将 GPIO 口与 LEDC 通道关联;
  3. 通过 ledcWrite()ledcWriteTone()ledcWriteNote()设置频率、设置蜂鸣器音调等等
  4. 通过 ledcDetachPin() 解除 GPIO 口与 LEDC 通道的关联

呼吸灯项目示例

#include <Arduino.h>

// 定义频率、通道、分辨率和LED引脚
#define FREQ 2000
#define CHANNEL 0
#define RESOLUTION 8
#define LED 2

// 初始化函数,设置PWM参数并连接LED引脚
void setup() {
  // 设置通道0的PWM参数:频率为2000Hz,分辨率为8位
  ledcSetup(CHANNEL, FREQ, RESOLUTION);
  // 将LED引脚连接到通道0
  ledcAttachPin(LED, CHANNEL);
}

// 主循环函数,实现LED亮度的渐变效果
void loop() {
  // 从0到255(即100%亮度),步长为1
  for (int i = 0; i < pow(2, RESOLUTION); i++) {
    // 输出PWM信号,控制LED亮度
    ledcWrite(CHANNEL, i);
    // 延时10毫秒,实现渐变效果
    delay(10);
  }

  // 从255到0(即0%亮度),步长为1
  for (int i = pow(2, RESOLUTION) - 1; i >= 0; i--) {
    // 输出PWM信号,控制LED亮度
    ledcWrite(CHANNEL, i);
    // 延时10毫秒,实现渐变效果
    delay(10);
  }
}

效果:

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值