驱动BPI-BIT上无源蜂鸣器的函数解析


#1

前言

教程的目的是解释如何使用其PWM功能控制ESP32的蜂鸣器,由于 BPI-BIT使用ESP32芯片的Arduino库尚未实现音调功能,所以不能使用arduino内的tone()函数来控制音调,因此只能使用PWM频率控制蜂鸣器这一种方法了。

介绍

本节中,我们将使用BPI-BIT的LED PWM功能。基本上,使用BPI-BIT的LED PWM,我们能够控制占空比和输出信号的频率。但是请注意,我们不需要使用PWM来控制蜂鸣器,因为我们只需要改变其频率即可保持恒定的占空比。尽管如前所述,我们无需更改占空比来控制蜂鸣器,但我们将对其进行更改以检查其发生情况。预期的效果是占空比的变化将影响蜂鸣器的音量大小。我们还将改变频率,这将影响产生的声音音调。

电子原理图

esp32-buzzer-diragram

函数解析

//设置LEDC通道对应的频率和计数位数(占空比分辨率)。
double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits)
    //channel: 通道号,取值0 ~ 15
    //freq: 期望设置频率
    //resolution_bits: 计数位数,取值0 ~ 20(该值决定后面ledcWrite方法中占空比可写值,比如该值写10,则占空比最大可写1023 即 (1<<resolution_bits)-1)

//将LEDC通道绑定到指定IO口上以实现输出。
void ledcAttachPin(uint8_t pin, uint8_t channel)
    //pin:开发板上蜂鸣器的引脚(通过原理图可知BPI-BIT的引脚为25)
    //channel:通道号

//指定通道输出一定占空比波形。
void ledcWrite(uint8_t channel, uint32_t duty)
    //channel:通道号
    //duty:PWM的值

//类似于arduino的tone,当外接无源蜂鸣器的时候可以发出某个声音(根据频率不同而不同)。
double ledcWriteTone(uint8_t channel, double freq)
    //channel:通道号
    //freq:要设定的频率

//该方法是上面方法的进一步封装,可以直接输出指定调式和音阶声音的信号
double ledcWriteNote(uint8_t channel, note_t note, uint8_t octave)
    //note:调式,相当于do、re、mi、fa……这些,取值为NOTE_C, NOTE_Cs, NOTE_D......
    //octave:音阶,取值0~7

总结

本节我们讲解了驱动BPI-BIT开发板上无源蜂鸣器的函数,在下一章节中我们将会运用本节所学的函数来做实验,对比PWM控制蜂鸣器和频率控制蜂鸣器的区别。