新聞中心

移動(dòng)卡拉OK系統(tǒng)

——
作者:華中科技大學(xué)電子與信息工程系 羅綺麗 劉應(yīng)狀 時(shí)間:2008-01-14 來(lái)源:世界電子元器件 收藏

引言

  在當(dāng)今這樣一個(gè)充滿競(jìng)爭(zhēng)與挑戰(zhàn)的社會(huì),人們的生活顯得日益緊張而繁忙,同時(shí)也對(duì)休閑娛樂(lè)的要求越來(lái)越高??ɡ璒K作為一種休閑娛樂(lè)項(xiàng)目一直備受人們青睞。但人們?cè)诔钑r(shí)往往被局限于狹小的卡拉OK廳內(nèi),行動(dòng)、思維、靈感上都大大受到影響,無(wú)法最佳發(fā)揮。針對(duì)這種現(xiàn)狀,我們?cè)O(shè)計(jì)出一種基于U盤存儲(chǔ)的體積小巧的。用戶可以在精心設(shè)計(jì)的環(huán)境中隨心所欲地引吭高歌,充分展示自己的激情與靈感,使人與音樂(lè)達(dá)到完美結(jié)合。

系統(tǒng)硬件實(shí)現(xiàn)

  
本系統(tǒng)以AT89C51SND1C為核心處理器,采用美國(guó)國(guó)家半導(dǎo)體公司的LM4832、LMV722和LM4838作為立體聲音頻功率放大器, 以CS4330為音頻DAC,K9F5608U0A為存儲(chǔ)器并通過(guò)USB接口與主機(jī)通信,從而實(shí)現(xiàn)歌曲播放與麥克風(fēng)輸入;同時(shí)輔以鍵盤輸入控制和LCD實(shí)時(shí)顯示。整體硬件結(jié)構(gòu)如圖1所示。

歌曲播放部分設(shè)計(jì)

  歌曲播放部分主要實(shí)現(xiàn)歌曲播放與麥克風(fēng)輸入,即實(shí)現(xiàn)音樂(lè)與用戶歌聲的融合,是系統(tǒng)的核心部分。本系統(tǒng)采用AT89C51SND1C作為中央處理器。Flash中存儲(chǔ)的MP3文件經(jīng)解碼器解碼后輸出I2S格式的數(shù)字信號(hào),通過(guò)數(shù)模轉(zhuǎn)換芯片轉(zhuǎn)換后輸出左右兩路微弱的音頻模擬信號(hào),分別作為L(zhǎng)M4832左右聲道的輸入信號(hào)。本設(shè)計(jì)利用LM4832、LMV722和LM4838的巧妙結(jié)合(如圖1所示),對(duì)音樂(lè)信號(hào)和用戶歌聲進(jìn)行混合和功率放大,達(dá)到絕佳的音響效果。

  LM4832是具有I2C接口的數(shù)控音質(zhì)音量的立體聲音頻功率放大器。它的左右聲道、高低音均獨(dú)立可調(diào),并具有3D音響效果和軟件可控低功耗休眠模式。此外,它還提供兩路獨(dú)立可選的麥克風(fēng)輸入前置放大與音量控制,這就使得整個(gè)系統(tǒng)實(shí)現(xiàn)卡拉OK的功能成為可能。但LM4832的音頻輸出與麥克風(fēng)輸出是獨(dú)立的,這就需要對(duì)歌曲和用戶歌聲進(jìn)行前置混合。在此采用LMV722構(gòu)成的加法運(yùn)算電路,它具有低噪聲高增益帶寬的特點(diǎn),其增益帶寬高達(dá)10MHz,完全滿足本系統(tǒng)的要求。由于LMV722是單電源供電的,要結(jié)合前級(jí)輸入信號(hào)幅值來(lái)設(shè)計(jì)它的直流偏置電壓值,同時(shí)其輸出的兩路混合信號(hào)要經(jīng)過(guò)濾波電路濾除其直流偏置后方可作為后級(jí)功放輸入。為了達(dá)到卡拉OK震撼人心的音響效果,需要對(duì)音頻信號(hào)進(jìn)行功率放大,因此選用功率高達(dá)2W的LM4838音頻功率放大器。它具有DC音量控制、可選內(nèi)外部增益、低音加重等特點(diǎn),并帶有過(guò)熱保護(hù)電路和低功耗休眠模式(休眠電流為0.7 A)。這里通過(guò)螺旋電位器來(lái)調(diào)節(jié)功率大小。LM4838輸出提供揚(yáng)聲器和耳機(jī)兩種接口,而且兩者之間可以方便切換,使得用戶可以隨意改變自己的方式。{{分頁(yè)}}

  值得注意的是:在整個(gè)音頻功放實(shí)現(xiàn)過(guò)程中,要合理分配每級(jí)電路的增益,以免音頻信號(hào)失真。 LCD實(shí)時(shí)顯示部分設(shè)計(jì)

  LCD用于實(shí)時(shí)歌詞和狀態(tài)顯示。由于Windows 系統(tǒng)自帶的字庫(kù)有267K之多,因此選用容量為512K的Flash W29C040來(lái)存放字庫(kù)。同時(shí)考慮到主處理器RAM大小及音頻解碼的連續(xù)性,我們選用一片單片機(jī)(即從處理器)來(lái)專門處理LCD的顯示,它與主處理器之間通過(guò)串口(UART)來(lái)通信。LCD上的每個(gè)漢字是以16 16點(diǎn)陣方式來(lái)顯示的,需用32字節(jié)來(lái)表示;每個(gè)ASCII字符是以8 16點(diǎn)陣方式顯示,需用16字節(jié)來(lái)表示。而1首歌曲歌詞文件(*.lrc)一般有1~2K字節(jié)左右大小,故采用外擴(kuò)RAM(62256)來(lái)存儲(chǔ)歌詞文件。整個(gè)LCD顯示部分采用總線結(jié)構(gòu),編程簡(jiǎn)單方便,處理數(shù)據(jù)游刃有余。

