關(guān)于ESP32PWM的簡要說明
ESP32 SoC 滿載了非常有用的外設(shè),PWM 就是其中之一。是的。ESP32 的芯片中有一個專用的 PWM 硬件模塊。脈寬調(diào)制或簡稱PWM是一種成熟且廣泛使用的供電技術(shù)。
您可以使用 ESP32 的 PWM 來驅(qū)動 LED、電機(jī)(普通直流電機(jī)和無刷電機(jī))和智能燈。ESP32 中的 PWM 控制器由兩個主要子模塊組成:LED 控制或 LEDC 外設(shè)和電機(jī)控制脈寬調(diào)制器或 MCPWM 外設(shè)。
盡管我們將 ESP32 中的 PWM 演示限制為衰落 LED,但最好了解一下 ESP32 中帶有輸入捕獲模塊的電機(jī)控制 PWM (MCPWM) 模塊。
如果您曾經(jīng)使用過無刷直流 (BLDC) 電機(jī),您就會意識到感測轉(zhuǎn)子位置(使用霍爾效應(yīng)傳感器)對于精確速度控制的重要性。
ESP32發(fā)光二極管(LEDC)
ESP32 的 LEDC 外設(shè)由 16 個能夠生成獨(dú)立波形的 PWM 通道組成,主要用于 RGB LED 控制,但也可用于其他用途。
關(guān)于 ESP32 中的 LED PWM 控制器,您應(yīng)該注意幾個有趣的點(diǎn)。
16 個獨(dú)立的 PWM 通道,分為兩組,每組 8 個通道。
1 位和 16 位之間的可編程分辨率。
PWM波的頻率取決于PWM的分辨率。
自動增加/減少占空比,無需處理器干預(yù)。
配置ESP32的PWM通道
你還記得Arduino編程中的'analogWrite()'函數(shù)嗎?它是負(fù)責(zé)在Arduino UNO(和其他“Arduino”板)中生成PWM的功能。
由于 ESP32 的 LED PWM 中的幾乎所有內(nèi)容都是用戶可配置的(通道、分辨率和頻率),因此我們將使用一組不同的(專用)函數(shù)來配置 ESP32 中的 PWM,而不是使用“analogWrite()”功能。
以下是驅(qū)動程序公開的所有 LEDC API 的列表。這些函數(shù)是為 ESP32 的 Arduino IDE 端口編寫的。
ledcSetup(頻道、頻率、resolution_bits);
ledcAttachPin(pin, channel);
ledcWrite(channel, Occupational cycle);
ledcRead(channel);
ledcWriteTone(通道,頻率);
ledcWriteNote(channel, note, octave);
ledcReadFreq(channel);
ledcDetachPin(pin);
在 8 個函數(shù)中,我們將專注于前三個,因?yàn)樗鼈儗τ谏?PWM 更有用(也是最低要求)。
在 ESP32 中配置 PWM 通道時需要記住的幾個要點(diǎn):
由于有 16 個 PWM 通道,“channel”參數(shù)采用 0 到 15 之間的任何值。
接下來是PWM信號的頻率。您可以根據(jù)需要設(shè)置頻率,例如 1 KHz、5 KHz、8 KHz 和 10 KHz。
PWM 的分辨率也是可配置的,ESP32 PWM 可以編程在 1 位到 16 位分辨率之間的任何位置。
PWM頻率和分辨率成反比,并且取決于時鐘源。因此,在選擇頻率和分辨率值時要小心。
最后,為PWM輸出分配一個GPIO引腳。您可以分配任何 GPIO 引腳,但在分配時要小心(不要使用已經(jīng)使用的 GPIO 引腳,如 UART、SPI 等)。
下表顯示了幾種常用的PWM頻率和分辨率。

在ESP32中使用PWM的LED衰落
隨著 ESP32 中 PWM 的所有必要信息的發(fā)布,我們現(xiàn)在可以繼續(xù)實(shí)施我們的第一個項(xiàng)目 ESP32 PWM 使 LED 褪色。這是一個非常簡單的項(xiàng)目,連接到 ESP32 GPIO 引腳的 LED 的亮度會逐漸反復(fù)增加和減少。[面向初學(xué)者的 ESP32 項(xiàng)目]
這個項(xiàng)目更多的是了解 LEDC 的功能:ledcSetup、ledcAttachPin 和 ledcWrite,以及如何在 ESP32 中生成 PWM,而不是衰落的 LED 本身。
所需組件
ESP32 開發(fā)套件開發(fā)板
3 個 5 毫米發(fā)光二極管
?220Ω電阻
3 x 5KΩ 電位計(jì)
面包板
連接線
微型 USB 連接線
電路圖
下圖顯示了使用 ESP32 PWM 控制器淡入 LED 淡入淡出的連接。

