本章概述思維導圖:
51單片機驅動蜂鳴器模塊教程
蜂鳴器簡介
蜂鳴器是一種將電信號轉換為聲音信號的電子元件,廣泛應用于報警、提示、通知等場景。其核心原理基于壓電效應或電磁感應:因此可分為兩種類型蜂鳴器:壓電式蜂鳴器和電磁式蜂鳴器;
????????壓電式蜂鳴器:利用壓電陶瓷片在電壓變化下產生機械形變,從而振動發聲;
????????電磁式蜂鳴器:通過電磁線圈與磁鐵的相互作用,驅動振膜周期性振動發聲;
如圖所示:壓電式蜂鳴器和電磁式蜂鳴器;
在以后遇到蜂鳴器我們該如何區分呢?
按照驅動方式分:
????????有源蜂鳴器內置振蕩源:內部集成振蕩電路,通電即可發聲,聲音頻率固定;
????????無源蜂鳴器無內置振蕩源:需外部輸入方波信號驅動,聲音頻率可控(可發出不同音調);
按照結構分類:
????????壓電式蜂鳴器;
????????電磁式蜂鳴器;
有非常多的人會理解為:把有源蜂鳴器當成壓電式蜂鳴器,無源蜂鳴器當成電磁式蜂鳴器。這樣的理解是錯誤的小伙伴們。不管是壓電式或者電磁式都可以根據內部是否配置振蕩源來確定是有源還是無源;
蜂鳴器硬件電路原理圖分析
在開發板中使用的蜂鳴器為壓電式無源蜂鳴器;
可以觀察蜂鳴器的兩個引腳,上引腳是接入高電平。下腳是接入ULN2003D芯片的OUT5輸出腳,而ULN2003D芯片的IN5輸入腳連接了MCU的P25腳來實現控制蜂鳴器。從而可以判斷出MCU的P25腳輸出一個連續的高低電平ULN2003D芯片則輸出一個連續的低高電平形成一個方波信號就可以使得蜂鳴器驅動啦。
這里有小伙伴會有疑問,為什么不直接使MCU的P25腳直接連接蜂鳴器的下腳呢,是因為MCU I/O口無法直接驅動蜂鳴器。所以使用ULN2003D芯片,ULN2003D芯片為達林頓晶體管陣列,單路可承受500mA電流,能輕松驅動蜂鳴器,同時分擔MCU的電流負載。
小知識點:ULN2003D驅動芯片的輸入腳為低電平時,則對應輸出腳為高電平。輸入腳為高電平時,則對應輸出腳為低電平。
驅動蜂鳴器軟件編程設計
要使得蜂鳴器驅動,要產生1.5KHZ~5KHZ的頻率脈沖信號,換算周期時間為:0.7ms~0.2ms
意思就是指我們要設計高低電平的一個周期時間為:07ms~0.2ms。
代碼示例:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit BEEP=P2^5;
void Delay_10us(u16 us)//延時函數:輸入1大概延時時間為10us
{while(us--);
}
/*蜂鳴器驅動函數:
1、想使得蜂鳴器的聲音變長變短,可以更改i的值大小;
2、想改變音色,可以更改頻率也就是周期時間:延時函數里的值;
3、想改變音調可以改變高低電平的占空比,音調變高高電平時間高一點,音調變低高電平時間少一點對應的低電平時間也要更改。保證周期總時間不變,改變高低電平占空比*/
void BEEP_OUT(void)//蜂鳴器驅動函數
{u16 i=1000;while(i--){BEEP=1;Delay_10us(30);//產生脈沖信號高低電平轉換時間,低電平0.3ms高電平0.3ms;周期時間設置為0.6msBEEP=0;Delay_10us(30);}
}
int main()
{while(1){BEEP_OUT();//蜂鳴器驅動Delay_10us(50000);//延時時間為480msBEEP=1;//蜂鳴器關閉Delay_10us(50000);//延時時間為480ms}
}
小心得:在驅動蜂鳴器函數中:
1、想使得蜂鳴器的聲音變長變短,可以更改i的值大小;
2、想改變音色,可以更改頻率也就是周期時間:延時函數里的值;
3、想改變音調可以改變高低電平的占空比,音調變高高電平時間高一點,音調變低高電平時間少一點對應的低電平時間也要更改。保證周期總時間不變,改變高低電平占空比;
蜂鳴器驅動效果展示:
蜂鳴器模塊實現效果
制作不易!喜歡的小伙伴給個小贊贊!喜歡我的小伙伴點個關注!有不懂的地方和需要的資源隨時問我喲!