999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MSP430 Launchpad的音樂播放器

2021-06-22 03:31:56張皎黃欣朱雯麗
電子元器件與信息技術 2021年3期
關鍵詞:設計

張皎,黃欣,朱雯麗

(西安交通大學電氣工程學院,陜西 西安 710049)

0 引言

不同于以往設計例如從TF卡中讀取音頻文件構成音樂播放器。以往方案需要生成AWG,當播放AWG時由于蜂鳴器的發聲狀態不穩定,會發生雜音較大、音調不準等等的問題。該方案從波形頻率入手,因而能精準地控制音調和節拍,播放出來的音樂曲調較為優美、精確,并且有一套完整的編曲規則,簡單方便。

對于MSP430來講,數模轉化器DAC是一個重要部分,本文利MSP-EXP430G2擴展板上的DAC先構造出基于DDS直接數字頻率合成原理的AWG任意波形發生器;而后直接將波形輸出給功放TPA301,并驅動蜂鳴器產生聲音。將一定頻率的PWM波輸入DAC,即可控制蜂鳴器產出不同音調的聲音;控制該頻率的PWM波的持續時間即可控制蜂鳴器產生對應聲音的時間?;谝陨贤瓿梢魳凡シ诺脑O計。

1 實驗原理簡述

1.1 蜂鳴器發聲原理

蜂鳴器按其結構分主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產生的音頻信號電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發聲[1]。

蜂鳴器按其是否帶有信號源又分為有源和無源兩種類型。有源蜂鳴器只需要在其供電端加上額定直流電壓,其內部的震蕩器就可以產生固定頻率的信號,驅動蜂鳴器發出聲音。無源蜂鳴器可以理解成與喇叭一樣,需要在其供電端上加上高低不斷變化的電信號才可以驅動發出聲音。

本文采用的是無源蜂鳴器。DAC的輸出由0歐跳線電阻R27選擇,直接輸出給功放TPA301,并驅動蜂鳴器產生聲音。只要將一定頻率的PWM波輸入DAC,即可控制蜂鳴器產出不同音調的聲音;而控制該頻率的PWM波持續時間即可控制蜂鳴器產生聲音的時間。據此原理完成音樂播放的設計。具體算法如下:

1.1.1 聲音頻率的控制

由原理可知聲音的頻率由PWM波的頻率(周期)控制。其設計思路為:引入數組,記錄PWM波的周期。當PWM電平翻轉時,驅動蜂鳴器振動發生,并延時相應的數值,即可實現不同音階的發生。這里,相應的數值即為數組中記錄的PWM波的周期。

將數組中的數值記為yuediao,有如下關系式:

式中,Freq為系統時鐘頻率。f為對應音階的頻率,n為延時倍數,m為時值系數。

值得注意的是,引入延時倍數n、時值系數m是為了規定一個相對的標準的音符長度,以便后期譜曲計算時區分時值的音節。本文中,系統時鐘頻率12MHZ,延時倍數取12,以四分音符為基準,則時值系數取4,從而可得:

由此,查詢各個音階的頻率。即可計算各個音階所對應的延時周期。從而實現了演奏的第一步——輸出基本音階。

1.1.2 聲音長度的控制

首先考慮設計程序,使得蜂鳴器輸出長度相等的音符。為此,引入另一數組,數組的值控制蜂鳴器持續發出同一個音符的時間,考慮到音長和頻率成反比。該數值等于對應音符的頻率即可。其次,由于在歌曲的演奏中,有全音符、二分音符、四分音符等到三十二音符的區別,每種音符持續的時間也不同,因此我們又引入了音符系數k,若記數組中的值為yuechang,則有如下關系:

其中,k的值可取0.3,0.6,1.2,2.4,4.8來區別全音符到十六音符。由此,我們實現了演奏的第二步——控制音長。

1.1.3 譜曲的實現

如前所述,已經實現由yuediao、yuechang兩個數組綜合控制,實現蜂鳴器輸出持續時間相同、音階不同的音符。考慮到實際樂曲,要實現譜曲的節奏或是音符不同時值,只需在yuehcang數組中乘以相應的倍數。以四分音符為例,C調各音階對應數組取值如表1所示。

