用FPGA驱动AD9910输出跳频信号

这篇具有很好参考价值的文章主要介绍了用FPGA驱动AD9910输出跳频信号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用FPGA驱动AD9910的方法总结


前言

虽然AD9910芯片老掉牙了,但是还有人在使用。前段时间一直比较忙,又赶上换工作,没时间写博文。最近才慢慢的闲下来,所以又开始分享一下自己工作中的调试经验。


一、概述

AD9910是一种直接数字合成器(DDS),具有集成的14位DAC,支持高达1 Gsps的采样率。AD9910采用了先进的专有DDS技术,在不牺牲性能的情况下显著降低了功耗。DDS/DAC组合形成了一个数字可编程的高频模拟输出合成器,能够在高达400 MHz的频率上生成频率灵活的正弦波形。
用户可以访问控制DDS的三个信号控制参数:频率、相位和幅值。DDS通过其32位累加器提供快速跳频和频率调谐分辨率。在1 Gsps采样率下,调谐分辨率为~0.23 Hz。DDS还能实现快速相位和振幅切换能力。
AD9910通过串行I/O端口编程其内部控制寄存器进行控制。AD9910包括一个集成的静态RAM,以支持频率、相位和/或幅度调制的各种组合。AD9910还支持用户定义的、数字控制的数字斜坡操作模式。在这种模式下,频率、相位或振幅可以随时间线性变化。对于更高级的调制功能,包括一个高速并行数据输入端口,以实现直接的频率,相位,幅度或极性调制。

二、寄存器配置

1.SPI串行接口

AD9910串行端口是一个灵活的同步串行通信端口,可以方便地连接到许多工业标准的微控制器和微处理器。串行I/O与大多数同步传输格式兼容。看完器件手册后,这种寄存器配置时序就是一种SPI时序。我的项目由于是后期只需要写入寄存器,不需要读取,故将SDIO引脚作为单向输入引脚,而且项目开始时也没有接SDO引脚,所以不能读取寄存器值。后期调试中必须确认数据是否正确写入寄存器,又将SDO数据输出引脚接入。这样和csn、sclk组成了标准的SPI接口,对应关系如下:

I/O接口 描述
SCLK 时钟
CSN 片选
SDIO MOSI,主输出从输入
SDO MISO,主输入从输出

注:详细的接口说明请查看数据手册。

1.SPI读写时序

和其它的SPI时序类似,操作基本是“指令+数据”的形式。指令字节包含以下信息,如指令字节信息位图所示。
用FPGA驱动AD9910输出跳频信号
D7:决定在指令字节写之后是否发生读或写数据传输。逻辑1表示读操作。0表示写操作。
D4-D0:决定了在通信周期的数据传输部分访问哪个寄存器,即所操作的寄存器地址。
时序图如下:
用FPGA驱动AD9910输出跳频信号
关于spi读写时序,我在程序中使用了自己设计的一个代码,这段代码在实现时比较简单,只需要提供输入/输出字节数据和对应使能就可以实现spi读写时序。(有需要的小伙伴可以CSDN私信我,PS:有偿的吆!)
用FPGA驱动AD9910输出跳频信号

2.状态机设计实现寄存器读写

根据寄存器配置方法,芯片配置需要上电复位,寄存器写入延迟等要求,设计如下状态机:

状态机名称 描述
IDLE 空闲状态
START 起始状态
RESET 复位状态
PLEASE 复位状态
TRANSMIT 地址/寄存器数据传输状态
STOP 停止状态

状态图如下所示:
用FPGA驱动AD9910输出跳频信号
在实现寄存器配置的流程中,由上述状态机实现。当程序复位后,状态直接从空闲状态跳转到开始状态。当上层程序拉高开始使能后,就开始寄存器配置,此时状态跳转到复位状态。在复位状态,复位时长为2ms。之后状态跳转到请求等待状态,该状态会有一个计数器等待延迟。当延迟达到后状态跳转到spi指令数据传输状态,开始写、读寄存器。之后再跳转到延迟等待状态。当所有的需要配置的寄存器都操作完之后就跳转到停止状态。结束寄存器配置。并输出使能告诉上层模块配置完成。

