![4c99d3d3-3115-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/4c99d3d3-3115-eb11-8da9-e4434bdf6706.png)
有源蜂鸣器与无源蜂鸣器的区别
这里的“源”不是指电源,而是指震荡源。
内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的。
内部没有震荡源的为无源蜂鸣器,给直流电不能响,需要提供一定频率的脉冲信号才能够有响声,而且声音随着频率的变化而变化。
所以我们要想实现蜂鸣器演奏音乐的话,只能选用无源蜂鸣器。
单片机驱动蜂鸣器发声原理" class="reference-link">单片机驱动蜂鸣器发声原理
单片机上面使用的蜂鸣器一般都是无源电磁式的蜂鸣器。它由外壳、振动膜片、磁铁、电磁线圈、及振荡器等组成。
接通电源后,电流通过电磁线圈,致使电磁线圈工作产生磁场,振动膜片在磁铁以及电磁线圈的相互作用下,周期性地振动发出一定频率的声音。
单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要设计一个电流放大的电路,具体实现如下图所示。
![4d99d3d3-3115-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/4d99d3d3-3115-eb11-8da9-e4434bdf6706.png)
有源蜂鸣器和无源蜂鸣器的驱动电路是一样的,都是如上图所示。
有源蜂鸣器,只需要改变Buzzer(PB9)引脚的高低电平即可控制蜂鸣器。
当Buzzer引脚为低电平的时候,三极管导通,蜂鸣器响;
当Buzzer引脚为高电平的时候,三极管截止,蜂鸣器不响。
注意此处使用的蜂鸣器为3.3V/5V兼容版本的蜂鸣器。
无源蜂鸣器,Buzzer引脚要提供一个脉冲信号才能响。下面封装了一个输入参数为频率的无源蜂鸣器驱动函数。
频率的倒数即是时间,然后此处计算的是T/2的时间,所以为1秒钟是1000000us,一半即500000&#x