<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

對蜂鳴器播放音樂涉及到的知識點進行重點說明

精通單片機與嵌入式 ? 來源:精通單片機與嵌入式 ? 作者:濟南行遠智能科技 ? 2022-11-10 09:55 ? 次閱讀

通過開發板的蜂鳴器播放歌曲在實際產品設計中可能用處不大,但是在一些開發板中非常常見,其實看似簡單的功能涉及到的知識點還比較多。

本文對蜂鳴器播放音樂涉及到的知識點進行重點說明。

一:硬件電路

1dc2185c-6084-11ed-8abf-dac502259ad0.png

如上圖所示,是非常常用的三極管驅動蜂鳴器的電路:

當P12輸出低電平時,三極管Q1不導通,此時無電流流過蜂鳴器,蜂鳴器不發聲。當P12輸出高電平時,Q1導通,此時有電流流過蜂鳴器,蜂鳴器發聲。

R26是限流電阻,保證流過蜂鳴器的電流不會超過允許值。

關于三極管驅動電路的原理講解及更多的優化設計,可在本公眾號內搜索相關文章自行學習。

注意:想要進行音樂播放需要使用無源蜂鳴器;關于無源蜂鳴器與有源蜂鳴器的區別,可在本公眾號內搜索蜂鳴器相關的文章進行學習。

二:有源蜂鳴器與無源蜂鳴器

注意:這里的“源”不是指電源,而是指震蕩源。也就是說,有源蜂鳴器內部帶震蕩源,所以只要一通電就會叫;而無源內部不帶震蕩源,所以如果用直流信號無法令其鳴叫。必須用 2K-5K 的方波去驅動它。

有源蜂鳴器往往比無源的貴,就是因為里面多個震蕩電路。

無源蜂鳴器的優點是:

便宜

音頻率可控,可以做出“多來米發索拉西”的效果

在一些特例中,可以和 LED 復用一個控制口

有源蜂鳴器的優點是:

程序控制方便。

三:蜂鳴器發聲原理

單片機驅動無源蜂鳴器的方式有兩種:一種是 PWM 輸出口直接驅動,另一種是利用 I/O 定時翻轉電平產生驅動波形對蜂鳴器進行驅動。

PWM 輸出口直接驅動是利用PWM輸出口本身可以輸出一定的方波來直接驅動蜂鳴器。在單片機的軟件設置中有幾個系統寄存器是用來設置 PWM 口的輸出的,可以設置占空比、周期等等,通過設置這些寄存器產生符合蜂鳴器要求的頻率的波形之后,只要打開 PWM 輸出, PWM 輸出口就能輸出該頻率的方波,這個時候利用這個波形就可以驅動蜂鳴器了。

比如頻率為 2000Hz 的蜂鳴器的驅動,可以知道周期為 500μs,這樣只需要把 PWM 的周期設置為 500μs,占空比電平設置為 250μs,就能產生一個頻率為 2000Hz 的方波,通過這個方波再利用三極管就可以去驅動這個蜂鳴器了。

而利用 I/O 定時翻轉電平來產生驅動波形的方式會比較麻煩一點,必須利用定時器來做定時,通過定時翻轉電平產生符合蜂鳴器要求的頻率的波形,這個波形就可以用來驅動蜂鳴器了。

比如為 2500Hz 的蜂鳴器的驅動,可以知道周期為 400μs,這樣只需要驅動蜂鳴器的 I/O 口每 200μs 翻轉一次電平就可以產生一個頻率為 2500Hz,占空比為/2 的方波,再通過三極管放大就可以驅動這個蜂鳴器了。

其實兩種驅動方式本質上都是給蜂鳴器一定頻率的信號,蜂鳴器的發聲頻率等于驅動方波的頻率。

下面貼出來蜂鳴器發聲的相關函數。

//Buzzer初始化
void buzzerInit(void)
{
    TR0 = 0;
    TF0 = 0;
    TMOD |= 0x01;                                       //  設置新模式:16位定時模式
    BUZZ = 1;
    ET0 = 1;
    EA = 1;
}


//  Buzzer發出指定頻率的聲音
//  uiFreq是發聲頻率,單位:Hz
void buzzerSound(unsigned int uiFreq)
{
    //  限定頻率范圍在20~20000Hz之間
    if (uiFreq < 20) {
        buzzerQuiet();
        return;
    }
    if (uiFreq > 20000) uiFreq = 20000;


    //  計算Timer0裝載值
    TL0_Load = LOW_BYTE(65536UL - CPUCLK / (uiFreq * 2));
    TH0_Load = HIGH_BYTE(65536UL - CPUCLK / (uiFreq * 2));


    //  啟動Timer
    TL0 = 0xF0;
    TH0 = 0xFF;
    TR0 = 1;
}


//  蜂鳴器停止發聲
void buzzerQuiet(void)
{
    TR0 = 0;
    TF0 = 0;
    BUZZ = 1;
}

四:蜂鳴器演奏樂曲

1e426796-6084-11ed-8abf-dac502259ad0.png

上圖是《化蝶》的樂譜。

簡譜是大眾化的音樂記譜方式,比較容易理解和掌握。我們可以把一首樂譜(score)看成是由若干個基本的音符(note)單元組成。

一個音符由音名和時值組成。音名就是低音、中音、高音的 1234567(唱作 do re mi fa sol la si),其本質是音符的發聲頻率。

可以在程序中用L1~L7、M1~M7、H1~H7 定義低音、中音、高音所對應的發聲頻率。

