原创 [博客大赛]锁相环难点总结之锁相环寄存器配置与理解【一】

2015-1-16 10:11 3683 16 20 分类: 模拟

锁相环鉴相器、环路滤波器压控振荡器组成。通常鉴相器与辅助电路分频器一般集成在一起。想要改变VCO的输出频率,则是通过改变分频器的分频比实现。现已MC145146 PLL芯片为例,对各寄存器参数配置与输出频率之间的关系做一点总结:

1.一般结构

如下图所示,PLL内有三个分频寄存器分别是R寄存器(对参考时钟进行分频)NA寄存器(对输出端VCO的频率进行分频),两路分频后的频率进鉴相器进行鉴相。锁定时,两路频率应该相等。

20150105093345227001.jpg

通常,在VCO频率在进PLL芯片之前会先经过一个双模预分频器,有的也集成在PLL芯片内。如下图的ML12034,一般可实现8/9,16/17,32/33,64/65,128/129等分频,控制分频系数改变的是PLL引脚的控制电平,如下图14MC

20150105093350109002.jpg

2.频率改变原理

假设两个鉴相频率分别为参考源20150105093355723003.png经过20150105093400510004.png分频后的20150105093404219005.png和输出VCO频率20150105093409611006.png经过20150105093414453007.png分频后的20150105093419671008.png,则有

20150105093424558009.png

20150105093429739010.png

其中,20150105093400510004.png比较好理解,就是寄存器R,20150105093414453007.png由下式确定:

20150105093434185011.png

其中,N,A为对应寄存器,P为预分频器P/P+1的分频比。

注意:此处分频可以按照下面的理解:

其工作过程是:首先预分频器工作在P+1分频模式下,预分频器输出后同时输入给计数分频器NA分频,当A计数满后控制预分频器工作在P分频模式下,N继续计数直到满后NA同时重置,重新开始。

在图1中,可以看出,计数分频器N输出鉴相频率20150105093419671008.png。假设20150105093355723003.png的周期为t而鉴相20150105093419671008.png的周期为T,可以得到:

20150105093439499012.png

因此,分频比20150105093443737013.png

总结:1.通过RNAP控制VCO输出频率;

      2.由上式还可以看出,鉴相频率VCO决定了VCO输出的步进频率。

 

3.PLL配置举例

 

下面以MC145146为例,用TI的430MCU为控制器,对其寄存器进行配置。由于MC145146与MSP430工作电平不同,中间用的TI的4054进行TTL到CMOS的电平转换。

根据MC145146的工作时序以及寄存器的对应关系可以看出,由A2-A0三位地址将A、N、R寄存器分7次写入数据,数据的写入方式为在数据与地址稳定后,由ST引脚的脉冲控制写入。

20150105094949181.jpg20150105095130896.jpg

 

通过实验验证,下列程序可以对其其寄存器进行正确配置,函数还可以优化,基本原理相同。

 

/******************************************************
程序功能:UpFreq
引脚定义:D3-D0:P2.3-P2.0,A2-A0:P2.7-P2.5,ST:P2.4
使用:
*******************************************************/

#define CLR_ST   P2OUT&=~BIT4    //ST
#define SET_ST   P2OUT|= BIT4

unsigned char A=0x22; //
unsigned char N1=0xB2; //

unsigned char N2=0x01; //
unsigned char R1=0x2C; //
unsigned char R2=0x01; //

/*****************************************************************
函数名称:  WriteReg
返回值  :无
*****************************************************************/
void WriteReg()
{
  unsigned char temp;
  CLR_ST;
  temp = A & 0x0f;     //A取低4位
  temp = temp + 0xe0; 
  P2OUT = 0x0f & temp; //地址000
  SET_ST;
  CLR_ST; //写入

  temp = A & 0x70;    //A取高3位
  temp = temp>>4;
  temp = temp + 0xe0;
  P2OUT = 0x2f & temp;//地址001
  SET_ST;
  CLR_ST; //写入

  temp = N1 & 0x0f;    //N1取低4位
  temp = temp + 0xe0;
  P2OUT = 0x4f & temp; //地址002
  SET_ST;
  CLR_ST; //写入

  temp = N1 & 0xf0;
  temp = temp>>4;
  temp = temp + 0xe0;
  P2OUT = 0x6f & temp;//地址003
  SET_ST;
  CLR_ST; //写入

  temp = N2 & 0x03;    //N2取低2位
  temp = temp + 0xe0; 
  P2OUT = 0x8f & temp; //地址004
  SET_ST;
  CLR_ST; //写入

  temp = R1 & 0x0f;    //R1取低4位
  temp = temp + 0xe0; 
  P2OUT = 0xaf & temp; //地址005
  SET_ST;
  CLR_ST; //写入

  temp = R1 & 0xf0;
  temp = temp>>4;
  temp = temp + 0xe0;
  P2OUT = 0xcf & temp; //地址006
  SET_ST;
  CLR_ST; //写入

  temp = R2 & 0x0f;    //R2取低2位
  temp = temp + 0xe0; 
  P2OUT = 0xef & temp; //地址007
  SET_ST;
  CLR_ST; //写入
}

 

 

 

 

 

 

 

文章评论4条评论)

登录后参与讨论

用户289521 2015-1-16 10:09

锁相环对宽动态范围频率变化是比较弱势的,主要是受VCO动态范围的影响。你说的情况应该是那种分段VCO的设计,这种VCO在调试时是比较困难。

用户289521 2015-1-16 10:06

FLL指的是锁频环,是通过鉴频器的输出电压去控制VCO的频率变化,而PLL指的是锁相环,是通过鉴相器的输出电压控制VCO的频率变化;通常FLL可以锁定的频率范围比PLL要宽,但是PLL在小频率范围内的精度要高于FLL。

xyd20405 2015-1-16 07:38

请问FLL和PLL的异同?

风来 2015-1-9 19:05

我感觉锁相环配置不是很难,但是鉴相那一个环节特别不稳定,只要你一扫频过去会发现中间有一段或者好几段都不能稳定的工作,要不就是在那个频率某个带宽内出现每个频率都有。相对直接数字频率合成,这是他很大的一个缺点
相关推荐阅读
用户289521 2014-12-25 21:22
[智能手机]智能手机市场竞争愈演愈烈
1.手机市场格局 一直以来,智能手机市场被安卓与IOS两大阵营所主导。市场研究公司IDC公布的相关数据显示,2014年第3季度苹果智能手机所占市场份额为12.3%,三星占比24.7%。但苹果并...
我要评论
4
16
关闭 站长推荐上一条 /2 下一条