基于 FPGA 的便携式 DDS 信号发生器与示波器

项目来源:2019年第三届全国大学生FPGA创新设计竞赛

一.设计概述

1.1 设计目的

利用赛灵思公司 A7 系列板卡 EG01、AD9226 模块和 DAC904 模块,制作一个便携式、宽频带的示波器和 DDS 信号源,两者二合一,既能产生信号波形又可以实现示波器的基本功能。

1.2 应用领域

DDS 信号源可以产生生活中用到的一些基本波形,输出的信号具 有频谱纯度高、频率分辨率高和频率转换速度快等优点,该系统可以 广泛应用于通信、雷达等领域。示波器主要功能即“示波”,把肉眼看不到的信号显示在屏幕上,并测量出信号的各种参数,如频率,幅 值,占空比,频谱等。本次设计把 DDS 信号源以及示波器结合起来, 既可以实现它们的基本功能,也具有便携式等特点。

1.3 适用范围

(1)DDS 信号源可以产生任意频率的方波、正弦波、三角波等基本波形。

(2)示波器具有改变时基设置采样频率的功能。

(3)可以实现实时显示波形的功能。

(4)具有对波形频率、占空比、幅值分析的功能。

(5)具有 FFT 频谱分析的功能。

(6)显示波形可以左右上下移动。

1.4 设计实物

二.示波器与 DDS 信号源设计

2.1 系统介绍

DDS 系统其主要元件有相位累加器、波形存储器、数模转换器、低通滤波器。其中DDS关键部分就是相位累加器,外部时钟控制相位 累加器读取数据的地址值,通过查表,把地址直接转换成为所需信号波形的幅度数字,再经由数模转换器把信号波形幅度的数字序列进一步转化为模拟电压,最后传送到低通滤波器。经过滤波器处理,将数 模转换器中不理想的阶梯状波形转化为平滑的所需波形。合成信号的 正弦波、方波、三角波等波形通过特殊算法处理实现。

示波器系统由 ADC 采样信号处理模块、FFT 频谱计算模块、测频模块、测峰峰值模块、VGA 显示模块组成。外部模拟信号输入 ADC 采 样模块,转化为数字信号进入 FPGA 系统。数字信号引出三路分别给 FFT 模块、测频模块、测峰峰值模块进行参数测量。引出一路写进一片双口 RAM 中,暂存波形数据,VGA 模块从双口 RAM 中读出波形数据。FFT 模块计算出频谱,频谱数据写 入一片双口 RAM 中,VGA 模块读出 频谱数据。频率和峰峰值参数传给 VGA 显示模块。最后 VGA 显示模块 把数据传给显示器显示。

2.2 各模块介绍

2.2.1.AD 采样模块

我们采用 AD9226,AD9226 是一款 12 位,最高采样率为 65MHz 的高速 ADC。

在本设计中,我们从 FPGA 开放板引出一路 50MHz 的时钟 驱动 AD9226,作为 AD9226 的采样时钟,即采样率为 50MHz。

2.2.2.FFT 频谱计算模块

FFT(快速傅里叶变换)其本质就是 DFT,只不过可以快速的计 算出 DFT 结果,要弄懂 FFT,必须先弄懂 DFT,DFT(Discrete Fourier Transform)即离散傅里叶变换。

DFT 的公式:

对应于本设计,x(n)为经 ADC 转换后得到的序列, X(k)为对应的频谱 序列,若 ADC 采样率为图片,序列 x(n)长度为N ,即采集了 N 个数据点, 则 X(k)对应的频率为k *图片/ N , X (0)对应频率为 0,即直流分量,频率 分辨率为f =图片/ N 。公式中的x(n)可以为复信号,实际当中x(n)都是 实信号,即虚部为 0,此时公式可以展开为:

在计算机中可以这样展开:

Magnitude 即 X(k)的幅值,Amplitude 为对频率点的幅值大小, 这样便得到了各个频率点的幅度,即幅度谱。

本设计我们在 Vivado 开发环境下使用 Xilinx 提供的 FFT IP 核 进行 FFT 运算。下面简单介绍一下这个 IP 核。这个IP核有两个输入接口:S_AXIS_DATA和S_AXIS_CONFIG,一个 输出接口 M_AXIS_DATA,一个时钟 aclk 和一些相关标志信号。S_AXIS_DATA 为输入数据接口,控制数据输入的状态,S_AXIS_CONFIG 为配置接口,M_AXIS_DATA 数据输出接口。控制好接口和相关标志信 号,写 IP 的驱动程序,IP 便可以开始工作,计算出 FFT 频谱。驱动 程序见附录。

要用好 FFT IP 核还必须了解它的时序图,如下:

如图所示,输入和输出数据都在 AXI 总线上以流水线的的形式一帧一帧地输入输出。本设计我们设计输入序列的长度为 2048,即输 入一帧数据为 2048 个,2048 个数依次输入,每过一个时钟周期更新 一次总线上的数据。输出数据一帧也为 2048 个,每个数据依次输出, 每过一个时钟周期更新一次总线上的数据。对应于 FFT,输入序列为 x(n),输出序列为 X(k),长度均为 2048。IP核一帧一帧地运算,当 m_axis_data_tvalid 为 1 期间,输出数据有效,每隔一定时间输出一帧有效数据。

2.2.3.测频模块

本设计采用等精度测量法测量输入信号频率。等精度测量法,主导思想是利用一个阀门信号保证测量时间是被测频率的整数倍,对被测频率和基准频率进行计数,利用计数值求出被测频率,由于测量误差只和基准频率和闸门时间有关,与被测频率无关,故称为等精度测频。时序图如下。

预置闸门到实际闸门由一个 D 触发器实现。设标准时钟频率为图片,被 测频率为图片,如时序图所示,之间关系为:

否则

2.2.4.测峰峰值模块

我们通过检测输入 ADC 数据的最大值和最小值,测峰峰值,每隔一段时间测一次,输出一次。代码截图:

2.2.5.VGA 显示模块

VGA 显示原理:

首先 VGA 就是如今很多显示器上连接主机的信号传输接口。有三排每排 5 个共 15 个引脚。如下图所示:

VGA 颜色显示是 RGB 来控制的,最高 24 位(即 RGB 各 8 位)、16 位、12位等,本次实验采用的是 12 位的 RGB。

显示器的扫描方式是逐行扫描,即扫描像素点从屏幕最左上角开始,从左向右,从上到下,每行结束时,用行同步信号进行同步;当扫描完屏幕上所有的点,形成一帧,用场同步信号进行场同步,并使 扫描点重新回到屏幕的左上方,同时进行场消隐,开始下一帧。具体的行同步时序与场同步时序如下图所示:

分辨率不同其同步、显示前沿、显示后沿、有效数据、场扫描周 期、行扫描周期等都有不同,本次实验采用的是1024*800 的分辨率,各个分辨率以上参数具体如下:

波形显示模块核心代码:

边框、坐标轴、方块的显示实现,核心代码如下图:

字符显示实现:

每一个字符都为 8*16,在给定区域进行显示,具体代码如下:

对需要显示的频率数字进行调用,代码如下:

2.2.6 相位累加器模块

相位累加器可以外部时钟信号的控制下产生读取数据的地址值,然后通过查表法,把地址直接转化为所需信号波形的数字幅度序列。

2.2.7 波形存储器模块

波形存储器也被称之为正弦查询表,它的主要功能是在任何一个参考时钟周期内,都可以把从上一级传输过来的相位二进制码信息作为地址,读取查询表中的相应地址对应的幅值二进制码信息。

当收到上一级相位累加器传输过来的相位二进制码信息时,将其作为地址来读取内部对应的预先存好的存储内容即标准信号的幅值二进制码信息,并将这个幅值信息的 D 位二进制码传送给下一级。

2.2.8 低通滤波器模块

低通滤波器(Low Pass Filter,LPF)主要是将上级(D/A 转换 器)输出的阶梯形的正弦信号进行平滑处理,去除混叠的、无用的杂 散分量,使输出信号更为纯净,波形变得更为平滑。

完成情况及性能参数

3.1.DDS 信号源测试

此次设计的 DDS 信号源系统可以无失真稳定产生波形频率范围为 1HZ 至 2MHZ。(频率分辨率为 1HZ),1HZ、2KHZ、1MHZ 的正弦、方波、三角波如下图所示:

3.2.示波器部分

示波器的时基变换,波形的上下左右移动因不方便截图,在视频中均有演示。

四、总结

4.1 主要创新点

本次设计完成了一个基于 FPGA 的 DDS 信号源与示波器的混合系统,其主要创新点如下:

1.该系统为便携式 DDS 信号源与示波器的混合系统,将 DDS 信号源与示波器整合在一起,更高效率的利用了 FPGA 片上资源。

2.采用等精度测量法对频率进行测量,其频率测量误差小于0.01 %。

3.自主设计 FPGA 拓展板,使系统的体积更小,整个系统更加稳定,便携性大大提高。

4.可以实时显示波形与频谱。

4.2 可扩展之处

由于开发时间有限,因此目前的系统还有许多可改进和扩展之处:

1.此次设计的示波器功能可以增加一路或多路数据通道,可以实现多个波形的显示。

2.优化波形显示系统,可以对滤波算法进行进一步改进,从而提高波形平滑率。

3.优化 FPGA 算法,提升片上资源利用率,比如在字符显示模块,占用了较多的寄存器资源,因而后期会针对性的完善这个模块,提高资源利用率。

4.DDS 信号源暂时只能产生频率、幅值可调的正弦、方波、三角波等,后期会完善其功能,增加产生调频、调幅波功能。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发、培训经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,FPGA技术江湖打造最纯净最专业的技术交流学习平台。

【微信交流群】

现微信交流群已建立08群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式,更多精彩内容等你发现

