唐麗嬋,陸 宇,湯雪華
(上海電氣集團股份有限公司中央研究院,上海 200070)
?
基于DSP的高動態鎖相環的實現
唐麗嬋,陸宇,湯雪華
(上海電氣集團股份有限公司中央研究院,上海 200070)
摘要:文中介紹了常見鎖相環的基本結構,分析了相位檢測器、環路濾波器和壓控振蕩器的執行情況。PLL環路濾波器的系統函數表明,環路濾波器的性能基本上決定了鎖相環的質量。側重于環路濾波器的設計,結合鎖相在高動態GPS接收機環路中的應用,提出了在高動態環境中,一種兩相鎖頻環輔助三相鎖相環數字濾波器的細節。模擬結果表明,該鎖相環的性能比普通PLL已大大改善,并完全符合高動態信號跟蹤的要求。
關鍵詞:鎖相環;濾波器;DSP;高動態
隨著載波跟蹤特性逐漸優良,鎖相環已被廣泛應用在無線電技術的各個領域。特別是20世紀50年代末空間技術的發展,鎖相環被廣泛應用于太空飛行目標跟蹤,遙感勘測和遙控。
由于GPS接收機的廣泛應用,高動態GPS接收機要求更高的跟蹤精度和環路動態特性。對鎖相環和鎖頻環仔細分析顯示:一個窄帶寬的鎖相環可以更緊密地跟蹤信號,但其動態抗逆性較差;具有寬噪聲帶的鎖頻環可以達到良好的動態性能,但其信號跟蹤性能較差。因此,在用戶的動態特性高時,當鎖相環牢牢鎖定信號或再捕捉或跟隨信號時,載波環能夠跟蹤和測量準確鎖相環。因此,為了解決高動態跟蹤能力和高跟蹤精度的沖突,希望能結合鎖相環和鎖頻環來跟蹤載波信號,本文旨在設計一個新的載波跟蹤環,該環使用第二FLL協助的三階鎖相環。
PLL(鎖相環)是一種反饋控制電路,它使用外部輸入參考信號控制環內的振蕩器信號的頻率和相位。為了使輸出信號的頻率可以自動跟蹤輸入信號的頻率,PLL通常被應用在閉環跟蹤鎖相回路。在這個過程中,當輸入和輸出信號相位保持不變,鎖相環進入鎖定狀態和穩定狀態;當輸入和輸出信號相位接近一致時,鎖相環工作在跟蹤狀態并顯示其瞬態特性。一個典型的PLL通常由相位檢測器(PD),環路濾波器(LF)和壓控振蕩器(VCO)組成,如圖1所示。

圖1 PLL的基本框圖
由于鎖相環和鎖頻環的主要區別在于相位檢測器,所以本文只給出了鎖相環的原理。
數字相位檢測器中有幾種電路,如線性乘法、或門、JK觸發器,以及鑒頻/相電路,通常使用倍頻檢測器。倍頻檢測器的原理是:相位檢測器比較輸出信號uo(t)和輸入參考信號ur(t) 的相位,產生一個誤差電壓信號ud(t)來反映兩個信號的偏差ek(t)。環路濾波器可以過濾誤差電壓信號的高頻部分。
環路濾波器通常是一個低通濾波器,其目的是篩選出高頻成分和誤差電壓ud(t)的噪聲。因此,過濾結果不僅反映了濾波器輸入信號的相位變化,而且也避免了振蕩器由于噪聲產生的十分規范的電壓。PLL系統的功能表明了環路濾波器基本上決定了鎖相環的性能。
在高動態環境下,GPS接收機的載波跟蹤需要同時考慮跟蹤精度和環路動態特性。鎖相環具有高跟蹤精度,但其動態性能較差;鎖頻環(FLL)具有良好的動態特性,但跟蹤精度低。因此,為了彌補鎖相環的缺陷,提高其適應能力,提出了一個高性能的載波跟蹤環,它為兩相鎖頻環輔助三相鎖相環。改進的數字鎖相環濾波器的結構示意圖如圖2。

