双路高速 AD 实验

news2024/11/9 6:12:42

目录

双路高速 AD 实验

1、简介

3PA1030 芯片

2、实验任务

3、程序设计

3.1、hs_dual_ad 模块代码

clk_wiz IP 核 的添加方法

ILA IP 核(集成逻辑分析器:Integrated Logic Analyzer,ILA)

4、硬件设计

4.1、添加.xdc约束文件

5、下载验证


双路高速 AD 实验

        ADC(Analog to Digital Converter 即模数转换器)是大多数系统中必不可少的组成部件,用于将连续的模拟信号转换成离散的数字信号,它们是连接模电电路和数字电路必不可少的桥梁。在很多场合下,ADC的转换速度甚至直接决定了整个系统的运行速度。本章我们将使用双路高速 AD 模块采集外部模拟信号转换成数字信号,并在 ILA 中查看信号波形。

1、简介

          本章我们使用的高速双路 AD 模块是正点原子推出的一款高速双路模数转换模块(ATK_DUAL_HS_AD,高速 AD 转换芯片由恩瑞浦公司生产的,型号是 3PA1030

         ATK_DUAL_HS_AD 模块的硬件结构图如下图所示。

 

        3PA1030 芯片的输入模拟电压转换范围是 0V~2V,所以电压输入端需要先经过电压衰减电路,使输入的-5V~+5V 之间的电压衰减到 0V~2V 之间,然后经过 3PA1030 芯片将模拟电压信号转换成数字信号。

下面我们介绍下这个芯片。

3PA1030 芯片

       3PA1030 是一款恩瑞浦推出的单电压芯片,10 位,50 MSPSMillion Samples Per Second,每秒采样百万次)模数转换器,集成片上采样保持放大器和基准电压源。具有高性能低功耗的特点。

3PA1030 的内部功能框图如下图所示:

        3PA1030 在时钟(CLK)的驱动下工作,3PA1030 内置片内采样保持放大器(SHA),同时采用多级差分流水线架构,保证了 50MSPS 的数据转换速率下全温度范围内无失码;3PA1030 内部集成了基准源,根据系统需要也可以选择外部高精度基准满足系统的要求。

        3PA1030 输出的数据以二进制格式表示,当输入的模拟电压超出量程时,会拉高 OVR 信号;当输入的模拟电压在量程范围内时,OVR 信号为低电平,因此可以通过 OVR 信号来判断输入的模拟电压是否在测量范围内。另外 3PA1030 有一个 OE 信号,当该信号为高电平时 3PA1030 输出呈高阻态,低电平则可以正常输出。

       3PA1030 的时序图如下图所示:

       上图中,S1,S2,S3 分别为三个采样点,可以看到,芯片在时钟的上升沿采样。需要注意的是,3PA1030 芯片的最大转换速度是 50MSPS,即输入的时钟最大频率为 50MHz

       3PA1030 支持输入的模拟电压范围是 0V 至 2V,0V 对应输出的数字信号为 0,2V 对应输出的数字信号为 1023。DA 经外部电路后,输出的电压范围是-5V~+5V,因此在 3PA1030 的模拟输入端增加电压衰减电路,使-5V~+5V 之间的电压转换成 0V 2V 之间。那么实际上对我们用户使用来说,当 3PA1030 的模拟 输入接口连接-5V 电压时,AD 输出的数据为 0;当 3PA1030 的模拟输入接口连接+5V 电压时,AD 输出的数据为 1023

       当 3PA1030 模拟输入端接-5V +5V 之间变化的正弦波电压信号时,其转换后的数据也是成正弦波波形变化,转换波形如下图所示:

       由上图可知,输入的模拟电压范围在-5V 至 5V 之间,按照正弦波波形变化,最终得到的数据也是按照正弦波波形变化。