3.单频调制模式

在上述寄存器配置完以后,就可以使用单频调制模式简单的输出频率了。具体怎么配置,需要配置哪里的寄存器手册里由详细说明,这里不再赘述。
用FPGA驱动AD9910输出跳频信号

三、并口时序控制

并行端口的主要信号控制时序如下图所示,只有在发送使能拉高时,输入数据才有效,并且在时钟的上升沿将数据锁存到器件中。在并行数据端口调制模式中,调制的DDS信号控制参数直接由18位并行数据端口提供,由16位数据字和2位目的字组成。而DDS的频率控制字却有32位,故要想精确的让DDS产生准确频率的信号,就必须使得频率控制字为2的整数倍关系,由于DDS的系统频率和解码FFT的系统频率相同,进而计算出的各个频率对应的频率控制字为n*2^21 (n=1,2,3…),这样只需要将频率控制字的高16位给到DDS就可以精确输出对应频率的正弦波。具体的频率控制字事先计算好存储在rom中,通过和源数据的映射关系,在控制程序中调用。
用FPGA驱动AD9910输出跳频信号
注意:当TxENABLE引脚为false时,设备内部会清除输入的16位数据字,或者它保留TxENABLE切换到false状态之前数据端口上的最后一个值(基于数据汇编程序的设置保持最后一个值位)。CFR2[6]:对应数据汇编器保留最后值的设置情况,当该位为0时,当TxEnable为假时,并行端口的数据会被忽略,且内部路径也会被清零。当为1时,当TxEnable为真时,并行数据端口数据汇编器强制保持从并行端口收到的最后值。

四、锁相环倍频器

