ESP32 Arduino开发之路(2)— 使用PWM实现LED呼吸灯

一、前言

在ESP32上有一个LEDC外设模块专用于输出PWM波形,其介绍如下所示:

参考文章:在 ESP32 上使用 LEDC (PWM) (3)

二、PWM引脚

如图所示为引脚映射

三、控制函数

1、ledcSetup()函数

ledcSetup()函数原型如下所示,其功能为设置 LEDC通道对应的频率和计数位数(占空比分辨率)

double ledcSetup(uint8_t chan, double freq, uint8_t bit_num)

其第一个参数chan表示通道号,取值为0 ~ 15即可设置16个通道,其中高速通道(0 ~ 7)由80MHz时钟驱动,低速通道(8 ~ 15)由 1MHz 时钟驱动;第二个参数freq为期望设置的频率;第三个参数为占空比分辨率的计数位数,其取值为0 ~ 20(该值决定后面 ledcWrite 方法中占空比可写值,比如该值写10,则占空比最大可写1023 即(1<<bit_num)-1

2、ledcAttachPin()函数

ledcAttachPin()函数原型如下所示,其功能为将指定的 LEDC 通道绑定到指定的 IO 口上以实现PWM的输出

void ledcAttachPin(uint8_t pin, uint8_t channel);

其第一个参数pin表示我们需要输出的IO口,第二个参数channel为我们指定的LEDC通道。

3、ledcWrite()函数

ledcWrite()函数原型如下所示,其功能为指定的 LEDC 通道的输出占空比

void ledcWrite(uint8_t chan, uint32_t duty)

其第一个参数chan为我们指定的LEDC通道,第二个参数duty表示占空比,其取值范围与ledcSetup()函数的bit_num有关。

四、PWM输出

编写代码如下所示,设置PWM频率为1KHz,分辨率为1024,输出占空比为50%

/* 设置led输出引脚号 */
uint8_t led_pin = 2;void setup()
{            Serial.begin(115200);delay(10); /* 1. 使用ledc通道1,设置频率为1kHz,分辨率为10位 */double f = ledcSetup(1, 1000, 10);  Serial.print("F=");Serial.println(f); /* 打印实际设置的频率*//* 2. 将LED引脚绑定到ledc通道1 */ledcAttachPin(led_pin, 1);/* 3. 设置ledc通道占空比为512/1024=50% */ledcWrite(1, 511);
}void loop()
{delay(100);
}

编译上传到开发板,串口打印如下所示,可以看到,1kHz频率设置成功

另外可以通过示波器抓取波形如下所示,可以看到其波形频率为1kHz,占空比为50%

五、呼吸灯实现

编写代码如下所示

/** ESP32使用PWM实现呼吸灯程序*//* 设置led输出引脚号 */
uint8_t led_pin = 2;
uint8_t led_ch = 1;void setup()
{            Serial.begin(115200);delay(10); /* 1. 使用ledc通道1,设置频率为1kHz,分辨率为10位 */double f = ledcSetup(led_ch, 1000, 10);  Serial.print("F=");Serial.println(f); /* 打印实际设置的频率*//* 2. 将LED引脚绑定到ledc通道1 */ledcAttachPin(led_pin, led_ch);/* 3. 设置ledc通道占空比为512/1024=50% */ledcWrite(led_ch, 511);
}void loop()
{uint8_t dir = 0;uint32_t pwmval = 255;while(1){if(dir) pwmval++;                 // dir==1  pwmval递增else pwmval--;                    // dir==0  pwmval递减if( pwmval == 0 ) dir=1;          // pwmval降低至0后,方向为递增if( pwmval >= 500) dir=0;         // pwmval递增到500后,方向改为递减ledcWrite(led_ch, pwmval);           // 修改占空比if( pwmval==0 ) delay(500);    // 在LED熄灭时等待300msdelay(5);}
}

编译上传到开发板,可以看到运行效果如下所示

六、附录

上一篇:ESP32 Arduino开发之路(1)— 搭建开发环境并点亮LED
下一篇:ESP32 Arduino开发之路(3)— 使用Ticker库的软件定时器

ESP32 Arduino开发之路(2)— 使用PWM实现LED呼吸灯相关推荐

  1. 小熊派gd32f303学习之旅(7)—使用PWM实现LED呼吸灯

    小熊派gd32f303学习之旅(7)-使用PWM实现LED呼吸灯 一.前言 通过查看gd32f30x的参考手册,可以知道gd32f303的通用定时器和高级定时器可以硬件生成PWM波,然后我们查看gd3 ...

  2. 【嵌入式知识12】使用PWM实现LED呼吸灯

    本次实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LED呼吸灯的效果 ...

  3. GD32F303的PWM实现LED呼吸灯的方法

    GD32F303的PWM实现LED呼吸灯的方法 首先配置TIMER1,定义初始化结构体变量 static void ConfigTIMER1ForPWMPB10(unsigned short arr, ...

  4. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  5. 利用PWM实现LED呼吸灯

    一.实验目的 本实验使用TIM3和TIM4,分别输出一个PWM波形,PWM的占空比随时间变化,去驱动你外接的一个LED以及最小开发板上已焊接的LED(固定接在 PC13 GPIO端口),实现2个 LE ...

  6. 使用STM32输出PWM波形LED呼吸灯的效果

    文章目录 前言 一.PWM简介 1.1 关于PWM 1.2 使用步骤 二.使用STM32CUBEMX实现2个 LED呼吸灯的效果 2.1.配置环境 2.2 代码配置 2.3.输出PWM波形 2.4 呼 ...

  7. stm32呼吸灯c语言程序,STM32使用PWM控制LED呼吸灯效果

    实验的STM32型号: STM32F103C8T6   48引脚 涉及到的知识: RCC,GPIO,TIMER,PWM 设置 *RCC需打开外部时钟 *GPIO查表得知 PA3 默认复用引脚 TIM2 ...

  8. 基于STM32的PWM驱动LED呼吸灯

    一,PWM基本原理 所谓PWM,就是脉冲宽度调制技术,其具有两个很重要的参数:频率和占空比.频率,就是周期的倒数:占空比,就是高电平在一个周期内所占的比例.如当周期T=T1+T2:T1为高电平时间,T ...

  9. Arduino ESP32利用PWM实现板载LED呼吸灯效果

    Arduino ESP32利用PWM实现板载LED呼吸灯效果 LEDC简介 LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的.它具有16个通道,可以生 ...

最新文章

  1. python语言中如何使用注释
  2. 泛型 与 实体类的相互转换
  3. 科大星云诗社动态20210510
  4. 分页探究--Filter+JSTL
  5. 在ListView中使用DropDownList绑定数据……好麻烦
  6. 修改 设备的mac 地址
  7. MapInfo MIF/MID文件格式描述
  8. 人生就是一场与自己的较量,社科院杜兰金融硕士项目引领你走得更远
  9. react-ative安装expo-linking后运行报错
  10. 特斯拉高管揭秘自动驾驶技术:48种神经网络上阵,最多可检测1000种物体
  11. 父传子 子传父以及兄弟之间传值
  12. 华三H3C端口聚合与链路聚合
  13. linux shell变量的,linux shell变量解析
  14. 点击tab栏如何让tab置顶
  15. Java毕设项目城市智能公交系统(java+VUE+Mybatis+Maven+Mysql)
  16. 微信小程序时间戳转日期,日期格式自己随意更改
  17. 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(hdoj--2191--多重背包)
  18. WLC-Virtual Interface IP
  19. 二分图——洛谷P1155 双栈排序
  20. P2P理财项目四个月开发总结

热门文章

  1. vscode设置获得管理员权限
  2. 解码营养行业新趋势 2023晶球益生菌与肠内营养健康高峰论坛圆满落幕
  3. 第三方社会化评论系统评测
  4. mysql 向下兼容_前言本文主要介绍的是关于Mysql8.0驱动getTables返回所有库的表的相关内容,MySQL Connector/J 8.0版本驱动向下兼容之前的5.5...
  5. @Transactional-隔离级别-二级缓存的扯谈
  6. 深度洞察:如何利用Matlab进行户外移动机器人GPS、里程计和IMU数据的后处理,实现全球定位和环境映射
  7. 小程序源码:聊天斗图微信表情包-多玩法安装简单
  8. 使用 SSL 加密的 JDBC 连接 SAP HANA 数据库
  9. Creation and validation of a chest X-ray dataset with eye-tracking and report dictation for AI devel
  10. 【Java-Stream篇(groupingBycollectingAndThen)】