AD9910是ADI提供的一款DDS,由于以前项目一直使用的是AD9858,一直想用新的器件替换掉(虽然在别人眼里AD9910也算是老掉牙的器件),对于我来说没用过就是新的,也因为没用过对我来说是困难重重,由于手头参考资料少,网络大多数资源参考价值少,可能这种器件受行业范围限制,不会有那么多信息提供,本人不才,在项目中遇到好多的问题,一步步走来,我想把我工作中遇到的问题分享出来,以供大家参考,有些不对地方烦请指正,废话不多说,开始吧

硬件篇

由于PCB板面积限制没有加并行连接端口,也就是说,所以就不能实现并行数据端口调制模式。

     图1AD9910原理图

根据图片中编号加以说明:

1.输出信号,就是你要产生的信号,官方给的原理图在这部分做了低通滤波,我这外部有滤波器就取消掉了,更具实际项目而定。

2.这部分是AD9910的参考时钟输入,也就是说你要输出的频率的参考源来自这里,也就是官方文档的第一句话

也就是说AD9910内部最高支持1G输入,根据奈奎斯特定理(我也仅仅是知道个人名,写出来装个逼),所以高达400MHz输出,我用的是外部直接输入1G,然后产生200MHz的调制信号,如果是采用我这种直接驱动方式,95管脚XTAL_SEL就得接AGND,另外一种晶体驱动没用过。

还有个比较重要的地方就是,输出信号一定要有外屏蔽,像我这种直接将输出信号搭到焊盘上,由于腔体之间的缝隙就会有输入信号串扰进来,导致输出有很大杂散,推荐接头如图3

图3 SMA接头推荐

3.这就是95管脚XTAL_SEL,我就是画原理图是没注意,在这地方弄错了,接到1.8V上了,接地就好了

4.官方这么写的,我就这么画了,其实我的理解就是,pin3管脚和别的管脚单点连接,也不知道有啥用。

5.外部环路滤波,我是直接驱动,所以没有用到。

6.电源的滤波电容,注意将数字地与模拟地单点用磁珠单点连接

注:千万不要开关电源,供电如下,我用两个LT1963分别提供AVDD和DVDD 1.8V

然后再用AMS1117分别提供AVDD和DVDD 3.3V

软件篇

这部分也是最麻烦的,问题也是最多的,网络资源也比较少,所以在此总结出来,供大家参考,有些方法也是我一点点试出来的,有些不对的地方烦请指正,AD9910共有四种模式分别是:

  • 单频调模式模式
  • RAM调制模式
  • 数字斜坡模式(DRG模式)
  • 并行数据端口调制模式

由我做的硬件不支持,所以就没有试过并行数据端口调制模式,在这也不做介绍,下面我会对前三种模式遇到的问题一一进行说明。

AD9910它是一个串行通信的器件(不要给我说它有并行数据端口调制模式,你要实现前三种模式就必须是串行通信),

所以这个和AD9858的并行控制方式有很大的区别,也就是说以前用到的AD9858控制方式就此无法使用,只能自己写了,哈哈哈。我用的控制器件是FPGA,看清楚就是FPGA,用FPGA实现串行控制真是一种折磨,由于没有找到有关官方的verilog写的控制代码,只能去网上找别人的作为参考,在此将时序图贴出来仅供参考,具体代码还是自己去写吧。

串口发送时序关系如下:

图4串口时序关系

如图4截图发送寄存器CFR1和CFR2,前面8bit是地址,后面32bit是数据,依次循环,将你所需要的数发送出去,这部分可以参考官方文档理解,在这里我想要说的是,AD9910串口数据是先发送8bit地址,然后数据,只有整个一组数据地址全部完成后,数据地址指针才能恢复到地址位的第一位,在这里为了确保每次一组地址数据结束后,指针能够恢复到地址起始位,所以每次一组地址数据接收,就进行io_reset,让其指针强制恢复到起始位,这要做可以保证sclk在出现干扰时,整个串口数据不会错乱,这种方式仅供参考。

