编辑: liubingb | 2016-01-10 |
幅度量化误差(由存储器有限字长引起)造成的杂散和 DAC 非理想 特性造成的杂散. 随着微电子技术的飞速发展, 目前高超 性能优良的 DDS 产品不断推出, 主要有 Qualcomm、 AD、 Sciteg 和Stanford 等公司单片电路 (monolithic) . Qualcomm 公司推出了 DDS 系列 Q
2220、 Q
2230、Q
2334、Q
2240、Q2368,其中 Q2368 的时钟频率为 130MHz,分辨率为 0.03Hz, 杂散控制为-76dBc,变频时间为 0.1μs;
美国 AD 公司也相继推出了他们的 DDS 系列: AD
9850、AD
9851、可以实现线性调频的 AD
9852、两路正交输出的 AD9854 以及以 DDS 为核心的 QPSK 调制器 AD
9853、 数字上变频器 AD9856 和AD9857.AD 公司的 DDS 系列产 品以其较高的性能价格比,目前取得了极为广泛的应用.AD 公司的常用 DDS 芯片选用列 表见表 1.下面仅对比较常用的 AD9850 芯片作一简单介绍. 第3页,共36 页DDS 调试心得 by zhangtian E-mail:[email protected] (以上摘自网络) 第4页,共36 页DDS 调试心得 by zhangtian E-mail:[email protected] 2.AD9850 调试 2.1AD9850 原理图和 PCB AD9851 介绍,原理图 2.2AD9850 介绍 AD9850 是AD 公司采用先进的 DDS 技术
1996 年推出的高集成度 DDS 频率合成器,它内 部包括可编程 DDS 系统、高性能 DAC 及高速比较器,能实现全数字编程控制的频率合成 器和时钟发生器.接上精密时钟源,AD9850 可产生一个频谱纯净、频率和相位都可编程控 制的模拟正弦波输出. 此正弦波可直接用作频率信号源或转换成方波用作时钟输出. AD9850 第5页,共36 页DDS 调试心得 by zhangtian E-mail:[email protected] 接口控制简单,可以用
8 位并行口或串行口经、相位等控制数据.32 位频率控制字,在125MHz 时钟下,输出频率分产率达 0.029Hz.先进的 CMOS 工艺使 AD9850 不仅性能指标 一流,而且功耗少,在3.3V 供电时,功耗仅为 155mW.扩展工业级温度范围为-40~+85 摄氏度,其封装是
28 引脚的 SSOP 表面封装. AD9850 采用
32 位相位累加器,截断成
14 位,输入正弦查询表,查询表输出截断成
10 位, 输入到 DAC.DAC 输出两个互补的模拟电流,接到滤波器上.调节 DAC 满量程输出电流, 需外接一个电阻 Rset,其调节关系是 Iset=32(1.248V/Rset),满量程电流为 10~20mA. AD9850 的部分图片(手机拍,效果不是很好) 其中 AD9850 Fclk=100M AD9850 模块 输出波形,频率为 11M 第6页,共36 页DDS 调试心得 by zhangtian E-mail:[email protected] 2.3AD9850 的调试图片 下面
4 张图片描述了当频率在不断增大的过程中, 输出频率与镜像频率的变化情况 镜像频率=100M - Fout 幅度不断增大,当输出为 50M 的时候,2 个信号重合 HP8921 综测设置:center=50M,span=100M Clk= 100M Fout=10M center=50M,span=100M 第7页,共36 页DDS 调试心得 by zhangtian E-mail:[email protected] Clk= 100M, Fout =30M center=50M,span=100M Clk= 100M, Fout=45M center=50M,span=100M Clk= 100M, Fout=50M center=50M,span=100M 第8页,共36 页DDS 调试心得 by zhangtian E-mail:[email protected] 由于晶体的误差,输出存在一定的误差 2.4 软件设计 采用串行接口的方式,简单. 时钟采用 100M,输出限制为 40M 下面列出了主要的源代码,都是我自己调试出来的. //初始化 DDS void init_dds(void) { clk = 0;
load = 0;
delay(2);
clk = 1;
delay(2);
clk = 0;
delay(5);
load = 1;
delay(2);
load = 0;
} //写入 40bit 到DDS 芯片,频率占用前 32bit,相位暂不可调 void write_dds(unsigned long dds) { uchar i;