3#include "driver/ledc.h"
24 ESP32PWM(
int gpio_num, ledc_channel_t channel, ledc_timer_t timer = LEDC_TIMER_0,
25 ledc_timer_bit_t resolution =
static_cast<ledc_timer_bit_t
>(
26 (
static_cast<uint8_t
>(LEDC_TIMER_BIT_MAX) - 1)))
27 : gpio_num_(gpio_num),
30 resolution_(resolution),
31 max_duty_((1 << resolution) - 1)
33 ledc_channel_config_t channel_conf = {};
34 channel_conf.gpio_num = gpio_num_;
35 channel_conf.speed_mode =
static_cast<ledc_mode_t
>(0);
36 channel_conf.channel = channel_;
37 channel_conf.intr_type = LEDC_INTR_DISABLE;
38 channel_conf.timer_sel = timer_;
39 channel_conf.duty = 0;
40 channel_conf.hpoint = 0;
42 auto err = ledc_channel_config(&channel_conf);
55 else if (value > 1.0f)
60 uint32_t duty =
static_cast<uint32_t
>(max_duty_ * value);
61 esp_err_t err = ledc_set_duty(
static_cast<ledc_mode_t
>(0), channel_, duty);
62 if (err != ESP_OK)
return ErrorCode::FAILED;
64 err = ledc_update_duty(
static_cast<ledc_mode_t
>(0), channel_);
65 return (err == ESP_OK) ? ErrorCode::OK : ErrorCode::FAILED;
72 return ErrorCode::ARG_ERR;
75 ledc_timer_config_t timer_conf = {};
76 timer_conf.speed_mode =
static_cast<ledc_mode_t
>(0);
77 timer_conf.duty_resolution = resolution_;
78 timer_conf.timer_num = timer_;
80 timer_conf.clk_cfg = LEDC_AUTO_CLK;
82 esp_err_t err = ledc_timer_config(&timer_conf);
83 if (err != ESP_OK)
return ErrorCode::INIT_ERR;
85 max_duty_ = (1 << resolution_) - 1;
91 esp_err_t err = ledc_update_duty(
static_cast<ledc_mode_t
>(0), channel_);
92 return (err == ESP_OK) ? ErrorCode::OK : ErrorCode::FAILED;
97 esp_err_t err = ledc_stop(
static_cast<ledc_mode_t
>(0), channel_, 0);
98 return (err == ESP_OK) ? ErrorCode::OK : ErrorCode::FAILED;
103 ledc_channel_t channel_;
105 ledc_timer_bit_t resolution_;
ESP32 PWM 驱动实现 / ESP32 PWM driver implementation.
ErrorCode Enable() override
Enables the PWM output. 启用 PWM 输出。
ErrorCode SetConfig(Configuration config) override
Configures the PWM settings. 配置 PWM 参数。
ErrorCode SetDutyCycle(float value) override
Sets the duty cycle of the PWM signal. 设置 PWM 信号的占空比。
ErrorCode Disable() override
Disables the PWM output. 禁用 PWM 输出。
ESP32PWM(int gpio_num, ledc_channel_t channel, ledc_timer_t timer=LEDC_TIMER_0, ledc_timer_bit_t resolution=static_cast< ledc_timer_bit_t >((static_cast< uint8_t >(LEDC_TIMER_BIT_MAX) - 1)))
构造 PWM 通道对象 / Construct PWM channel object
Abstract base class for PWM (Pulse Width Modulation) control. PWM(脉冲宽度调制)控制的抽象基类。
Configuration parameters for PWM. PWM 配置参数。
uint32_t frequency
PWM signal frequency in Hz. PWM 信号的频率(Hz)。