ESP32中LED_PWM控制器

本文详细介绍了ESP32的LEDPWM控制器,包括其架构、工作原理及如何利用控制器实现呼吸灯效果。LEDPWM控制器可生成高达40MHz的PWM信号,并支持硬件渐变功能,无需CPU干预即可自动改变PWM信号的占空比。
背景

ESP32想做个typeC充电时呼吸灯的应用,看了开发手册发现带有个LED PWM控制器,可以无需处理器干预实现硬件的PWM脉宽的自由步进,从而实现呼吸灯渐变的效果,主要参考了官方的资料,把调试的过程记录下来
如有异议,欢迎留言指正

概述

LED PWM 控制器主要用于控制 LED,也可产生 PWM 信号用于其他设备的控制。LED_PWM控制器总共有16路通道,分为8路高速通道和8路低速通道,可以产生独立的波形来驱动 RGB LED 设备等。

LED PWM控制器最大可生成40MHz的频率,此时占空比分辨率为1,也就是50%固定脉宽;20Mhz时,占空比分辨率为3

LED PWM 控制器的高速通道和低速通道均支持硬件渐变功能【高低速定时器】,可在无需 CPU 干预的情况下自动改变 PWM 信号的占空比,也可由软件改变 PWM 信号的占空比,实现亮度和颜色渐变。此外,低速通道在 Sleep 模式下仍可运行。

架构

LED_PWM架构:4个高速定时器与4个低速定时器分别对应8个高速通道与8个低速通道
在这里插入图片描述

LED_PWM通道图
在这里插入图片描述

  • 时钟源选择器可以选择两个时钟源,分别是APB_CLK【由CPU_CLK产生】和REF_TICK【由APB_CLK分频产生】,下一期会单独讲下ESP32系统时钟树

  • 时钟通过18bit的分配器进行分频,计算公式LEDC_DEV_CLK = A*B/256,A代表高10bit整数部分,B代表低8位小数部分
    在这里插入图片描述

  • 分配器的输出时钟作为计数器的基准时钟,计数器最大有效位为20bit,计数达到2^ LEDC_HSTIMERx_DUTY_RES – 1时,会产生溢出中断;溢出后计数值回滚到0,这也就决定了PWM通道的频率

  • 输出频率的计算公式【由分频系数、计数器参与决定】
    在这里插入图片描述

低速通道与高速通道有两个区别

  • 高速定位器的时钟源采用了 REF_TICK 或 APB_CLK,低速定位器采用了 REF_TICK 或 SLOW_CLOCK。置位 LEDC_APB_CLK_SEL 寄存器,SLOW_CLOCK 的频率为 80 MHz,否则为 8 MHz。
  • 当软件修改了高速通道计数器的最大值或分频系数的话,输出信号的更新将会在下一次溢出中断之后生效。而低速通道在置位LEDC_LSTIMERx_PARA_UP 之后,立刻更新计数器的计数范围参数和分频器的分频系数。
通道

从通道图中不难发现,每个通道都有两个比较器,分别为high_level_comparatorlow_level_comparator

  • high_level_comparator:比较值是hpoint,当计数器的值达到hpiot时,输出高电平
  • low_level_comparator:比较值是lpoint,当计数器的值等于lpiot时,输出低电平
    在这里插入图片描述
寄存器
  • LEDC_CONF_REG:用于设置 SLOW_CLK 的频率【0 - 8MHz】【1 - 80MHz】
  • LEDC_HSCHn_CONF0_REG:选择高速定时器【0 - 3】与使能通道控制
  • LEDC_HSCHn_CONF1_REG:高速通道递增递减的占空比与步进的步长值
  • LEDC_HSCHn_DUTY_REG:控制输出占空比,配置LPOINT与HPOINT
  • LEDC_HSTIMERx_CONF_REG:选择高速时钟APB_CLKREF_TICK与计数范围、分频系数
  • LEDC_DUTY_CHNG_END_LSCHn_INT: 低速通道上的占空比渐变结束触发中断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值