Esp32的PWM控制也配置庫函數,以下就是PWM所用到的函數
1 PWM通道初始化設置
函數原型 | uint32_t ledcSetup(uint8_t chan, uint32_t freq, uint8_t bit_num) |
---|
函數功能 | 設定指定LEDC通道的PWM信號頻率和占空比分辨率 |
返回值 | 通道PWM信號的頻率 |
參數說明 | chan(LEDC通道號:0-15) freq(待設置的PWM脈寬信號的頻率) bit_num(計數位數,即PWM信號占空比的分辨率) 8:表示范圍0-255; |
設計參考 | //初始化LEDC通道3的信號頻率為1KHz,計數位數為10 ledcSetup(3,1000,10); |
2 PWM通道的綁定
函數原型 | void ledcAttachPin(uint8_t pin, uint8_t chan) |
---|
函數功能 | 設定指定LEDC通道綁定指定的GPIO引腳上,即由該引腳輸出LEDC的PWM信號 |
返回值 | 無 |
參數說明 | chan(LEDC通道號:0-15) pin (數字引腳) |
設計參考 | //初始化LEDC通道3綁定到GPIO14上 ledcAttachPin(4,3); |
3 PWM占空比的設置
函數原型 | void ledcWrite(uint8_t chan, uint32_t duty) |
---|
函數功能 | 設定指定LEDC通道的占空比數值 |
返回值 | 無 |
參數說明 | chan(LEDC通道號:0-15) duty (待設置的PWM占空比數值) 該數值范圍由通道初始化設置函數ledcSetup()中的計數位決定 |
設計參考 | //初始化LEDC通道3的頻率初始化為128Hz,計數位數為8,綁定到GPIO14引腳上,輸出占空比為25%的PWM信號 ledcSetup(3,128,8); ledcAttachPin(3,14); ledcWrite(3,64); |
4 項目
利用PWM輸出不同寬度的信號,實現輸出電壓大小不同,再作用到LED燈上,就可以實現呼吸燈的效果,代碼如下:
#include <Arduino.h>//進行PWM初始化
#define pwm1 2//定義pwm通道引腳
#define channel1 1//定義pwm通道 0-15void PWM_Init(){ledcSetup(channel1,200,8);ledcAttachPin(pwm1,1);
}void setup() {PWM_Init();
}void loop() {// put your main code here, to run repeatedly:for (int i = 0; i < 255; i++){ledcWrite(channel1,i);delay(10);}for(int i = 0;i < 255; i++){ledcWrite(channel1,255 - i);delay(10);}
}