ESP32-S3学习笔记<8>:LEDC的应用
1. 头文件包含
#include "driver/ledc.h"
2. LEDC的配置
配置LEDC生成PWM波,主要分为2个步骤完成:
- 配置LEDC的定时器。定时器决定了PWM的一些基础特性,例如频率。
- 配置LEDC的通道,并将通道绑定到定时器。通道可以配置和控制PWM占空比。
2.1 配置定时器
使用如下代码配置定时器。LEDC外设内一共有4个定时器,8个通道。通道可以绑定在任意一个定时器上。定时器决定了PWM的频率,因此绑定在一个定时器上的所有通道都具有相同的PWM频率。
esp_err_t ledc_timer_config(const ledc_timer_config_t *timer_conf);
参数 timer_conf 的定义为:
typedef struct {
ledc_mode_t speed_mode; /*!< LEDC speed speed_mode, high-speed mode (only exists on esp32) or low-speed mode */
ledc_timer_bit_t duty_resolution; /*!< LEDC channel duty resolution */
ledc_timer_t timer_num; /*!< The timer source of channel (0 - LEDC_TIMER_MAX-1) */
uint32_t freq_hz; /*!< LEDC timer frequency (Hz) */
ledc_clk_cfg_t clk_cfg; /*!< Configure LEDC source clock from ledc_clk_cfg_t.
Note that LEDC_USE_RC_FAST_CLK and LEDC_USE_XTAL_CLK are
non-timer-specific clock sources. You can not have one LEDC timer uses
RC_FAST_CLK as the clock source and have another LEDC timer uses XTAL_CLK
as its clock source. All chips except esp32 and esp32s2 do not have
timer-specific clock sources, which means clock source for all timers
must be the same one. */
bool deconfigure; /*!< Set this field to de-configure a LEDC timer which has been configured before
Note that it will not check whether the timer wants to be de-configured
is binded to any channel. Also, the timer has to be paused first before
it can be de-configured.
When this field is set, duty_resolution, freq_hz, clk_cfg fields are ignored. */
} ledc_timer_config_t;
2.1.1 speed_mode/设置速度模式
定义如下。ESP32-S3仅支持 LEDC_LOW_SPEED_MODE 。
typedef enum {
#if SOC_LEDC_SUPPORT_HS_MODE
LEDC_HIGH_SPEED_MODE = 0, /*!< LEDC high speed speed_mode */
#endif
LEDC_LOW_SPEED_MODE, /*!< LEDC low speed speed_mode */
LEDC_SPEED_MODE_MAX, /*!< LEDC speed limit */
} ledc_mode_t;
2.1.2 duty_resolution/设置占空比分辨率
所谓分辨率,就是PWM波的一个完整周期中,定时器计数多少次。在给定的输入时钟情况下。对于不同的 freq_hz(PWM频率),有不同的分辨率范围可选。可以认为,最大的duty_resolution(2的duty_resolution次方) 乘以 freq_hz,接近于输入时钟频率(但不相等)。下表罗列了不同时钟源情况下,不同的PWM频率可选的最大分辨率和最小分辨率。分辨率越大,输出PWM的占空比调节越精细。

2.1.3 timer_num/选择定时器
以下选项选择LEDC中的定时器:
typedef enum {
LEDC_TIMER_0 = 0, /*!< LEDC timer 0 */
LEDC_TIMER_1, /*!< LEDC timer 1 */
LEDC_TIMER_2, /*!< LEDC timer 2 */
LEDC_TIMER_3, /*!< LEDC timer 3 */
LEDC_TIMER_MAX,
} ledc_timer_t;
2.1.4 freq_hz/设定PWM频率
设定PWM波的频率。
2.1.5 clk_cfg/选择LEDC的外设时钟源
可用的选项有:

最低0.47元/天 解锁文章
335

被折叠的 条评论
为什么被折叠?