2、实验任务

       本节实验任务是使用达芬奇 Pro 开发板及双路 AD 扩展模块(ATK_DUAL_HS_AD 模块)实现双路模数的转换,并在 ILA 中查看波形。本实验我们模拟输入源来自信号发生器,一个是正弦波,频率 1Mhz,幅值 9V;另一个是三角波,频率 1Mhz,幅值 5V。两路模拟信号分别接在双路 AD 模块的模拟信输入端。

3、程序设计

       根据本章的实验任务,高速双路 AD 模块同时采集两路外部模拟信号,在模块内部实现模数转换,将转换后的数字信号传给 FPGA 管脚,FPGA 内部逻辑分析仪通过抓取数据将外部的模型信号呈现出来。

       图 28.4.1 是根据本章实验任务画出的系统框图。我们事先准备两路模拟信号源,本实验我们使用信号发生器产生模拟输入源。接到双路 AD 芯片的信号输入端,在双路 AD 内部实现 AD 转换,将转换后的信号送给 FPGA,在这里,FPGA 只需要给 AD 芯片输出驱动时钟信号(AD_CLK)和使能信号(AD_OE)AD 芯片便可完成模拟采集并转换成数字信号。

       高速双路 AD 实验的系统框图如图 28.4.1 所示:

顶层模块的原理图如下图所示:

       本实验我们只用了一个模块(hs_dual_ad),用来产生 AD 芯片所需的驱动时钟和输出使能。同时在模块例化了一个 ILA,用来观察采集到的模拟信号的波形。

3.1、hs_dual_ad 模块代码

hs_dual_ad 模块的代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/17 15:49:04
// Design Name: 
// Module Name: hs_dual_ad
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
//ADC(Analog to Digital Converter 即模数转换器)是大多数系统中必不可少的组成部件,
//用于将连续的模拟信号转换成离散的数字信号,它们是连接模电电路和数字电路必不可少的桥梁。
//在很多场合下,ADC的转换速度甚至直接决定了整个系统的运行速度。
//本章我们将使用双路高速 AD 模块采集外部模拟信号转换成数字信号,并在 ILA 中查看信号波形。
//*********************实验任务:双路高速AD实验****************************
//本节实验任务是使用达芬奇 Pro 开发板及双路 AD 扩展模块(ATK_DUAL_HS_AD 模块)实现双路模数的转换,
//并在 ILA 中查看波形。本实验我们模拟输入源来自信号发生器,一个是正弦波,频率 1Mhz,幅值 9V;
//另一个是三角波,频率 1Mhz,幅值 5V。两路模拟信号分别接在双路 AD 模块的模拟信输入端。


module hs_dual_ad(
     input                sys_clk,      //50Mhz系统时钟(达芬奇Pro开发板)
     //AD0 
     input  [9:0]         ad0_data,     //AD0 数据
     input                ad0_otr,      //输入电压超过量程标志
     output               ad0_clk,      //AD0 采样时钟
     output               ad0_oe,       //AD0 输出使能
     //AD1
     input  [9:0]         ad1_data,     //AD1 数据
     input                ad1_otr,      //输入电压超过量程标志
     output               ad1_clk,      //AD1 采样时钟
     output               ad1_oe        //AD1 输出使能
    );

//wire define
wire            clk_out1;
wire            clk_out2;

//**********************************************************
//**        main  code
//**********************************************************

assign ad0_oe = 1'b0;
assign ad1_oe = 1'b0;
assign ad0_clk = ~clk_out1;
assign ad1_clk = ~clk_out1;

