基于C8051F020單片機與RTL8019AS的音頻峰值采集終端設計
廣播信號經(jīng)節(jié)目制作播出、信號傳送、發(fā)射等環(huán)節(jié),最終在聽眾用戶端收聽,其中各個環(huán)節(jié)的系統(tǒng)工作狀態(tài)都會對最終的播出質(zhì)量產(chǎn)生影響。為全面監(jiān)測廣播信號播出過程中多個環(huán)節(jié)的信號質(zhì)量,同時對高周信號和低周信號(音頻基帶信號)的音頻峰值進行監(jiān)測,就要求音頻峰值監(jiān)測終端對廣播信號播出端、發(fā)射端以及解調(diào)后的音頻信號進行監(jiān)測。一般電臺的制作播出端、發(fā)射端、監(jiān)測控制端不在同一地點。以上海為例:制作播出在虹橋路廣播大廈;發(fā)射端在東方明珠電視塔;監(jiān)測中心在北京路外灘。最好的監(jiān)測方法就是各地點分別采集,再通過內(nèi)部的局域網(wǎng)將采集的數(shù)據(jù)傳送到監(jiān)測中心集中分析處理。
1原理框圖
C8051F020是美國Silicon Laboratories公司生產(chǎn)的8051系列完全集成的混合信號ISP Flash微控制器。
基于C805lF020的音頻峰值采集終端輸人平衡音頻信號,經(jīng)減法電路、增益調(diào)整電路、負波形反相電路、檢波電路、射極跟隨電路和分壓電路,最終利用單片機內(nèi)部的8位和12位A/D轉(zhuǎn)換器,可以一次采集16路音頻峰值數(shù)據(jù)。C8051F020單片機將峰值數(shù)據(jù)和GPS(全球定位系統(tǒng))時間打包為應用層數(shù)據(jù),再通過UDP層、IP層和以太網(wǎng)層協(xié)議,最終打包為以太網(wǎng)包,通過以太網(wǎng)接口芯片RTL8019AS將數(shù)據(jù)發(fā)送到局域網(wǎng)上。原理框圖如圖1所示。
2峰值采集電路分析
音頻峰值采集電路的輸入部分為減法電路,如圖2所示。輸入信號可以為平衡音頻信號:
將R2、R3、R4、R5取為相等阻值,則可以得到:
V1=V+—V-
二級運放電路為反相比例放大器,可以調(diào)整信號的增益:
三級運放電路為負波形反相電路,當信號正相時,Dl導通,電路表現(xiàn)為電壓跟隨器電路:V3=V2+其中,V2+是V2信號的正相電壓部分。
當信號負相時,D2導通,電路表現(xiàn)為反相比例放大器電路特性,假設R9=R10=10 kΩ則:
其中,V2是V2信號的負相電壓部分。
所以經(jīng)過第三級運放以后:V3=V2+一V2一
二極管D3采用檢波二極管,與電容C5組成檢波電路;電阻R12、R13和R14為電壓調(diào)零網(wǎng)絡;R15和R16組成的分壓電路將信號范圍調(diào)整進了C8051F020的A/D轉(zhuǎn)換的電壓范圍。模數(shù)轉(zhuǎn)換子程序如下:
void ADC0_and_ADCl(unsigned char xdata*adc0,unsigned
char xdata*adcl){
unsigned char i;
ADOINT=0:
ADClCN=ADClCN & 0xDF:
for(i=0;i《8;i++){
AMXOSL=i;//選擇ADC0/ADCl的輸人端口
AMXlSL=i:
ADOBUSY=1:
ADClCN=A13(21CN 1 0x10:
while((ADClCN&0x20)==O);//等待ADCl數(shù)據(jù)轉(zhuǎn)換結(jié)束
ADClCN=ADClCN&0xDF:
adcl[i]=ADCl;
while(ADOlNT==O); //等待ADC0數(shù)據(jù)轉(zhuǎn)換結(jié)束
ADOINT=0;
adc0[i]=ADCOH;
}
}
3網(wǎng)絡傳送技術要點
網(wǎng)絡傳送部分主要負責將采樣后的音頻峰值信息以及采集時間,通過以太網(wǎng)將數(shù)據(jù)發(fā)送到目標PC機進行數(shù)據(jù)處理。應用層協(xié)議如表1所列。
應用層協(xié)議調(diào)用UDP.C將應用層數(shù)據(jù)打包成UDP包,并綁定目標地址發(fā)送。使用UDP傳送方式主要基于以下考慮:
①TCP要求目標端連接,方式復雜,會消耗單片機大量時間資源。以往的經(jīng)驗表明會出現(xiàn)連接不可靠或斷開的情況。
②有大量的、實時的、長時間的音頻峰值數(shù)據(jù)發(fā)送,UDP方式更適合這種應用。
一般指定的目標地址為IP地址,要得到目標機器的以太網(wǎng)地址,需要ARP協(xié)議(地址解析協(xié)議)的支持。以下是接收到ARP包后的處理程序:
void arp_rcve(UCHAR xdata*inbuf){
:
//是否收到有效的ARP包
//查看是否有已收到的IP地址,如果有則更新入口和重
//啟時間
if(arp一》dest_ipaddr!=my_ipaddr)return;//目標地址
//不指向自己,返回
//找空白的IP地址儲存條目。沒有找到空白的lP地址
//儲存條目,找到最舊的條目并替換。找不到最舊的條
//目,不替換
if(arp一》message_type==ARP_RESPONSE){//收到
//ARP回應包
//如果本機處于等待ARP回應狀態(tài),回應的IP是要等待
//的IP地址
if((waiting_for_arp)&&(wait.ipaddr==arp一》
Source_ipaddr)){
waiting_for_arp=FALSE;//清除等待標志
ip_send(waic buf.wait.ipaddr,wait.pmto_id,wait.len);
}
}
else if(arp一》message_type==ARP_REQUEST){
arp_send(arp一》source_hwaddr,arp一》source_ipad—
dr,ARP_RESPONSE);
}//如果收到ARP請求包,發(fā)送ARP請求回應
)
ARP協(xié)議會定時訪問ARP存儲緩沖,如果緩沖中的條目生命時間到達,ARP協(xié)議會將該條目刪除。為了保證數(shù)據(jù)發(fā)送目標地址的硬件地址不被移去,程序中硬性規(guī)定ARP緩沖中目的地址的ARP條目不會因為時間而移去。
void age arp_cache(void){
UCHARi;
for(i=0;i《 SPAN》
//目的地址的ARP條目不會因為時間而移去
if(arp_cache[i].ipaddr!=udp_dest_ipaddr_rw){
if((arp_cache[i].ipaddr!=0)&&(arp_cache[i].
timer)){
arp cache[i].timer一一;
//生命時間到達.條目的IP地址項清零
if(arp_cache[i].timer==O)arp_
cache[i].ipaddr=01
}
}
}
}
網(wǎng)絡傳送的硬件部分由C8051F020和RTL8019AS組成,構(gòu)成10M以太網(wǎng)接口。以太網(wǎng)和IP地址可通過串口配置保存在Flash中,C8051F010上電后將以太網(wǎng)地址傳送給RTL8019AS。RTL8019AS初始化后完成以太網(wǎng)層數(shù)據(jù)包的接收和發(fā)送。