原创 基于FPGA的DDS设计

2009-8-4 00:37 1849 2 4 分类: FPGA/CPLD

初始频率设置为7.3682307MHz,系统频率为100MHz,根据DDS输出频率公式能计算出相位累加字:


公式


  其中f为DDS输出频率;fclk为DDS系统频率;N为相位累加器的位数;DATA为相位累加器的累加值。


  要得到7.3682307MHz的输出频率,相位累加值


DATA=(100101101110011010111111110101101101111011100)2


  FPGA采用Xilinx Spartan3E XC3S500E,IP核+VerilogHDL+Sch编程。下图为整个FPGA的原理框图:


点击看大图

点击看原图



  DCM_100MHz


  其中DCM_100MHz用了Spartan3E里面的DCM(时钟管理单元),由于输入的时钟为有正负的正弦波(100MHz 幅值5V峰峰10V的正弦信号),所以经过DCM后,能得到一个很好的方波。输出100MHz给DA作为DA的时钟,其中还经过一个BUFG,目的是使ROM的正弦数据输出稳定后,时钟才到来,DA才能读入数字值,这可以参考AD9744的Datasheet


AD9744的Datasheet


  其中ts至少为2.0ns,如果少于2.0ns或时钟和DA数据同时甚至提前到达的话,DA输出的模拟值会出错。所以要加一个BUFG,但BUFG延时不太确定,.....(方面的我还不懂L)


  MCU_FPGA


  51单片机通过串口接受PC机给出的DATA(相位累加值),再通过与FPGA的通信,告诉FPGA相位累加模块(Accumulator)累加值。MCU_FPGA所做的工作是把收到的数据出入模块内的ROM里,使得改变模块里的ROM地址,就能改变输出的累加值。FPGA_MCU通信的时序为:


点击看大图

点击看原图




  •   DIN:48位累加值串行输入
  •   CLK_WR:输入写信号时钟,DIN的数据稳定后,CLK_WR上升沿写入FPGA内部的寄存器,寄存器的数据移位
  •   DIN_PRO:写保护,DIN_PRO=0时,模块内ROM的输出随地址变化而变化;DIN_PRO=1,模块内ROM的输出锁存,输出保持DIN_PRO=0时ROM地址所对应的ROM值。
  •   WR:写信号,WR=1时,把FPGA内部寄存器的值写入此时ADDRESS[2:0]地址的ROM空间。
  •   ADDRESS:ROM地址位,3根地址线决定ROM深度为8。ROM的大小为248x8 bit。

  Accumulator


  48位相位累加器。


  Wire48_14


  截取相位累加器的高14位作为存储正弦波数据的ROM的地址。


  ROM


  存取一个周期的正弦波数据,而这个正弦波数据应该是有水平移位的,最低点(270°)为0,最高点(90°)为1,直流偏移0.5。所要得到的数据有LabView编程得到。


点击看大图

点击看原图



  DDS输出结果


  没加滤波器


DDS输出结果


  设计的输出频率为7.3682307MHz,但是示波器显示为7.599MHz,示波器显示的频率是不准确的,实际可以用频谱仪看输出的频率。


示波器输出


示波器输出


  放大来看,可以看到正弦波是由一个台阶一个台阶组成的,这就是DA的模拟输出。


  加低通滤波器


  自己也设计了低通的椭圆滤波器,但实际焊接出来的椭圆滤波器达不到仿真效果,设计截止频率为10MHz,但实际在1~2MHz时幅值衰减就很大(大约1半),到5MHz时,就完全截止了,所以最后还是放弃自己设计的低通椭圆滤波器,选用商用的低通滤波器(minicircuits公司SLP-10.7+)。


minicircuits 公司SLP-10.7+


  SLP-10.7+ DataSheet


点击看大图

点击看原图



点击看大图

点击看原图



SLP-10.7插入损耗与频率的关系                                      SLP-10.7回波损耗与频率的关系


  在想要的频率(7.3682307MHz)上插入损耗越小越好,回波损耗越大越好,而在杂散或谐波频率(主要为14MHz这个2倍谐波)上则相反,目的是要把杂散和谐波分量都滤除。SLP-10.7截止频率为11MHz,对于我要的输出频率7.3682307MHz有很好的滤波效果。


  下面是加上SLP-10.7低通滤波器后,示波器的输出。


示波器的输出


示波器的输出


示波器的输出


  可以看到台阶没有了,正弦波变得比较光滑,这是因为高阶的谐波分量都被滤除了

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

tengjingshu_112148725 2010-1-5 22:44

我自己的博文,我顶一个

用户209396 2009-11-8 21:12

赞一个 很好
相关推荐阅读
ruanwentao 2009-08-04 08:56
【分析】STM32从Flash中运行程序的时序分析
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain大家都知道STM32的CPU时钟频率可以达到72MHz,以后还会更快,但是由于半导体制造工...
ruanwentao 2009-08-04 08:55
关于调试STM32程序时,某些标志位被调试软件意外清除的问题
在调试的过程中,使用调试软件的寄存器或存储器显示窗口,可以很方便地查看外设寄存器的状态。很多朋友都碰到过这样的问题:在单步调试时始终不能在显示窗口看到某些标志位的变化,应该设置这些标志位的时候,窗口中...
ruanwentao 2009-08-04 08:55
STM32配置时钟时注意设置FLASH等待周期
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain今天是2008年7月28日,广州天气热啊,热得叫人受不了。中午回来啥活都不想干了,还是玩玩...
ruanwentao 2009-08-04 08:54
STM32温度传感器的使用和计算
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrainSTM32内置一个温度传感器,通过ADC_IN16这个通道可以读出温度传感器的电压。在ST...
ruanwentao 2009-08-04 08:53
STM32系列产品编号信息
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain每种STM32的产品都由16个字母或数字构成的编号标示,用户向ST订货时必须使用这个编号指...
ruanwentao 2009-08-04 08:53
STM32三种启动模式中存储器的存储介质
来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrainSTM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的F...
EE直播间
更多
我要评论
2
2
关闭 站长推荐上一条 /3 下一条