clk_wiz_0  u_clk_wiz_0(
    //clock out ports
    .clk_out1                 (clk_out1),        //output  clk_out1
    //Status and control signals
    .clk_out2                 (clk_out2),        //output  clk_out2
    .reset                    (1'b0),            //input reset
    .locked                   (locked),          //output locked
    //clock in ports
    .clk_in1                  (sys_clk)          //input clk_inl
    );

ila_0  u_ila_0(
    .clk            (clk_out1),      //input wire clk
    .probe0         (ad1_otr),       //input wire [0:0] probe0
    .probe1         (ad0_data),      //input wire [9:0] probe1
    .probe2         (ad0_otr),       //input wire [0:0] probe0
    .probe3         (ad1_data)       //input wire [9:0] probe1  
    );

endmodule

       代码第 53 54 行产生双路 AD 的两个输出使能信号,ad0_oe ad1_oe,请注意,它们是低电平有效,所以我们直接赋值 055 行到 56 行,产生驱动 AD 芯片的时钟,ad0_clk ad1_clk,他们都是由 clk_out1 取反得来,取反其实就是相移 180°。其中 clk_out1 由时钟模块产生,大小是 50M

clk_wiz IP 核 的添加方法

clk_wiz IP 核 的添加方法,可参考:

DDS 信号发生器实验_OliverH-yishuihan的博客-CSDN博客  中的 “3.2、clk_wiz IP 核”。

ILA IP 核(集成逻辑分析器:Integrated Logic Analyzer,ILA)

ILA IP 核 的添加方法,可参考:

DDS 信号发生器实验_OliverH-yishuihan的博客-CSDN博客  中的 “3.3、ILA IP 核(集成逻辑分析器:Integrated Logic Analyzer,ILA)”。

4、硬件设计

        ATK_DUAL_HS_AD 模块电路主要包括扩展口,AD 芯片,电源电路模块和低通滤波器,衰减电路。下面是扩展口电源电路部分。

       由上图可知,双路 AD 模块使用到的管脚连接道路 JP1 上,这些管脚包括十位的数据,时钟以及电源等信号。U2 用于将 5V 电压转成 VCC+2.8V)供 U1 使用,U1 VCC+转成了 VCC-(-2.8V),±2.8V 电压供双电源运放 TPH2501 使用。U3 负责将 5V 电压转成 VCC3.3V)。

       衰减电路原理图如下图所示。

       上下两个电路是一样的,我们以上面的电路为例。上图中输入的模拟信号 IN1V1)经过衰减电路后得到 AD_IN1VO)信号,两个模拟电压信号之间的关系是 VO=VI/5+1,即当 VI=5V 时,VO=2VVI=-5V 时,VO=0V

       ATK_DUAL_HS_AD 模块的实物图如下图所示。

4.1、添加.xdc约束文件

本实验中,各端口信号的管脚分配如下表所示。

对应的 hs_dual_ad.xdc 约束语句,具体如下所示:

######## 时钟 引脚约束 ####################达芬奇Pro#############
create_clock -period 20.000 -name sys_clk [get_ports sys_clk]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN R4} [get_ports sys_clk]
#ad_data0
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN E16} [get_ports {ad0_data[0]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D14} [get_ports {ad0_data[2]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B21} [get_ports {ad0_data[4]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B22} [get_ports {ad0_data[6]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D20} [get_ports {ad0_data[8]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B20} [get_ports ad0_otr]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C18} [get_ports ad0_clk]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D16} [get_ports {ad0_data[1]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN D15} [get_ports {ad0_data[3]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A21} [get_ports {ad0_data[5]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C22} [get_ports {ad0_data[7]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C20} [get_ports {ad0_data[9]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN A20} [get_ports {ad0_oe}]
#ad_data1
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B15} [get_ports {ad1_data[0]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C14} [get_ports {ad1_data[2]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C13} [get_ports {ad1_data[4]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN AB18} [get_ports {ad1_data[6]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN U18} [get_ports {ad1_data[8]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN W17} [get_ports ad1_otr]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN P16} [get_ports ad1_clk]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B16} [get_ports {ad1_data[1]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN C15} [get_ports {ad1_data[3]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN B13} [get_ports {ad1_data[5]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN AA18} [get_ports {ad1_data[7]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN U17} [get_ports {ad1_data[9]}]
set_property -dict {IOSTANDARD LVCMOS33 PACKAGE_PIN V17} [get_ports {ad1_oe}]

5、下载验证

       将高速双路 AD 模块插入达芬奇 Pro 开发板 J3 扩展口,连接时注意扩展口电源引脚方向和开发板电源引脚方向一致,然后将下载器一端连接电脑,另一端与开发板上对应端口连接,最后连接电源线并打开电源开关。 

       达芬奇 Pro 开发板硬件连接实物图如下图所示:

       将工程生成的比特流文件下载到 FPGA 中后, 连接后在 ILA 中观察 ad_data 数据的变化,观察到的波形如下图所示。

 

       由上图可知,输入的 ad_data 数据分别为三角波和正弦波,频率和幅值与信号发生器发的设定相一致,说明双路高速 AD 实验验证成功。

       另外,在这里介绍一下如何将数据设置成波形图显示。首先选中 ILA 波形图中的 ad_data,右键选择 Waveform Style,然后选择 Analog 即可。如果要切换成数据显示的话,同样选中 ad_data,右键选择 Waveform Style,然后选择 Digital 就可以了,如下图所示:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23年软考网络工程师是什么?主要是考什么,有什么用?

网络工程师每年考两次,相比其他的软考考试一年中考的机会又多了一次 网络工程师证书考到后,通过本级考试的合格人员能根据应用部门的要求进行网络系统的规划、设计和网络设备的软硬件安装调试工作,能进行网络系统的运行、维护和管理&#xf…

汽车行业项目管理面临的5个挑战及解决方案

汽车行业正跨越式地迈向新的未来。其目前的发展主要由四大趋势驱动:连接性、自动驾驶汽车、共享出行和电气化。这给汽车企业带来了诸多挑战:竞争加剧,快速发展带来的频繁变化,与软件公司建立伙伴关系,以及其他相关问题…

GIS 功能模块实现

文章目录 1. GIS 模块流程图2. 网页端地图缓存的实现3. GIS 图形操作功能实现1 )地图漫游2 )对象删除3 )选择复制属性查看 GIS 基本功能模块主要是在表现层开发的,是在OpenLayers 开发框架提供的接口上,通过Geo Server…

【计算机网络复习之路】应用层(谢希仁第八版)

专栏:计算机网络复习之路 目录 一、域名系统DNS 1.1 本地域名服务器采用迭代查询 1.2 本地域名服务器采用递归查询 二、文件传送协议FTP 三、远程终端协议TELNET 四、万维网WWW (World Wide Web) 4.1 万维网需要解决的问题 【1】怎样标志分布在整个互联网…

在 Swift 中使用 async let 并发运行后台任务

文章目录 前言长期运行的任务阻塞了UI使用 async/await 在后台执行任务在后台执行多个任务使用 "async let " 下载多个文件结论 前言 Async/await 语法是在 Swift 5.5 引入的,在 WWDC 2021中的 Meet async/await in Swift 对齐进行了介绍。它是编写异步代…

实时日志管理分析解决方案

什么是日志管理 组织网络可能很复杂,由大量互连的系统、应用程序和设备组成。这些组件中的每一个都会生成大量日志数据,捕获有关系统事件、用户活动和网络流量的详细信息。生成的日志数据量庞大,因此难以有效管理和分析。 日志管理是收集、…

使用 DFS 解决排列数字问题并使用 pythontutor 可视化

使用 DFS 解决排列数字问题并使用 pythontutor 可视化 问题描述 给定一个整数 n n n,将数字 1 ∼ n 1∼n 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数…

盘点内核中常见的CPU性能卡点

我们的应用程序都是运行在各种语言的运行时、操作系统内核、以及 CPU 等硬件之上的。大家平时一般都是使用Go、Java等语言进行开发。但这些语言的下面是由运行时、内核、硬件等多层支撑起来的。 我们的程序在运行的时候,很多时候性能卡点可能并不一定是自己的应用代…

Win系统下同时访问公司内网及公网设置

一、修改系统配置 修改系统配置,使公网默认不走VPN路由; 连接VPN,并查看路由表; route print可以看到,多了些路由信息,此时测试公网能否正常访问,如能正常访问,则继续往下。 二、…

入职字节两个月,实在卷不动,还是离职了

对自己收入不满意,就看下自己每天做了什么,把每天记录下来,看下自己的时间都用在哪里了。 对自己的时间分配搞清楚了,就可以着手去改进,如果一直糊涂的过,时间到了报复就来了。 时间管理很简单&#xff0c…

零代码、一键生成、低成本,深兰科技硅基大脑SaaS平台国内首发

在6月20日举行的2023中国(苏州)独角兽企业大会上,深兰科技创始人、董事长陈海波在主旨演讲中宣布,深兰科技推出“深兰科技硅基大脑SaaS平台”,旨在为个人和企业提供更便捷、更全面的大语言模型智能化应用。 AI大模型驱动“智慧涌现”&#xf…

Redis实战篇(一)

Redis实战篇基于哔哩哔哩中黑马程序员的黑马点评项目 一.缓存 1.1 缓存概述 1.什么是缓存 缓存,就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 2.为什么要使用缓存 缓存数据存储于…

性能测试-压测问题分析,生产环境性能压测优化(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 项目背景&#xf…

从0到1精通自动化测试,pytest自动化测试框架,allure2生成html报告(史上最详细)(九)

一、前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。 环境准备: python3.6windows环境pycharmpytest-allure-adaptorallure2.7.0java1.8 二、pytest-allu…

在 Blender 和 3DCoat 中创建风格化的幻想屋

今天云渲染小编给大家带来的是CG艺术家Brian Nguyen 最近的项目“一个风格化的幻想屋”幕后制作,讨论了 Blender 中的建模过程和 3DCoat 中的纹理过程,并详细介绍了如何设置灯光和K动画。 介绍 我是 Brian Nguyen,程式化的 3D 艺术家&#…

阿里云EMAS超级App助力Agmo电动车超级应用程序发布

近日,阿里云宣布与马来西亚本土数字方案专家Agmo控股(Agmo Holdings Berhad,简称Agmo)展开合作,签署谅解备忘录,联手推出马来西亚首个Agmo电动车超级应用程序。此次合作也标志着阿里云在中国以外的市场首次…

电商营销小程序优势有哪些?电商营销小程序功能推荐

随着流量成本越来越高、流量逐渐被平台所垄断,因此转化公域流量至私域成为越来越多企业的选择,对于电商营销而言,电商营销小程序也是一种较为轻便的私域沉淀工具。与传统的电商模式相比,电商营销小程序具有以下几大优势&#xff1…

【嵌入式】MIMXRT685SFVKB 32位微控制器、5CGXFC4C7F27C8N FPGA现场可编程门阵列

MIMXRT685SFVKB i.MX RT600交叉MCU是双核微控制器,设有32位Cortex-M33和Xtensa HiFi4音频DSP CPU。i.MX RT600 MCU是NXP EdgeVerse™边缘计算平台的一部分。Cortex-M33 CPU配有两个硬件协处理器,为一系列复杂算法提供增强性能。 核心处理器:A…

【博客671】prometheus如何选择数据点以及处理counter跳变

prometheus如何选择数据点以及处理counter跳变 1、prometheus如何选择数据点 时间是怎么进来的?范围和即时查询! 您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那…

嵌入式界面神器 littleVGL

​1、littleVGL 介绍 littleVGL 是近几年开始流行的一个小型开源嵌入式 GUI 库,具有界面精美,消耗资源小,可移植度高,响应式布局等特点,全库采用纯 c 语言开发,而且 littleVGL 库的更新速度非常快,随着 littleVGL 的认知度越来越大,官方资料也逐渐丰富起来。 相比 emWin&…