基于 FPGA 的便携式 DDS 信号发生器与示波器相关推荐

  1. 基于FPGA的简易DDS信号发生器的设计与验证

    基于FPGA的简易DDS信号发生器的设计与验证 一,理论介绍 补充:举例理解 二,代码实现 1,实验目标 2,MATLAB代码 3,verilog代码及实现思路 一,理论介绍 DDS 是直接数字式频率 ...

  2. 基于FPGA的简易DDS信号发生器的设计(一)

    写这篇文章的本意不是为了探讨AD9767怎么使用,因为9767的控制实在是太简单了,准备好数据直接输出即可,和网上大多数的并行DA输出基本上一模一样,更麻烦的反而是硬件方面.发文的原因是最近一位很细心 ...

  3. 基于FPGA的简易 DDS 信号发生器的设计

    文章目录 前言 一.pandas是什么? 二.ROM 内波形数据写入 1.MIF 2.DDS 模块参考代码 波形仿真 前言 DDS 是直接数字式频率合成器(Direct Digital Synthes ...

  4. 基于FPGA的双通道DDS信号发生器

    硬件:FPGA开发板 ,AD9767双通道DA转换器 软件:ISE,Matlab,Modelsim 最终效果:输出方波,正弦波,三角波以及锯齿波,可以通过按键改变输出波形的频率,频率在1Hz-1MHz ...

  5. 基于FPGA实现的DDS双通道信号发生器

    文章目录 前言 一.DDS是什么? 二.设计步骤 1.DDS的基本结构 1.相位累加器 2.相位调制器 3.ROM数据表的生成 2.对各结构的代码实现 1.DDS顶层代码` 2.DDS主要发生模块 3 ...

  6. FPGA之简易DDS信号发生器设计

    文章目录 前言 一.DDS信号发生器 1.DDS是什么 2.DDS工作原理 二.模块代码 1.调用rom模块储存波形图 2.按键控制模块 2.按键消抖模块 3.DDS生成模块 4.顶层模块 5.RTL ...

  7. 基于STC89C52RC芯片 高频DDS信号发生器AD9851信号源方波正弦波系统设计

    [01]设计大致思路 一开始是使用按键进行频率输出数值的增加或者减少,后改进成使用EC11调节输出数值,使数值的输出更加顺滑流畅. [02]参考资料 链接:https://pan.baidu.com/ ...

  8. BGD 通信15-1 150206102 王嘉良 DDS信号发生器

    DDS信号发生器的设计 DDS(DiFeet Digital Frequency Synthesis)即直接数字式频率合成,是从相位概念出发直接合成所需波形的一种频率合成技术.与传统信号源所采用的用模 ...

  9. Verilog 代码编写 DDS信号发生器(幅频相可调正弦波、方波、三角波、锯齿波)纯VIVADO编写仿真

    DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短.分辨率高和相位连续性好等优点.较容易实现频率.相位以及幅度的数控调 ...

最新文章

  1. 算法面试,如何在100 亿URL中判断某个URL是否存在
  2. C++ Vector 使用心得
  3. 京东抢购机器人_戴森、科沃斯、SKG...超多大牌低价秒杀!京东电器等你来
  4. Struts2框架学习(二) Action
  5. 现在论文用手写还是用计算机写,毕业论文计算机手写数字识别技术完整版.docx...
  6. 自动化刷EOS资金盘(类Fomo3D)游戏
  7. android 自定义地图标注,Android中调用高德地图的自定义标记视图
  8. python查找列表中的重复值_在列表列表中查找重复项
  9. 笔记本开机循环显示:this product is covered by one or more of the following patents 解决办法
  10. 单片机学习入门一 学习概述
  11. 利用python将微信聊天记录生成词云
  12. 苹果ANCS协议分析
  13. Qt 开发使用VSCode
  14. C++:【练习题】Project-1 The robots in a warehouse
  15. 从MUD到MMO——虚拟世界发展简史以及未来可能性的杂谈
  16. Java 8 Lambda表达式官方入门教程(包括Lambda表达式介绍和语法)
  17. Arrays.copyOf()方法用法
  18. 美定制礼品电商Cafepress上市
  19. “forEach” is not a function
  20. Ubuntu1804----使用mysql

热门文章

  1. 数据分析报告1:某电商店铺印度销售情况分析
  2. 永不止步,南卡新品Runner Pro3上市,刷新最高配置
  3. 电脑上下载mysql是不是很慢_为什么电脑下载速度很慢?
  4. 世上最有趣的无敌电脑9.0
  5. manjaro 折腾总结
  6. UVA12563: Jin Ge Jin Qu hao(类01背包)
  7. 【牛客网】星际密码(斐波那契数列)
  8. python双样本t检验_SPSS详细操作 两个样本均数比较的t检验
  9. 2018巅峰极客writeup(Misc)
  10. 小米3com.android.phone是什么,小米3NFC是什么意思以及NFC功能怎么设置使用