ADF4002,HMC704 配置

   /*
 *     主要功能:                                                              *
 *             (1)通用I/O模拟实现SPI接口功能                                   *
 *             (2)鉴相器ADF4002                                                *
 *                a.参考频率:40MHz                                            *
 *                b.鉴相频率: 40MHz   *
 *                c.输出频率:400MHz                               *
 *             (3)鉴相器HMC704LP4E                                             *
 *                a.参考频率:40MHz                                            *
 *                b.鉴相频率: 40MHz   *
 *                c.输出频率:1280MHz                               *
 *             (4)鉴相器HMC704LP4E                       *
 *                a.参考频率:40MHz                                            *
 *                b.鉴相频率: 40MHz   *
 *                c.输出频率:1360MHz                               *
 *                                                                             *
 *     单片机型号: C8051F330                                                   *

 ******************************/

#include "C8051F330.h"
#define OPEN_MODE


sbit SCK_Pad  = P0^3;
sbit SDI_Pad  = P0^4;
sbit LE2_Pad  = P0^5;
sbit SDO2_Pad = P0^6;
sbit LE1_Pad  = P0^7;
sbit SDO3_Pad = P1^1;
sbit LE3_Pad  = P1^2;
sbit CEN_Pad  = P1^3;


void Oscillator_Init()
{
    OSCICN = 0x82;     // 使能内部H-F振荡器,SYSCLK为12.25MHz
            RSTSRC = 0x04;       // 使能时钟丢失检测器,检测到时钟丢失时触发复位
            CLKSEL = 0x00;       // 系统时钟取自内部高频振荡器,分频数由OSCICN寄存器中的IFCN位决定。
}


void PCA_Init()
{
    PCA0MD    &= ~0x40;  // 禁止看门狗定时器
            PCA0MD    = 0x00; // PCA计数器的时钟源为系统时钟的12分频
    PCA0H     = 0x00;
    PCA0L     = 0x00;
    PCA0CPL2  = 0xFF; // PCA捕捉模块2低字节置0xFF,超时间隔64.2ms 
    PCA0MD    |= 0x40; // PCA模块2用作看门狗定时器
    PCA0CN    = 0x40;    // 启动PCA计数器/定时器
}


void Port_IO_Init()
{
    P0MDIN  = 0xFF;
    P0MDOUT = 0xB8;
    P0SKIP  = 0x00;
    P1MDIN  = 0xFF;
    P1MDOUT = 0x0C;
    P1SKIP  = 0x00;
    XBR0    = 0x00;
    XBR1    = 0x40;
}


void delay(unsigned int time)
{
    
    
    CKCON |= 0x02;
    TMOD  |= 0x01;
    TH0    = 0xFE;
    TL0    = 0xFF;
    ET0    = 0x0;
    TR0    = 0x1;
    while(time)
    {
        TF0 = 0x0;
        while(!TF0)
        {
            PCA0CPH2 = 0x00;
        }
        TH0 = 0xFE;
        TL0 = 0xFE;
        time--;
    }
    TR0    = 0x0;
}


