资讯专栏INFORMATION COLUMN

【正点原子FPGA连载】第三十六章双路高速DA实验 -摘自【正点原子】新起点之FPGA开发指南_V2

李文鹏 / 3240人阅读

摘要:本章我们将使用高速芯片实现数模转换,产生正弦波模拟电压信号。实验任务本节实验任务是使用新起点开发板及双路高速扩展模块模块实现数模转换。下载验证将双路高速模块插入新起点开发板的扩展口,连接时注意扩展口电源引脚方向和开发板电源引脚方向一致。

1)实验平台:正点原子新起点V2开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113
2)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html
3)对正点原子FPGA感兴趣的同学可以加群讨论:994244016
4)关注正点原子公众号,获取最新资料更新

第三十六章双路高速DA实验

DAC(Digital to Analog Converter,即数模转换器)是大多数系统中必不可少的组成部件,用于将离散的数字信号转换成连续的模拟信号,它们是连接模电电路和数字电路必不可少的桥梁。在很多场合下, DAC的转换速度甚至直接决定了整个系统的运行速度。本章我们将使用高速DA芯片实现数模转换,产生正弦波模拟电压信号。
本章包括以下几个部分:
3535.1简介
35.2实验任务
35.3硬件设计
35.4程序设计
35.5下载验证
36.1简介
本章我们使用的双路DA模块是正点原子推出的一款双路高速数模转换模块(ATK_DUAL_HS_DA),高速DA转换芯片是由思瑞浦公司生产的3PD5651E芯片。
ATK_HS_AD_DA模块的硬件结构图如下图所示。

图 36.1.1 ATK_DUAL_HS_DA模块硬件结构图
由上可知,3PD5651E芯片输出的是一对差分电流信号,为了防止受到噪声干扰,电路中接入了低通滤波器,然后通过高性能和高带宽的运放电路,实现差分变单端以及幅度调节等功能,使整个电路性能得到了最大限度的提升,最终输出的模拟电压范围是-5V~+5V。
下面来介绍下这款芯片。
3PD5651E是3PEAK公司(思瑞浦微电子科技股份有限公司)生产的DAC系列数模转换器,具有高性能、低功耗的特点。3PD5651E的数模转换位数为10位,最大转换速度为125MSPS(每秒采样百万次,Million Samples per Second)。
3PD5651E的内部功能框图如下图所示:

图 36.1.2 内部功能框图
3PD5651E在时钟(CLOCK)的驱动下工作,内部集成了+1.1V参考电压(+1.10V REF)、运算放大器、电流源(CURRENT SOURCE ARRAY)和锁存器(LATCHES)。两个电流输出端IOUTA和IOUTB为一对差分电流,当输入数据为0(DB9DB0=10’h000)时,IOUTA的输出电流为0,而IOUTB的输出电流达到最大,最大值的大小跟参考电压有关;当输入数据全为高点平(DB9DB0=10’h3ff)时,IOUTA的输出电流达到最大,最大值的大小跟参考电压有关,而IOUTB的输出电流为0。
3PD5651E必须在时钟的驱动下才能把数据写入片内的锁存器中,其触发方式为上升沿触发,3PD5651E的时序图如下图所示:

图 36.1.3 芯片时序图

图 36.1.4 FPGA内部时序
如图 36.1.3中的DBO-DB9和CLOCK是3PD5651E的10位输入数据和为输入时钟,IOUTA和IOUTB为3PD5651E输出的电流信号。由图 36.1.3可知,数据在时钟的上升沿锁存,因此我们可以在时钟的下降沿发送数据,这样使DA芯片在数据的中央采样,保证数据采样的准确性,如图 36.1.4所示。需要注意的是,CLOCK的时钟频率越快,3PD5651E的数模转换速度越快,3PD5651E的时钟频率最快为125Mhz。
IOUTA和IOUTB为3PD5651E输出的一对差分电流信号,通过外部电路低通滤波器与运放电路输出模拟电压信号,电压范围是-5V至+5V之间。当输入数据等于0时,3PD5651E输出的电压值为5V;当输入数据等于10’h3ff时,3PD5651E输出的电压值为-5V。
3PD5651E是一款数字信号转模拟信号的器件,内部没有集成DDS(Direct Digital Synthesizer,直接数字式频率合成器)的功能,但是可以通过控制3PD5651E的输入数据,使其模拟DDS的功能。例如,我们使用3PD5651E输出一个正弦波模拟电压信号,那么我们只需要将3PD5651E的输入数据按照正弦波的波形变化即可,下图为3PD5651E的输入数据和输出电压值按照正弦波变化的波形图。

