專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

利用PLL(LM567)做頻率解調(diào)的實(shí)例

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年10月10日   【字體:


    這是最近做的一個(gè)很有意思的案子,是一個(gè)玩具上用的藍(lán)牙控制器。


    條件限定為:一個(gè)MONO的藍(lán)牙音頻模塊,把它做成藍(lán)牙遙控器,而且,控制的時(shí)候還要播放主機(jī)走藍(lán)牙過(guò)來(lái)的聲音。

    同時(shí),這個(gè)藍(lán)牙模塊沒(méi)有數(shù)據(jù)片可以走,直接輸出載著直流的音頻差分信號(hào)。

    討論的結(jié)果就是,在要播放的聲音里混音進(jìn)人耳聽(tīng)不到的頻率部分,然后在藍(lán)牙音頻模塊輸出端把數(shù)據(jù)解調(diào)出來(lái)。


解調(diào)部分

 

 
    核心部分就是LM567的解調(diào)端,中心頻率設(shè)定在人耳基本聽(tīng)不到的18.5Khz

    核心的部分是音調(diào)檢測(cè),用了一款NS家很老的專門做音調(diào)檢測(cè)的LM567。




 
其原理就是利用本地RC震蕩產(chǎn)生一個(gè)頻率,與輸入頻率進(jìn)行鑒頻,8腳是專門做鑒頻輸出用。

f0的公式電容用uF,電阻用KOmh,頻率為kHz


 
算出來(lái)18.5Khz下
Cx=6.8nF
Rx=7.5K
但實(shí)際調(diào)試的時(shí)候RX建議用10K的微調(diào)電阻,因?yàn)槠渌骷赡軙?huì)有誤差

 
帶寬跟C2和輸入信號(hào)的有效值有關(guān)。
Vi是直接取藍(lán)牙輸出的還沒(méi)過(guò)功放的小信號(hào),振幅很小,所以實(shí)際上電路的帶寬會(huì)很小,這是有利于做頻率辨識(shí)的,以防諧波以及聲音文件里夾雜的各種頻率信號(hào)的干擾。
這里C2用的0.1uF,C3用的10uF。測(cè)量出來(lái)帶寬在500~1kHz左右。

電源用5V,跟后端解碼的單片機(jī)電壓一致。
有18.5Khz輸入的時(shí)候,8腳輸出低電平。

焊好的板子如下~





聲音部分

首先用一個(gè)叫做SweepGen的軟件來(lái)做音頻發(fā)生,用Total Recorder的虛擬聲卡映射把生成的聲音捕捉下來(lái)。

 

 
注意SweepGen和Total Recoder默認(rèn)的電平和音量不是0db,記得調(diào)節(jié)到0db的原始聲音狀態(tài)。
SweepGen里面記得把波形設(shè)置成正弦,因?yàn)?8.5Khz的方波的諧波能聽(tīng)出來(lái)。
編輯聲音妥妥的就得靠Adobe Audition了,cool edit是它的前身。其實(shí)聲音生產(chǎn)也可以用它,只是我沒(méi)找到在哪生成正弦波形。

 
 
 

 
Audition里面可以看到,剪輯的聲音頻譜落點(diǎn)很明顯。



解調(diào)部分

因?yàn)椴シ牌髟诓シ诺臅r(shí)候可能會(huì)淡出淡入,以及藍(lán)牙模塊剛開(kāi)始播放的時(shí)候會(huì)開(kāi)啟內(nèi)部codec所以正式的編碼數(shù)據(jù)前要加一段靜音。

 
經(jīng)過(guò)測(cè)試,18.5Khz的信號(hào)要維持50ms以上,LM567的輸出低電平才跟著18.5Khz的持續(xù)時(shí)間接近,所以一幀數(shù)據(jù)長(zhǎng)度暫時(shí)設(shè)置為50ms。

 
由于無(wú)輸入的時(shí)候解調(diào)部分輸出為高,所以同步頭用一個(gè)低電平來(lái)做下降沿觸發(fā),在觸發(fā)MCU這邊的中斷后對(duì)IO進(jìn)行采樣,1ms采樣一次,50ms為一個(gè)幀,算上采樣內(nèi)執(zhí)行延時(shí),一幀共采樣32次,超過(guò)16次為低就認(rèn)為是0。

 
MCU用的是8051核的新塘N79E8132,2塊錢一顆的單片機(jī)

 
采樣的代碼段:
for (cntbit=0;cntbit<8;cntbit++)
{
sample=0;
   for(samcnt=0;samcnt<32;samcnt++)
{
    sample=sample+(P0&0X1);        //
    Delay1ms(1);              //read process
}//
//printf("sample%d = %d \n",cntbit,sample);
if(sample <16)   //HIGH/LOW LEVEL SET
{
state_t=state_t | (0x1<<cntbit);   
}   
}

 
這里的delay是新塘的bsp包里用定時(shí)器標(biāo)志位來(lái)做的,并且用一個(gè)IO反轉(zhuǎn)測(cè)過(guò)執(zhí)行延時(shí)才得出32次循環(huán)50ms的結(jié)果。
RC的頻率是22M。
同步頭設(shè)定為0101,后面四位作為命令位

 
比如01011110的波形就是下圖

 
 

 

 

頭尾1秒靜音用來(lái)避免播放器的截頭截尾效應(yīng)導(dǎo)致數(shù)據(jù)不全。

 
下圖是用示波器測(cè)藍(lán)牙的音頻輸出和解調(diào)器的輸出

 
 

 
黃色的CH1是解調(diào)器輸出,藍(lán)色的CH2是音頻輸入

 
下圖是另外一組01011101的波形

 

 

 
基本出來(lái)這個(gè)波形,解調(diào)就不是問(wèn)題了。

 

 
延時(shí)問(wèn)題

如果你真的需要用LM567,以下這個(gè)問(wèn)題你必須要考慮

 
咱們看圖

 
 
 

 
LM567的鑒頻腳 PIN8的鎖定延時(shí)以及失鎖以后恢復(fù)高電平的延時(shí)如圖

 
鎖定延時(shí)大概5ms

 
失鎖的延時(shí)大概是10ms

 
而且鎖定延時(shí)和失鎖延時(shí)會(huì)浮動(dòng),不是每一次都一樣。觀察下來(lái)的結(jié)果,這個(gè)浮動(dòng)多的時(shí)候會(huì)到上面數(shù)據(jù)的50%之多。

 
也就是表明,你的最小幀長(zhǎng)度必須大于15ms的2倍+幀持續(xù)長(zhǎng)度

 
這也是為什么一幀數(shù)據(jù)要50ms之長(zhǎng),并且要在一幀的采樣周期里采樣這么多次,還得用閾值來(lái)判別采樣期間的電平的原因。
關(guān)閉窗口

相關(guān)文章