早期的數(shù)字FM處理芯片TEA5767由Philips公司開(kāi)發(fā)并被廣泛地使用,但該芯片需要外加音頻放大電路才能驅(qū)動(dòng)耳機(jī)。鑒于此,國(guó)內(nèi)銳迪科微電子公司獨(dú)立開(kāi)發(fā)了一顆具備高接收靈敏度的FM立體聲數(shù)字芯片RDA5807P,具有自動(dòng)搜臺(tái)、重低音、靜音、休眠、直接驅(qū)動(dòng)耳機(jī)等優(yōu)異的性能。本文介紹用RDA5807P芯片設(shè)計(jì)和制作了一款帶遙控功能的收音機(jī)。 1 收音機(jī)總體設(shè)計(jì)方案 收音機(jī)的總體設(shè)計(jì)框圖如圖1所示。本收音機(jī)采用單節(jié)3.7 V、容量1500 mAh的鋰電池作力電源,在使用壽命期內(nèi)可以用手機(jī)充電器反復(fù)對(duì)它進(jìn)行充電,使用非常方便。采用低功耗的AVR單片機(jī)ATmega8L作為微控制器,負(fù)責(zé)處理和協(xié)調(diào)各模塊電路的工作,ATmega8L的工作電壓為2.7~5.5 V,片內(nèi)有512字節(jié)的EEPROM,不用專(zhuān)門(mén)外接EEPROM芯片就可以將掉電前接收電臺(tái)的頻道和音量信息保存起來(lái),重新開(kāi)機(jī)后又可以恢復(fù)原來(lái)的信息。調(diào)頻收音機(jī)模塊采用國(guó)產(chǎn)芯片RDA5807P加上少量的外圍元件組成,由微控制器通過(guò)I2C總線接口對(duì)芯片內(nèi)部寄存器進(jìn)行寫(xiě)/讀操作。通過(guò)鍵盤(pán)或紅外遙控發(fā)射器可以進(jìn)行自動(dòng)搜臺(tái)、手動(dòng)選臺(tái)、音量調(diào)節(jié)、靜音操作。LCD用于顯示當(dāng)前收聽(tīng)電臺(tái)的頻率、音量等級(jí)等信息。音頻功率放大器放大當(dāng)前收聽(tīng)電臺(tái)的音頻信號(hào),驅(qū)動(dòng)揚(yáng)聲器發(fā)出聲音。 圖1 收音機(jī)的總體設(shè)計(jì)框圖 2 系統(tǒng)硬件電路設(shè)計(jì) 2.1 電源管理模塊電路設(shè)計(jì) 電源管理模塊電路如圖2所示。LM2054是一款單節(jié)鋰電池恒流、恒壓線性充電芯片,最大充電電流可達(dá)到800 mA。它只需外接極少的外部元件,預(yù)設(shè)4.2 V充電電壓,精度達(dá)到±1%。充電時(shí),若鋰電池電壓低于4.2V,充電指示燈D101亮,充電達(dá)到預(yù)設(shè)值4.2 V后指示燈D101熄滅。 圖2 電源管理模塊電路 2.2 微控制器及鍵盤(pán)、顯示、紅外遙控接收電路設(shè)計(jì) 微控制器及鍵盤(pán)、顯示、紅外遙控接收電路如圖3所示。 圖3 微控制器及鍵盤(pán)、顯示、紅外遙控接收電路 鍵盤(pán)K1~K6用于選頻、音量調(diào)節(jié)等。紅外遙控接收頭連接到單片機(jī)ATmega8L的PB0,用單片機(jī)的輸入捕獲功能進(jìn)行解碼。為了減少液晶顯示器LCD1602A占用單片機(jī)過(guò)多的I/O口,數(shù)據(jù)接口只使用高4位,在寫(xiě)入命令或數(shù)據(jù)時(shí),分兩次寫(xiě)入,先寫(xiě)高4位,再寫(xiě)低4位。為了降低LCD的用電量,LCD的背光燈用單片機(jī)的PD3和PC1進(jìn)行控制,當(dāng)用戶設(shè)置好想收聽(tīng)的電臺(tái),5 s后LCD背光燈自動(dòng)熄滅。 2.3 調(diào)頻收音模塊電路設(shè)計(jì) 調(diào)頻收音模塊電路如圖4所示。RDA5807P是國(guó)產(chǎn)的FM立體聲收音機(jī)接收芯片,加上極少的外圍元件且基本不需要校準(zhǔn),通過(guò)程序設(shè)定即可接收歐洲、美國(guó)和日本的調(diào)頻波段。單片機(jī)通過(guò)I2C總線SCL和SDA將訪問(wèn)RDA5807P芯片所需的地址、命令、數(shù)據(jù)寫(xiě)入內(nèi)部的寄存器中,也可以通過(guò)該總線讀出芯片內(nèi)部寄存器中的數(shù)據(jù),取得接收頻道的數(shù)據(jù)和音量值,供顯示使用。RDA5807P的輸出經(jīng)磁珠F301、F302及電容器C30 3、C304抑制高頻干擾后,可以直接驅(qū)動(dòng)32 Ω的耳機(jī)發(fā)出聲音,也可以接到下級(jí)音頻功放進(jìn)行放大,推動(dòng)揚(yáng)聲器發(fā)出聲音。 圖4 調(diào)頻收音模塊電路 2.4 音頻功率放大電路設(shè)計(jì) 音頻功率放大電路如圖5所示。PAM8403是一塊D類(lèi)音頻功率放大器芯片,它具有諧波失真低、噪聲串?dāng)_小、可直接驅(qū)動(dòng)喇叭的特點(diǎn)。用它制作的音頻功放,電路簡(jiǎn)單,工作可靠。在5 V電源和4 Ω負(fù)載條件下,能輸出3 W的功率。效率可達(dá)90%以上,非常適合于用電池供電的便攜式電子產(chǎn)品。電路中 引腳可通過(guò)單片機(jī)輸出低電平控制其進(jìn)行靜音和關(guān)閉功放系統(tǒng)。 圖5 音頻功率放大電路 2.5 紅外發(fā)射模塊電路設(shè)計(jì) 紅外遙控發(fā)射器電路如圖6所示。BA5104是一塊紅外遙控編碼芯片,內(nèi)接有上拉電阻,無(wú)鍵按下時(shí),電路中無(wú)電流流通,振蕩電路不起振,無(wú)遙控編碼信號(hào)輸出。當(dāng)有某一鍵按下時(shí),電路產(chǎn)生455 kHz的振蕩信號(hào),由BA5104內(nèi)部電路進(jìn)行12分頻,獲得38 kHz的載波信號(hào)。此時(shí)按鍵的編碼信息和C1、C2引腳的狀態(tài)信息對(duì)38 kHz載波進(jìn)行編碼調(diào)制,經(jīng)15引腳串行輸出,由三極管Q501、Q502構(gòu)成的達(dá)靈頓驅(qū)動(dòng)電路放大,經(jīng)外發(fā)射管向空間發(fā)射,同時(shí)14引腳輸出高電平,發(fā)射狀態(tài)指示燈D501點(diǎn)亮。 圖6 紅外遙控發(fā)射器電路 3 系統(tǒng)軟件程序設(shè)計(jì) 軟件程序設(shè)計(jì)主要包括讀寫(xiě)RDA5807P芯片相關(guān)的模塊程序、頻率及音量顯示模塊程序、按鍵檢測(cè)與功能設(shè)定模塊程序、遙控解碼及功能設(shè)定模塊程序等。本設(shè)計(jì)選用CodeVisionAVR作為開(kāi)發(fā)軟件,軟件中集成有LCD1602、I2C總線驅(qū)動(dòng)程序,不用再編寫(xiě)相應(yīng)的底層函數(shù),使用非常方便。故在此僅介紹RDA5807P芯片工作在RDA5807P模式及采用I2C總線接口進(jìn)行搜臺(tái)的程序設(shè)計(jì)和紅外遙控解碼程序的設(shè)計(jì)。 3.1 搜臺(tái)程序設(shè)計(jì) 搜臺(tái)程序可用硬件模式進(jìn)行搜臺(tái),也可以采用軟件模式進(jìn)行搜臺(tái)。本文著重介紹硬件模式搜臺(tái),軟件模式搜臺(tái)可參照硬件搜臺(tái)模式進(jìn)行編程。 I2C總線接口是由START、命令字節(jié)、數(shù)據(jù)字節(jié)及每個(gè)字節(jié)后的ACK及NACK比特、STOP組成。RDA58027P芯片寫(xiě)器件地址為0x20,讀器件地址為0x21。RDA5807P芯片內(nèi)部的I2C總線接口有4個(gè)寫(xiě)數(shù)據(jù)寄存器,其地址分別是0x02、0x03、0x04、0x05。2個(gè)讀數(shù)據(jù)寄存器,其地址分別為0x0A、0x0B,每個(gè)數(shù)據(jù)寄存器又分為高字節(jié)和低字節(jié)。這些數(shù)據(jù)寄存器的地址是不可見(jiàn)的,不能通過(guò)單片機(jī)直接對(duì)指定地址的數(shù)據(jù)寄存器進(jìn)行讀/寫(xiě)操作。因此,單片機(jī)在發(fā)出讀/寫(xiě)命令字節(jié)后,接下來(lái)必須對(duì)數(shù)據(jù)寄存器進(jìn)行連續(xù)地讀/寫(xiě)操作。其子程序如下: 硬件模式搜臺(tái)程序設(shè)計(jì)主要是通過(guò)調(diào)用連續(xù)寫(xiě)和連續(xù)讀操作子程序來(lái)對(duì)收音模塊寄存器進(jìn)行讀/寫(xiě),其程序流程圖如圖7所示。 圖7 硬件模式搜臺(tái)程序流程圖 根據(jù)該流程圖編寫(xiě)的子程序如下: 3.2 紅外遙控解碼程序設(shè)計(jì) 由BA5104的編碼格式可知;遙控碼的一幀長(zhǎng)度為12位,其中包括3位起始碼、2位用戶碼、7位指令碼。遙控碼的每一幀時(shí)間間隔為4T,T=1.6879 ms為一位遙控碼的周期。一幀完整的遙控碼如圖8所示。 圖8 一幀遙控碼 遙控碼中“1”用3T/4的高電平與T/4的低電平表示,“0”用T/4的高電平與3T/4的低電平表示,一位遙控碼的波形如圖9所示。 圖9 一位遙控碼 由圖9可見(jiàn),要用單片機(jī)來(lái)判斷遙控發(fā)射器發(fā)出的是“0”還是“1”,關(guān)鍵是要判斷接收脈沖下降沿至上升沿之間的時(shí)間。可以采用外部中斷法,也可以采用輸入捕獲功能法,本文采用后一種方法。解碼的思路是:初始化時(shí),將ATmcga8L的ICP1引腳設(shè)置為輸入狀態(tài),下降沿觸發(fā),當(dāng)紅外接收頭接收到紅外遙控信號(hào)時(shí),產(chǎn)生下降沿,單片機(jī)自動(dòng)將TCNT1寄存器中的值保存至ICR1寄存器中,在捕獲中斷服務(wù)程序中將ICR1中的值保存至T1中;然后將ICP1設(shè)置為上升沿觸發(fā),當(dāng)再次產(chǎn)生捕獲中斷時(shí),將ICR1中的值保存至T2中,將ICP1設(shè)置為下降沿觸發(fā),并將TCNT1置0。之后計(jì)算出T2-T1的時(shí)間并保存至事先開(kāi)辟的數(shù)組中,要注意的是,T2-T1有可能出現(xiàn)負(fù)值,此時(shí)要將(T2-T1+0xffff)再保存,直到接收完12位數(shù)據(jù)。 保存在數(shù)組中的數(shù)據(jù),當(dāng)其值為3/4×1.687 9ms≈1266μs時(shí),被認(rèn)為接收到“1”,當(dāng)其值為1/4×1.687 9 ms≈422 μs時(shí),被認(rèn)為接收到“0”。由于遙控發(fā)射器和單片機(jī)所使用的晶振頻率與標(biāo)稱(chēng)值會(huì)有一定的偏差,所以在程序中要留有一定的余量。 結(jié)語(yǔ) 經(jīng)過(guò)多次比對(duì)測(cè)試,該收音機(jī)可以清晰、穩(wěn)定地收聽(tīng)省府及本地所發(fā)射的調(diào)頻電臺(tái)信號(hào)。 |