表1 各基礎音階對應數值

除此之外,我們還引入了高音音階和低音音階,計算方法同C調音階,再此不多贅述。

那么接下來我們就可以編入歌曲信息讓蜂鳴器“唱歌”了,由于我們并不熟知簡譜,在此我們加入了編曲程序。這個編曲的程序其實十分簡單,其原理是利用另外一個數組“puzi”作為“密匙”來控制調用yindiao和yinchan的元素,puzi數組的元素均為三位數,其中最高位控制高中低音、次高位控制音調、最低位控制音長。這樣用戶只需輸入簡單易懂的命令即可進行編曲,節約了時間,方便了使用[2]。

1.2 數模轉換DAC

雖然MSP430G2553單片機內部沒有集成DAC,但在其擴展板上設計了一塊DAC,我們能用該數模轉換器DAC構造出任意波形,即據此設計基于DDS直接數字頻率合成原理的AWG任意波形發生器。而且DAC的輸出可以由0歐跳線電阻R27選擇,直接輸出給功放TPA301,并驅動蜂鳴器產生聲音。

MSP-EXP430G2擴展板上采用的DAC芯片視產品批次不同,可能為DAC7311/8311/8411中的一種。如圖2-1,DAC7311/8311/8411是TI公司推出的系列電阻串(R-String)型DAC,分辨率分別為12/14/16位。這三種DAC芯片不僅管腳兼容,針對16位的DAC8411編寫的程序代碼可以不經改動用于低位數的DAC8311和DAC7311。所以下面僅對DAC8411進行說明。DAC8411的幀數據格式如表2所示:

表2 DAC8411的幀格式

(1)頭2位是節能模式選擇,00是正常工作,01、10、11分別是接1k電阻到地、接10k電阻到地、高阻三種節能輸出(功耗依次降低)。

(2)選擇00模式讓DAC正常工作,然后接16位DAC數據,最后6位發不發沒有影響。如果是DAC7311和DAC8311芯片,則后接12位或14位有效數據,多發位沒有影響,所以DAC8411的時序圖其實兼容DAC7311和DAC8311。

DAC8411的控制時序如表2、圖1所示,當/SYNC使能有效后,將依次發送24位數據。之后CS禁止至少100ns才能發送下一數據。對于G2控制來說,因100ns已經接近最高時鐘頻率,所以不用考慮延時等待的問題。

圖1 DAC8411的控制時序

2 程序設計思路

2.1 整體思路

本程序主要由六大模塊組成:初始化模塊、啟動模塊、演奏模塊、計時模塊、顯示模塊和按鍵功能模塊。整個設計的核心為是演奏模塊、計時模塊以及LCD顯示模塊,設計目的為播放器在演奏樂曲的同時記錄播放時間,并通過LCD屏幕顯示相關信息。啟動模塊、按鍵功能模塊作為輔助模塊,完善整體設計和功能。詳見圖2流程圖。

圖2 程序設計流程圖

從整體來看,六個模塊各自負責不同的功能,但又并不完全分割,而是作為一個整體,相互關聯,實現系統的全部功能。

六大模塊的具體實現流程詳見下文,其主要功能概述如下:

(1)初始化模塊:關閉看門狗,配置時鐘,初始化各個設置,包括初始化LCD,初始化DAC初始化I O拓展口。

(2)啟動模塊:依次按下四個按鍵啟動系統。

(3)演奏模塊:將一定頻率的PWM波輸入DAC,控制蜂鳴器發出聲音,實現演奏。

(4)計時模塊:通過系統時鐘記錄時間。

(5)顯示模塊:將相關信息(播放時間、音量等)通過LCD屏顯示。

(6)按鍵功能模塊:判斷按鍵是否按下,并執行相應的功能。

2.2 主要功能模塊實現

2.2.1 LCD顯示實現

顯示模塊,即將信息顯示在LCD屏幕上,包括播放時長、播放音量等。在LCD顯示前,需先完成調用I2C初始化函數(已寫入頭文件)對拓展版上的I/O拓展口初始化,其次需將LCD屏幕初始化并進行清屏操作。

