• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于嵌入式開(kāi)發(fā)板Mini6410的電子琴設(shè)計(jì)

    2014-02-03 03:14:08高俊濤嚴(yán)周穎孫悅妍楊廣權(quán)
    實(shí)驗(yàn)室研究與探索 2014年1期
    關(guān)鍵詞:電子琴開(kāi)發(fā)板蜂鳴器

    王 杰, 高俊濤, 嚴(yán)周穎, 孫悅妍, 楊廣權(quán)

    (廣州大學(xué) 機(jī)械與電氣工程學(xué)院,廣東 廣州 510006)

    0 引 言

    電子琴是現(xiàn)代電子科技與音樂(lè)結(jié)合的產(chǎn)物,是一種新型的鍵盤樂(lè)器。電子琴設(shè)計(jì)的方法有很多,由于嵌入式開(kāi)發(fā)板具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,在電子琴設(shè)計(jì)中應(yīng)用比較廣泛[1]?;诖?,本設(shè)計(jì)采用嵌入式開(kāi)發(fā)板FriendlyArm Mini6410為核心控制元件,通過(guò)Qtopia軟件編寫了電子琴面板模擬界面和控制代碼,通過(guò)觸摸式按鍵實(shí)現(xiàn)了電子琴演奏和播放功能。

    1 設(shè)計(jì)原理

    一首音樂(lè)是由許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,通過(guò)不同的頻率組合,可得到不同的音樂(lè)。對(duì)于嵌入式來(lái)說(shuō),產(chǎn)生不同的頻率非常簡(jiǎn)單[2-3],可以利用嵌入式開(kāi)發(fā)板上的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),從而使蜂鳴器發(fā)出聲音。因此,如果可以獲得一首歌曲的音符的頻率、升降調(diào)、每個(gè)音符的演奏長(zhǎng)度、連音和頓音的時(shí)間長(zhǎng)度,可利用Mini6410的定時(shí)/計(jì)數(shù)器Timer來(lái)產(chǎn)生這樣方波頻率信號(hào),從而在開(kāi)發(fā)板上彈奏或播放出這首歌,實(shí)現(xiàn)電子琴的功能[4-5]。

    2 設(shè)計(jì)方案

    在Mini6410開(kāi)發(fā)板上的芯片S3C6410X中有5個(gè)定時(shí)器,這些定時(shí)器產(chǎn)生內(nèi)部中斷。其中,Timer0和Timer1具有PWM功能,而Timer2,3,4沒(méi)有此功能。PWM具有兩種操作模式:自動(dòng)裝載模式,一次觸發(fā)模式。為實(shí)現(xiàn)PWM功能,芯片提供了16個(gè)功能寄存器。這些功能寄存器都連接APB總線。

    由于本設(shè)計(jì)利用蜂鳴器產(chǎn)生聲音,所以采用Timer0定時(shí)器產(chǎn)生PWM信號(hào)。首先編寫PWM驅(qū)動(dòng)程序pwm.c腳本文件,并生產(chǎn)pwm.o和pwm.ko文件,把pwm.ko文件通過(guò)ftp方式發(fā)送到Windows的超級(jí)終端,再通過(guò)超級(jí)終端把PWM驅(qū)動(dòng)程序燒寫進(jìn)Linux內(nèi)核[6-8],再編寫QT應(yīng)用程序,根據(jù)程序功能的需要調(diào)入PWM驅(qū)動(dòng)程序,蜂鳴器發(fā)出聲音,實(shí)現(xiàn)系統(tǒng)的音樂(lè)播放功能。

    2.1 系統(tǒng)圖

    本電子琴包含了虛擬鍵盤輸入,s3c6410芯片處理輸入指令并產(chǎn)生相應(yīng)的PWM波至蜂鳴器,使蜂鳴器發(fā)出聲音,并且伴隨著LED燈的閃爍[9]。圖1為電子琴設(shè)計(jì)的系統(tǒng)圖。

    圖1 系統(tǒng)結(jié)構(gòu)圖

    2.2 硬件設(shè)計(jì)

    2.2.1Mini6410介紹

    Mini6410SDK是采用Mini6410核心板的一款參考設(shè)計(jì)底板[10],它具有三個(gè)LCD接口、4線電阻觸摸屏接口、100M標(biāo)準(zhǔn)網(wǎng)絡(luò)接口、標(biāo)準(zhǔn)DB9五線串口、Mini USB 2.0接口、USB Host 1.1、3.5 mm音頻輸入輸出口、標(biāo)準(zhǔn)TV-OUT接口、SD卡座、Mini PCIe接口、電容屏接口等;另外還引出4路TTL串口,另1路TV-OUT、SDIO2接口(可接SD WiFi)接口等;在板的還有蜂鳴器、I2C-EEPROM、備份電池、AD可調(diào)電阻、8個(gè)中斷式按鍵等。

    Mini6410采用2.0 mm間距的雙排插針,總共引出4組:P1,P2,CON1,CON2。其中P1和P2各為60 Pin;CON1和CON2各為30Pin,總共引出180 Pin。Mini6410在板引出10 Pin Jtag接口,如其布局說(shuō)明見(jiàn)表1。

    表1 Mini6410引腳

    2.2.2蜂鳴器

    Mini6410開(kāi)發(fā)板的蜂鳴器Buzzer 是通過(guò) PWM 控制的,蜂鳴器驅(qū)動(dòng)電路原理圖如圖2所示,其中PWM0端信號(hào)為開(kāi)發(fā)板上的計(jì)數(shù)器timer產(chǎn)生的方波頻率信號(hào),可通過(guò)引腳GPF14測(cè)量,該引腳可通過(guò)軟件設(shè)置為 PWM 輸出,也可以作為普通的GPIO使用。

    圖2 PWM電路

    2.2.3發(fā)光二級(jí)管

    Mini6410開(kāi)發(fā)板具有4個(gè)用戶可編程LED,它們位于核心板上,直接與CPU的GPIO相連接,實(shí)現(xiàn)在演奏時(shí)有節(jié)奏閃爍的功能,增加電子琴的娛樂(lè)性。LED電路和IO口如圖3所示。

    圖3 LEDIO口

    2.3 軟件編程設(shè)計(jì)

    軟件編程設(shè)計(jì)采用Qtopia進(jìn)行演奏和播放功能的軟件設(shè)計(jì)。

    2.3.1界面設(shè)計(jì)

    利用Qtopia設(shè)計(jì)了電子琴面板模擬界面。如圖4所示。其中1~7分別對(duì)應(yīng)音符“do、re、mi、fa、so、la、ti”頻率的聲音[11-12]并且在按下時(shí)LED會(huì)有節(jié)奏閃爍;當(dāng)點(diǎn)擊按鍵“同一首歌”, 會(huì)播放預(yù)置的曲子,按停止鍵時(shí)蜂鳴器停止發(fā)聲,按開(kāi)始鍵蜂鳴器繼續(xù)發(fā)聲。拖動(dòng)滑動(dòng)變頻條,蜂鳴器的頻率也會(huì)隨之改變。

    圖4 模擬界面

    2.3.2音樂(lè)演奏

    音樂(lè)演奏功能通過(guò)按鍵1-7及1+,以及滑動(dòng)條來(lái)實(shí)現(xiàn)。以按鍵1為例,按下時(shí),將觸發(fā)相應(yīng)的代碼:

    void PwmWidget::on_noe_clicked() //設(shè)定1鍵為“do”

    {

    ioctl(fd, PWM_IOCTL_SET_FREQ, 523);

    }

    從而發(fā)出對(duì)應(yīng)頻率的音符“do”。結(jié)合滑動(dòng)條來(lái)調(diào)整音調(diào),就可以演奏任何音調(diào)的歌曲。

    滑動(dòng)條所對(duì)應(yīng)的代碼為:

    void PwmWidget::changefreq() //設(shè)定一個(gè)滑動(dòng)變頻條

    {

    ioctl(fd, PWM_IOCTL_SET_FREQ, 10*m_ui.chfreq->value());

    初始化時(shí),滑動(dòng)條位于正中間,此時(shí)按下1對(duì)應(yīng)C調(diào)的多,523hz;升調(diào)演奏時(shí),先按下1+,再按1。也可通過(guò)拉動(dòng)滑動(dòng)條或上下按鈕來(lái)調(diào)整音調(diào)升降。

    2.3.3音樂(lè)播放

    在程序段定義變量處,事先定義了所需點(diǎn)歌的頻率表,例如,“同一首歌”的頻率表事先放在unsigned char Music_Girl[]數(shù)組中。

    當(dāng)點(diǎn)擊“同一首歌”按鈕時(shí),音樂(lè)點(diǎn)歌按鈕程序啟動(dòng),PWM波形在延時(shí)10ms后開(kāi)始輸出,音樂(lè)開(kāi)始播放。程序如下所示:

    void PwmWidget::on_tongyishouge_clicked()

    {

    timer->start(10);//延時(shí)啟動(dòng)10ms

    }

    音樂(lè)開(kāi)始后,即開(kāi)始輸出PWM波形之后,開(kāi)始根據(jù)頻率表計(jì)算音符、高低音、頓音、不發(fā)音等演奏長(zhǎng)度等,并循環(huán)運(yùn)行。程序如下所示[13],由于“同一首歌”頻率表里有212個(gè)原始頻率,當(dāng)歌曲演奏完成標(biāo)志flg=0時(shí),調(diào)用PWM驅(qū)動(dòng)中的ioctl()和getfreq(),程序按音符索引lenup所指的頻率設(shè)置輸出的PWM波形的頻率,并調(diào)用getyinchang()函數(shù)計(jì)算出對(duì)應(yīng)的蜂鳴時(shí)間和停頓時(shí)間輸出PWM波形,音樂(lè)開(kāi)始演奏。當(dāng)lenup小于212時(shí),按順序輸出對(duì)應(yīng)的頻率,順序播放音樂(lè);當(dāng)lenup自加到數(shù)組Music_Girl[]的尾部時(shí),音樂(lè)完整播放完畢,為了重新播放音樂(lè),把音符索引lenup復(fù)位到0,并標(biāo)識(shí)音樂(lè)播放完畢標(biāo)志flg賦值1;則程序退出if(flg==0)的程序段,但在隨后的else里對(duì)標(biāo)志flg賦值為0,并關(guān)掉Pwm信號(hào)輸出,使其重新回到if(flg==0)的程序段中執(zhí)行,音樂(lè)得以連續(xù)播放。

    從Music_Girl[]中獲得原始頻率后,根據(jù)調(diào)號(hào)及升降八度來(lái)生成新的頻率表,并計(jì)算出高低音、升降調(diào)和對(duì)應(yīng)音符的頻率等參數(shù)。

    unsigned int NewFreTab[12]; //新的頻率表

    for(m=0;m<12;m++) // 根據(jù)調(diào)號(hào)及升降八度來(lái)生成新的頻率表

    SL=i%10; //計(jì)算出音符

    SM=i/10%10; //計(jì)算出高低音

    SH=i/100; //計(jì)算出是否升半

    CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出對(duì)應(yīng)音符的頻率

    if (SM==1) CurrentFre >>= 2; //低音

    if (SM==3) CurrentFre <<= 2; //高音

    根據(jù)上面算出的音符的頻率和升降調(diào),計(jì)算每個(gè)音符的演奏長(zhǎng)度、連音和頓音的時(shí)間長(zhǎng)度,進(jìn)而改變PWM波形的輸出,使得蜂鳴器最終跟隨給定的頻率表來(lái)播放音樂(lè)。

    2.3.4led部分

    按下鍵“1”時(shí),對(duì)應(yīng)ARM板[14-15]上的LED1燈被點(diǎn)亮,延時(shí)2 s熄滅;當(dāng)按下鍵“2”時(shí),對(duì)應(yīng)ARM板上的LED2燈被點(diǎn)亮,延時(shí)2 s熄滅;當(dāng)按下鍵“3”時(shí),對(duì)應(yīng)ARM板上的LED3燈被點(diǎn)亮,延時(shí)2 s熄滅;當(dāng)按下鍵“4”時(shí),對(duì)應(yīng)ARM板上的LED4燈被點(diǎn)亮,延時(shí)2 s熄滅;當(dāng)按下鍵“5”時(shí),對(duì)應(yīng)ARM板上的4個(gè)LED燈全部被點(diǎn)亮,延時(shí)0.5 s全部熄滅,即全部閃爍一次;當(dāng)按下鍵“6”時(shí),對(duì)應(yīng)ARM板上的4個(gè)LED燈全部被點(diǎn)亮,延時(shí)2 s;當(dāng)按下鍵“7”時(shí),對(duì)應(yīng)ARM板上的4個(gè)LED燈全部被熄滅,延時(shí)2 s。

    按鍵“1”,LED1被點(diǎn)亮,延時(shí)2秒熄滅,按鍵2,3,4與按鍵1原理類似,所以按鍵“1”為例,代碼如下:

    void PwmWidget::on_one_clicked()

    {

    fd=-1;//if not add it,led will fail

    led(1,1);

    usleep(2000*1000);

    led(1,0);

    ioctl(fd, 0);

    }

    按下按鍵“5”時(shí)LED1、2、3、4全被點(diǎn)亮,延時(shí)0.5 s全部熄滅。按鍵“5,6,7,8”以按鍵“5”為例,其代碼如下:

    void PwmWidget::on_five_clicked()

    {

    fd=-1;//if not add it,led will fail

    int j=0;

    for(j=1;j<=4;j++)

    {

    led(j,1);

    usleep(500*1000);

    }

    for(j=4;j>=1;j--)

    {

    led(j,0);

    usleep(500*1000);

    }

    ioctl(fd, 0);

    }

    3 結(jié) 語(yǔ)

    本設(shè)計(jì)基于Mini6310開(kāi)發(fā)板使用Qtopia軟件對(duì)演奏界面和演奏代碼進(jìn)行編程,完成了一個(gè)電子琴功能,實(shí)現(xiàn)了通過(guò)按鍵控制PWM波形來(lái)演奏及播放歌曲,并能伴隨LED燈有節(jié)奏的閃爍。此設(shè)計(jì)所涉及的系統(tǒng)功能易于拓展和升級(jí),在QT界面中加入下拉框,加入一些各式名曲,并在程序體中多存儲(chǔ)這些歌曲的頻率表,這樣通過(guò)選擇不同的曲目,就能播放不同的音樂(lè)。

    [1] 熊 杰. 簡(jiǎn)易電子琴設(shè)計(jì)[J].企業(yè)技術(shù)開(kāi)發(fā),2009(5):33-34.

    XIONG Jie. Design of Simple Keyboard [J]. Technological Development of Enterprise,2009(5):33-34.

    [2] 苗忠良. Qtopia編程之道[M].北京:清華大學(xué)出版社,2005.

    [3] 劉樂(lè)喜. Mini6410 Qt4和Qtopia編程開(kāi)發(fā)指南[M].武漢:華中科技大學(xué)出版社,2005.

    [4] 霍福翠.基于FPGA的電子琴設(shè)計(jì)[J].科學(xué)理論,2011(6):350-351.

    HUO Fu-Cui. Design of Electronic Piano Based on FPGA [J]. Scientific Theories,2011(6):350-351.

    [5] 黃 鑫.基于CPLD的電子琴研究與設(shè)計(jì)[J].科技廣場(chǎng),2007(5):232-233.

    HUANG Xin. Based on CPLD Electric Piano Research and Design [J]. Technology Square,2007(5):232-233.

    [6] 李 曉.Ubuntu Linux從入門到精通[M].北京:科學(xué)出版社,2009.

    [7] 何曉龍.Ubuntu實(shí)戰(zhàn)技巧精粹[M].北京:人民郵電出版社,2009.

    [8] 王大亮.Ubuntu標(biāo)準(zhǔn)教程 [M]. 北京:人民郵電出版社,2008.

    [9] 王建平. 數(shù)字音樂(lè)盒設(shè)計(jì)[J].產(chǎn)品開(kāi)發(fā)與設(shè)計(jì),2011(38):65-67.

    WANG Jian-Ping. Digital Music Box Design [J].Industrial Design Exploitation,2011(38):65-67.

    [10] Mini6410用戶手冊(cè)[EB/OL].2012.11.http://www.arm9.net/mini6410-um.asp.

    [11] 劉永志.基于VB的MIDI電子琴[J].微型電腦應(yīng)用,2008(6):61-63.

    LIU Yong-Zhi. VB-Based MIDI Electronic Organs [J]. Microcomputer Applications,2008(6):61-63.

    [12] 單 丹.基于AT89C51單片機(jī)電子琴的設(shè)計(jì)[J].中國(guó)高新技術(shù)企業(yè),2010(36):6-7.

    SHAN Dan. Design Simple Electronic Organ Based on AT89C51 Single Computer [J]. China High Technology Enterprises,2010(36):6-7.

    [13] 馬志強(qiáng). 基于STM32的PWM音樂(lè)播放器應(yīng)用設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(20):5626-5627.

    MA Zhi-Qiang. Application Design of PWM Music Player Based on STM32[J].Microcontroller & Embedded Systems.2010(20):5626-5627.

    [14] 周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社, 2008.

    [15] 斯洛斯.ARM嵌入式系統(tǒng)開(kāi)發(fā):軟件設(shè)計(jì)與優(yōu)化[M].北京:北京航空航天大學(xué)出版社,2005.

    猜你喜歡
    電子琴開(kāi)發(fā)板蜂鳴器
    電動(dòng)自行車產(chǎn)品車速提示音檢測(cè)現(xiàn)狀和整改技術(shù)研究(2)
    掌控板制作簡(jiǎn)易鋼琴
    基于AT89C51單片機(jī)的電子琴設(shè)計(jì)
    電子制作(2019年13期)2020-01-14 03:15:30
    單片機(jī)驅(qū)動(dòng)蜂鳴器的程序設(shè)計(jì)
    Microchip最新推出兩款PIC32 Curiosity開(kāi)發(fā)板
    淺析單片機(jī)開(kāi)發(fā)板的設(shè)計(jì)與制作
    電子制作(2017年22期)2017-02-02 07:10:14
    電子琴
    豐田凱美瑞240V車間隙警告蜂鳴器異常鳴響
    Mouser為您呈上開(kāi)發(fā)關(guān)鍵之STMicroelectronics Nucleo開(kāi)發(fā)板
    Arduino和Atmel發(fā)布Arduino Zero開(kāi)發(fā)板
    东丽区| 年辖:市辖区| 平泉县| 嵩明县| 宁化县| 唐山市| 彰武县| 郓城县| 马公市| 双城市| 蛟河市| 和龙市| 宜兴市| 随州市| 莎车县| 灵武市| 民和| 萝北县| 含山县| 汾阳市| 新营市| 伽师县| 太和县| 弋阳县| 昆山市| 吉木萨尔县| 乌苏市| 青神县| 赣州市| 准格尔旗| 比如县| 随州市| 盐亭县| 扎兰屯市| 八宿县| 古田县| 秦安县| 连城县| 西青区| 肥乡县| 沛县|