去官网下个AD9910的软件,这样你就不需要自己去计算配置寄存器值了

图5寄存器配置图

如图5是1G外部输入,不需要分频,所以把DividerDisable勾勾打上。

Reg Addr(Hex) 是配置寄存器的地址,后面是数据,可以看到不同的地址,后面的数据长度是不同的。

下面将三种产生调制信号的模式分别讲下:

单频调制模式

单频调制模式也就是出个点频,配置输出点频首先要初始化,分别是三个寄存器CFR1、CFR2、CFR3,比如需要配置两个点频,配置profile0地址0x0E和profile1地址0x0F具体含义参考AD9910官方文档的说明,都有详细的解释。

图6配置点频示例

Profile0和profile1的设置如图6,注意Amplitude SF 虽然是灰色的,但是是可以设置的,这个值是幅值,在频谱仪上对应的是功率,最大值位1,满幅值输出,此时AD9910的输出功率为0dB,对应的寄存器值就是

,把这些寄存器都配置好了,还有一个关键点,就是你得io_updata,这样才能把寄存器更新到实际产生频率的寄存器内,说的有点拗口,但是也挺好理解的,你为这样就好了,可以输出漂亮的点频了,哈哈哈,还差一个,就是我举例产生两个点频,这是怎么做到的哪,那就得靠图7,看清楚不要和寄存器profile0~7混淆,AD9910支持8独立的点频,所以它就有了8个profile寄存器,而要切换这几个频点就靠这个PRFILE管脚了,比如,我现在设置的是profile0和profile1寄存器,那么我这个PRFILE管脚就在PRFILE=3‘b000时输出profile0寄存器的值;PROFILE=3’b001时输出profile1寄存器,这样就能快速的切换点频了,顺带附一张漂亮的点频图8。

图7 PROFILE管脚

图8帅气的点频频谱示意图

RAM调制模式

RAM调制模式,我觉得这个模式还是挺不错的,对于产生相对复杂的调制信号还是相当不错的,这个RAM模式的意思时这样的,

官方文档时这写的那这个1024个32bitRAM到底时干啥的,其实仔细看文档不难理解,就是可以存放1024个点频寄存器值,然后设定好间隔时间,就这样可以连续的产生这些点频,也就是说可以产生线性调频信号或者非线性调频信号,就看你RAM是怎么个设置方法了,就这么简单,说起来简单,但是做起来,还是有好多的细节问题,有时候把文档看了几遍都理解不了其中的意思,还是直接上手,一点点试,下面我就具体介绍下怎么去操作,然后对照文档就更好理解了

首先要使用RAM模式,第一步时写入RAM表,其次才能去调用RAM表里的数据,

写入RAM表,我的做法是先将RAM使能位置0,也就是CFR1 = 32‘h00000000;其实上电默认也是不使能RAM模式,也可以不用配置,接下来就是写RAM表,先看文档,1024个32bit根据据实际情况看需要写多少个,比如写500个点,用EXCEL表做一个公式,产生500个点,中心200MHz,带宽20MHz的一个线性调频信号,那么间隔点就是20/500=0.04MHz,32bit寄存器计算公式=DEC2HEX(POWER(2,32)*(输出频率/参考频率)),直接用EXCEL就能得到一组32bit的寄存器值;我在这里举例的写入一个连续的调制信号,也可以写入不连续的几段寄存器,可以将不同的数据段进行划分,最多可以划分8段,先不多说,我直接讲我怎么实现:

不管我要几段,我先将其按照一段数据直接写入,这块不太好讲,首先配置分段的寄存器,你会发现这TMD不就是刚才单频调制寄存器吗,其实就是,地址都一样,哈哈哈,那我就配置RAM profile0寄存器,因为是写入RAM表,所以最主要的是结束和起始地址,把这个写好。

图9 RAM模式地址表

