如果你了解Arduino Uno編程,你一定看到Arduino相關板在Arduino IDE中使用analogWrite函數生成PWM。但是在 Arduino IDE 中使用不同的函數為 ESP32 產生 PWM 信號。按照以下步驟設置所有脈寬調製通道的參數:
有 16 個 PWM 通道可用。您需要選擇 0 到 15 之間的任何通道。
第二步是選擇數字信號的頻率。例如,您可以將頻率設置為 10,000 赫茲、5000 赫茲或您想要的任何其他值。
ESP32 板支持 1 位到 16 位的 PWM 分辨率。但請記住,PWM 信號的頻率和分辨率會相互成反比。所以要達到最大頻率,最佳分辨率是 8 位。
我們將使用 8 位分辨率,佔空比值將在 0-255 之間變化。佔空比定義了信號的寬度或信號的導通時間。
最後一步是使用您自己選擇的 PWM 通道連接 GPIO PIN。
現在讓我們看看如何在 PWM 庫中設置這些參數。為此使用了三個函數。
第一個用於設置與通道的PIN
ledcSetup(PWM_Channel_Number, Frequency, resolution):您應該傳遞三個參數作為此函數的輸入,通道編號、頻率和 PWM 通道的分辨率。我們只在 setup 函數中使用這個函數。
第二個函數用於設置 PWM 控制器的頻率、分辨率和通道
ledcAttachPin(GPIO_PIN , CHANNEL):這個函數接受兩個參數。一個是我們想要獲得信號輸出的 GPIO 引腳,第二個參數是我們產生信號的通道。
第三個函數用於生成具有指定佔空比的信號
ledcWrite(CHANNEL, DUTY_CYCLE) : ledcWrite 函數用於生成具有佔空比值的信號。
如果您對脈寬調製的概念不清楚,您一定想知道可變佔空比信號是什麼意思?可變佔空比意味著我們希望在輸出端有數字波形,其占空比會隨著一些延遲從低值增加到高值。例如,當我們打開開發板時,最初的佔空比為零,然後它會開始以 1 的步長增加,並有一些延遲。完成這項任務非常容易。您只需要更改 ledcWrite 函數內的佔空比值。所以我們在最後一個例子中使用的其餘代碼將保持不變,除了可變佔空比部分而不是修復。此處給出了此示例的代碼。
除了循環功能部分外,代碼與上一個程序類似。在循環部分內部,使用了另一個 for 循環。在 for 循環內部,佔空比的起始值為零,並且隨著 for 循環的每次迭代,其值以 1 的增量遞增。每次迭代都在 100 毫秒的延遲後發生。因此,您將在示波器上觀察脈衝寬度遞增的信號。您可以在這些不同脈衝寬度的圖片中看到結果。