这个实验的功能是使用 PWM 去控制板子上的彩灯实现渐变效果。 这个实验的代码为工程“3_8_pwm”目录。
3.8.1. 实验内容
(1) 学习如何控制 LED 灯及硬件原理
(2) 学习 ESP32 的 PWM(ledc)功能的配置
(3) 掌握 PWM(ledc)控制 LED 彩灯渐变程序
3.8.2. 硬件设计和原理
LED 彩灯硬件设计在 3.3 节已经讲解过了,我们知道通过 IO15、IO16 和 IO32 输出高低电平就可以控制 彩灯亮灭了。
在这个实验里,我们是通过 IO15、IO16 和 IO32 输出 PWM 信号去控制彩灯的亮度。要注意的是我们 的彩灯是共阳极的,输出 100%占空比的时候,彩灯是灭的,输出 0%占空比的时候,彩灯处于最亮状态。 ESP32 的占空比支持手动和自动两种模块,我们的这个实验里启动了两个任务,用于实现手动设置占
空比和自动设置占空比,通过板上的按键 key1 去控制切换。
3.8.3. 函数介绍
ESP32 的 ESP-IDF 编程指南可以从官网上查询:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/index.html
PWM(LEDC)定时器配置
函数定义如下:
esp_err_t ledc_timer_config(const ledc_timer_config_t* timer_conf); 参数说明:
ledc_timer_config_t* timer_conf:定时器的参数,这是一个结构体,具体的定义请往下看 返回值:ESP_OK(成功)和 ESP_ERR_INVALID_ARG(参数错误) 。
typedef struct {
ledc_mode_t speed_mode; union {
ledc_timer_bit_t duty_resolution; //pwm 的分辨率,也就是最大的占空比
ledc_timer_bit_t bit_num attribute ((deprecated)); //
};
ledc_timer_t timer_num; //定时器选择,支持 0 ̄3
} ledc_timer_config_t;
PWM(LEDC)配置函数
函数定义如下:
esp_err_t ledc_channel_config(const ledc_channel_config_t* ledc_conf); 参数说明:
ledc_channel_config_t* ledc_conf:pwm 配置参数,这是一个结构体,具体的定义请往下看 返回值:ESP_OK(成功)和 ESP_ERR_INVALID_ARG(参数错误) 。
typedef struct {
int gpio_num; //具体的 IO 口定义 ledc_mode_t speed_mode; //速度选择,高速或者低速 ledc_channel_t channel; //通道选择,取值 0~7 ledc_intr_type_t intr_type; //中断类型 ledc_timer_t timer_sel; //定时器通道选择 uint32_t duty; //占空比
int hpoint; //LEDC channel hpoint value, the max value is 0xfffff
} ledc_channel_config_t;
PWM(LEDC)渐变安装函数
这个函数在系统 PWM 占空比自己变化的时候会使用到,函数定义如下:
esp_err_t ledc_fade_func_install(int intr_alloc_flags); 参数说明:
int intr_alloc_flags:是否分配中断标志 返回值

最低0.47元/天 解锁文章
689

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