時值是音符的發聲時間長短,有全音符、二分音符、四分音符……等等。

音符可以后綴一個“符點”,表示時值增加 1/2,特殊地,二分音符加符點時用“-”代替圓點。參見下表的描述。

1e547abc-6084-11ed-8abf-dac502259ad0.png

在程序中定義一個音符結構體tNote,有兩個數據成員:音名mName和時值mTime。

再使用該結構體定義一個tNote型常量數表MyScore[ ],用來保存實際樂譜轉換成tNote格式的數據。

有了上述一點點樂譜基礎知識,我們就可以很方便地編輯這個數表了。比如音符“3-”轉換為“{L3, T/2}”,音符“3.”轉換為“{M3, T/4+T/8}”,等等。感興趣的同學可以自行補充上面簡譜中的內容。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 三極管
    +關注

    關注

    142

    文章

    3523

    瀏覽量

    119629
  • 驅動電路
    +關注

    關注

    151

    文章

    1480

    瀏覽量

    107776
  • 蜂鳴器
    +關注

    關注

    12

    文章

    854

    瀏覽量

    45441

原文標題:想用蜂鳴器聽個曲兒,你至少需要掌握這些知識!不來聽聽開發板播放的《梁?!??

文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請教高手:如何實現編程播放音樂?

    老請高手:如何實現編程播放音樂?比如我們用51單片機可以作蜂鳴器發聲實驗,我想怎么能讓他播放音樂?比如有些禮盒打開就播放音樂,不知道那個是怎么實現控制的?!謝謝!
    發表于 07-18 10:44

    蜂鳴器播放音樂程序軟件

    蜂鳴器播放音樂程序軟件
    發表于 07-25 11:59

    ARM之蜂鳴器播放音樂

    蜂鳴器介紹,蜂鳴器發生的原理,PWM原理,編程實現蜂鳴器播放音樂資料在壓縮包里
    發表于 11-16 16:53

    STM32控制蜂鳴器播放音樂的原理是什么?

    STM32控制蜂鳴器播放音樂的原理是什么?如何使用通用定時器TIM4實現無中斷的微秒級延時函數?如何使用系統滴答時鐘Systick實現帶有中斷的輸出控制?
    發表于 11-16 07:23

    了解蜂鳴器可以播放音樂的原理

    一.音樂播放原理蜂鳴器分為有源和無源,經測試均可正常播放音樂。(網上有些回答說有源不可播放)首先需要了解
    發表于 11-22 07:17

    如何使用STM32F103控制蜂鳴器發聲播放音樂

    例程主要參考的是這一篇《使用STM32F103控制蜂鳴器發聲播放音樂》,地址如下:https://blog.csdn.net/qq_36355662/article/details/80606753看起來代碼比較簡潔,就兩個文件,就開始移植
    發表于 01-07 08:19

    播放音樂蜂鳴器提示音相關資料分享

    蜂鳴器提示音 播放音樂蜂鳴器提示音播放音樂蜂鳴器提示音Buzzer.c#include//蜂鳴器
    發表于 01-19 07:30

    蜂鳴器播放音樂

    慧凈HL-1 配套C實驗例程100例【實驗30】蜂鳴器播放音樂),很好的C51學習資料程序。
    發表于 03-21 16:21 ?39次下載

    蜂鳴器播放音樂程序

    蜂鳴器播放音樂程序,有興趣的同學可以下載學習
    發表于 04-27 16:18 ?33次下載

    HL開發板的蜂鳴器播放音樂學習程序

    HL開發板【實驗30】蜂鳴器播放音樂,單片機學習程序,很好的學習資料。
    發表于 09-01 11:50 ?16次下載

    蜂鳴器播放音樂C語言程序免費下載

    本文檔的作用內容詳細介紹的是蜂鳴器播放音樂C語音程序免費下載(包含了播放生日快樂歌曲的詳細設計資料)
    發表于 09-13 15:26 ?46次下載
    <b class='flag-5'>蜂鳴器</b><b class='flag-5'>播放音樂</b>C語言程序免費下載

    蜂鳴器播放音樂設計與實現(附源碼)

    蜂鳴器播放音樂設計與實現(附源碼)
    發表于 04-24 11:00 ?79次下載
    <b class='flag-5'>蜂鳴器</b><b class='flag-5'>播放音樂</b>設計與實現(附源碼)

    51單片機(二十七)—— 蜂鳴器播放音樂

    1、實驗原理介紹 蜂鳴器是電路中經常使用的發聲器件,我們一般使用蜂鳴器發出“嘀嘀”的聲音,用它作為提示音。有沒有想過用蜂鳴器還可以播放音樂呢? 本文使用
    發表于 11-22 17:21 ?13次下載
    51單片機(二十七)—— <b class='flag-5'>蜂鳴器</b><b class='flag-5'>播放音樂</b>

    【學習心得】蜂鳴器播放音樂

    以下是學習STM32控制蜂鳴器時的一些心得體會,我也是綜合各種資料寫出來的。蜂鳴器是一種很常見的電子元件,一般也就發出滴滴的聲音。但自從在網上看到各種用蜂鳴器播放音樂的實例,我就對
    發表于 11-23 18:21 ?65次下載
    【學習心得】<b class='flag-5'>蜂鳴器</b><b class='flag-5'>播放音樂</b>

    基于51單片機的蜂鳴器播放音樂源代碼

    基于51單片機的蜂鳴器播放音樂例程源代碼
    發表于 05-12 16:16 ?47次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>