void ADF4002_Write(unsigned long value)
{
    unsigned char i;
    unsigned long send_data;
    unsigned char valueL,valueM,valueH;
    
    
    send_data = value;
    valueL = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    valueM = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    valueH = (unsigned char)(send_data & 0x000000FF);
    
    
    LE1_Pad = 0x0;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(valueH & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        valueH <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(valueM & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        valueM <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(valueL & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        valueL <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    LE1_Pad = 0x1;
}


void HMC704_ReadA(unsigned char addr,unsigned long *value)
{
    unsigned char i,j;
    unsigned char send_data;
    unsigned char receive_data;
#ifdef HMC_MODE
    SDI_Pad = 0x1;
    LE2_Pad = 0x1; 
    
    
    send_data = addr;
    send_data <<= 1;
    send_data |= 0x80;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    *value = 0x00;
    for(j=0; j<3; j++)
    {
        send_data = 0x00;
        receive_data = 0x00;
        for(i=0; i<8; i++)
        {
            SCK_Pad = 0x0;
            receive_data <<= 1;
            if(SDO2_Pad)
            {
                receive_data |= 0x01;
            }
            if(send_data & 0x80)
            {
                SDI_Pad = 0x1;
            }
            else
            {
                SDI_Pad = 0x0;
            }
            send_data <<= 1;
            delay(1);
            SCK_Pad = 0x1;
            delay(1);
        }
        *value <<= 8;
        *value |= receive_data;
    }
    LE2_Pad = 0x0;
#endif
    
    
#ifdef OPEN_MODE
    LE2_Pad = 0x1;
    //First cycle
    for(j=0; j<2; j++)
    { 
        send_data = 0x00;
        for(i=0; i<8; i++)
        {
            SCK_Pad = 0x0;
            if(send_data & 0x80)
            {
                SDI_Pad = 0x1;
            }
            else
            {
                SDI_Pad = 0x0;
            }
            send_data <<= 1;
            delay(1);
            SCK_Pad = 0x1;
            delay(1);
        }
    }
    send_data = addr & 0x1F;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    send_data = addr;
    send_data <<= 3;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
        if(i>4)
        {
            LE2_Pad = 0x0; 
        }
    }
    //Second cycle 
    *value = 0x00;
    LE2_Pad = 0x1;
    for(j=0; j<2; j++)
    { 
        send_data = 0x00;
        receive_data = 0x00;
        for(i=0; i<8; i++)
        {
            SCK_Pad = 0x0;
            receive_data <<= 1;
            if(SDO2_Pad)
            {
                receive_data |= 0x01;
            }
            if(send_data & 0x80)
            {
                SDI_Pad = 0x1;
            }
            else
            {
                SDI_Pad = 0x0;
            }
            send_data <<= 1;
            delay(1);
            SCK_Pad = 0x1;
            delay(1);
        }
        *value <<= 8;
        *value |= receive_data;
    }
    *value &= 0x7FFF;
    send_data = addr & 0x1F;
    receive_data = 0x00;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        receive_data <<= 1;
        if(SDO2_Pad)
        {
            receive_data |= 0x01;
        }
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    *value <<= 8;
    *value |= receive_data;
    send_data = addr;
    send_data <<= 3;
    receive_data = 0x00;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        receive_data <<= 1;
        if(SDO2_Pad)
        {
            receive_data |= 0x01;
        }
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
        if(i>1)
        {
            LE2_Pad = 0x0; 
        }
    }
    *value <<= 1;
    *value |= (receive_data >> 7);
#endif
}


void HMC704_ReadB(unsigned char addr,unsigned long *value)
{
    unsigned char i,j;
    unsigned char send_data;
    unsigned char receive_data;
#ifdef HMC_MODE
    SDI_Pad = 0x1;
    LE3_Pad = 0x1; 
    
    
    send_data = addr;
    send_data <<= 1;
    send_data |= 0x80;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    *value = 0x00;
    for(j=0; j<3; j++)
    {
        send_data = 0x00;
        receive_data = 0x00;
        for(i=0; i<8; i++)
        {
            SCK_Pad = 0x0;
            receive_data <<= 1;
            if(SDO3_Pad)
            {
                receive_data |= 0x01;
            }
            if(send_data & 0x80)
            {
                SDI_Pad = 0x1;
            }
            else
            {
                SDI_Pad = 0x0;
            }
            send_data <<= 1;
            delay(1);
            SCK_Pad = 0x1;
            delay(1);
        }
        *value <<= 8;
        *value |= receive_data;
    }
    LE3_Pad = 0x0;
#endif
    
    
#ifdef OPEN_MODE
    LE3_Pad = 0x1;
    //First cycle
    for(j=0; j<2; j++)
    { 
        send_data = 0x00;
        for(i=0; i<8; i++)
        {
            SCK_Pad = 0x0;
            if(send_data & 0x80)
            {
                SDI_Pad = 0x1;
            }
            else
            {
                SDI_Pad = 0x0;
            }
            send_data <<= 1;
            delay(1);
            SCK_Pad = 0x1;
            delay(1);
        }
    }
    send_data = addr & 0x1F;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    send_data = addr;
    send_data <<= 3;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
        if(i>4)
        {
            LE3_Pad = 0x0; 
        }
    }
    //Second cycle 
    *value = 0x00;
    LE3_Pad = 0x1;
    for(j=0; j<2; j++)
    { 
        send_data = 0x00;
        receive_data = 0x00;
        for(i=0; i<8; i++)
        {
            SCK_Pad = 0x0;
            receive_data <<= 1;
            if(SDO3_Pad)
            {
                receive_data |= 0x01;
            }
            if(send_data & 0x80)
            {
                SDI_Pad = 0x1;
            }
            else
            {
                SDI_Pad = 0x0;
            }
            send_data <<= 1;
            delay(1);
            SCK_Pad = 0x1;
            delay(1);
        }
        *value <<= 8;
        *value |= receive_data;
    }
    *value &= 0x7FFF;
    send_data = addr & 0x1F;
    receive_data = 0x00;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        receive_data <<= 1;
        if(SDO3_Pad)
        {
            receive_data |= 0x01;
        }
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    *value <<= 8;
    *value |= receive_data;
    send_data = addr;
    send_data <<= 3;
    receive_data = 0x00;
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        receive_data <<= 1;
        if(SDO3_Pad)
        {
            receive_data |= 0x01;
        }
        if(send_data & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        send_data <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
        if(i>1)
        {
            LE3_Pad = 0x0; 
        }
    }
    *value <<= 1;
    *value |= (receive_data >> 7);
#endif
}


