基于DDS芯片AD9854的高精度频率合成器.docx
《基于DDS芯片AD9854的高精度频率合成器.docx》由会员分享,可在线阅读,更多相关《基于DDS芯片AD9854的高精度频率合成器.docx(23页珍藏版)》请在冰豆网上搜索。
![基于DDS芯片AD9854的高精度频率合成器.docx](https://file1.bdocx.com/fileroot1/2022-12/8/18293bfa-2c74-4213-acbf-5b2f0396146f/18293bfa-2c74-4213-acbf-5b2f0396146f1.gif)
基于DDS芯片AD9854的高精度频率合成器
基于DDS芯片AD9854的高精度频率合成器
【摘 要】阐述利用具有分辨率高,频率变换快等优点的直接数字合成(DirectDigitalSynthesize——DDS)技术,提出通过高性价比的AD9854直接数字频率合成器芯片实现高精度高频信号发生器制作的方案。
最后给出了设计方案的预测测试结果,为实际制作做好充分的理论准备。
【关键词】AD9854,直接数字合成(DDS),单片机控制
BasedonDDSChipAD9854PrecisionFrequencySynthesizer
[Abstract]Elaboratedusingdirectdigitalsynthesis(DirectDigitalSynthesize-DDS)hasahighresolution,fastfrequencyconversiontechnology,etc.,proposedfrequencysynthesizerAD9854throughcost-effectivechiphigh-precisiondirectdigitalfrequencysignalgeneratorproductionscheme.Finally,thetestresultspredictthedesign,makefullpreparationfortheactualproductiontheory.
[Keywords]AD9854,DirectDigitalSynthesize(DDS),Resolution
1、引言
步入二十一世纪以来,电子技术得到了空前的发展,尤其是现代科研、通信系统、电子对抗及各种电子测量技术中的技术进步,对一个高精度、频率可调的信号源提出了更高的要求,因此高精度高频信号发生器成了很多电子设备和系统实现高性能的关键。
随着数字集成电路和微电子技术的发展,直接数字合成技术(DDS)将先进的数字处理技术方法引入信号合成领域。
卓越的性能和突出的特点使其成为现代频率合成技术中的佼佼者。
DDS器件采用了高速数字电路高速D/A转换技术,具备了频率转换时间短、相对带宽宽、频率分辨率高、输出相位连续和相位可快速程控切换等优点,可以实现对信号的全数字式调制。
而且由于DDS是数字化高密度集成电路产品。
芯片体积小、功耗低,因此可以用DDS构成高性能频率合成信号源来取代传统频率信号源产品。
图1-1DDS技术产生任意波形原理图
2、DDS芯片的选择和介绍
2.1、AD9854的性能特点
AD9854数字合成器是高集成度的器件,它采用先进的DDS技术,片内整合了两路高速、高性能正交D/A转换器通过数字化编程可以输出I、Q两路合成信号。
在高稳定度时钟的驱动下,AD9854将产生一高稳定的频率、相位、幅度可编程的正弦和余弦信号,作为本振用于通信,雷达等方面。
AD9854的DDS核具有48位的频率分辨率(在300M系统时钟下,频率分辨率可达1uHZ)。
输出17位相位截断保证了良好的无杂散动态范围指标。
AD9854允许输出的信号频率高达150MHZ,而数字调制输出频率可达100MHZ。
通过内部高速比较器正弦波转换为方波输出,可用作方便的时钟发生器。
AD9854采用先进的0.35微米COMS工艺在3.3V单电源供电的情况下提供强大的功能。
图2-1AD9854功能结构框图
2.2、AD9854多种调制的实现方法
AD9854能输出一般调制信号,FSK,BPSK,PSK,CHIRP,AM等。
器件有两个14位相位寄存器和一个用作BPSK操作的引脚。
对于高阶的PSK调制,可通过I/O接口改变相位控制字实现。
具有改进DDS结构的12位I和Q通道D/A转换器可以提供较大的带宽并有较好的窄带无杂散动态范围(SFDR)。
如果不使用Q通道的正交功能,它还可以通过配置,由用户编程控制D/A转换。
当配置高速比较器时,12位D/A输出的方波可以用来做时钟发生器。
它还有两个12位数字正交可编程幅度调制器,和通断整形键控功能,并有一个非常好的可控方波输出。
同时脉冲调制功能在宽带扫频中也有重要应用。
AD9854的300M系统时钟可以通过4X和20X可编程控制电路由较低的外部基准时钟得到。
直接的300M时钟也可以通过单端或差分输入。
AD9854还有单脚输入的常规FSK和改进的斜率FSK输出。
图2-2、AD9854应用电路
3、控制芯片的选择
3.1、STM32F103RBT6STM32
系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。
STM32F103RBT6是增强型系列高性能的单片机,具有高达72MHz的运算速度,内置128K闪存,强大的哈弗体系结构处理能力,丰富的外部硬件资源。
而且技术成熟,价格成本低,适合用于各种产品开发。
在传统单片机的基础上入门简单,容易掌握。
模块化编程思想使得层次更清晰明了。
3.2、程序控制部分
AD9854控制程序见附录1
图3-1、系统框图
图3-2、基本程序框图
4、总结
本文设计频率合成器采用DDS芯片AD9854,结合32位单片机STM32的嵌入式控制技术,使得整机结构简单,功能齐全。
不仅具有AM、FM、PM、FSK、PSK、ASK调制功能。
还有点频、扫频和跳频等功能。
并且能通过上位机电脑控制输出,理论设计输出最高频率要达到了100MHz,其频率分辨率为1uHz,抗干扰能力很强,满足实验室和科研使用的要求。
参考文献
1、AD9854Datasheet©AnalogDevices,Inc.,2002
2、AD9854XX百科
3、郭振永、邓云凯、杨松、涂国防·线性调频信号DDS频率合成源的设计与实现·期刊论文·2005年3月
4、刘立新,赫建国,郑燕基·基于DDS芯片AD9854的信号产生器设计·西安邮电学院学报·2004年7月第9卷第3期
5、张肃文·高频电子线路(第五版)·高等教育出版社·2010年5月第3次印刷
6、谭浩强·C语言程序设计教程(第3版)·清华大学出版社·209年10月第8次印刷
附录1
程序头文件
/***************************************************************************
*Copyright(C)2013,icifan
*Allrightreserved.
*文件名称:
AD9854DRIVER.c
*硬件平台:
STM32
*简要描述:
*1.AD9854AST的头文件
*2.配合AD9854DRIVER.c配合源文件使用;
*3.AD9854的并行控制方式;
*
*当前版本:
V1.1
*文件标识:
(内部参考)
*作者/修改者:
icifan
*完成日期:
2013.9.210:
58
*修订说明:
*1.版本1.0完善了AD9854的频率,幅度,相位设定函数,同时在头文件中增加了新的宏定义.
*******************************输出引脚说明********************************
*VOUT内部高速比较器的同相输出引脚。
设计用于驱动10dBm到50Ω负载以及标准的CMOS逻辑电平。
*VINP电压输入正。
内部高速比较器的同相输入。
*VINN电压输入负。
内部的高速比较器的反相输入端。
*IOUT1单极电流输出I或余弦DAC。
*IOUT1B互补单极电流输出I或余弦DAC。
*IOUT2B互补单极电流输出Q或正弦DAC。
*IOUT2单极电流输出Q或正弦DAC。
该DAC可以被编程为接受
*外部12位数据,以代替内部的正弦数据。
这使得AD9854,AD9852的模拟控制DAC功能。
****************************************************************************硬件连接:
*AD9854_RST------PC0
*AD9854_OSK------PC1
*AD9854_FDATA------PC2
*AD9854_UDCLK------PC3
*AD9854_WR------PC4
*AD9854_RD------PC5
*DataPort------PD高八位
*AdressPort------PD低八位
**************************************************************************/
#ifndef_AD9854DRIVER_H
#define_AD9854DRIVER_H
#include"sys.h"
#include"delay.h"
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong
//并行口定义
#defineAD9854AdressPort(Adress){GPIO_Write_u8Data(GPIOD,Adress,0);}
#defineAD9854DataPort(Data){GPIO_Write_u8Data(GPIOD,Data,1);}
//位定义
#defineAD9854_RSTPCout(0)
#defineAD9854_OSKPCout
(1)
#defineAD9854_FBHPCout
(2)
#defineAD9854_UDCLKPCout(3)
#defineAD9854_WRPCout(4)
#defineAD9854_RDPCout(5)
//通道宏定义
#defineI0//I通道
#defineQ1//Q通道
//与系统时钟有关的宏定义、系统时钟频率(=外部晶振频率*倍频数)定义
//屏蔽不需要的系统时钟
#defineSYSTEM_CLOCk_30MHZ30//系统时钟30MHZ
#defineSYSTEM_CLOCk_60MHZ60//系统时钟60MHZ
#defineSYSTEM_CLOCk_100MHZ100//系统时钟100MHZ
#defineSYSTEM_CLOCk_120MHZ120//系统时钟120MHZ
#defineSYSTEM_CLOCk_150MHZ150//系统时钟150MHZ
#defineSYSTEM_CLOCk_200MHZ200//系统时钟200MHZ
#defineSYSTEM_CLOCk_250MHZ250//系统时钟250MHZ
#defineSYSTEM_CLOCk_300MHZ300//系统时钟300MHZ
//外部晶振倍频数(4~20)设置、屏蔽不需要的倍频
#defineREFCLK_MULT_40x04//外部晶振4倍频
#defineREFCLK_MULT_50x05//外部晶振5倍频
#defineREFCLK_MULT_100x0a//外部晶振10倍频
#defineREFCLK_MULT_200x14//外部晶振20倍频
//倍频范围控制位宏定义
//系统时钟<200MHZ,不要使能、200MHZ<系统时钟<300MHZ,使能
#definePLL_Range_DISEN0
#definePLL_Range_EN1
//工作模式选择
#defineAD9854_Single_Tone_MODE0//SingleTone模式
#defineAD9854_FSK_MODE1//FSK模式
#defineAD9854_Ramped_FSK_MODE2//RampedFSK模式
#defineAD9854_Chirp_MODE3//Chirp模式
#defineAD9854_BPSK_MODE4//BPSK模式
//系统时钟更新方式选择
#defineEXT_Updata_CLK0//外部更新时钟
#defineINT_Updata_CLK1//内部更新时钟
//寄存器地址定义
#definePhaseAdjustRegisterNum1Address0x00//相位控制字寄存器
#definePhaseAdjustRegisterNum2Address0x02
#defineFrequencyTuningWordNum1Address0x04//频率控制字寄存器
#defineFrequencyTuningWordNum2Address0x0a
#defineDeltaFrequencyWordAddress0x10//累加频率控制字寄存器
#defineUpdataClockAddress0x16
#defineRampRateClockAddress0x1a
#defineAD9854ControlRegisterNum1Address0x1d//AD9854设置特殊寄存器
#defineAD9854ControlRegisterNum2Address0x1e
#defineAD9854ControlRegisterNum3Address0x1f
#defineAD9854ControlRegisterNum4Address0x20
#defineOutputShapeKeyMult_I_Address0x21//幅度控制字寄存器
#defineOutputShapeKeyMult_Q_Address0x23
#defineOutShapeKeyRampRateAddress0x25
#defineQDAC_Address0x26
//函数定义
voidGPIO_Write_u8Data(GPIO_TypeDef*GPIOx,u8PortVal,u8Low_OR_Hight);
u8GPIO_ReadOutput_u8Data(GPIO_TypeDef*GPIOx,u8Low_OR_Hight);
voidAD9854_IO_Init(void);
voidAD9854_Sine_Int(void);
voidSetAD9854Frequency(ucharucFreWordAdd,ulongulFreqVal);
voidSetAD9854Amplitude(ucharucChannel,uintuiAmpVal);
voidSetAD9854Phase(ucharucPhaAdjRegAdd,uintuiPhaVal);
voidAD9854_Main(void);
#endif
//*******************************文件结束*********************************
控制主程序
/****************************************************************************Copyright(C)2013,icifan
*Allrightreserved.
*
*文件名称:
AD9854DRIVER.c
*硬件平台:
STM32
*简要描述:
*1.AD9854AST的驱动源文件
*2.配合AD9854DRIVER.h头文件使用;
*3.AD9854的并行控制方式;
*
*当前版本:
V1.1
*文件标识:
(内部参考)
*作者/修改者:
icifan
*完成日期:
2013.9.210:
58
*修订说明:
*1.版本1.0完善了AD9854的频率,幅度,相位设定函数,同时在头文件中增加了新的宏定义.
***************************************************************************/
#include"AD9854DRIVER.h"
//根据所选择的不同系统时钟计算"转换频率控制字时所乘的系数"
//不要作修改!
!
#ifdefSYSTEM_CLOCk_30MHZ
#defineFRETMP_Low0x63
#defineFRETMP_MIDDLE0x2a
#defineFRETMP_HIGH0x8f
#elifSYSTEM_CLOCk_60MHZ
#defineFRETMP_Low0x31
#defineFRETMP_MIDDLE0x95
#defineFRETMP_HIGH0x47
#elifSYSTEM_CLOCk_100MHZ
#defineFRETMP_Low0x3d
#defineFRETMP_MIDDLE0xf1
#defineFRETMP_HIGH0x2a
#elifSYSTEM_CLOCk_120MHZ
#defineFRETMP_Low0x98
#defineFRETMP_MIDDLE0xca
#defineFRETMP_HIGH0x23
#elifSYSTEM_CLOCk_150MHZ
#defineFRETMP_Low0x13
#defineFRETMP_MIDDLE0xa2
#defineFRETMP_HIGH0x1c
#elifSYSTEM_CLOCk_200MHZ
#defineFRETMP_Low0x8f
#defineFRETMP_MIDDLE0x79
#defineFRETMP_HIGH0x15
#elifSYSTEM_CLOCk_250MHZ
#defineFRETMP_Low0x0b
#defineFRETMP_MIDDLE0x2e
#defineFRETMP_HIGH0x11
#elifSYSTEM_CLOCk_300MHZ
#defineFRETMP_Low0x09
#defineFRETMP_MIDDLE0x51
#defineFRETMP_HIGH0x0e
#endif
//外部晶振倍频数(4~20)设置
#ifdefREFCLK_MULT_4
#defineREFCLK_MULT0x04
#elifREFCLK_MULT_5
#defineREFCLK_MULT0x05
#elifREFCLK_MULT_10
#defineREFCLK_MULT0x0a
#elifREFCLK_MULT_20
#defineREFCLK_MULT0x14
#endif
//倍频范围控制位宏定义
#ifdefPLL_Range_EN
#definePLL_Range0x40
#elifPLL_Range_DISEN
#definePLL_Range0x00
#endif
//工作模式选择
#ifdefAD9854_Single_Tone_MODE//SingleTone模式
#defineAD9854_WORK_MODE0x00
#elifAD9854_FSK_MODE//FSK模式
#defineAD9854_WORK_MODE0x02
#elifAD9854_Ramped_FSK_MODE//RampedFSK模式
#defineAD9854_WORK_MODE0x04
#elifAD9854_Chirp_MODE//Chirp模式
#defineAD9854_WORK_MODE0x06
#elifAD9854_BPSK_MODE//BPSK模式
#defineAD9854_WORK_MODE0x80
#endif
//系统时钟更新方式选择
#ifdefEXT_Updata_CLK//外部更新时钟
#defineUpdata_CLK0x00
#elifINT_Updata_CLK//内部更新时钟
#defineUpdata_CLK0x01
#endif
/*---------------IO口初始化-------------*/
voidAD9854_IO_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);//GPIOB
GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;//
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);//GPIOD
}
/***************************************************************************
*函数名称:
GPIO_Write_u8Data(GPIO_TypeDef*GPIOx,u8PortVal,u8Low_OR_Hight)
*功能描述:
八位并行数据写入
*参数列表:
GPIOx:
数据口