跳转到内容

ESP32 LEDC 输出

LEDC 输出组件将 ESP32 的 LEDC PWM 通道 作为输出组件暴露出来。

LEDC 的频率范围从 10Hz 到 40MHz —— 然而,较高的频率需要较小 的位深,这意味着对于约 300kHz 以上的频率,输出精度并不高。

  • pin (必需, Pin): 必须是输出引脚。

  • id (必需, ID): 用于此输出组件的 id。

  • frequency (可选, frequency): LEDC 通道计时器运行的频率。默认为 1kHz。

  • 所有其他选项请参见 输出。

高级选项:

  • phase_angle (可选, float): 为此计时器的另一个通道设置相位角。 范围 0-360°,默认为 0°

  • channel (可选, int): 手动设置要使用的 LEDC 通道 。默认为自动选择。有效通道范围取决于 ESP32 型号:

ESP32 型号有效通道
ESP320-15
ESP32-S2、ESP32-S3、ESP32-P40-7
ESP32-C2、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-C61、ESP32-H20-5

NOTE

两个相邻通道共享同一个硬件计时器。它们仍然可以使用不同的 占空比(灯光输出可以不同)并使用不同的相位,但不能使用不同的 PWM 频率。如果需要灯光通道使用不同的频率,请手动将 它们分配给未使用的 LEDC 输出,并避免选择相邻通道对,例如 0/1、2/3 等。

# Example configuration entry
output:
- platform: ledc
pin: GPIOXX
id: gpio_
# Example usage in a light
light:
- platform: monochromatic
output: gpio_19
name: "Kitchen Light"
# Configure the output
output:
- platform: ledc
######################################################
# One buzzer leg connected to GPIO12, the other to GND
######################################################
pin: GPIO12
id: buzzer
# Example usage in an automation
on_press:
then:
######################################################
# Must be turned on before setting frequency & level
######################################################
- output.turn_on: buzzer
######################################################
# Frequency sets the wave size
######################################################
- output.ledc.set_frequency:
id: buzzer
frequency: "1kHz"
######################################################
# level sets the %age time the PWM is on
######################################################
- output.set_level:
id: buzzer
level: "50%"

为了在保持相同位深的同时获得尽可能高的频率,建议 选择以下频率之一。

更高的位深意味着灯光在从一个值 更改为另一个值时可用更多步骤。这在灯光低于 10% 且需要 较长过渡时(例如缓慢关闭)尤为明显。

频率位深过渡可用步骤
1220Hz16 / 14*65536 / 16384*
2441Hz15 / 14*32768 / 16384*
4882Hz1416384
9765Hz138192
19531Hz124096

* ESP32-S2、ESP32-S3、ESP32-C2 和 ESP32-C3 仅支持 14 位 LEDC 计时器。 原始 ESP32、ESP32-C5、ESP32-C6、ESP32-C61、ESP32-H2 和 ESP32-P4 支持 20 位 LEDC 计时器,这在有效的 LED PWM 范围内可获得最高 16 位分辨率 如上表所示。

例如,ESP8266 通常 的频率为 1000Hz,分辨率为 10 位。 这意味着每个值之间只有 4 个步骤。

此 操作 允许你在运行时手动更改 LEDC 通道的频率。使用场景包括控制有源蜂鸣器(用于音调控制)。

on_...:
- output.ledc.set_frequency:
id: ledc_output
frequency: 100Hz

配置变量:

  • id (必需, ID): 要更改的 LEDC 输出 ID。
  • frequency (必需, 可模板化, frequency): 以 Hz 为单位的 频率。