void HMC704_WriteA(unsigned char addr,unsigned long value)
{
    unsigned char i;
    unsigned long send_data;
    unsigned char value1,value2,value3,value4;
#ifdef HMC_MODE
    send_data   = addr;
    send_data <<=24;
    send_data  |= (value & 0x00FFFFFF);
    send_data <<= 1; 
            value4 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value3 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value2 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value1 = (unsigned char)(send_data & 0x000000FF);
    
    SDI_Pad = 0x0;
    LE2_Pad = 0x1; 
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value1 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value1 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value2 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value2 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value3 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value3 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value4 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value4 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    LE2_Pad = 0x0;
#endif
    
    
#ifdef OPEN_MODE
    send_data   = (value & 0x00FFFFFF);
    send_data <<= 8;
    send_data  |= (addr << 3);
    value4 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value3 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value2 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value1 = (unsigned char)(send_data & 0x000000FF);
    LE2_Pad = 0x1; 
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value1 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value1 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value2 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value2 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value3 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value3 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value4 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value4 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
        if(i>4)
        {
            LE2_Pad = 0x0;
        }
    }
    LE2_Pad = 0x1;
    delay(1);
    LE2_Pad = 0x0;
#endif 
}


void HMC704_WriteB(unsigned char addr,unsigned long value)
{
    unsigned char i;
    unsigned long send_data;
    unsigned char value1,value2,value3,value4;
#ifdef HMC_MODE
    send_data   = addr;
    send_data <<=24;
    send_data  |= (value & 0x00FFFFFF);
    send_data <<= 1; 
            value4 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value3 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value2 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value1 = (unsigned char)(send_data & 0x000000FF);
    
    SDI_Pad = 0x0;
    LE3_Pad = 0x1; 
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value1 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value1 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value2 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value2 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value3 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value3 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value4 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value4 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    LE3_Pad = 0x0;
#endif
    
#ifdef OPEN_MODE
    send_data   = (value & 0x00FFFFFF);
    send_data <<= 8;
    send_data  |= (addr << 3);
    value4 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value3 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value2 = (unsigned char)(send_data & 0x000000FF);
    send_data >>= 8;
    value1 = (unsigned char)(send_data & 0x000000FF);
    LE3_Pad = 0x1; 
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value1 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value1 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value2 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value2 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value3 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value3 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
    }
    for(i=0; i<8; i++)
    {
        SCK_Pad = 0x0;
        if(value4 & 0x80)
        {
            SDI_Pad = 0x1;
        }
        else
        {
            SDI_Pad = 0x0;
        }
        value4 <<= 1;
        delay(1);
        SCK_Pad = 0x1;
        delay(1);
        if(i>4)
        {
            LE3_Pad = 0x0;
        }
    }
    LE3_Pad = 0x1;
    delay(1);
    LE3_Pad = 0x0;
