唐丽婵,陆 宇,汤雪华
(上海电气集团股份有限公司中央研究院,上海 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的跟踪精度和动态性能。快速牵引和环路频率跟踪的算法代码如下:
#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 结 论