图10 RAM 寄存器

还是用AD9910官方提供的软件,计算地址表,那就开始写吧,我先写了个CFR3,貌似没啥用,关键是我器件加电只写依次RAM数据表,所以器件加电后,RAM模式是不使能的,还有一个关键电,就是你在配置RAM profile0时候,PROFILE管脚必须对应到PROFILE=3’b000,这是必须的。因为我只配置profile0,所以也不用切换PROFILE管脚,ram profile0 配置完后,io_updata更新下,接下来就可以写RAM表,首先写地址0x16 然后就是你的一大堆数据了,这样整个RAM表写完。

图11写RAM

那么我只是写入了数据表,我怎么产生信号呢,那我就以官方提供的这张图12,采用上斜坡模式来实现,执行profile0,profile1,然后终止。

图12两段调制信号切换示意图

要实现图12调制信号(仅作示意),我们就得将刚才写入AD9910 ram表进行重新数据段的划分,比如已知0~300地址是RAM profile0, 301~499地址是RAM profile1,那么将地址ram profile寄存器写入,记住写入地址的时候PRFIEL管脚一定要对应于profile寄存器,如图13所示,注意写profile寄存器时候一定要将RAM使能关掉,当然都到这一步了,你应该就已经初始化了配置CFR1,CFR2,CFR3,我再强调一遍,RAM使能这个也就是CFR1[31]这一位,即使你不进行io_updata,只要这一位是1’b1,就会影响你整个配置ram profile寄存器。

图13写入两段地址

这样分配好地址段,就可以使能RAM模式了,然后再来个io_updata,就能实现profile0~profile1的调制信号了,当你高兴的看到可以产生调制信号了,你会发现,卧槽怎么驻留了,我只要脉冲内有信号怎么办?有一种办法可以解决,有点投机取巧,那就是,我再来个地址段profile2,当然这个profile2是用来放0频的,这样你profile0~profile2就能实现脉冲内的调制信号了,点到为止,就这样了,还有别的方式自己试吧(这里面其实还有好多问题,比如读取数据怎么是个反的)。还有一个问题说一下,就是产生这个信号有两种方式,一是io_updata,另一种方式是PROFILE管脚变化,具体项目,具体对待。

图14 线性调频信号频谱示意图

图15 线性调频信号时域示意图(随便找的图)

注:图8,14,15只是想说明产生信号的效果,并非实际AD9910信号

数字斜坡模式(DRG模式)

DRG模式其实就使用来实现简单的线性调频的,如果你调制信号不复杂,用这种方式也就够了,他只需要配置几个寄存器就可以实现线性调频信号,就是做正负斜率切换的时候,有点费劲。

初始化配置寄存器,CFR1,CFR2,CFR3,具体寄存器值用AD9910官提供的软件就行,其次就是DRR,DRL,DRS这三个寄存器,配置需要产生扫频的相关参数,如图16 要产生从100Mhz到200Mhz的脉宽100us线性调频信号,设置sweep frequency0,sweep frequency1和各自对应的间隔时间和频率步进量,200Mhz-100Mhz=100,脉宽100us,假设间隔时间设置位0.1us,那频率步进量就是0.1MHz,如果是时间间隔1us,那频率步进量就是1MHz,根据实际情况而定;如果需要外部OSK,可以使能外部OSK功能,此时还得配置ASF寄存器,主要就是这些寄存器,其他自己摸索去吧。

图16 DRG模式配置

如果你需要实现正负斜率切换,参考官方文档是这样描述的

看着这貌似挺简单的,DRCTL=1正斜率,DRCTL=0负斜率,哈哈哈,图样图森破,我也没太理解官方写的到底是啥意思,其实正确的使用方法是:假如你要出正斜率,那么寄存器CFR2设置No Dwell high

,此时DRCTL上升沿就会产生正斜率,要产生负斜率,那么寄存器CFR2设置No Dwell low ,