圖2 兩相鎖頻環輔助三相鎖相環的濾波器結構示意圖
如果噪聲帶寬BfL、BpL以及FLL和PLL的采樣間隔T是確定的,就能夠確定FLL中的其他參數:阻尼ξ=0.707,自然循環頻率wf=8ξBfL/(1+4ξ2),a1=wf2,a2=αwf2= 2ξwf2,FLL的參數:自然循環頻率wp=BpL/0.78 445,c0=wp3,c1=βwp2,c2=δwp=2.4wp。

當所有的環路濾波器參數確定,使用浮點運算來實現數字化集成累加器,以確保數據不會溢出。這個功能可以由內置浮點硬件的現代微處理器來完成。為了確保快速準確跟蹤質量,選擇了TI公司的TMS320C6713 DSP微處理器。
TMS320C6713的是一款高精度浮點數字信號處理器(DSP),它擁有可以處理非常長的指令的TMS320C67xTM內核,理論上,該內核在每時鐘周期可進行8項32字節的指令,實際上,每時鐘周期可執行6項32字節的指令。其最大時鐘頻率高達300 MHz,最小指令周期為3.3 ns,最高的運行速度達到2 400/1 800 MIPs/MFLOPs。為了提高處理速度,DSP內核采用兩級緩存,其中L1高速緩存包含4 KB的直接過程緩存和4 KB數據緩存;L2緩存被分為64 KB統一內存和附加內存192 KB。16通道的EDMA控制器幾乎可以處理所有的高速輸入輸出和存儲器之間的接口問題,大大提高了芯片的吞吐速度。因此,在高動態信號環境中,該芯片完全可以快速準確地處理信息,以確保PLL的跟蹤精度和動態性能??焖贍恳铜h路頻率跟蹤的算法代碼如下:
#include"include.h"
void GPS_track(char ch)
{
double cross , dot , phaseDiff , absSE , absSL;
//===================//
chan_gps[ch].ch_time++;
if(chan_gps[ch].ch_time==1&&chan_gps[ch].pull_in_ok_flag==0)
{
return;
}
//===================//
if (chan_gps[ch].ch_time<22 &&chan_gps[ch].pull_in_ok_flag==0)
{
cross = ca_Ips0_tmp*sPI - ca_Qps0_tmp*sPR;
dot =ca_Ips0_tmp*sPR + ca_Qps0_tmp*sPI;
phaseDiff = atan2(cross,dot);
if(phaseDiff>maxFreqErr[ch])
maxFreqErr[ch] = phaseDiff;
if(phaseDiff minFreqErr[ch] = phaseDiff; chan_gps[ch].freqErr += phaseDiff; } else if(chan_gps[ch].ch_time==22 &&chan_gps[ch].pull_in_ok_flag==0) { //update Frequence freqErr =(chan_gps[ch].freqErr-maxFreqErr[ch]-minFreqErr[ch])/17.0; freqErr = freqErr/(2*pi*T); chan_gps[ch].fc += freqErr; chan_gps[ch].cLoopS1 = chan_gps[ch].fc; chan_gps[ch].carrier_freqword = (int)((GPS_CARRIER_REF+chan_gps[ch].fc)*DeltaPhaseConst + 0.5); } //===================// else if(chan_gps[ch].pull_in_ok_flag &&chan_gps[ch].dsp_bit_syn==0) { // update FLL cross = ca_Ips0_tmp*sPI - ca_Qps0_tmp*sPR; dot = ca_Ips0_tmp*sPR + ca_Qps0_tmp*sPI; phaseDiff = dot>=0.0 ? cross/sqrt(dot*dot+cross*cross):-cross/sqrt(dot*dot+cross*cross); //phaseDiff = atan(cross/dot); chan_gps[ch].freqErr = phaseDiff/(2*PI*T); // PLL discriminator if (fabs(sPR)<0.001) { chan_gps[ch].phaseErr = 0.0; } else { chan_gps[ch].phaseErr = atan(sPI/sPR); } //===================// chan_gps[ch].cLoopS0 = chan_gps[ch].cLoopS0 + (chan_gps[ch].phaseErr*PLLc0 +chan_gps[ch].freqErr*FLLa1)*T; chan_gps[ch].cLoopS1 = chan_gps[ch].cLoopS1 + (PLLc1*chan_gps[ch].phaseErr + chan_gps[ch].cLoopS0 + FLLa2*chan_gps[ch].freqErr)*T; chan_gps[ch].fc = chan_gps[ch].cLoopS1 +PLLc2*chan_gps[ch].phaseErr; chan_gps[ch].carrier_freqword = (unsigned int)((GPS_CARRIER_REF+chan_gps[ch].fc)*DeltaPhaseConst+ 0.5); //===================// else if(chan_gps[ch].pull_in_ok_flag==1 && chan_gps[ch].dsp_bit_syn==1) { chan_gps[ch].trackTime++; if (fabs(sPR)<1e-3) chan_gps[ch].phaseErr = 0.0; else chan_gps[ch].phaseErr = atan(sPI/sPR); chan_gps[ch].cLoopS0 = chan_gps[ch].cLoopS0 +chan_gps[ch].phaseErr*PLLc0*T; chan_gps[ch].cLoopS1 = chan_gps[ch].cLoopS1 + (PLLc1*chan_gps[ch].phaseErr + chan_gps[ch].cLoopS0)*T; chan_gps[ch].fc = chan_gps[ch].cLoopS1 + PLLc2*chan_gps[ch].phaseErr; chan_gps[ch].carrier_freqword = (unsigned int)((GPS_CARRIER_REF+chan_gps[ch].fc)*DeltaPhaseConst+ 0.5); } end } 通過高動態GPS接收機和計算機模擬,改進后的鎖相環可以充分滿足高動態信號跟蹤的要求。它通過DSP算法來實現,有利于未來系統的提升。在本節中描述的是環路濾波器,只有當BLT=1時,能達到噪聲帶寬BL。當器件增加,環路會變得不穩定,然而,在BLT大的產品中,任何環路的不穩定都是不可避免的,所以環路設計有待進一步提高。 參考文獻: [1]徐德鴻. 電力電子系統建模及控制[M]. 北京:機械工業出版社,2006. [2]Abraham I Pressman. 王志強等,譯.開關電源設計[M]. 北京:電子工業出版社,2005. [3]張興柱.開關電源功率變換器拓撲與設計[M].北京:中國電力出版社,2010. [4]Three Star Technology. Principle and application examples of TMS320C6713DSP[M].Beijing: Electronics Industry Press, 2009. [5]Roland.Best, interpreted by Li Yongming.PLL design, simulation and application[M].Beijing: Tsinghua Press, 2007. 設計應用 Implementation of High-Dynamic Phase Locked Loop (PLL) Based on DSP TANG Li-chan, LU Yu, TANG Xue-hua (Shanghai Electric Central Research Institute, Shanghai 200070, China) Abstract:This paper introduces the basic structure of common phase-locked loop, and analyzes implementation of phase detector, loop filter and VCO. System function of PLL loop filter shows that the performance of loop filter basically determines the quality of phase-locked loop. Focusing on the loop filter design, combined with application of PLL in loop of high-dynamic GPS receiver, details of a digital filter in highly dynamic environment with two-phase frequency locked loop aiding a three-phase phase-locked loop are presented. The simulation results show that the proposed PLL has much better performance than common PLL, and is in full compliance with the requirements of high dynamic signal tracking. Key words:phase locked loop (PLL); filter; DSP; high-dynamic 中圖分類號:TM461 文獻標識碼:A 文章編號:1009-3664(2015)02-0060-03 作者簡介:唐麗嬋(1983-),女,上海人,研究方向為電力電子技術。 收稿日期:2014-11-103 結 論