ESP32在Arduino开发环境中的PWM的使用方法

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32在Arduino开发环境中的PWM的使用方法相关的知识,希望对你有一定的参考价值。

ESP32在Arduino开发环境中的PWM的使用方法


ESP32在Arduino开发环境中,如需使用PWM功能,需要通过LEDC的功能来实现,替代了analogWrite(pin, value) 方法。

ESP32 的 LEDC 总共有16个路通道(0 ~ 15),分为高低速两组,高速通道(0 ~ 7)由80MHz时钟驱动,低速通道(8 ~ 15)由 1MHz 时钟驱动。

相关函数接收

  • double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits):设置 LEDC 通道对应的频率和计数位数(占空比分辨率),该方法返回最终频率。

通道最终频率 = 时钟 / ( 分频系数 * ( 1 << 计数位数 ) );(分频系数最大为1024)

参数功能
channel为通道号,取值范围:0 ~ 15
freq设置频率
resolution_bits计数位数,取值0 ~ 20(该值决定后面 ledcWrite 方法中占空比可写值,比如该值写10,则占空比最大可写1023 即 (1<<resolution_bits)-1 )
  • void ledcWrite(uint8_t channel, uint32_t duty):指定通道输出一定占空比波形。
  • double ledcWriteTone(uint8_t channel, double freq):相当于 arduino 的 tone ,当外接无源蜂鸣器的时候可以发出某个声音(根据频率不同而不同)。
  • double ledcWriteNote(uint8_t channel, note_t note, uint8_t octave):该方法是上面方法的进一步封装,可以直接输出指定调式和音阶声音的信号。
  • uint32_t ledcRead(uint8_t channel):返回指定通道占空比的值。
  • double ledcReadFreq(uint8_t channel):返回指定通道当前频率(如果当前占空比为0 则该方法返回0)。
  • void ledcAttachPin(uint8_t pin, uint8_t channel):将 LEDC 通道绑定到指定 IO 口上以实现输出。
  • void ledcDetachPin(uint8_t pin):解除 IO 口的 LEDC 功能。

示例程序

// the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// setting PWM properties
const int freq = 5000;//设置频率
const int ledChannel = 0;//通道号,取值0 ~ 15
const int resolution = 8;//计数位数,取值0 ~ 20
 
void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);//将 LEDC 通道绑定到指定 IO 口上以实现输出
}
 
void loop(){
  // increase the LED brightness
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);//指定通道输出一定占空比波形
    delay(15);
  }

  // decrease the LED brightness
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}

以上是关于ESP32在Arduino开发环境中的PWM的使用方法的主要内容,如果未能解决你的问题,请参考以下文章

Arduino ESP32 Web Service PWM控制led亮度

Arduino ESP32:PWM驱动LED的ledcWrite功能

Arduino ESP32 PWM 通过示波器对实际产生的波形测量

Arduino ESP32利用PWM实现板载LED呼吸灯效果

esp32能不能在arduino上断点调试

ESP32使用Arduino环境,安装编译下载安装库