C8051F系列单片机是Silicon Laboratories公司推出的高集成度SoC芯片,采用3.3 V电源系统供电,降低了系统功耗;采用JTAG接口,可以直接进行在线调试。I/O口采用交叉开关方式进行配置,使I/O口应用更加灵活。频率合成器被广泛应用于通信、雷达、仪器仪表等各类仪器中。为了获得较高的输出频率和较小的频率步进量,大多采用双模技术的锁相环频率合成技术。本文介绍了使用Silicon Laboratories公司的单片机C8051F060控制ADI公司的ADF4106频率合成器芯片来实现频率合成器的实时频率控制,其输出频率最高可达到6 GHz。
1 数字锁相式频率合成器的基本原理
数字锁相式频率合成器的基本原理是,应用数字逻辑电路,把调谐振荡器信号f0经过N分频器(即反馈网络)的取样信号fx与参考频率fr在鉴相/鉴频器进行比较,输出电压经环路滤波器作为调谐电压,修正调谐振荡器的输出频率,达到稳定状态,使两个频率差为零(称为“相位锁定”),如图1所示。
图1 锁相环基本原理框图
AD4106频率合成器的电路原理如图2所示。
图2 AD4106频率合成器电路原理
它包括4个24位的寄存器:初始化寄存器、功能寄存器、R参考计数器寄存器和N计数器寄存器,其中每个寄存器的低两位为地址位。
频率的算法为: fVCO=(P×B+A)×fREF/R
其中P为预置比例因子在初始化寄存器的DB22、DB23设置,在此取P=64;A、B为通过N计数器寄存器的DB2~DB20设置。R为通过R参考计数器寄存器的DB2~DB15设置,取R=100。A、B的计算方法为:
由N=fVCO/fPFD=P×B+A(其中fPFD=fREF/R)得
B=MOD(N/64)
A=N-B×64
2 C8051F060单片机简介
C8051F060单片机是表贴TQFP100封装。它包括1个8051内核,2个16位A/D转换器,8个8位A/D转换器,2个12位D/A转换器,1个SPI接口,1个SMBus接口,2个UART接口,64 KB Flash,22个中断源。只用1块C8051F060芯片即可实现单片机8051的各种控制,多路A/D转换和D/A转换,I2C、SPI数据总线传输,RS232、RS485串口通信等功能,从而大大减少了元器件的种类,缩小了印制板的面积,节约了成本,提高了系统可靠性;而其交叉开关方式的配置,使I/O口应用更加灵活方便。其原理框图如图3所示。
图3 C8051F060单片机原理框图
3 AD4106与C8051F060的接口电路
单片机C8051F060与AD4106的接口电路如图4所示。
图4 AD4106与C8051F060接口电路
单片机C8051F060与AD4106的通信遵循SPI数据总线规则,它可以同时控制多片AD4106,其时序图如图5所示。
4 软件编制与调试
在软件编制时,首先要对单片机C8051F060和AD4106进行初始化。包括对单片机的I/O端口和交叉开关、SPI总线、定时器的初始化,对AD4106的初始化寄存器、功能寄存器、R参考计数器寄存器初始化;以及对AD4106的N计数器寄存器进行赋值,使之输出要求的频率。部分源代码程序如下:
5
图5 SPI总线时序图
void PORT_Init (void) { //I*O端口及交叉开关初始化
char old_SFRPAGE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;//开关置配置页
XBR0= 0x07;
//配置UART0、UART1、SPI、SMBUS、INT0、INT1
XBR1= 0x14;
XBR2= 0x44;
//允许交叉开关,弱上拉全局允许开漏方式
P0MDOUT = 0x15;//允许P0开漏方式
P1MDIN= 0XFF;
P1MDOUT= 0Xf3;//允许P1开漏方式
P2MDOUT= 0X7f;//允许P2口输出为推挽方式
P3MDOUT= 0X17;//设置P3
SFRPAGE= old_SFRPAGE;//还原 SFRPAGE
}
void SPI_Init (void) {//SPI总线端口初始化
char old_SFRPAGE = SFRPAGE;
SFRPAGE = SPI0_PAGE;
SPI0CFG = 0x40;
//MSTEN=1,C8051F060工作于主方式下;CKPHA=0,
//CKPOL=0,上升沿采样,时钟无效时为低电平
SPI0CN = 0x0b;
//使能SPI总线 4线主模式; SPI使能;标志位清0
SPI0CKR = SYSCLK/2/2000000;
SPIEN=1;
SFRPAGE = old_SFRPAGE;//还原 SFRPAGE
}
void Init_pll() { //ADF4106初始化
pll_init=0xddfea3;send_pll(pll_init);
pll_fun=0xddfea2;send_pll(pll_fun);
pll_ref=0x120190;send_pll(pll_ref);
//设置参考频率为100 kHz,晶振频率为10 MHz,R=100
}
unsigned long n_count(float fvco) {
//计算AD4106频率合成器输出频率对应的N值装载值
unsigned long a,b,n,l,m;
n=fvco/0.1;a=n%64;b=n/64;a=a<<2;
b=b<<8;l=0x200001;
m=l|a;m=m|b;
return(m);
}
void send_pll(unsigned long data command) {
//往AD4106频率合成器送数
unsigned int k=0,flag=1,j;
//发送命令给ADF4106,3字节,command的长度为3字节
unsigned char temp[3];
pll_le=0;//开始装载数据
for(j=0;j<5;j++);
for(k=0;k<3;k++)
//将3字节长的数据拆分成3个字节,由高到低分别存储
//在temp[0]、temp[1]、temp[2]中
temp[2-k]=command>>(k*8);
SPI0DAT=temp[0];//发送最高字节
k=1;
while(flag) {
if(SPIF==1) {
//等待发送完毕后,继续发送其他字节
SPIF=0;SPI0DAT=temp[k];k++;
}
if(k==3) {
while(SPIF!=1);//等待全部发送完毕后返回
flag=0;SPIF=0;pll_le=1;//装载数据完毕
}
}
}
当要输出的频率为点频时,只要由输出频率f计算出分频比N,并将控制字送到ADF4106中即可。要实现扫频,首先要确定扫频时间间隔(定时器装入初值);再设置起始频率f1、扫频频率步进值Δf和扫描停止频率f2,然后启动定时器TR0=0,定时时间间隔到后,频率加Δf,TF0清零重新计时,直到设置的终止频率后再回到起始频率,重新从起始频率开始扫频。
结语
C8051F060作为新一代8051单片机,具有功能强大、体积小、工作稳定等特点,适用于复杂控制系统。本文只介绍了其控制频率合成器ADF4106方面的应用,采用C8051F060控制数字锁相式频率合成器ADF4106只是其中一小部分应用,它同时还可应用于许多其他电路,如应用于数据采集电路系统、数字输出电路及各种接口电路等。优点有:速度快,比用传统的单片机速度提高了十几倍;采用3.3 V供电,系统功耗低;可以实现在线调试;采用交叉开关,对I/O端口操作灵活。ADF4106的工作状态可以很方便地通过软件在线监测和控制;可以根据需要对点频和扫频的参数进行设置修改,实现任意点频的稳定输出和扫频输出。目前这一功能已得到广泛应用。