内部锁相环(PLL)提供了使用参考时钟频率的选项,该频率明显低于系统时钟频率。锁相环支持广泛的可编程倍频系数(12~127)实际测试发现根本达不到最大倍数以及可编程电荷泵电流和外部环路滤波器组件(通过PLL_LOOP_FILTER引脚连接)。这些特性为锁相环增加了额外的灵活性,
允许优化相位噪声性能和频率计划开发的灵活性。锁相环还配有PLL_LOCK引脚。
锁相环的输出频率范围(fSYSCLK)被内部VCO限制在420 MHz≤fSYSCLK≤1ghz范围内。此外,用户必须将VCO编程为六个操作中的一个使fSYSCLK在指定范围内。
其中最主要的配置为:

  • 频率范围:VCO_SEL=CFR3[26:24];
  • PLL倍频倍数:N=CFR3[7:1](该参数特别不准,不是你实际配置倍数,我是多次实验后根据输出频率,频率控制字反推回系统频率的,这里有点坑人,手册没有细说。

总结

在实现ad9910的驱动程序编写中,最困难的是寻找合适的系统时钟频率,由于手册没有说明,而且倍频倍数N的参数设置好像不是真实的倍数,导致我只能一遍遍的修改输入参数,来看到底哪个倍数是合适的。不过最终调试下来还是收获很大。如果由想需要我的程序源码的小伙伴可以私信我,百度网盘分享给你。PS:创作不易,有偿的吆,介意的朋友请绕道,谢谢!!!文章来源地址https://www.toymoban.com/news/detail-431551.html

到了这里,关于用FPGA驱动AD9910输出跳频信号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA驱动AD9240实现AD转换

    在做项目中,经常会用到AD转换模块。前段时间做毕业设计的时候需要用到FPGA驱动AD9240模块实现模拟数据的采集和转换,尽管相对来说AD9240算比较简单的驱动模块,但是也想记录下分析和设计过程。 首先通过芯片手册可以看到AD9240是14位,最高速率可达10Mbps的模数转换器件。

    2024年02月06日
    浏览(56)
  • STM32驱动ADS1256串口输出-AD转换

    ADS1256是TI推出的一款微功耗、高精度、8 通道、24 位高性能模数转换器。该芯片还带有4个可编程的I/O口、输入缓冲器和可编程增益放大器等,芯片本身可以测量0-5v的信号,高电压采集可以通过把信号分压成0-5v的范围内再给模块输入,所以ADS1256可以采集市面上大多数的标准电

    2024年02月16日
    浏览(49)
  • FPGA模块——AD高速转换模块(并行输出转换的数据)

    AD9280/3PA9280芯片的引脚功能: 工作电压2.7到5.5v 数据对应: AD9280 支持输入的模拟电压范围是 0V 至 2V,0V 对应输出的数字信号为 0,2V 对应输出的数字信号为 255。而 AD9708 经外部电路后,输出的电压范围是-5V到+5V,因此在 AD9280 的模拟输入端增加电压衰减电路,使-5V到+5V 之间的

    2024年02月04日
    浏览(50)
  • AD9910模块高速DDS模块、功能性能讲解、开发调试注意事项、代码详解、电子设计大赛DDS

    AD9910是一款内置14 bit DAC的直接数字频率合成器(DDS),支持高达1GSPS的采样速率。AD9910采用高级DDS技术,在不牺牲性能的前提下可极大降低功耗。DDS/DAC组合构成数字可编程的高频模拟输出频率合成器,能够在高达400MHz的频率下生成频率捷变正弦波形。 用户可以访同三个用于控制

    2024年02月16日
    浏览(53)
  • 基于vivado+Verilog FPGA开发 — 基于AD9767高速DAC的DDS信号发生器

    目录  一、功能定义 二、设计输入  1、主模块 2、DDS模块 3、 按键消抖模块 三、功能仿真  四、综合优化 五、布局布线 六、时序仿真 七、板级调试  代码规范:Verilog 代码规范_verilog代码编写规范-CSDN博客 开发流程:FPGA基础知识----第二章 FPGA 开发流程_fpga 一个项目的整个

    2024年03月18日
    浏览(77)
  • 基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(一)

    对工程结构的服役状况进行实时的监测和诊断,及时地发现结构的损伤,评估其安 全性能,预判结构的性能变化趋势与服役期限并提出改进举措,对提高工程结构的使用 效率,保障人民生命财产安全具有极其重要的意义,已经成为工程结构越来越迫切的技 术需求 [2] 。结构

    2024年02月07日
    浏览(56)
  • FPGA输出lvds信号点亮液晶屏

            该方案用于生成RGB信号,通过lvds接口驱动逻辑输出,点亮并驱动BP101WX-206液晶屏幕。 参考:下面为参考文章,内容非常详细。 Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客 http://t.csdn.cn/Zy37p         MMCM模块为时钟模块,负责将系统时钟变频与输出,产

    2024年02月09日
    浏览(51)
  • 用FPGA驱动FT602芯片实现USB3.0UVC 相机彩条视频输出试验,使用同步245模式通信

    FPGA USB3.0 UVC工业相机 本设计用FPGA驱动FT602芯片实现USB3.0UVC 相机彩条视频输出试验,使用同步245模式通信,提供vivado工程源码,用verilog代码生成的彩条视频经过图像三帧缓存至DDR3后读出,经过RGB转YUV送入UVC模块,经FT602芯片的USB3.0接口输出到电脑主机,电脑端用FT602官方的软

    2024年01月25日
    浏览(59)
  • FPGA实现AD9708和AD9280波形收发输出HDMI模拟示波器,串口协议帧控制显示,提供工程源码和技术支持

    AD9708 很简单,8 位分辨率,125MSPS 采样率,输入参考电压3~5V,内置 1.2V 参考电压,8bit数字信号输入,差分电流输出;芯片操作不需要软件配置,给个时钟信号就工作,简单得很,根据官方手册,内部结构如下: SLEEP引脚提供芯片休眠功能,当不需要使用该芯片时可拉高SLEEP以

    2024年02月02日
    浏览(58)
  • 基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(二)板卡总体设计

    2.2 板卡总体设计 本章开发了一款基于 AD7193+RJ45 的多类型传感信号同步调理板卡,如图 2.4 所 示,负责将传感器传来的模拟电信号转化为数字信号,以供数据采集系统采集,实现了 单通道自由切换传感信号类型与同步采集多类型传感信号的功能(包含桥式电路信号、 IEPE 传感

    2024年02月06日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包