一起玩儿物联网人工智能小车(ESP32)——21. ESP32的LED PWM控制器说明

摘要:本文介绍ESP32的LED PWM控制器的详细原理说明

ESP32芯片提供了2种用于输出PWM的信号的PWM控制器,一种LED控制器(LEDC),一种是马达PWM控制器(MCPWM)。其中MCPWM是专门用于马达调速控制的控制器,这个留在以后再讲解。今天讲解相对简单的LEDC。

LEDC虽然叫LED控制器,是主要用来控制LED,但其产生的信号用于其他设备的控制也是没有问题的。

LEDC是指LED PWM控制器,它有16路外接通道,其中8路为高速通道,另外8路为低速通道。每一个通道都可以使用不同的时钟源。

高速通道模式在硬件中实现,可以自动且无干扰地改变PWM占空比。而低速通道模式下的PWM占空比则需要由软件中的驱动器改变。高速模式的优点是可平稳地改变定时器设置。也就是说,高速模式下如定时器设置改变,在该定时器的下一次溢出中断后自动生效。而更新低速定时器的设置时,并不会自动生效,需要由软件通过函数调用来使其生效。

在使用LED PWM控制器生成PWM信号时,首先需要进行以下两个设置:

一、定时器配置

在进行定时器的配置时,需要给出以下一些信息:

  1. 速度模式,也就是使用LEDC的高速模式还是低速模式。
  2. 定时器索引,指定使用哪一个定时器。
  3. PWM信号频率,用于指定生成PWM信号的频率。
  4. PWM信号占空比分辨率,这个参数决定着PWM信号的占空比。PWM信号的频率参数和占空比分辨率是相关联的,频率越高,占空比分辨率越低,反之亦然。
  5. 时钟源,指定LEDC所使用的时钟源,这个时钟源也与PWM信号频率相关,时钟源的频率越高,可以配置的PWM信号频率上限也就越高。

下表列举了ESP32 LEDC时钟源的时钟频率、速度模式和相关特性:Á

时钟名称

时钟频率

速度模式

时钟功能

APB_CLK

80 MHz

高速 / 低速

/

REF_TICK

1 MHz

高速 / 低速

支持动态调频 (DFS) 功能

RC_FAST_CLK

~ 8 MHz

低速

支持动态调频(DFS)功能,支持 Light-sleep 模式

那么PWM信号占空比最大分辨率与指定的时钟源频率、输出的PWM信号频率之间的关系如下公式所示:

其中:floor()函数为向下取整。

下表为不同时钟源对应常用的PWM信号频率的PWM信号占空比最大分辨率和PWM信号的最高精度。

LEDC时钟源

LEDC输出(PWM)频率

占空比最大分辨率

最高精度

APB_CLK (80 MHz)

1 kHz

16 bit

1/65536

APB_CLK (80 MHz)

5 kHz

13 bit

1/8192

APB_CLK (80 MHz)

10 kHz

12 bit

1/4096

RTC8M_CLK (8 MHz)

1 kHz

12 bit

1/4096

RTC8M_CLK (8 MHz)

8 kHz

9 bit

1/512

REF_TICK (1 MHz)

1 kHz

9 bit

1/512

所以,在开发的时候,要依据计划输出的PWM信号的频率和可以选取的时钟源来计算出所生成PWM信号占空比的最高精度,以此来判断是否满足设计的要求。

配置完LEDC的定时器后,还需要进行通道配置。

二、通道配置

通道配置的有些参数与前面定时器配置的参数含义相同,这里就不解释了。最主要的不同就是要指定PWM信号输出GPIO引脚,也就是由那个GPIO引脚输出PWM信号。在选择GPIO引脚的时候同样要注意之前说的注意事项。最关键的就是两点,一是有特殊功能且被占用的引脚不能使用,另一个就是只有输入功能的GPIO不能使用。

在完成通道的配置后,该通道便开始运行,并在选定的GPIO引脚上生成由定时器设置指定的频率和占空比的PWM信号。

PWM信号在输出的过程中,开发人员还可以通过软件来改变PWM信号的频率和占空比。另外,LEDC也提供了硬件自动改变占空比,也就是不在CPU的干预下,可以自动的改变输出PWM信号的占空比,这个功能主要用来实现LED的颜色和亮度的渐变。

好了,ESP32的LEDC PWM控制器的基本知识就介绍到这里了,似乎有些复杂,一时理解不了也没关系,初期能够照着例子把程序做出来就可以了。这么多参数也不是都需要配置的,开发软件会给很多参数选取合适的默认值。所以,真正开发起来,并不是那么的难。

今天就到这里了,接下来会讲解如何用Mixly实现PWM波形的输出。

你可能感兴趣的:(ESP32,物联网,单片机)