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


LEDC简介

LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的。它具有16个通道,可以生成独立的波形,这些波形可以用于驱动RGB LED器件。

LEDC通道分为两组,每组8个通道。一组LEDC通道以高速模式运行。此模式在硬件中实现,并提供PWM占空比的自动且无干扰的更改。另一组通道在低速模式下运行,PWM占空比必须由驱动程序在软件中进行更改。每组通道还能够使用不同的时钟源。

PWM控制器可以自动逐渐增加或减少占空比,从而允许淡入而不会受到任何处理器干扰。

相关函数

  • 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。

  • ledcAttachPin()函数

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

void ledcAttachPin(uint8_t pin, uint8_t channel);

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

  • ledcWrite()函数

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

void ledcWrite(uint8_t chan, uint32_t duty)

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

实例代码

实现效果:板载led灯实现忽亮忽灭的呼吸灯效果。

#include <Arduino.h>/* 使用ledc通道1,设置频率为1kHz,分辨率为10位 */
int freq = 1000;    // 频率
int channel = 0;    // 通道
int resolution = 10;   // 分辨率const int led = 2;
void setup()
{ledcSetup(channel, freq, resolution); // 设置通道ledcAttachPin(led, channel);  // 将通道与对应的引脚连接
}void loop()
{// 逐渐变亮for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle = dutyCycle + 5){ledcWrite(channel, dutyCycle);  // 输出PWMdelay(20);}// 逐渐变暗for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle = dutyCycle - 5){ledcWrite(channel, dutyCycle);  // 输出PWMdelay(20);}
}

实例代码二

输出固定占空比:PWM频率为2KHz,分辨率为2的8次幂256,输出占空比为50%

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

Arduino ESP32利用PWM实现板载LED呼吸灯效果相关推荐

  1. 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...

  2. STM32使用延时控制LED灯亮暗变换,LED呼吸灯效果

    STM32F407ZE 使用延时控制LED灯亮暗变换,实现LED呼吸灯效果 具体代码如下: main.c部分 #include <stm32f4xx.h> #include "s ...

  3. 单片机实现led呼吸灯效果 宏定义函数

    写了一个简单的LED呼吸灯效果代码,可作为C语言初学者for循环的练习,用宏定义方便调用. 四个变量可调亮灭时间,i大,灭的时间长: j大,灭得慢; m大,亮的时间长: n大,亮得慢. 用STM32F ...

  4. 使用STM32输出PWM波形并驱动LED呼吸灯

    目录 前言 一.PWM 二.工程代码 1.用STM32CubeMx创建工程 创建新项目 配置RCC和SYS 配置定时器TIME3 配置定时器TIM4 配置时钟 生成项目 2.用Keil编写代码 3.硬 ...

  5. 嵌入式——使用定时器输出PWM波形,实现 LED呼吸灯的效果

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

  6. 嵌入式学习--使用定时器输出PWM波形,实现LED呼吸灯的效果

    目录 1.任务要求 2.PWM介绍 关于PWM的定义 分频-计数时钟 计数器 定时器输出PWM的原理 定时器的初始化 3.配置STM32CubeMX 4.keil5的代码 5.运行结果 6.心得与体会 ...

  7. STM32输出PWM波形以及实现LED呼吸灯

    目录 一.PWM的简介 1.PWM的定义 2.PWM的优点 3.PWM的几种控制方法 (1)等脉宽PWM法 (2)随机PWM (3)SPWM法 4.PWM的主要参数 (1)PWM占空比 (2)PWM的 ...

  8. 基于STM32F4实现LED呼吸灯效果(PWM)

    文章目录 前言 一.定时器及PWM的概述 1.通用定时器 2.PWM 二.配置步骤及代码实现 总结 前言 今天我们来进行PWM的学习,今天使用到的是通用定时器TIM14 ,在此之前我们已经简单学习过定 ...

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

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

最新文章

  1. pytorch:固定部分层参数,固定单个模型
  2. drbd(三):drbd的状态说明
  3. oracle12c 不添加host,Oracle12c部署,允许远程访问-Go语言中文社区
  4. Asp.net中web.config配置文件详解
  5. 90度旋转 flip opencv_基于Hu距的图像旋转矫正之OpenCV实现
  6. different intergers
  7. [漏洞案例]thinkcmf 2.x从sql注入到getshell实战
  8. 单例模式(懒汉模式)
  9. 从有赞UI组件库看CSS BEM命名规范的好处
  10. 聚合广告SDK开发(一)——基础知识
  11. CSS使用小操作(隐藏滚动,实现三角行等...)
  12. 素描嘴巴注意这几个点,轻松画出头像神韵~
  13. 客户数据平台(CDP)是什么?
  14. 记录一篇触发器的文章
  15. 到底什么是“被动收入”?
  16. 万丰科技机器人排名_中国机器人公司排名是怎样的?
  17. kali安装Aria2
  18. 基于Quartus II软件的FPGA综合实验——多功能数字钟
  19. DIY个人智能家庭网关——硬件篇之433M无线接收解码器(二)
  20. python scrapy 出现no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicate

热门文章

  1. PhishTank恶意URL数据集分享
  2. CSDN网站中的版权投诉的标准
  3. JVM致命错误日志(hs_err_pid.log)解读
  4. 摄像头P2P软件提供,完美解决打洞及音视频、用户码传输问题。
  5. 软件开发、硬件开发、IPD产品开发 及 工程开发各阶段划分
  6. [7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析
  7. 一年中的某周转换成当前周星期一和星期日的日期
  8. QML---Repeater
  9. 基于滴滴云搭 SeaweedFS 存储系统
  10. 区块链智能合约教材出版