差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
上一修订版 两侧同时换到之后的修订记录
波形信号发生器设计 [2018/10/23 10:04]
anran [实验原理]
波形信号发生器设计 [2019/08/09 15:30]
gongyu
行 1: 行 1:
-=====波形信号发生器设计=====+### 波形信号发生器设计 
 ----- -----
-====实验任务====+ 
 +####实验任务
  
   * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成波形信号发生器设计并观察调试结果   * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成波形信号发生器设计并观察调试结果
-  * 要求:通过底板上的旋转编码器控制串行DAC芯片DAC081S101基于DDS技术产生波形可选、频率可调的常见波形信号。 +  * 要求:通过底板上的旋转编码器控制串行[[DAC]]芯片DAC081S101基于[[DDS]]技术产生波形可选、频率可调的常见波形信号。 
-  * 解析:FPGA驱动旋转编码器得到操作信息,通过逻辑控制波形和频率寄存器,设计DDS模块根据波形和频率寄存器控制波形数据的输出,波形数据通过串行DAC驱动模块传送到底板的DAC芯片进行转换,得到波形信号输出。+  * 解析:[[FPGA]]驱动旋转编码器得到操作信息,通过逻辑控制波形和频率寄存器,设计[[DDS]]模块根据波形和频率寄存器控制波形数据的输出,波形数据通过串行DAC驱动模块传送到底板的[[DAC]]芯片进行转换,得到波形信号输出。
  
 ====实验目的==== ====实验目的====
  
-前面章节我们学习了旋转编码器的工作原理及驱动方法,本实验主要学习DDS技术的原理及实现,IP核rom模块的例化使用,串行DAC芯片DAC081S101的驱动设计。 +前面章节我们学习了旋转编码器的工作原理及驱动方法,本实验主要学习[[DDS]]技术的原理及实现,IP核rom模块的例化使用,串行[[DAC]]芯片DAC081S101的驱动设计。 
-  * 学习数模转换器DAC的相关知识 +  * 学习数模转换器[[DAC]]的相关知识 
-  * 串行(SPI接口)DAC芯片DAC081S101的驱动设计 +  * 串行([[SPI]]接口)[[DAC]]芯片DAC081S101的驱动设计 
-  * 学习DDS技术的原理及实现+  * 学习[[DDS]]技术的原理及实现
   * 完成波形信号发生器设计实现   * 完成波形信号发生器设计实现
  
行 35: 行 37:
 ===DAC及DDS介绍=== ===DAC及DDS介绍===
  
-上一节我们学习了ADC的相关知识,DAC与ADC功能相反,DAC是数字模拟转换器(英语:Digital to analog converter,英文缩写:DAC)是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备。在很多数字系统中(例如计算机),信号以数字方式存储和传输,而数字模拟转换器可以将这样的信号转换为模拟信号,从而使得它们能够被外界(人或其他非数字系统)识别。+上一节我们学习了[[ADC]]的相关知识,[[DAC]][[ADC]]功能相反,DAC是数字模拟转换器(英语:Digital to analog converter,英文缩写:DAC)是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备。在很多数字系统中(例如计算机),信号以数字方式存储和传输,而数字模拟转换器可以将这样的信号转换为模拟信号,从而使得它们能够被外界(人或其他非数字系统)识别。
  
 {{:​8-DAC模型.png?​600|DAC模型}} {{:​8-DAC模型.png?​600|DAC模型}}
  
-上图两个都是8位DAC模型,转换精度为 2的8次方等于256,即将Vref分成256份,DAC转换输出模拟电压最小步进为Vref / 256,模拟电压 Vout = N * Vref / 256 。+上图两个都是8位[[DAC]]模型,转换精度为 2的8次方等于256,即将Vref分成256份,DAC转换输出模拟电压最小步进为Vref / 256,模拟电压 Vout = N * Vref / 256 。
   * 并行DAC与数字电路接口包含一根clk和8根data管脚,clk为芯片时钟管脚,data为芯片数据管脚,每个clk周期从data管脚输出8bit的数据,完成一次数模转换,所以clk频率等于转换率。   * 并行DAC与数字电路接口包含一根clk和8根data管脚,clk为芯片时钟管脚,data为芯片数据管脚,每个clk周期从data管脚输出8bit的数据,完成一次数模转换,所以clk频率等于转换率。
   * 串行DAC(以DAC081S101为例)与数字电路接口为三根线(sync,clk,din),兼容三线SPI总线,sync为帧同步管脚,clk为芯片时钟管脚,din为芯片数据管脚,当DAC帧同步信号拉低后每个clk周期从din发送1bit的数据,但是根据DAC081S101的时序,需要16个clk完成一次DA转换,所以clk频率至少等于采样率的16倍。 ​   * 串行DAC(以DAC081S101为例)与数字电路接口为三根线(sync,clk,din),兼容三线SPI总线,sync为帧同步管脚,clk为芯片时钟管脚,din为芯片数据管脚,当DAC帧同步信号拉低后每个clk周期从din发送1bit的数据,但是根据DAC081S101的时序,需要16个clk完成一次DA转换,所以clk频率至少等于采样率的16倍。 ​
  
-DDS是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写。与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。DDS是一种全数字化的频率合成器,由相位累加器、波形ROM、D/​A转换器和低通滤波器构成。时钟频率给定后,输出信号的频率取决于频率控制字,频率分辨率取决于累加器位数,相位分辨率取决于ROM的地址线位数,幅度量化噪声取决于ROM的数据位字长和D/​A转换器位数。+[[DDS]]是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写。与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。DDS是一种全数字化的频率合成器,由相位累加器、波形[[ROM]]、D/​A转换器和低通滤波器构成。时钟频率给定后,输出信号的频率取决于频率控制字,频率分辨率取决于累加器位数,相位分辨率取决于ROM的地址线位数,幅度量化噪声取决于ROM的数据位字长和D/​A转换器位数。
  
 {{:​8-DDS框图.png?​800|DDS框图}} {{:​8-DDS框图.png?​800|DDS框图}}
