ADF4002【分频器】(康威)

 

 

 adf4002.c


/**********************************************************
                       康威科技
更多电子需求,请到淘宝店,康威电子竭诚为您服务 ^_^
https://kvdz.taobao.com/
**********************************************************/

#include "adf4002.h"
#include "sys_zdyz.h"

long int ReadData;

//long int Reg0x00 = 0x001F40;//r
//long int Reg0x01 = 0x0DAC01;//n

long int functionReg0x02R = 0x0D80C2; //function FUNCTION  0000 1101 1000 0000 1100 0010 //function寄存器 设置R DIVIDER OUTPUT
long int initReg0x03R = 0x0D80C3;//init  0000 1101 1000 0000 1100 0011  //INITIALIZATION 寄存器 设置R DIVIDER OUTPUT

long int functionReg0x02N = 0x0D80A2; //function 0000 1101 1000 0000 1010 0010 //function寄存器 设置N DIVIDER OUTPUT
long int initReg0x03N = 0x0D80A3;//init  0000 1101 1000 0000 1010 0011   //INITIALIZATION寄存器 设置N DIVIDER OUTPUT

long int Reg0x02_LEDON  = 0x0D80B2; //MUXOUT CONTROL : DVDD 0000 1101 1000 0000 1011 0010   functionlatch
long int Reg0x02_LEDOFF = 0x0D80F2; //MUXOUT CONTROL: DGND 0000 1101 1000 0000 1111 0010     functionlatch


void Delay(unsigned int z)
{
  unsigned int i,j;
  
  for(i = z; i > 0; i--)
    for(j = 10; j > 0; j--) ;
}

void DelayMs(void)
{
  unsigned int i, j;
  
  for(i = 0; i < 1000; i++)
  {
    for(j = 0; j < 1000; j++)
    {
      Delay(1000);
    }
  }
}
//adf4002 IO口初始化
void InitADF4002(void)
{
//	GPIO_InitTypeDef  GPIO_InitStructure;
//
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);	 //使能PC端口时钟
//
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;				 //
//	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
//	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//	GPIO_Init(GPIOC, &GPIO_InitStructure);

	PLL_SCK_0;
	PLL_SDI_0;
	PLL_SEN_0;
	SendDataPll(initReg0x03R); //INIT
  //  SendDataPll(functionReg0x02R); //funtion(执行功能锁存加载)
	SendDataPll(Reg0x02_LEDOFF); //INIT
	//RDivideTest(1);

}

void SendDataPll(unsigned long int Data)          //传送的数据
{
  unsigned char i;

	PLL_SCK_0;
  PLL_SEN_0;

  for(i = 0; i < 24; i++)
  {
    if(Data & 0x800000)
    {
      PLL_SDI_1;
    }
    else
    {
       PLL_SDI_0;
    }
    Data <<= 1;     
    PLL_SCK_1;
    
    Delay(100);
    
    PLL_SCK_0;
    Delay(100);
  }
  PLL_SDI_0;

  PLL_SEN_0;
  Delay(100);
  PLL_SEN_1;
}

void RDivideTest(u16 RData)
{
	u32 S_R = 0;
	
  S_R = Pre_R + (RData<<2) + R_Address;
  SendDataPll(functionReg0x02R); //funtion
  SendDataPll(0X000001);
  SendDataPll(S_R);
  SendDataPll(0X000001);
}
void NDivideTest(u16 NData)
{
	u32 S_N = 0;
	
  S_N = Pre_N + (NData<<8) + N_Address;
  SendDataPll(functionReg0x02N); //funtion
	SendDataPll(0X000000);
  SendDataPll(S_N);

}














adf4002.h

(cubemx配置了三个gpio output)


/**********************************************************
                       康威科技
更多电子需求,请到淘宝店,康威电子竭诚为您服务 ^_^
https://kvdz.taobao.com/
**********************************************************/

#ifndef _adf4002_h_
#define _adf4002_h_

#include "sys_zdyz.h"
#include "main.h"
#define R_Address 0X000000
#define N_Address 0X000001
#define F_Address 0X000002
#define I_Address 0X000003
#define Pre_R 0X000000          //X000,0000,DAT(14),00
#define Pre_N 0X000000          //XX0,DAT(13),XXXXXX,01

//管脚声明
//GND
//#define PLL_SCK PCout(9)// PC9
//#define PLL_SDI PCout(10)// PC10
//#define PLL_SEN PCout(11)// PC11
//
//#define PLL_SCK_0 PLL_SCK = 0
//#define PLL_SCK_1 PLL_SCK = 1
//
//#define PLL_SDI_0 PLL_SDI = 0
//#define PLL_SDI_1 PLL_SDI = 1
//
//#define PLL_SEN_0 PLL_SEN = 0
//#define PLL_SEN_1 PLL_SEN = 1


#define PLL_SCK_0 (HAL_GPIO_WritePin(PLL_SCK_GPIO_Port, PLL_SCK_Pin, GPIO_PIN_RESET))
#define PLL_SCK_1 (HAL_GPIO_WritePin(PLL_SCK_GPIO_Port, PLL_SCK_Pin, GPIO_PIN_SET))
#define PLL_SDI_0 (HAL_GPIO_WritePin(PLL_SDI_GPIO_Port, PLL_SDI_Pin, GPIO_PIN_RESET))
#define PLL_SDI_1 (HAL_GPIO_WritePin(PLL_SDI_GPIO_Port, PLL_SDI_Pin, GPIO_PIN_SET))
#define PLL_SEN_0 (HAL_GPIO_WritePin(PLL_SEN_GPIO_Port, PLL_SEN_Pin, GPIO_PIN_RESET))
#define PLL_SEN_1 (HAL_GPIO_WritePin(PLL_SEN_GPIO_Port, PLL_SEN_Pin, GPIO_PIN_SET))

void InitADF4002(void);
void Delay(unsigned int z);
void DelayMs(void);
void SendDataPll(unsigned long int Data);

void RDivideTest(u16 RData);
void NDivideTest(u16 NData);


#endif

main.c

InitADF4002();
	NDivideTest(10);//RF-IN输入时 值为1-8191
	//RDivideTest(10);//REF-IN输入时  值为1-16383

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
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,您可以实现所需的锁相环功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值