24小时联系电话:18217114652、13661815404

中文

您当前的位置:
首页>
电子资讯>
技术专题>
ESP32 PWM

技术专题

ESP32 PWM


ESP32 PWM

脉宽调制(PWM

脉冲宽度调制(PWM)是一种创建可控制的波形数字信号以用于各种应用的技术。在不同的微控制器设备中实现硬件PWM的设计有不同的变化。但是它们在最终输出和用法方面基本上是相同的。

PWM内部硬件以及PWM如何工作?

这是典型PWM外设的通用硬件图。

如上图所示,PWM信号发生器的主要组件是定时器模块。计时器由来自主系统时钟的时钟信号提供时钟。并且它在每个时钟周期从0开始计数,并递增1

当定时器递增计数时,其值正由两个比较器进行比较。如果达到占空比寄存器的值,则会生成一个匹配信号,该信号会复位引脚状态,使其变为LOW。定时器将继续计数直到达到周期寄存器的值,然后另一个比较器将产生一个匹配信号,该信号将PWM引脚设置为高电平状态。计时器返回到0,重复该过程,依此类推!

PWM信号属性

典型的PWM信号具有以下属性,我们可以通过对微控制器的PWM外设的寄存器进行编程来控制它们。例如PWM频率,PWM分辨率和PWM占空比。通过更改PWM的占空比参数,脉冲的宽度也会发生变化。因此,波形的平均电压也会发生变化,这会产生某种可控的模拟输出(不完全是)。

PWM频率仅为1 / T,其中T是每个周期的周期。您可以根据要控制的频率将频率设置为所需的任何值。在以后的教程中,我们将对此进行更深入的研究,但是现在,我们希望对LED进行调光。因此,对于该应用,1kHzPWM频率就足够了。

最后一个PWM参数,分辨率是衡量我们可以控制多少个离散占空比的指标。查看上面的GIF图像,您会注意到PWM占空比在每个级别上都增加了10%。因此,占空比的总控制离散级别为10个级别。PWM分辨率= log2Num_of_Levels= log210= 3.3位。

将分辨率设置为8位将使我们的总占空比等级= 2 n,其中n是分辨率(以位为单位)。因此,占空比整个范围为2 8 = 256级。因此,占空比值范围为[0 – 255]。分辨率越高,控制占空比越精细。

ESP32硬件PWM

在本部分中,我将为您介绍ESP32 LED PWM外设的硬件功能,它的工作方式以及它具有什么样的功能。因此,您可以根据自己的特定应用程序需求以有效的方式使用它。

ESP32 PWM引脚

ESP32 PWM硬件有16个不同的通道,而不是管脚。您可以将这些通道中的任何一个分配给所需的任何GPIO引脚。但是它必须具有输出驱动器,或者换句话说,它应该能够作为输出引脚工作。

在我们的ESP32开发板上,除4个引脚外,所有GPIO引脚均可配置为以输出模式运行。这些引脚仅用于输入,因此它们不支持PWM功能。您可以避免使用这些别针,并且可以自由使用其他任何别针。

请参考此ESP32 devkit开发板引脚图。

(如果不清楚,请右键单击并在新标签页中将其打开以查看大图)

ESP32 PWM通道

ESP32 PWM控制器主要用于控制LED的强度,尽管它也可以用于生成其他目的的PWM信号。它具有16个通道,可以生成独立的PWM波形。

ESP32 PWM控制器有8个高速通道和8个低速通道,总共有16个通道。根据速度将它们分为两组。每个组有4个计时器/ 8个通道。这意味着每两个通道共享一个相同的计时器。因此,我们无法独立控制每对通道的PWM频率。

这是数据手册中的ESP32 PWM硬件图。

因此,这意味着我们有16个通道可以独立控制其PWM占空比。但是频率必须在路由到同一计时器的每对通道之间共享。如果您需要8个以上具有不同频率的不同PWM信号,则应考虑寻找外部解决方案(例如I2C PWM控制器IC)。

您可以使用ESP32 PWM引脚来控制许多设备,从小型LED到使用MOSFET驱动器以及类似功能的大功率电机。在本节中,我将逐步介绍如何配置和控制PWM输出引脚。

步骤1 –确定要使用的[0 – 15] PWM通道。

步骤2 –决定将GPIO引脚路由到此PWM Ch信号。

步骤3 –使用此功能将该PWM Ch分配给选定的GPIO引脚。

步骤4 –确定所选通道[1Bit – 16Bits]所需的PWM分辨率。将分辨率设置为8Bits,可以得到一个占空比范围[0 – 255]。将其设置为10Bits时,范围为[0 – 1023]。等等!

步骤5 –确定所选通道所需的PWM频率。它可以是任何东西,但对于我们的LED调光示例,我们将其设置为1kHz或(1000Hz)。

步骤6 –使用此功能以选定的频率和分辨率配置此PWM通道。

ledcSetup PWM_ChPWM_FreqPWM_Res ;

步骤7 –现在,您可以使用下面的此功能通过更改占空比来控制此PWM引脚。

ledcWrite PWM_ChDutyCycle ;

请输入搜索关键字

确定