行 53: 行 55:
 {{:​8-DAC模块电路.png?​800|DAC模块电路}} {{:​8-DAC模块电路.png?​800|DAC模块电路}}
  
-如DAC模块电路所示,FPGA直接连接DAC081S101芯片的控制端,ADC有6个管脚,2脚VCC为VCC和Vref功能复用,即VCC = Vref。DAC后端是运放电路LMV721,运放模块为电压跟随电路,再往后端射频端子输出。+[[DAC]]模块电路所示,[[FPGA]]直接连接DAC081S101芯片的控制端,[[ADC]]有6个管脚,2脚VCC为VCC和Vref功能复用,即VCC = Vref。[[DAC]]后端是运放电路LMV721,运放模块为电压跟随电路,再往后端射频端子输出。
  
 ===DAC模块驱动设计=== ===DAC模块驱动设计===
行 133: 行 135:
 ===DDS设计实现=== ===DDS设计实现===
  
-{{:​8-波表数据示意图.png?​800|波表数据示意图}}+{{:​8-波表数据示意图.png?​600|波表数据示意图}}
  
 如上图所示,以8位DAC为例,将一个周期的正弦波分割成256份,得到256个相位波形量化数据,设计一个存储器,宽度为8,深度为256,将256个相位波形量化数据放入存储器中,我们就得到了一个正弦波波表。我们可以通过例化rom的IP核实现波表的设计,具体的操作如下: 如上图所示,以8位DAC为例,将一个周期的正弦波分割成256份,得到256个相位波形量化数据,设计一个存储器,宽度为8,深度为256,将256个相位波形量化数据放入存储器中,我们就得到了一个正弦波波表。我们可以通过例化rom的IP核实现波表的设计,具体的操作如下:
行 151: 行 153:
 第三步更改配置模式,因为例化了rom的IP核,需要初始化数据,所以需要更改配置模式。打开Assignments菜单下的Device选项,点击Device and Pin Opetions,找到Configuration → Configuration mode,下拉列表中选择最后一项,点击OK保存。 第三步更改配置模式,因为例化了rom的IP核,需要初始化数据,所以需要更改配置模式。打开Assignments菜单下的Device选项,点击Device and Pin Opetions,找到Configuration → Configuration mode,下拉列表中选择最后一项,点击OK保存。
  
-{{:​8-配置模式.png?​800|设置FPGA配置模式}}+{{:​8-配置模式.png?​600|设置FPGA配置模式}}
  
 打开rom核中的Verilog文件,端口声明如下: 打开rom核中的Verilog文件,端口声明如下:
行 163: 行 165:
 其中clock为存储器时钟,address为存储器地址,q对应address地址中的数据输出,到这里我们的正弦波表就创建好了。 其中clock为存储器时钟,address为存储器地址,q对应address地址中的数据输出,到这里我们的正弦波表就创建好了。
  
-{{:​8-并行DAC应用框图.png?​400|并行DAC应用框图}}+{{:​8-并行DAC应用框图.png?​500|并行DAC应用框图}}
  
 如果我们有上图电路的硬件,当FPGA按照时钟的节拍产生波形数据,就可以得到对应的模拟输出了,我们来看一个简单的DDS产生锯齿波例子: 如果我们有上图电路的硬件,当FPGA按照时钟的节拍产生波形数据,就可以得到对应的模拟输出了,我们来看一个简单的DDS产生锯齿波例子:
行 319: 行 321:
 ====实验步骤==== ====实验步骤====
   - 双击打开Quartus Prime工具软件;   - 双击打开Quartus Prime工具软件;
-  - 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); +  - 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,[[EDA]]工具选择); 
-  - 新建文件:File → New → Verilog HDL File,键入设计代码并保存;+  - 新建文件:File → New → [[Verilog]] HDL File,键入设计代码并保存;
   - 设计综合:双击Tasks窗口页面下的Analysis & Synthesis对代码进行综合;   - 设计综合:双击Tasks窗口页面下的Analysis & Synthesis对代码进行综合;
   - 管脚约束:Assignments → Assignment Editor,根据项目需求分配管脚;   - 管脚约束:Assignments → Assignment Editor,根据项目需求分配管脚;
行 330: 行 332:
 ====实验现象==== ====实验现象====
  
-将设计加载到FPGA中,使用示波器观察底板DAC射频端子信号输出,按动旋转编码器观察不同的波形输出,转动旋转编码器观察频率的变化。+将设计加载到[[FPGA]]中,使用示波器观察底板[[DAC]]射频端子信号输出,按动旋转编码器观察不同的波形输出,转动旋转编码器观察频率的变化。
  
-{{:​8-波形输出.png?​800|默认输出}}+{{:​8-波形输出.png?​600|默认输出}}
  
 {{:​8-正弦波输出.png?​500|正弦波输出}} {{:​8-锯齿波输出.png?​500|锯齿波输出}} {{:​8-正弦波输出.png?​500|正弦波输出}} {{:​8-锯齿波输出.png?​500|锯齿波输出}}
 {{:​8-三角波输出.png?​500|三角波输出}} {{:​8-方波输出.png?​500|方波输出}} {{:​8-三角波输出.png?​500|三角波输出}} {{:​8-方波输出.png?​500|方波输出}}