法典
您可以使用任何 GPIO 引腳來輸出 PWM 信號。所以,我正在使用GPIO 16,這也是UART2 RX引腳。接下來,我們必須使用“l(fā)edcSetup”功能設(shè)置LEDC通道。第一個參數(shù)是通道。0 到 15 之間的任何值都可以作為通道給出。
下一個參數(shù)是頻率。您可以提供任何頻率,但為了方便起見,我將頻率設(shè)置5KHz。此外,您必須設(shè)置PWM的分辨率。此值必須是介于1和 16之間的數(shù)字。我選擇了10位分辨率。
有關(guān)其余設(shè)置,請參閱以下代碼,其中我注釋了重要行。

注意:您可以將多個 GPIO 引腳連接到同一個LEDC PWM 通道。如果這樣做,所有 GPIO 引腳將共享通道的屬性(分辨率和頻率)。
帶ADC的ESP32脈寬調(diào)制器
ESP32 中 PWM 的一個重要特點(diǎn)是所有16個通道都可以獨(dú)立配置,即每個通道都可以有自己的分辨率和頻率。為了演示這一點(diǎn),我們利用ADC外設(shè),通過轉(zhuǎn)動電位計(jì)獨(dú)立調(diào)整三個不同LEDC PWM通道的占空比。
三個 5KΩ 電位器連接到 ESP32 的三個 ADC 輸入引腳。根據(jù)ADC的輸出,我們將設(shè)置三個PWM通道的占空比,這些通道配置了不同的參數(shù)。
為了便于理解,我將三個 LED:紅色、綠色和藍(lán)色連接到三個 GPIO 引腳。這三個GPIO引腳連接到三個不同的LEDC PWM通道,每個通道都使用自己的頻率和分辨率進(jìn)行初始化。

要記住的另一個重要點(diǎn)是 ESP32 的 ADC 分辨率為 12 位。因此,我們必須仔細(xì)地將其映射到PWM分辨率,以獲得全方位的控制。
電路圖
下圖顯示了使用ADC(電位計(jì))調(diào)整PWM通道占空比的連接。

法典

結(jié)論
有關(guān) ESP32 PWM 外設(shè)的完整教程。您學(xué)習(xí)了如何在 ESP32 中使用 PWM 來淡入 LED 的淡入淡出,如何配置 PWM 通道、設(shè)置頻率和分辨率。您還學(xué)習(xí)了如何獨(dú)立配置 ESP32 中的 PWM 通道。
-
led
+關(guān)注
關(guān)注
244文章
24731瀏覽量
692651 -
控制器
+關(guān)注
關(guān)注
114文章
17886瀏覽量
195298 -
PWM
+關(guān)注
關(guān)注
116文章
5894瀏覽量
226727 -
soc
+關(guān)注
關(guān)注
40文章
4635瀏覽量
230290 -
ESP32
+關(guān)注
關(guān)注
27文章
1226瀏覽量
22449
發(fā)布評論請先 登錄
利用ESP32 PWM信號控制LED的亮度
如何在ESP-IDF的組件中使用傳感器服務(wù)器和客戶端模型?如何使用esp32 ble Mesh協(xié)議構(gòu)建傳感器網(wǎng)絡(luò)?
如何在Windows 10上啟動/設(shè)置ESP8266/ESP32 RTOS環(huán)境?
ESP32教程之如何在Windows系統(tǒng)上搭建開發(fā)環(huán)境
如果在Zephyr內(nèi)如何使用ESP32藍(lán)牙
ESP32_PWM學(xué)習(xí)總結(jié)
esp32小車實(shí)驗(yàn)
ESP32系列芯片的規(guī)格
如何在ESP32/ESP8266上使用MicroPython
使用Visuino DIY如何在M5StickC ESP32上顯示時間
【DFRobot Beetle ESP32-C3開發(fā)板試用體驗(yàn)】WEBSOKET—PWM—LED
ESP32 PWM驅(qū)動電機(jī)
如何使用ESP32的LEDC進(jìn)行PWM控制?
如何在Arduino IDE中安裝ESP32開發(fā)環(huán)境
如何在ESP32中使用PWM
評論