LEDC外设
介绍
LED 控制 (LEDC) 外设主要用于控制 LED 的强度,但也可用于生成用于其他目的的 PWM 信号。它有 8 个通道,可以生成独立的波形,例如,可用于驱动 RGB LED 设备。
LEDC 通道分为两组,每组 8 个通道。一组 LEDC 通道在高速模式下运行。此模式在硬件中实现,可自动且无干扰地更改 PWM 占空比。另一组通道在低速模式下工作,PWM占空比必须由驱动程序在软件中更改。每组通道也能够使用不同的时钟源。
PWM控制器可以自动逐渐增加或减少占空比,允许在没有任何处理器干扰的情况下进行衰落。
功能概述
在高速或低速模式下设置 LEDC 通道分三个步骤完成:
-
通过指定PWM信号的频率和占空比分辨率来配置定时器。
-
通过将其与定时器和GPIO相关联来输出PWM信号,从而进行通道配置。
-
更改驱动输出的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);
总结
- 使用
ledcSetup()
函数建立 LEDC 通道; - 通过
ledcAttachPin()
将 GPIO 口与 LEDC 通道关联; - 通过
ledcWrite()
、ledcWriteTone()
、ledcWriteNote()
设置频率、设置蜂鸣器音调等等 - 通过
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);
}
}
效果: