胡 慶, 余 晨
(成都大學 信息科學與工程學院, 四川 成都 610106)
隨著電子行業(yè)的興起,智能化已經(jīng)逐漸成為一種潮流和趨勢[1],人們不再滿足于機械式音樂盒的單一功能,功能多樣化的數(shù)字音樂盒逐漸成為主流產(chǎn)品.與此同時,單片機的功能不斷完善,特別是STM32系列微處理器,其基于ARM Cortex-M內核的32-bit閃存微控制器,主頻高達72 MHz,具有高集成度、實時性、數(shù)字信號處理、低功耗、低電壓操作等特點,應用很廣泛[2].本研究以STM32F103C8T6單片機為核心,外部加上時鐘與復位電路、按鍵電路、喇叭電路、LED電路及音量控制電路,以此來實現(xiàn)音樂盒的硬件電路,通過C語言來控制單片機內部的定時器使其產(chǎn)生一定頻率的PWM從而驅動喇叭發(fā)聲,通過AD采集來改變占空比,從而控制音量的增減,通過控制按鍵來實現(xiàn)上一首、下一首及暫停播放.本研究設計的數(shù)字音樂盒外觀精致小巧,制作工藝簡單,具有較強實用性.
本設計的系統(tǒng)結構框圖如圖1所示.系統(tǒng)以STM32-F103C8T6單片機為核心, 采用USB供電. 按鍵電路使用定時器2產(chǎn)生中斷,從而達到選曲的目的以及暫停播放功能.定時器3輸出PWM驅動喇叭發(fā)聲以及LED的隨機閃動.另外,復位電路中,當程序運行出錯時,復位鍵可使系統(tǒng)重新工作.
圖1系統(tǒng)結構框圖
STM32F1微控制器系列,具有較高的性能、一流的外圍設備以及較低消耗的功能與電壓[3].STM32F103系列微處理器時鐘頻率為72 MHz,電壓范圍為2.0~3.6 V.本設計采用STM32F103C8T6[4]作為系統(tǒng)的控制處理器.
AMS1117系列穩(wěn)壓器有可調版與多種固定電壓版,可提供1 A輸出電流且工作壓差可低至1 V.在最大輸出電流時,AMS1117器件的最小壓差保證不超過1.3 V,并隨負載電流的減小而逐漸降低.常用電路圖如2所示.
圖2 AMS1117常用電路
本設計使用AMS1117穩(wěn)壓芯片給喇叭單獨供電,考慮到AMS1117在工作中易發(fā)熱,使用了一個穩(wěn)壓二極管降壓,再通過AMS1117穩(wěn)壓芯片輸出3.3 V給喇叭供電.因為AMS1117的最小工作壓差為1 V,本設計只使用一個穩(wěn)壓二極管,就可以保證穩(wěn)壓芯片的正常工作.
電源電路如圖3所示.
圖3電源電路
單片機使用5 V電源,通過Mirco USB接口供電,再通過系統(tǒng)板上的LDO低壓差線性穩(wěn)壓器RT9193將5 V轉為3.3 V輸出,如圖4所示.為了達到對干擾信號的抑制,系統(tǒng)再通過電容濾波(見圖5).由于喇叭消耗功率較大,所以單獨使用降壓芯片AMS1117-3.3給喇叭供電.
圖4 5 V轉3.3 V電路
圖5濾波電路
STM32F103的NRST引腳輸入驅動使用CMOS工藝,連接一個不能斷開的上拉電阻R,電阻值如表1所示[4].上拉電阻由電阻串聯(lián)一個可開關的PMOS實現(xiàn),這個PMOS開關的電阻很小(約占10%).
表1 STM32F103的NRST引腳上拉電阻值
復位電路如圖6所示.復位源將最終作用于RESET引腳,并在復位過程中保持低電平,復位入口矢量地址設置為0x0000~0004.當復位鍵按下時,單片機引腳接收到一個低電平的信號,從而實現(xiàn)外部復位.
本設計使用普通的按鍵接法,通過單片機PA0、PC14、PC15口控制,實現(xiàn)歌曲播放順序的調換和暫停播放功能.按鍵電路圖如圖7所示.
圖6復位電路
圖7按鍵電路
LED電路包括:一個LED作為系統(tǒng)指示燈,當按鍵按下時為常亮,而當系統(tǒng)正常工作時,燈按1.3 s的頻率閃爍;一個LED作為電源指示燈,上電常亮,如圖8所示;一個LED作為音階指示燈,當變換一次音階時變換一次,而當播放暫停時,為常亮;一個LED作為頻率指示燈,跟隨著音樂的變換而隨機閃爍,如圖9所示.
圖8系統(tǒng)指示和電源指示LED電路
圖9 音階和頻率指示LED電路
喇叭的功率為3 W,電阻為4 Ω,通過AMS1117芯片所輸出的3.3 V給喇叭供電.STM32的PA6引腳接到三極管的基極,通過引腳輸出不同的PWM信號,從而使喇叭發(fā)出不同的聲音.喇叭電路如圖10所示.
圖10喇叭電路
通過改變滑動變阻器電阻改變流過的電壓和電流,音量控制電路如圖11所示.引腳PA2采集信號通過改變占空比來改變音量.
圖11音量控制電路
系統(tǒng)軟件的主程序流程圖如圖12所示.首先對系統(tǒng)時鐘、延時函數(shù)、ADC采樣、按鍵、彩燈、定時器TIM2與TIM3的PWM進行初始化,清除一些標志位,設置定時器的工作方式、初值及中斷優(yōu)先級等,使程序能夠正常運行[5].然后,檢測歌曲是否結束,未結束則讀取音階即頻率,再由定時器產(chǎn)生不同的PWM信號,從而驅動喇叭發(fā)聲直至歌曲結束.
音樂盒的設計主要是利用STM32F103C8T6內部的定時器[6].該定時器有4路PWM輸出,將其中1路輸出給喇叭使其發(fā)聲,而將另外3路輸出給彩燈使其隨機閃爍[7].本設計通過設定不同的分頻系數(shù)以及重裝值讓PWM產(chǎn)生不同的頻率.節(jié)拍是利用延時函數(shù)來設置的,通過讓每個音階延時一段時間(即節(jié)拍)來演奏一首完整的樂曲.
圖12主程序流程圖
本設計所用的定時器有:測量輸入信號的脈沖長度或產(chǎn)生需要的輸出波形的通用定時器TIM2和定時器TIM3,用來確保延時函數(shù)精確性的24-bit遞減計數(shù)器SysTick.
定時器相關參數(shù)設置如下:定時器TIM2的初始化為10 ms中斷一次,其中,arr為自動重裝值,psc為時鐘預分頻數(shù).
定時器溢出時間計算方法為,
Tout=((arr+1)·(psc+1))/Ft
(1)
式中,F(xiàn)t為定時器工作頻率,因為系統(tǒng)時鐘為72 MHz,所以本設計定時10 ms溢出一次時,自動重裝值arr設置為99,時鐘預分頻數(shù)psc可以設置為7199,則溢出時間Tout為,
Tout=((99+1)×(7199+1))/72=10 ms
(2)
代碼如下:
void TIM2-Int-Init(u16 arr,u16 psc)//定時器TIM2初始化
{
RCC->APB1ENR|=1<<0;//TIM2時鐘使能
TIM2->ARR=arr;//arr=99
TIM2->PSC=ps;//psc=7199
TIM2->DIER|=1<<0;//允許更新中斷
TIM2->CR1|=0x01;//使能定時器TIM2
MY-NVIC-Init(1,3,TIM2-IRQn,2);//搶占1,子優(yōu)先級3,組2
}3.3 PWM輸出設計
本設計利用定時器TIM3輸出PWM來控制喇叭發(fā)聲,再通過調節(jié)占空比控制音量.TIM3有4路PWM輸出,其中1路接上喇叭,另外3路分別接上3個彩燈,使得彩燈跟隨頻率的不同而隨機閃爍,為音樂盒增添一份美感.代碼如下:
void F-set(u8 psc)
{
TIM3->ARR = 999;//重裝值,溢出值,計數(shù)周期
TIM3->PSC=yinjie[psc];//設置分頻,設定發(fā)聲頻率
TIM3->CCR1 = vlo;//賦值為音量
TIM3->CCR2 = psc%5*(psc%7*140)+400;
TIM3->CCR3 = psc%3*(psc%7*140)+400;
TIM3->CCR4 = psc%2*(psc%7*140)+400;//彩燈,占空比不同,亮度不同,對5、3、2取余,盡量隨機閃動
}
本設計有3個功能按鍵,分別為上一曲、下一曲及暫停功能,首先要對按鍵初始化,使能按鍵對應的硬件端口,再對鍵值進行判斷,最后執(zhí)行相應的操作.具體代碼如下:
if(KEY0==0||KEY1==0||KEY2==0)//按鍵按下
{
LED1 = 0;//按下紅燈常亮
if(KEY-sta==0)//第1次掃描
{
KEY-sta|=0x20;//按下標記
KEY-sta|= (KEY0?0:0x01);//存按鍵值
KEY-sta|= (KEY1?0:0x02);
KEY-sta|= (KEY2?0:0x04);
}
else if(KEY-sta&0x20) KEY-sta |= 0x80;//連續(xù)第2次掃描,認為按鍵按下,標記鍵值處理
}
else//按鍵釋放,標記鍵值處理
{
if(KEY-sta&0x80)//確定按鍵按下標記,進行鍵值處理
{
if(KEY-sta&0x01) Next=2;//按鍵0,上一曲
else if(KEY-sta&0x02) Suspend=(Suspend==0)?1:0;//按鍵1,暫停
else if(KEY-sta&0x04) Next = 1;//按鍵2,下一曲
}
KEY-sta = 0;//釋放按鍵,狀態(tài)清0
}
測試時,本研究在Proteus軟件下新建仿真項目,搭建好原理電路圖如圖13所示,然后結合Keil對電路進行仿真調試.實物圖如圖14所示.音樂盒通電,系統(tǒng)正常工作,電源指示黃色燈常亮,系統(tǒng)指示燈以1.3 s的頻率閃爍,藍色的頻率燈常亮,4引腳的彩燈隨頻率閃爍,喇叭發(fā)出音樂.本設計通過按鍵設置上一首、下一首及暫停播放,實現(xiàn)了數(shù)字音樂盒功能.
在測試時,本設計在嘗試使喇叭發(fā)聲的過程中,最初將重裝值設置為1999,即周期為2000,此時定時器重裝值大了,分頻數(shù)小,當頻率高時,頻率不準,誤差大,高音聽起來就像雜音.對此, 本設計嘗試減小重裝值,將重裝值設置為999,即周期為1000,此時分頻數(shù)提高,精度也相對提高,頻率誤差減少,音質更加準確.此外,本設計在調節(jié)音量大小時,通過不斷嘗試,最后也找到了使音量最大的占空比.
圖13 Proteus軟件仿真
圖14硬件測試
本設計以STM32F103系列芯片作為控制芯片,利用定時器的4路PWM輸出,1路控制喇叭發(fā)聲,其余3路分別接上3個彩燈,使得彩燈跟隨頻率的不同而隨機閃爍,為音樂盒增添了一份美感,同時,還設置了上一首、下一首及暫停播放,實現(xiàn)人性化控制.本設計的數(shù)字音樂盒工藝簡單,有較強的實用價值,稍加外觀設計便可用于玩具制造行業(yè).