24小(xiǎo)时联系電(diàn)话:18217114652、13661815404
中文(wén)
- 您当前的位置:
- 首页>
- 電(diàn)子资讯>
- 技术专题>
- ESP32 PWM
技术专题
ESP32 PWM
ESP32 PWM
脉宽调制(PWM)
脉冲宽度调制(PWM)是一种创建可(kě)控制的波形数字信号以用(yòng)于各种应用(yòng)的技术。在不同的微控制器设备中实现硬件PWM的设计有(yǒu)不同的变化。但是它们在最终输出和用(yòng)法方面基本上是相同的。
PWM内部硬件以及PWM如何工作?
这是典型PWM外设的通用(yòng)硬件图。
如上图所示,PWM信号发生器的主要组件是定时器模块。计时器由来自主系统时钟的时钟信号提供时钟。并且它在每个时钟周期从0开始计数,并递增1。
当定时器递增计数时,其值正由两个比较器进行比较。如果达到占空比寄存器的值,则会生成一个匹配信号,该信号会复位引脚状态,使其变為(wèi)LOW。定时器将继续计数直到达到周期寄存器的值,然后另一个比较器将产生一个匹配信号,该信号将PWM引脚设置為(wèi)高電(diàn)平状态。计时器返回到0,重复该过程,依此类推!
PWM信号属性
典型的PWM信号具有(yǒu)以下属性,我们可(kě)以通过对微控制器的PWM外设的寄存器进行编程来控制它们。例如PWM频率,PWM分(fēn)辨率和PWM占空比。通过更改PWM的占空比参数,脉冲的宽度也会发生变化。因此,波形的平均電(diàn)压也会发生变化,这会产生某种可(kě)控的模拟输出(不完全是)。
PWM频率仅為(wèi)1 / T,其中T是每个周期的周期。您可(kě)以根据要控制的频率将频率设置為(wèi)所需的任何值。在以后的教程中,我们将对此进行更深入的研究,但是现在,我们希望对LED进行调光。因此,对于该应用(yòng),1kHz的PWM频率就足够了。
最后一个PWM参数,分(fēn)辨率是衡量我们可(kě)以控制多(duō)少个离散占空比的指标。查看上面的GIF图像,您会注意到PWM占空比在每个级别上都增加了10%。因此,占空比的总控制离散级别為(wèi)10个级别。PWM分(fēn)辨率= log2(Num_of_Levels)= log2(10)= 3.3位。
将分(fēn)辨率设置為(wèi)8位将使我们的总占空比等级= 2 n,其中n是分(fēn)辨率(以位為(wèi)单位)。因此,占空比整个范围為(wèi)2 8 = 256级。因此,占空比值范围為(wèi)[0 – 255]。分(fēn)辨率越高,控制占空比越精细。
ESP32硬件PWM
在本部分(fēn)中,我将為(wèi)您介绍ESP32 LED PWM外设的硬件功能(néng),它的工作方式以及它具有(yǒu)什么样的功能(néng)。因此,您可(kě)以根据自己的特定应用(yòng)程序需求以有(yǒu)效的方式使用(yòng)它。
ESP32 PWM引脚
ESP32 PWM硬件有(yǒu)16个不同的通道,而不是管脚。您可(kě)以将这些通道中的任何一个分(fēn)配给所需的任何GPIO引脚。但是它必须具有(yǒu)输出驱动器,或者换句话说,它应该能(néng)够作為(wèi)输出引脚工作。
在我们的ESP32开发板上,除4个引脚外,所有(yǒu)GPIO引脚均可(kě)配置為(wèi)以输出模式运行。这些引脚仅用(yòng)于输入,因此它们不支持PWM功能(néng)。您可(kě)以避免使用(yòng)这些别针,并且可(kě)以自由使用(yòng)其他(tā)任何别针。
请参考此ESP32 devkit开发板引脚图。
(如果不清楚,请右键单击并在新(xīn)标签页中将其打开以查看大图)
ESP32 PWM通道
ESP32 PWM控制器主要用(yòng)于控制LED的强度,尽管它也可(kě)以用(yòng)于生成其他(tā)目的的PWM信号。它具有(yǒu)16个通道,可(kě)以生成独立的PWM波形。
ESP32 PWM控制器有(yǒu)8个高速通道和8个低速通道,总共有(yǒu)16个通道。根据速度将它们分(fēn)為(wèi)两组。每个组有(yǒu)4个计时器/ 8个通道。这意味着每两个通道共享一个相同的计时器。因此,我们无法独立控制每对通道的PWM频率。
这是数据手册中的ESP32 PWM硬件图。
因此,这意味着我们有(yǒu)16个通道可(kě)以独立控制其PWM占空比。但是频率必须在路由到同一计时器的每对通道之间共享。如果您需要8个以上具有(yǒu)不同频率的不同PWM信号,则应考虑寻找外部解决方案(例如I2C PWM控制器IC)。
您可(kě)以使用(yòng)ESP32 PWM引脚来控制许多(duō)设备,从小(xiǎo)型LED到使用(yòng)MOSFET驱动器以及类似功能(néng)的大功率電(diàn)机。在本节中,我将逐步介绍如何配置和控制PWM输出引脚。
步骤1 –确定要使用(yòng)的[0 – 15] PWM通道。
步骤2 –决定将GPIO引脚路由到此PWM Ch信号。
步骤3 –使用(yòng)此功能(néng)将该PWM Ch分(fēn)配给选定的GPIO引脚。
步骤4 –确定所选通道[1Bit – 16Bits]所需的PWM分(fēn)辨率。将分(fēn)辨率设置為(wèi)8Bits,可(kě)以得到一个占空比范围[0 – 255]。将其设置為(wèi)10Bits时,范围為(wèi)[0 – 1023]。等等!
步骤5 –确定所选通道所需的PWM频率。它可(kě)以是任何东西,但对于我们的LED调光示例,我们将其设置為(wèi)1kHz或(1000Hz)。
步骤6 –使用(yòng)此功能(néng)以选定的频率和分(fēn)辨率配置此PWM通道。
ledcSetup (PWM_Ch,PWM_Freq,PWM_Res );
步骤7 –现在,您可(kě)以使用(yòng)下面的此功能(néng)通过更改占空比来控制此PWM引脚。
ledcWrite (PWM_Ch,DutyCycle );