图 36.1.5 3PD5651E正弦波数据(左)、电压值(右)
由上图可知,数据在0至1023之间按照正弦波的波形变化,最终得到的电压也会按照正弦波波形变化,当输入数据重复按照正弦波的波形数据变化时,那么3PD5651E就可以持续不断的输出正弦波的模拟电压波形。需要注意的是,最终得到的3PD5651E的输出电压变化范围由其外部电路决定的,当输入数据为0时,3PD5651E输出+5V的电压;当输入数据为1023时,3PD5651E输出-5V的电压。
由此可以看出,只要输入的数据控制的得当,3PD5651E可以输出任意波形的模拟电压信号,包括正弦波、方波、锯齿波、三角波等波形。
36.2实验任务
本节实验任务是使用新起点开发板及双路高速DA扩展模块(ATK_DUAL_HS_DA模块)实现数模转换。首先利用FPGA产生正弦波变化的数字信号,经过DA芯片后转换成模拟信号,然后通过示波器观察模拟信号的波形是否按照正弦波波形变化。
36.3硬件设计
ATK_DUAL_HS_DA模块由2个型号为3PD5651E 的DA转换芯片组成。3PD5651E的原理图如下图所示。

图 36.3.1 芯片原理图
由上图可知,3PD5651E输出的一对差分电流信号先经过滤波器,再经过运放电路得到一个单端的模拟电压信号。图中右侧的RP1为滑动变阻器,可以调节输出的电压范围,推荐通过调节滑动变阻器,使输出的电压范围在-5V至+5V之间,从而达到DA转换芯片的最大转换范围。
ATK_DUAL_HS_DA模块的实物图如下图所示。

图 36.3.2 ATK_DUAL_HS_DA模块实物图
本实验中,各端口信号的管脚分配如下表所示。
表格 36.3.1 双路高速DA转换实验管脚分配

36.4程序设计
根据本章的实验任务,FPGA需要连续输出正弦波波形的数据,才能使3PD5651E连续输出正弦波波形的模拟电压,如果通过编写代码使用三角函数公式运算的方式输出正弦波数据,那么程序设计会变得非常复杂。在工程应用中,一般将正弦波波形数据存储在RAM或者ROM中,由于本次实验并不需要写数据到RAM中,因此我们将正弦波波形数据存储在只读的ROM中,直接读取ROM中的数据发送给DA转换芯片即可。
图 36.4.1是根据本章实验任务画出的系统框图。ROM里面事先存储好了正弦波波形的数据,DA数据发送模块从ROM中读取数据,将数据和时钟送到3PD5651E芯片的输入数据端口和输入时钟端口。
双路高速DA实验的系统框图如图 36.4.1所示:

图 36.4.1 双路高速DA系统框图
顶层模块的原理图如下图所示:

图 36.4.2 顶层模块原理图
FPGA顶层模块(hs_dual_da)例化了以下三个模块:DA数据发送模块(da_wave_send)、ROM波形存储模块(rom_1024x10b)和时钟模块(clk_wiz_0)。
DA数据发送模块(da_wave_send):DA数据发送模块输出读ROM地址,将输入的ROM数据发送至DA转换芯片的数据端口。
ROM波形存储模块(rom_1024x10b):ROM波形存储模块由Vivado软件自带的Block Memory Generator IP核实现,其存储的波形数据可以使用波形转存储文件的上位机来生成.coe文件。
顶层模块的代码如下:

1   module hs_dual_da(2       input                 sys_clk     ,  //系统时钟3       input                 sys_rst_n   ,  //系统复位,低电平有效4       //DA芯片接口5       output                da_clk      ,  //DA驱动时钟,最大支持125Mhz时钟6       output    [9:0]       da_data     ,  //输出给DA的数据7   8       //DA芯片接口9       output                da_clk1      ,  //DA驱动时钟,最大支持125Mhz时钟10      output    [9:0]       da_data1        //输出给DA的数据    11  );12  13  //wire define 14  wire      [9:0]    rd_addr;              //ROM读地址15  wire      [9:0]    rd_data;              //ROM读出的数据16  //*****************************************************17  //**                    main code18  //*****************************************************19  20  assign  da_clk1 = da_clk;21  assign  da_data1 = da_data;22  23  pll  u_pll(24      .inclk0 (sys_clk),25      .c0 (clk));26  27  //DA数据发送28  da_wave_send u_da_wave_send(29      .clk         (clk), 30      .rst_n       (sys_rst_n),31      .rd_data     (rd_data),32      .rd_addr     (rd_addr),33      .da_clk      (da_clk),  34      .da_data     (da_data)35      );36  37  //ROM存储波形38  rom_1024x10b  u_rom_1024x10b(39      .address    (rd_addr),40      .clock      (clk),41      .q          (rd_data)42      );43      44  endmodule

在代码的第23至25行例化了时钟模块,倍频出125M时钟给DA芯片采样用。
DA数据发送模块输出的读ROM地址(rd_addr)连接至ROM模块的地址输入端,ROM模块输出的数据(rd_data)连接至DA数据发送模块的数据输入端,从而完成了从ROM中读取数据的功能。
在代码的第38至42行例化了ROM模块,由ROM IP核配置生成。在“高速ADDA试验”中已经讲解过rom的初始化,这里不再讲解。
DA数据发送模块的代码如下:

1   module da_wave_send(2       input                 clk         ,  //时钟3       input                 rst_n       ,  //复位信号,低电平有效4       5       input        [9:0]    rd_data     ,  //ROM读出的数据6       output  reg  [9:0]    rd_addr     ,  //读ROM地址7       //DA芯片接口8       output                da_clk      ,  //DA驱动时钟,最大支持125Mhz时钟9       output       [9:0]    da_data        //输出给DA的数据  10      );11  12  //parameter13  //频率调节控制14  parameter  FREQ_ADJ = 10"d0;  //频率调节,FREQ_ADJ的越大,最终输出的频率越低,范围0~25515  16  //reg define17  reg    [9:0]    freq_cnt  ;  //频率调节计数器18  19  //*****************************************************20  //**                    main code21  //*****************************************************22  23  //数据rd_data是在clk的上升沿更新的,所以DA芯片在clk的下降沿锁存数据是稳定的时刻24  //而DA实际上在da_clk的上升沿锁存数据,所以时钟取反,这样clk的下降沿相当于da_clk的上升沿25  assign  da_clk = clk;       26  assign  da_data = rd_data;   //将读到的ROM数据赋值给DA数据端口27  28  //频率调节计数器29  always @(posedge clk or negedge rst_n) begin30      if(rst_n == 1"b0)31          freq_cnt <= 10"d0;32      else if(freq_cnt == FREQ_ADJ)    33          freq_cnt <= 10"d0;34      else         35          freq_cnt <= freq_cnt + 10"d1;36  end37  38  //读ROM地址39  always @(posedge clk or negedge rst_n) begin40      if(rst_n == 1"b0)41          rd_addr <= 10"d0;42      else begin43          if(freq_cnt == FREQ_ADJ) begin44              rd_addr <= rd_addr + 10"d1;45          end    46      end            47  end48  49  endmodule

在代码的第14行定义了一个参数FREQ_ADJ(频率调节),可以通过控制频率调节参数的大小来控制最终输出正弦波的频率大小,频率调节参数的值越小,正弦波频率越大。频率调节参数调节正弦波频率的方法是通过控制读ROM的速度实现的,频率调节参数越小,freq_cnt计数到频率调节参数值的时间越短,读ROM数据的速度越快,那么正弦波输出频率也就越高;反过来,频率调节参数越大,freq_cnt计数到频率调节参数值的时间越长,读ROM数据的速度越慢,那么正弦波输出频率也就越低。由于freq_cnt计数器的位宽为10位,计数范围是01023,所以频率调节参数FREQ_ADJ支持的调节范围是01023,可通过修改freq_cnt计数器的位宽来修改FREQ_ADJ支持的调节范围。
WaveToMem软件设置ROM深度为1024,倍频系数为1,而输入时钟为125Mhz,那么一个完整的正弦波周期长度为10248ns = 8192ns,当FREQ_ADJ的值为0时,即正弦波的最快输出频率为1s/8192ns(1s = 1000000000ns) ≈ 122.0Khz。当我们把FREQ_ADJ的值设置为5时,一个完整的正弦波周期长度为5120ns(5+1) =49152ns,频率约为20.35KHz。也可以在WaveToMem软件设置中增加倍频系数或者增加AD的驱动时钟来提高正弦波输出频率。
36.5下载验证
将双路高速DA模块插入新起点开发板的P6扩展口,连接时注意扩展口电源引脚方向和开发板电源引脚方向一致。
新起点开发板硬件连接实物图如下图所示:

图 36.5.1 新起点开发板硬件连接实物图
接下来我们将下载器一端连接电脑,另一端与开发板上对应端口连接,连接电源线并打开电源开关,将工程生成的sof文件下载到新起点开发板中后,然后使用示波器测量DA输出通道的波形。首先将示波器带夹子的一端连接到开发板的GND位置(可使用杜邦线连接至开发板上的任一的GND管脚),然后将另一端探针插入双路高速DA模块的DA通道中间的金属圆圈内(注意将红色的保护套拿掉),如图 36.5.2所示。

图 36.5.2 DA模拟电压测量孔位
此时观察示波器可以看到正弦波的波形,如果观察不到波形,可查看示波器设置是否正确,可以尝试按下示波器的“AUTO”,再次观察示波器波形。示波器的显示界面如下图所示:

图 36.5.3 示波器显示界面

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123010.html

相关文章

  • 全国计算机等级考试二级Python(2021年9月)备考笔记 第十二天

    摘要:本题目的考察点在于函数的格式输出规则。方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。参数改变随机数生成器的种子。返回一个至区间包含和的整数。 ...

    Codeing_ls 评论0 收藏0
  • 全方位了解超宽带信号高速采集记录回放系统

    摘要:超宽带信号高速采集记录回放系统特点超宽带信号采集记录存储与回放,用于实验数据事后分析及外场环境重建。超宽带信号高速采集记录存储回放系统基于高性能及协议,实现标准化模块化可扩展可重构的超宽带信号高速连续采集记录回放产生平台。 超宽带高速记录回放系统 超宽带信号高速采集记录存储回放系统主要用于对...

    Jaden 评论0 收藏0
  • 全方面的了解超宽带信号高速采集记录回放系统

    摘要:超宽带信号高速采集记录回放系统特点超宽带信号采集记录存储与回放,用于实验数据事后分析及外场环境重建。超宽带信号高速采集记录存储回放系统基于高性能及协议,实现标准化模块化可扩展可重构的超宽带信号高速连续采集记录回放产生平台。 超宽带高速记录回放系统 超宽带信号高速采集记录存储回放系统主要用于对...

    nanchen2251 评论0 收藏0
  • 服务器主机怎么用-如何使用服务器主机?

    摘要:如何使用服务器主机首先需要打开电脑,在控制面板上添加管理工具中的所有功能,进行安装,下载并安装花生壳进行端口映射就可以实现外网也访问网站了。注意事项花生壳端口映射最好选定未占用的端口防止冲突。如何使用服务器主机?首先需要打开电脑,在控制面板上添加Web管理工具中的所有功能,进行安装,下载并安装花生壳进行端口映射就可以实现外网也访问网站了。具体步骤如下:1、右键点击我们的开始菜单,选择控制面板...

    Karrdy 评论0 收藏0
  • 服务器如何做空间主机-服务器怎么做成网站空间?

    摘要:服务器怎么做成网站空间感谢悟空问答,服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。服务器怎么做成网站空间?感谢悟空问答,服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。服务器的构成包括处理器、硬盘、内存、系统总线等,和通...

    gclove 评论0 收藏0
  • JS基础入门篇(三十六)—面向对象( 三 )

    摘要:所以不会报错函数声明可以先调用再声明函数声明解析时,不会放到前面。所以会报错报错多个方法之间直接书写不需要隔开我会说话解析其中方法和方法之间并没有用逗给开。 1.class class es6 中 为 关键字用来声明 一个 类 1.只能通过new调用 2.不存在变量提升 3.多个方法之间直接书写,不需要,隔开 4.类的方法是直接定义在类的原型上的 5.定义在类中的方法不可枚举 6.Ob...

    acrazing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<