同時,為了實時顯示當前信息,需要以一定頻率清除顯存,刷新屏幕。本例通過將刷新頻率與上述播放頻率相對應,即播放一個音符,刷新一次屏幕。避免刷新頻率過慢導致信息顯示滯后,又或刷新頻率過快影響演奏模塊[3]。

設計中用來執行顯示模塊的128段LCD位于拓展版上。本例在單片機中定義8個16位的變量LCD_Buffer[0]~LCD_Buffer[7]為顯示緩存,頂層函數想修改LCD的顯示內容,只需修改LCD_Buffer[0]~LCD_Buffer[7]的內容即可。另外,用void LCD_DisplaySeg(unsigned char SegNum)函數顯示特定的一段,用LCD_DisplayDigit(unsigned char Digit,uns igned charPosition ) 在特定位置顯示特定數值。例如在系統啟動以后,點亮若干特定數碼管,在屏幕上方顯示“VOL”字樣,作為音量標識的具體實現為:

LCD_DisplaySeg(100);LCD_DisplaySeg(102);LCD_DisplaySeg(103);LCD_DisplaySeg(104);LCD_DisplaySeg(105);LCD_DisplaySeg(106);LCD_DisplaySeg(108);LCD_DisplaySeg(110);LCD_DisplaySeg(111);LCD_DisplaySeg(113);LCD_DisplaySeg(114);LCD_DisplaySeg(116);LCD_DisplaySeg(118);LCD_DisplaySeg(119);

2.2.2 演奏模塊

演奏模塊是本次實驗的核心。演奏模塊的實現思路是通過一定頻率的PWM波輸DAC,控制蜂鳴器發聲。當PWM波電平翻轉時,驅動蜂鳴器振動發聲[4]。PWM波的頻率(周期)即控制聲音的音調,該頻率PWM波所持續的時間控制聲音的持續長度,反映到歌曲里即為歌曲的節拍。不難想到,需首先設計程序,使得蜂鳴器發出不同音階。具體實現如下:

#include

#include

using namespace std;int main()

