【春節歌曲回味 | STM32小音樂盒 】PWM+定時器驅動無源蜂鳴器(STM32 HAL庫)

東小東發表於2021-07-04

 

l  STM32通過PWM與定時器方式控制無源蜂鳴器鳴響

l  STM32小音樂盒,歌曲進度條圖形顯示與百分比顯示,歌曲切換

l  程式設計使用STM32 HAL庫

l  IIC OLED介面程式設計,動畫實現

PWM+TIME驅動無源蜂鳴器,最大的好處就是可以釋放主迴圈,不讓程式卡主去播放音樂,這型別作業系統的執行緒一樣,音樂在後臺播放,主迴圈可以隨時切換或者關閉音樂或者其它功能操作

視訊演示:https://www.bilibili.com/video/BV1M54y1Y72G

一、 基礎認識

一切的聲音都來源於振動,聲音之所以千變萬化各不相同,是因為他們的振動各不相同。

所謂的頻率就是一秒鐘振動幾次,如300HZ,就是每秒振動300次

頻率對比表

 

男低音80-320Hz

男中音96-387Hz

男高音122-488Hz

女低音145-580Hz

女高音259-1034Hz

二、音符、音調、節拍

(一)   音符

決定了發音基本單元

1  2   3   4   5   6   7

哆  中  咪  發  字  索  拉  西

(二)   音調

決定了發音的高低

 

C,D,E,F,G,A,B,調式從小到高排列的

 

一般大調聽上去比較陽光、幸福、祥和,小調則有些悲傷、憂鬱、有時甚至是陰暗的感覺在裡面。

調號→升降記號標註→調內音級→關係小調(自然小調)

C → 無升降號→ 1 2 3 4 5 6 7 →a小調

G → 1升(#4)→ 5 6 7 1 2 3 #4 →e小調

D → 2升(#4 #1)→2 3 #4 5 6 7 #1 →b小調

A → 3升(#4 #1 #5)→ 6 7 #1 2 3 #4 #5 →#f小調

E → 4升(#4 #1 #5 #2)→ 3 #4 #5 6 7 #1 #2 →#c小調

B → 5升(#4 #1 #5 #2 #6)→ 7 #1 #2 3 #4 #5 #6 →#g小調

#F→ 6升(#4 #1 #5 #2 #6 #3)→ #4 #5 #6 7 #1 #2 #3 →#d小調

#C→ 7升(#4 #1 #5 #2 #6 #3 #7)→ #1 #2 #3 #4 #5 #6 #7 →#a小調

F → 1降(b7)→ 4 5 6 b7 1 2 3 →d小調

bB→ 2降(b7 b3)→ b7 1 2 b3 4 5 6 →g小調

bE→ 3降(b7 b3 b6)→ b3 4 5 b6 b7 1 2 →c小調

bA→ 4降(b7 b3 b6 b2)→ b6 b7 1 b2 b3 4 5 →f小調

bD→ 5降(b7 b3 b6 b2 b5)→ b2 b3 4 b5 b6 b7 1 →bb小調

bG→ 6降(b7 b3 b6 b2 b5 b1)→ b5 b6 b7 b1 b2 b3 4 →be小調

bC→ 7降(b7 b3 b6 b2 b5 b1 b4)→ b1 b2 b3 b4 b5 b6 b7 →ba小調

注意:1# (升半音)和2b (降半音)的頻率相同

音調識別:

 ,數字下面帶點,低音

,不帶任何點,基本音

,數字上方帶點,高音

(三)   節拍 

決定了音符的時間長短

   1/4拍,16分音符

   半拍,8分音符

    一拍,4分音符

   兩拍,

    三拍

   四拍

組合

每拍多長時間沒有固定的說法,

可以參考:

https://wenku.baidu.com/view/78393de517fc700abb68a98271fe910ef12daeba.html

三、 程式設計思路

定時器與PWM方式,這樣可以解放主迴圈,讓程式可以做更多的事情。

l  定時器把握節拍

l  PWM把握音調和音符

PWM週期由定時器分頻係數和重灌載值共同決定,STM32F103C8T6的主頻為72MHZ,設定分頻為9,所以最大是8MHZ。我們所需要的最小頻率是262HZ,我們只需要計算得到的重灌載值不大於定時器的重灌載最大值(65535)即可。

公式:

PWM週期(HZ) = 主頻(HZ) / (重灌載值+1)/(分頻係數+1) 

262=8000000/x

x=30,534<65535

所以每次轉換音符時,動態修改重灌載值即可實現PWM輸出頻率的變化,進而控制無源蜂鳴器發聲。

定時器將進行ms中斷,判斷每拍時間是否到達,到達則播放下一拍。

四、參考樂譜

兩隻老虎

春節序曲:

難忘今宵

 

視訊演示:https://www.bilibili.com/video/BV1M54y1Y72G

五、 個人導航

【B站 | 東小東bili】 https://space.bilibili.com/162091292

【部落格園 | 東小東 】https://www.cnblogs.com/dongxiaodong/

【CSDN | 東小東部落格】https://blog.csdn.net/dongxiaodongvip

【微信 | 東小東】dongxiaodongwx

 

相關文章