开发平台:Arduino
开发板:Beetle ESP32 C6
功能:PWM使用
Beetle ESP32 C6与PWM(脉冲宽度调制)的结合使用,可以实现对连接到开发板的设备的精确控制,比如LED灯的亮度调节。PWM通过改变脉冲信号的占空比来控制输出,从而实现对电压、电流等参数的精确调节。
在Beetle ESP32 C6上使用PWM,你可以编写代码来设置特定GPIO口为PWM输出模式,并设定PWM的频率和占空比。这样,连接到这些GPIO口的设备(如LED灯)就可以根据设定的PWM参数进行工作。
照片:
PWM控制器设置
定时器配置
通过调用函数并传递包含以下配置设置的数据结构来设置计时器:
速度模式
计时器编号
PWM信号频率
PWM占空比的解决
代码:
// 使用12位精度为LEDC定时器
#define LEDC_TIMER_12_BIT 12
// 使用5000 Hz作为LEDC的基础频率
#define LEDC_BASE_FREQ 5000
// 渐变LED的引脚(对于内置LED,可以替换为LED_BUILTIN常量)
#define LED_PIN 15
int brightness = 0; // LED的亮度
int fadeAmount = 5; // 每次循环LED亮度变化的数量
// 类似于Arduino的analogWrite函数
// value的值必须在0和valueMax之间
void ledcAnalogWrite(uint8_t pin, uint32_t value, uint32_t valueMax = 255) {
// 计算占空比,4095来自于2的12次方减1
uint32_t duty = (4095 / valueMax) * min(value, valueMax);
// 将占空比写入LEDC
ledcWrite(pin, duty);
}
void setup() {
// 设置定时器并将定时器附加到LED引脚
ledcAttach(LED_PIN, LEDC_BASE_FREQ, LEDC_TIMER_12_BIT);
}
void loop() {
// 设置LEDC通道0的亮度
ledcAnalogWrite(LED_PIN, brightness);
// 为下一次循环更改亮度:
brightness = brightness + fadeAmount;
// 在渐变结束时反转渐变的方向:
if (brightness <= 0 || brightness >= 255) {
fadeAmount = -fadeAmount;
}
// 等待30毫秒以查看渐变效果
delay(30);
}