原创分享:AD9854调试心得
上次做了个几十M的DDS扫频项目,相关的设计过程也写到坛子里了。当时选择的DDS芯片是AD9851,该芯片的最高时钟频率是180M,在DA的零阶保持电路影响下,输出的幅频特性不好,高频段功率跌的厉害。虽说勉强满足设计要求,但是本着杀人须见血,救人须救彻的精神,又改了一次版,将DDS芯片换成了时钟频率为300M的AD9854,这次,就和坛子里的众童鞋分享下调试AD9854的酸甜苦辣。
首先我们来看看AD9854这个片子,不看不知道,一看吓一跳,几十元的片子,能输出PSK,FSK,LFM等各种调制信号,自带多路同步功能,IQ正交输出,功能挺全,宽带的无杂散动态能到50dB,虽说差点事,但也够用了。这个项目中,只用来出连续波,所以datasheet里很多内容都忽略了,先来张近照和测试的结果吧
带内看起来是比较平坦的,1dB以内的起伏
下面总结下调试过程中遇到的问题:
1. AD9854打寄存器有并行和串行时序两种方式,这两种方式是通过S/P这个引脚切换的,当其为高时为并行时序,低时为串行时序,这个需注意;
2. AD9854有个update信号,干什么用的呢?其实当我们通过串口或并口给DDS打数时,先是送到了IO_BUFFER里面,然后靠一个update信号送给DDS的核,才完成了控制字的真正写入。接下来的部分有点绕了,我说的啰嗦一点:这个update信号可以是外部输入的,也可以是内部生成的,这个是通过改变控制寄存器的某个控制位达到的,上电之后默认是内部生成的,内部怎么生成呢,他是让一个计数器倒计时,计时到0之后输出一个更新脉冲,这个计数器的初始值也是通过一个寄存器写入的。一般来讲,大家喜欢自己输入UPDATE脉冲,或者至少需要调整计数器初始值让这个脉冲输出周期满足自己的时序需求。那么这就陷入了一个鸡生蛋核蛋生鸡的怪圈:我要让update信号满足我的时序要求,就要写入寄存器,要写入寄存器就需要满足我时序要求的UPDATE信号,而系统默认的内部update信号,周期是固定的,但是会在你需要的时候出现吗,不知道!这时候有人提出了一种解决办法,不可否认逻辑上是很严谨的,那就是这个系统内部默认的update信号一定是外部提供系统时钟的时候才会按照默认周期出现的,而IO口线的串行或者并行操作是不需要系统时钟的,那么先将提供系统时钟的晶振暂停,等到IO操作完毕后再提供晶振,那么一定是满足时序的。这样就需要一个带使能开关的晶振,想来想去怎么会有如此不人性化的芯片,简直比“证明你爸是你爸”还要不人性。经过本人的实验,这个步骤是多余的,第一次写入寄存器,不管进行调整成外部更新脉冲还是调整内部更新脉冲周期的寄存器操作,默认的内部UPDATE信号会合适的把寄存器内容打入内核的,具体内部操作原理咱不清楚,但是ADI的设计人员显然考虑到了这一点。值得注意的是,update信号是可以通过一个管脚输出的,通过改变内部计数器的数值观察update信号周期是否相应改变是一个判断AD9854芯片是否正常的一个重要手段。
3. 调试过程中遇到过这样一个问题,比如当需要输出50M信号的时候,在频谱上不止50M有输出,附近还有一片频谱。当时看到这个情况的时候第一眼是觉得这个信号是被脉冲调制了,检查程序无此可能,后又怀疑芯片虚焊,重新焊接后问题仍然存在,最终发现原来是因为芯片外部的环路滤波的电容值不对,这个芯片对输入的晶振可以倍频的,这样可以实现外部提供较低频率实现较高频率的信号输出,而这个倍频是通过锁相实现的,锁相的环路滤波需要在外部提供,当电容值不合适时,锁相环失琐,就造成了上述问题。
4. 刚才说到可以通过改变内部计数器的数值观察update信号周期是否相应改变是一个判断AD9854芯片是否正常,其实还有一个更简单粗暴的手段,就是用手摸,AD9854功耗较大,发热很厉害,看看下面的图吧,电流630ma,还没开反sinc函数滤波器,开了之后电流还会增加接近一倍。用手摸摸吧,闻到烤肉味就对了。
总的来说,这个芯片调试过程还是比较简单的,仔细看datasheet,应该能解决绝大多数问题,当然我没有用各种调制等复杂功能,本文就当抛砖引玉了,欢迎各位指导。