ESP32函数笔记一
ledcWrite()和ledcWriteTone()函数参数及应用场景分析
·
ledcWriteTone()与ledcWrite()的区别
在 ESP32 的 Arduino 开发环境中,ledcWrite()和ledcWriteTone()都用于控制 LEDC(LED 控制器)模块,但它们的应用场景和功能有所不同。下面从多个方面进行对比:
1,功能用途

2. 参数与用法
ledcWrite(channel, duty)
- 参数:
channel:LEDC 通道号(0-15)。duty:占空比值,范围取决于ledcSetup()设置的分辨率(例如 8 位分辨率时为 0-255)。
示例:控制LED灯亮度
ledcSetup(0, 5000, 8); // 通道0,频率5kHz,8位分辨率
ledcAttachPin(LED_PIN, 0);
ledcWrite(0, 128); // 输出50%占空比
ledcWriteTone(channel, freq)
- 参数:
channel:LEDC 通道号(0-15)。freq:频率值(Hz),范围约 5Hz-40MHz(受分辨率限制)。
示例:控制无源蜂鸣器发出特定频率音调
ledcSetup(0, 0, 8); // 通道0,频率参数忽略,8位分辨率
ledcAttachPin(BUZZER_PIN, 0);
ledcWriteTone(0, 440); // 输出440Hz,占空比固定为50%
3. 占空比控制
ledcWrite():可自定义占空比(通过duty参数),适用于需要精确控制信号强度的场景。ledcWriteTone():固定占空比为 50%(方波),确保音频信号的对称性,专注于频率控制。
4. 频率控制
ledcWrite():频率在ledcSetup()中设置,后续无法通过ledcWrite()动态调整。
ledcSetup(channel, 1000, 8); // 固定频率1kHz
ledcWriteTone():每次调用可动态修改频率,适用于生成不同音调的音频
ledcWriteTone(channel, 440); // 440Hz
ledcWriteTone(channel, 880); // 880Hz(高八度)
5. 应用场景对比

6. 注意事项
- 频率范围:
ledcWriteTone()的最大频率受分辨率限制(分辨率越高,最大频率越低)。 - 引脚兼容性:两者都需使用支持 PWM 的引脚(如 GPIO2、4、5 等)。
- 分辨率选择:音频应用建议使用较低分辨率(如 8 位)以获得更高频率范围。
总结
- 用
ledcWrite():当你需要控制信号强度(占空比),且频率固定时。 - 用
ledcWriteTone():当你需要生成特定频率的音频信号(固定 50% 占空比)时。 - 根据具体需求选择合适的函数,可以更高效地实现 PWM 控制或音频生成功能。
更多推荐



所有评论(0)