#endif 
}


unsigned long chip1_id;
unsigned long chip2_id;
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main(void)
{
    PCA0MD &= ~0x40;
    Oscillator_Init();
    Port_IO_Init();
    PCA_Init();
    EA = 0x1;
    delay(1000);
    LE1_Pad = 0x1;
    LE2_Pad = 0x0;
    LE3_Pad = 0x0;
    SDI_Pad = 0x1;
    SCK_Pad = 0x1;
    CEN_Pad = 0x1;
    
    
    //400MHz
    ADF4002_Write(0x1FFE93);
    ADF4002_Write(0x1FFE92);
    ADF4002_Write(0x000004);
    ADF4002_Write(0x000A01);
    //1280MHz
    /*  HMC704_ReadA(0x00,&chip1_id);
    HMC704_WriteA(0x01,0x000002);
    HMC704_WriteA(0x02,0x000001);
    HMC704_WriteA(0x09,0x4C0000 | ((60<<7) | 60));
    HMC704_WriteA(0x06,0x0003FA);
    HMC704_WriteA(0x03,0x000020);
    HMC704_WriteA(0x04,0x000000);  //*/
    //800MHz
    HMC704_ReadA(0x00,&chip1_id);
    HMC704_WriteA(0x01,0x000002);
    HMC704_WriteA(0x02,0x000001);
    HMC704_WriteA(0x09,0x4C0000 | ((60<<7) | 60));
    HMC704_WriteA(0x06,0x0003FA);
    HMC704_WriteA(0x03,20); //40*20=800  20150309
    HMC704_WriteA(0x04,0x000000);  //*/
            //1360MHz
            HMC704_ReadB(0x00,&chip2_id);
    HMC704_WriteB(0x01,0x000002);
    HMC704_WriteB(0x02,0x000001);
    HMC704_WriteB(0x09,0x4C0000 | ((60<<7) | 60));
    HMC704_WriteA(0x06,0x0003FA);
    HMC704_WriteB(0x03,0x000022);
    HMC704_WriteB(0x04,0x000000);
    while(1)
    {
        PCA0CPH2 = 0x00;
    }
}

 

ADF4002是一种高性能的锁相环 (PLL) 控制器。要将ADF4002用作锁相环,您需要按照以下步骤进行配置和操作: 首先,将VCO (Voltage Controlled Oscillator) 连接到ADF4002的控制端。选择一个适当的参考信号源,并通过REFin引脚将其输入到ADF4002的反馈输入端。 接下来,您需要通过SPI (Serial Peripheral Interface) 接口或者并行接口将合适的参数传输给ADF4002。这些参数包括参考频率、VCO的频率范围限制、除数和放大系数等。根据要求,调整这些参数将决定输出频率和锁相环性能。 然后,在ADF4002中选择适当的工作模式。ADF4002可以在整数模式和分数模式之间进行切换。整数模式下,VCO的频率将是参考频率与整数除数的比值。在分数模式下,还将根据附加的分数除数和倍频器进行计算。 使用SPI或并行接口将这些配置参数发送给ADF4002。一旦配置完成,开始锁定过程。 在锁定过程中,ADF4002将通过比较参考信号和VCO输出信号的相位差来调整VCO的频率,直到两者相位差为零。一旦达到锁定状态,ADF4002将持续监测并微调VCO的频率以保持锁相环的稳定性。 最后,您可以通过读取ADF4002的状态寄存器来获取有关锁相环工作状态的信息,例如锁定状态、失锁状态或其他警告标志。 总结而言,将ADF4002用作锁相环涉及到配置参数、选择合适的工作模式和监测锁定状态等步骤。通过正确配置和操作ADF4002,您可以实现所需的锁相环功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值