【STM32学习笔记】(10)——蜂鸣器实验详解
蜂鳴器實驗
蜂鳴器的簡介
蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、“ZZG”、“LB”、“JD”等)表示。
蜂鳴器的構造原理
????????1、壓電式蜂鳴器
壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發光二極管。
多諧振蕩器由晶體管或集成電路構成。當接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出100~500HZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發聲。
壓電蜂鳴片?由鋯鈦酸鉛或鈮鎂酸鉛壓電陶瓷材料制成。在陶瓷片的兩面鍍上銀電極,經極化和老化處理后,再與黃銅片或不銹鋼片粘在一起。
????????2、電磁式蜂鳴器
電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。
接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發聲。
蜂鳴器工作發聲原理圖
蜂鳴器的發聲原理由振動裝置和諧振裝置組成,而蜂鳴器又分為無源他激型與有源自激型。
無源他激型蜂鳴器的工作發聲原理是:方波信號輸入諧振裝置轉換為聲音信號輸出,無源他激型蜂鳴器的工作發聲原理圖如下圖:
?????????有源自激型蜂鳴器的工作發聲原理是:直流電源輸入經過振蕩系統的放大取樣電路在諧振裝置作用下產生聲音信號,有源自激型蜂鳴器的工作發聲原理圖如下圖:
蜂鳴器的分類
BUZZER蜂鳴器的分類:
????????1、按其驅動方式的原理分,可分為:有源蜂鳴器(內含驅動線路,也叫自激式蜂鳴器)和無源蜂鳴器(外部驅動,也叫他激式蜂鳴器);
????????2、按構造方式的不同,可分為:電磁式蜂鳴器和壓電式蜂鳴器;
????????3、按封裝的不同,可分為:DIP BUZZER(插針蜂鳴器)和SMD BUZZER(貼片式蜂鳴器);
????????4、按電流的不同,可分為:直流蜂鳴器和交流蜂鳴器。
????????其中,以直流最為常見壓電式蜂鳴器,用的是壓電材料,即當受到外力導致壓電材料發生形變時壓電材料會產生電荷。同樣,當通電時壓電材料會發生形變。
電磁式蜂鳴器,主要是利用通電導體會產生磁場的特性,用一個固定的永久磁鐵與通電導體產生磁力推動固定在線圈上的鼓膜。
????????由于兩種蜂鳴器發音原理不同,壓電式結構簡單耐用但音調單一,適用于報警器等設備。而電磁式由于音質好,所以多用于語音、音樂等設備。
有源蜂鳴器和無源蜂鳴器
????????有源蜂鳴器和無源蜂鳴器的外觀如下圖中a、b所示。
?
????????????????????????????????????????????????????????????????a)有源 b)無源?
判斷有源蜂鳴器和無源蜂鳴器的方法:
????????從上圖中a、b外觀上看,兩種蜂鳴器好像一樣,但仔細看,兩者的高度略有區別,有源蜂鳴器a,高度為9mm,而無源蜂鳴器b的高度為8mm。如將兩種蜂鳴器的引腳都朝上放置時,可以看出有綠色電路板的一種是無源蜂鳴器,沒有電路板而用黑膠封閉的一種是有源蜂鳴器。
????????進一步判斷有源蜂鳴器和無源蜂鳴器,還可以用萬用表電阻檔Rxl檔測試:用黑表筆接蜂鳴器 "-"引腳,紅表筆在另一引腳上來回碰觸,如果觸發出咔、咔聲的且電阻只有8Ω(或16Ω)的是無源蜂鳴器;如果能發出持續聲音的,且電阻在幾百歐以上的,是有源蜂鳴器。
????????有源蜂鳴器直接接上額定電源(新的蜂鳴器在標簽上都有注明)就可連續發聲;而無源蜂鳴器則和電磁揚聲器一樣,需要接在音頻輸出電路中才能發聲。
有源蜂鳴器與無源蜂鳴器的區別:
????????注意:這里的“源”不是指電源,而是指震蕩源。
????????也就是說,有源蜂鳴器內部帶震蕩源,所以只要一通電就會叫;
????????而無源內部不帶震蕩源,所以如果用直流信號無法令其鳴叫。必須用2K-5K的方波去驅動它。
????????有源蜂鳴器往往比無源的貴,就是因為里面多個震蕩電路。
無源蜂鳴器的優點是:
????????1. 便宜
????????2. 聲音頻率可控,可以做出“多來米發索拉西”的效果
????????3. 在一些特例中,可以和LED復用一個控制口
有源蜂鳴器的優點是:
????????程序控制方便
硬件設計
????????本章需要用到的硬件有:
????????1)指示燈 DS0
????????2)蜂鳴器
????????蜂鳴器的驅動信號連接在 STM32 的 PB8 上。
????????圖中我們用到一個 NPN 三極管(S8050)來驅動蜂鳴器,R33 主要用于防止蜂鳴器的誤發聲。
????????當 PB8 輸出高電平的時候,蜂鳴器將發聲,當 PB.8 輸出低電平的時候,蜂鳴器停止發聲。
?
軟件設計
?????? 在工程文件目錄下面新建兩個文件夾分別為:beep.c和beep.h。并在把源文件添加到工程,和添加頭文件的路徑。
?????? 在beep.c中的代碼為:
#include "beep.h" //初始化 PB8 為輸出口.并使能這個口的時鐘 //LED IO 初始化 void BEEP_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能 GPIOB 端口時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->GPIOB.8 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度為 50MHzGPIO_Init(GPIOB, &GPIO_InitStructure); //根據參數初始化 GPIOB.8GPIO_ResetBits(GPIOB,GPIO_Pin_8); //輸出 0,關閉蜂鳴器輸出 }????????這段代碼 僅包含 1 個函數:void BEEP_Init(void),該函數的作用就是使能 PORTB 的時鐘,同時配置 PB8 為推挽輸出。
????????在beep.h中的代碼為:
#ifndef __BEEP_H #define __BEEP_H #include "sys.h" //蜂鳴器端口定義 #define BEEP PBout(8) // BEEP,蜂鳴器接口 void BEEP_Init(void); //初始化 #endif????????通過位帶操作來實現某個 IO 口的輸出控制,BEEP 就直接代 表了 PB8 的輸出狀態。我們只需要令 BEEP=1,就可以讓蜂鳴器發聲。
????????在 main.c 里面編寫如下代碼:
#include "sys.h" #include "delay.h" #include "led.h" #include "beep.h" //ALIENTEK 精英 STM32 開發板實驗 2 //蜂鳴器實驗 int main(void) {delay_init(); //延時函數初始化 LED_Init(); //初始化與 LED 連接的硬件接口BEEP_Init(); //初始化蜂鳴器端口while(1){LED0=0;BEEP=0; delay_ms(300);LED0=1; BEEP=1; delay_ms(300);} }?
實驗現象
????????DS0 亮的時候蜂鳴器不叫,而 DS0 滅的時候,蜂鳴器叫(因為他們的有效信號相反)。間隔為 0.3 秒左右,符合程序設計。
總結
以上是生活随笔為你收集整理的【STM32学习笔记】(10)——蜂鸣器实验详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后端技术:MyBatis 知识点整理,值
- 下一篇: 程序人生:教你写出让同事抓狂的代码