使用频率和PWM控制蜂鸣器实验


#1

前言

本节我们来对比PWM和频率控制BPI-BIT开发板上面的蜂鸣器产生的不同效果。

软硬件

测试使用的开发板: BPI-BIT

测试使用的软件: platformIO

示例代码

PWM控制蜂鸣器

#include <Arduino.h>
#define buzzer 25 
//我们将使用通道0和8位分辨率作为占空比。对于频率,我们将仅设置2000 Hz以进行初始设置。
int freq = 2000;
int channel = 0;
int resolution = 8;
void setup()
{ 
 //使用ledcSetup功能设置PWM,该功能接收PWM通道,频率和占空  比分辨率作为输入。
  ledcSetup(channel, freq, resolution);
 //我们将通过调用ledcAttachPin函数将PWM通道连接到BPI-BIT的实际GPIO 。这接收GPIO和通道作为输入。我将使用BPI-BIT的 GPIO 25。
  ledcAttachPin(buzzer, channel);
}

void loop()
{
   //我们调用ledcWriteTone函数,将PWM通道和要设置的频率作为输入。我们将其设置为2000Hz,作为初始配置。
   ledcWriteTone(channel,freq);//固定频率
    
   //我们将执行一个for循环,该循环从0的PWM开始,并在每次迭代时将其增加10。由于我们指定了8位的分辨率,因此我们可以在0到255之间改变占空比。
   for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle = dutyCycle + 10)
    {
       //要设置占空比,我们只需要调用ledcWrite函数,将要设置的通道和占空比值作为输入传递即可。
        ledcWrite(channel,dutyCycle);
        delay(1000);
    }
   
}

频率控制蜂鸣器

#include <Arduino.h>
#define buzzer 25 
int freq = 2000;
int channel = 0;
int resolution = 8;
void setup()
{ 
  ledcSetup(channel, freq, resolution);
  ledcAttachPin(buzzer, channel);
}

void loop()
{
    //将占空比固定为125(大约50%)开始
    ledcWrite(channel,125);//固定占空比
    //我们将执行与上一个相似的for循环,但是这次以0 Hz的频率开始,并将其增加250,直到10000 Hz。
    for(int freq = 255; freq <10000; freq = freq + 250)
    {
     //要设置频率,我们只需要调用ledcWriteTone函数,将要设置的通道和频率作为输入传递即可。
     ledcWriteTone(channel,freq);
     delay(1000);
    }
}

效果对比

PWM控制蜂鸣器

频率控制蜂鸣器

总结

PWM的变化使蜂鸣器发出的音量大小发生变化,而音调未发生变化。频率的变化使蜂鸣器发出的音调发生了变化,而音量大小不变。