{int yuediao[1000];int yuechang[1000];

intpinlv[3][7]={

{131,147,164,175,196,220,250},//低音{262,294,33 0,349,392,440,494,},//中音

{523,587,659,698,784,880,988}//高音};

int yindiao[3][7]={{1920,1702,1516,1431,127 5,1136,1012},//低音{955,851,758,715,637,568,506},//中音{478,425,379,358,319,281,253}//高音};

float jiepai[5]={0.3,//十六分音符=八分之一拍

0.6,//八分音符=四分之一拍 1.2,//四分音符= 半拍

2.4,//二分音符=一拍4.8//全音符小數要定義成 float!

int puzi[200]={253,333,332,322,313,333,313,312,322,323,353,

353,352,342,333,343,343,332,322,353,333,333,353,353,313,

333,323,323,323,332,332,332,331,351,354,332,322,342,341,331,323,253,

313,312,272,263,253,313,312,322,323,353,353,352,342,333,343,343,332,322,353,333,

333,353,353,313,333,323,323,323,332,332,332,331,351,354,332,322,342,341,331,323,

332,332,332,331,351,354,332,322,342,342,331,331,331,331,322,322,322,322

unsigned int i=0;

for(i=0;i<200;i++)

int a = puzi[i]/100 1;// 控制高低音

int b = (puzi[i]%100)/10 1;// 控制音調

int c = (puzi[i]%100)%10 1;// 控制節拍

yuediao[i] = yindiao[a][b];

yuechang[i] = jiepai[c]*pinlv[a][b];

//cout<

//cout<

//cout<

}

2.2.3 計時模塊

計時模塊也是本次實驗的核心模塊之一。該模塊的單獨實現較為簡單,通過系統時鐘系統實現計時即可。難點在于將計時模塊以及演奏模塊合理拼接,實現演奏的同時進行計時。

本例中將一定的節拍節奏轉化為時間間隔,將計時模塊寫入演奏函數中。要將演奏時間作為計時參照,需要保證各個音符離散播放,才能將每個音符的演奏時間獨立出來,進行時間的線性疊加。否則,將會各個音符之間連續播放直至整首曲子結束再進行計時[5]。為此,本例在演奏函數中引入FOR 循環,每次循環即完成且僅完成一個音符的演奏,將循環周期記為T,有如下關系式:

ΔT==T

將時間記錄為time ,對其進行標準化處理,則記錄的時間應為:

time=ΔT/T

具體實現為:

3 結語

本文提出了基于MSP430 launchPad非內存讀取音樂播放器的一種解決新方案,該方案不僅能解決TF卡播放出來的樂音小、雜音較大、音頻變的問題。還提供了一種利用PWM波設計樂曲的新思路。該音樂播放器的功能較為完備,可以調整音高、切換歌曲以及循環播放,并且加入了啟動界面,用戶使用體驗較好;音樂播放的品質(音調、節拍)準確性也較高;基本達到設計預期。

猜你喜歡
設計
二十四節氣在平面廣告設計中的應用
河北畫報(2020年8期)2020-10-27 02:54:06
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
基于PWM的伺服控制系統設計
電子制作(2019年19期)2019-11-23 08:41:36
基于89C52的32只三色LED搖搖棒設計
電子制作(2019年15期)2019-08-27 01:11:50
基于ICL8038的波形發生器仿真設計
電子制作(2019年7期)2019-04-25 13:18:16
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
從平面設計到“設計健康”
商周刊(2017年26期)2017-04-25 08:13:04
主站蜘蛛池模板: 亚洲91精品视频| 99热最新网址| a色毛片免费视频| 国产精品乱偷免费视频| 婷婷亚洲视频| 韩国v欧美v亚洲v日本v| 欧美成人怡春院在线激情| 国产成人91精品| 国产在线精彩视频论坛| 一本二本三本不卡无码| 日韩国产欧美精品在线| 亚洲天堂免费观看| 在线国产欧美| 青青青视频91在线 | 成人国产精品网站在线看| 日韩一级毛一欧美一国产| 国产一国产一有一级毛片视频| 日韩精品资源| 操美女免费网站| 亚洲AV无码精品无码久久蜜桃| 色婷婷视频在线| 成人永久免费A∨一级在线播放| 色综合中文| 99成人在线观看| 国内99精品激情视频精品| 手机在线国产精品| 免费一级α片在线观看| 99免费在线观看视频| 亚洲免费毛片| 国产午夜福利亚洲第一| 亚洲色欲色欲www网| 亚洲熟女中文字幕男人总站| 青青青视频免费一区二区| 精品无码一区二区三区电影| 亚洲国产精品久久久久秋霞影院| 少妇精品久久久一区二区三区| 99热国产这里只有精品无卡顿"| 日韩毛片在线播放| 亚洲AV人人澡人人双人| 久久这里只有精品国产99| 超碰精品无码一区二区| 欧美精品啪啪| 啊嗯不日本网站| 夜精品a一区二区三区| 国产欧美日韩精品综合在线| 高清国产va日韩亚洲免费午夜电影| 99久久国产综合精品女同 | 久久久久久久久亚洲精品| 97人妻精品专区久久久久| 2021精品国产自在现线看| 国产在线97| 香蕉在线视频网站| 久久6免费视频| 免费人成网站在线高清| 亚洲熟妇AV日韩熟妇在线| 久久激情影院| 国内精品自在欧美一区| 丁香六月激情综合| 日本a级免费| 91精品久久久久久无码人妻| 精品無碼一區在線觀看 | 久久婷婷六月| 亚洲中文字幕久久无码精品A| 精品国产香蕉伊思人在线| 91精品综合| 免费看一级毛片波多结衣| 久久黄色小视频| 99ri精品视频在线观看播放| 亚洲最新地址| 亚洲日韩每日更新| 美女免费精品高清毛片在线视| 中美日韩在线网免费毛片视频| 国产91高清视频| 成人午夜天| 国产精品2| 2022国产91精品久久久久久| 手机成人午夜在线视频| 亚洲综合在线网| 国产高清精品在线91| 性色一区| 久久精品这里只有国产中文精品| 四虎永久在线精品国产免费|