U盤設(shè)計(jì)部分

  歌曲的存放與更新采用USB接口。存儲(chǔ)器大小可以自選,作為代表性實(shí)驗(yàn),本系統(tǒng)采用32M Flash K9F5608U0A作存儲(chǔ)器。U盤設(shè)計(jì)的硬件電路十分簡(jiǎn)單,只需將Flash和主處理器的一些相應(yīng)引腳相連即可。U盤設(shè)計(jì)的重點(diǎn)是USB協(xié)議的實(shí)現(xiàn),在后文將會(huì)詳細(xì)介紹。為了保證系統(tǒng)能正確識(shí)別出當(dāng)前狀態(tài)是處于U盤狀態(tài),還是處于歌曲播放狀態(tài),需要設(shè)置狀態(tài)判定電路,如圖2所示。

系統(tǒng)軟件設(shè)計(jì)

  系統(tǒng)軟件主要包括歌曲播放和USB通信程序。系統(tǒng)上電后,根據(jù)P3_4口判斷當(dāng)前所處的狀態(tài)而分別執(zhí)行相應(yīng)的程序代碼。 歌曲播放軟件設(shè)計(jì)

  歌曲播放器程序要與鍵盤和LCD配合起來(lái)設(shè)計(jì)。程序流程大概可分為:硬件初始化→獲取U盤中mp3歌曲列表→歌曲播放和LCD顯示。

  硬件初始化主要負(fù)責(zé)mp3解碼器的時(shí)鐘設(shè)置、Flash復(fù)位和LM4832的初始化,這是系統(tǒng)正常工作的關(guān)鍵。LM4832上電時(shí),其聲道音量和麥克風(fēng)音量均為無(wú)聲狀態(tài),表1為左聲道的I2C數(shù)據(jù)流格式真值表,其他類似,具體可參考LM4832芯片資料。因此需設(shè)置各狀態(tài)初始值,將各初始值均設(shè)在0dB。另外硬件初始化還包括鍵盤、LCD、UART初始化等工作。

  獲取U盤中的mp3歌曲列表通過(guò)查找U盤根目錄區(qū)中每個(gè)目錄項(xiàng)來(lái)實(shí)現(xiàn),同時(shí)將歌曲數(shù)目通過(guò)串口發(fā)送給LCD顯示從處理器。{{分頁(yè)}}

  歌曲播放和LCD顯示是程序的核心部分。主處理器和LCD從處理器之間通過(guò)串口進(jìn)行通信,以達(dá)到歌曲播放與歌詞顯示的同步以及鍵盤操作狀態(tài)的及時(shí)刷新。其程序流程圖如圖3所示。

{{分頁(yè)}}

  MP3解碼器一旦開始工作,就會(huì)一直向 CPU請(qǐng)求數(shù)據(jù),直至歌曲結(jié)束。只有用鍵盤操作才能中斷CPU。鍵盤操作總共4個(gè)按鍵(Menu/Previous/Next/Play)。Menu負(fù)責(zé)功能切換,共有5項(xiàng)功能:歌曲音量控制、高音調(diào)節(jié)、低音調(diào)節(jié)、麥克風(fēng)音量控制和歌曲選擇。在不同功能下Previous和Next分別代表不同的含義。在音量控制上為加/減音量,在歌曲選擇上為上一首/下一首歌曲。LCD在顯示歌詞的同時(shí)實(shí)時(shí)顯示鍵盤操作狀態(tài),以便用戶操作。