此时DRCTL下降沿就会产生负斜率,正负斜率的驱动需要靠DRCTL的沿来驱动。

AD9910使用心得-fanfanStudio相关推荐

  1. 解决微信浏览器video标签自动播放视频失效

    正常在浏览器好好的视频,在微信内置浏览器中点击播放全屏,样式也不一样,自动播放失效.罪魁祸首是微信把video标签都成微信规则的了.下面方式可以解决视频播放全屏以及不能自动播放的问题. <vid ...

  2. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  3. 测试心得:微图书销售小程序

    测试心得:微图书销售小程序 前言 这个学期差不多也将近结束,经过大半个学期,从项目需求的确认和项目文档的编写,到一步步的设计与实现,现在终于到了测试阶段,但是我们在测试阶段也暴露出了很多bug,但是每 ...

  4. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

    该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...

  5. 计算机财务应用实验心得,计算机会计实习心得-20210628124643.doc-原创力文档

    计算机会计实习心得 计算机会计实习心得1 毕业实践环节是大学生在完成全部课程后.走向社会之前最真实的一个模拟实验,对于我们财会专业的学生,平时注意注重理论学习,缺乏实践锻炼,因此实习显得尤为重要.在本 ...

  6. html5考试总结300字,期中考心得300字5

    为了检验学生半个学期所学的知识而进行的一次考试,有利于学生比较正式地检验自己平时的学习水平,根据这个成绩,学生可以及时的调整学习心态和方法,更有效率地进行下一阶段的学习,期中考试主要考察学生前半学期的 ...

  7. Assembly学习心得

    http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...

  8. 什么叫安装文件索引服务器,搜出精彩 玩转Windows 2008系统心得

    [IT168 专稿]不少朋友已经在不经意间与Windows Server 2008系统进行了亲密接触,在一段时间的接触之后,不知大家对该系统的文件搜索功能会有什么样的体会?其实,Windows Ser ...

  9. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

最新文章

  1. TensorFlow什么的都弱爆了,强者只用Numpy搭建神经网络
  2. Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别
  3. Git SSH Key生成,配置到GitHub 并测试
  4. SQL基本语句语法释义
  5. 同一列两行数据怎么合并成一行_经常加班怎么办?两分钟学会这4招,让同事刮目相看!...
  6. vue-router 动态路由
  7. 换主板 oracle 蓝屏,图文说明win7系统更换主板后开机蓝屏的办法
  8. android 通知写法_Android架构设计MVP模式第(二)篇,如何减少类爆炸
  9. python 网络请求框架_python 框架
  10. 白话使用zookeeper作为注册中心搭建微服务
  11. Android集成三方浏览器之X5内核,从入门到精通
  12. 计算机黑屏风扇异响,电脑开机黑屏主机风扇一直响
  13. 产品目标拆解:结构化思维
  14. Linux命令之expr详解
  15. Python处理2个表格。从源表格中筛选符合条件的数据,写入到dst表格中
  16. 正版软件,盗版软件和免费软件
  17. 数据结构-顺序表(动态分配存储空间)
  18. docker进入容器时报错 Error response from daemon: Container xxx is restarting, wait until the container is
  19. 从ReentrantLock到AQS
  20. POJ1251丛林之路题解

热门文章

  1. html 字体模糊,css – Chrome字体显示模糊
  2. 冷眼旁观Cocos3D发布
  3. 中国人民解放军郑州计算机学院官网,解放军信息工程大学录取分数线2021
  4. 01、uniapp连接MUMU模拟器
  5. 貌似高大上,实则黑中介
  6. layui中如何让多个控件在一行显示
  7. win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退。
  8. 活动策划书用什么计算机软件,各行业主流设计软件有哪些?(设计人员请进)...
  9. 集中式自动驾驶控制域中的高精地图数据解析算法
  10. measure_solder_paster_dff.hdev测量BGA封装焊锡膏深度的 相关例程学习