ESP32呼吸灯 PWM

这个实验的功能是使用 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:是否分配中断标志 返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bytechip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值