USB海量存儲(chǔ)設(shè)計(jì)

  主處理器讓USB海量存儲(chǔ)設(shè)備在批量傳輸方式下工作,這樣共需要3個(gè)端點(diǎn)。

  0端點(diǎn):控制端點(diǎn)。用于控制傳輸,PC機(jī)通過(guò)與端點(diǎn)0相對(duì)應(yīng)的管道來(lái)讀取設(shè)備描述符,完成對(duì)設(shè)備地址的設(shè)置,并完成配置。此端點(diǎn)為雙向數(shù)據(jù)傳輸端點(diǎn)。

  兩個(gè)非0端點(diǎn):批量傳輸端點(diǎn)。這種端點(diǎn)為單向數(shù)據(jù)傳輸端點(diǎn),分別為批量輸入端點(diǎn)和批量輸出端點(diǎn)。

  主處理器通過(guò)一個(gè)端點(diǎn)中斷寄存器(UEPINT)和PC機(jī)通信。如果某個(gè)端點(diǎn)完成了相應(yīng)的操作,就會(huì)引發(fā)中斷。U盤主程序流程圖如圖4所示。

{{分頁(yè)}}

  當(dāng)USB設(shè)備插入到PC機(jī)時(shí),PC機(jī)一旦檢測(cè)到設(shè)備后,就會(huì)通過(guò)控制管道向默認(rèn)地址發(fā)送USB標(biāo)準(zhǔn)請(qǐng)求,進(jìn)入設(shè)備配置階段,即PC機(jī)向設(shè)備索取各種描述符的過(guò)程,如Get Descriptor、Set Address、Set Configuration等。每當(dāng)設(shè)備收到主機(jī)發(fā)送的數(shù)據(jù)后,便會(huì)觸發(fā)端點(diǎn)中斷寄存器中端點(diǎn)0所代表的位。此時(shí),應(yīng)讀取端點(diǎn)0的數(shù)據(jù)緩沖區(qū),對(duì)照USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求的數(shù)據(jù)格式,對(duì)請(qǐng)求類型進(jìn)行識(shí)別,然后轉(zhuǎn)向相應(yīng)的標(biāo)準(zhǔn)請(qǐng)求處理函數(shù)。配置完成后,主機(jī)便使用在描述符中所選定的命令塊向批量傳輸端點(diǎn)發(fā)送控制消息和數(shù)據(jù)。

  在批量傳輸方式下,有3種類型的數(shù)據(jù)在USB和設(shè)備之間傳送:CBW、CSW和普通數(shù)據(jù)。因此,批量傳輸階段程序設(shè)計(jì)的任務(wù)就是要識(shí)別來(lái)自批量輸出端點(diǎn)的CBW與數(shù)據(jù),進(jìn)行相應(yīng)的處理,然后通過(guò)批量輸入端點(diǎn)向主機(jī)回傳相應(yīng)的CSW或數(shù)據(jù)。PC機(jī)依次向設(shè)備發(fā)出Inquiry、Read Capacity、UFI Mode Sense、Read Format Capacity等請(qǐng)求,這幾個(gè)命令用于告知PC這個(gè)設(shè)備的存儲(chǔ)器情況,PC基于此創(chuàng)建一個(gè)存儲(chǔ)器設(shè)備,即在瀏覽器中生成一個(gè)移動(dòng)盤符,并可以復(fù)制、刪除或創(chuàng)建文件等。系統(tǒng)自動(dòng)將這些命令都轉(zhuǎn)換成Read或Write兩種命令,通過(guò)USB的READ或WRITE命令塊描述符從Flash中相應(yīng)扇區(qū)讀取數(shù)據(jù),或是將特定長(zhǎng)度的數(shù)據(jù)寫入Flash相應(yīng)簇中。文件在U盤中按Fat16協(xié)議存儲(chǔ)。由于PC對(duì)存儲(chǔ)器的讀寫是按扇區(qū)(512字節(jié)/扇區(qū))為最小單位進(jìn)行的,但Bulk端點(diǎn)的最大傳輸能力為64字節(jié)。因此,主機(jī)讀寫操作的數(shù)據(jù)傳輸過(guò)程要分多次才能完成。而寫操作比讀操作更加繁瑣一些,這是因?yàn)镕lash在對(duì)某扇區(qū)進(jìn)行寫之前,必須要將其擦除,而擦之前存在已有數(shù)據(jù)的保存問(wèn)題。為了加快主機(jī)與U盤之間數(shù)據(jù)傳輸率,讀寫操作的代碼改用匯編來(lái)編寫。測(cè)試表明,U盤的讀寫速度可達(dá)到450Kbps。

結(jié)束語(yǔ)

  本系統(tǒng)采用LM4832、LMV722和LM4838的巧妙結(jié)合作為立體聲音頻功率放大器,并利用U盤存儲(chǔ)技術(shù)來(lái)存儲(chǔ)歌曲,使得整個(gè)系統(tǒng)不僅擁有優(yōu)質(zhì)的視聽效果,而且體積僅有180mm 70mm 100mm這么大。實(shí)驗(yàn)表明,本不僅具有數(shù)控音質(zhì)音量、立體聲音頻功率放大和超強(qiáng)3D音響效果的特點(diǎn),而且功耗低、用戶界面友好、便于攜帶。同時(shí)它也可作為MP3播放器或U盤使用,功能齊全。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