首页 > 其他分享 >FPGA驱动AD9240实现AD转换

FPGA驱动AD9240实现AD转换

时间:2023-12-28 19:57:21浏览次数:38  
标签:采样 转换 AD FPGA clk AD9240 时钟

目录

一、前言

在做项目中,经常会用到AD转换模块。前段时间做毕业设计的时候需要用到FPGA驱动AD9240模块实现模拟数据的采集和转换,尽管相对来说AD9240算比较简单的驱动模块,但是也想记录下分析和设计过程。

二、时序原理

首先通过芯片手册可以看到AD9240是14位,最高速率可达10Mbps的模数转换器件。然后就是重要的时序转换图:

image-20230604205753260

可以看出:

在采样时钟第一个周期的上升沿芯片对当前模拟输入进行采样,然后在采样时钟第四个周期的下降沿完成模拟数值的转换和输出,这意味着整个输出的转换采样值滞后采样时钟4个周期。如果需要将模拟值与转换值相对应,这个延迟是需要注意的。

image-20230604210336555

根据时序参数要求,可以知道:

1、最小的Clock Period为100ns,符合最大的10M转换速率

2、由于高速分辨率的A/D对输入采样时钟的质量很敏感,AD9240的输入时钟占空比应该满足45%~55%,对于时钟低于10M的情况,可以偏离这个范围,但必须满足t${CH}$和t$$的要求。

https://gitee.com/lgziyan/cloudimages/raw/master/img/image-20230604211515378.png

一般对于AD9240的电路设计如上,通过模拟信号单独输入到VINA中,然后CLK由FPGA提供,BIT1~BIT14为转换输出的14为数值。OTR为溢出标志位,代表输入数据是否低于或超过转换范围,一般不需要这个接口信号。

三、代码设计

由此可以设计FPGA驱动代码如下:

module AD9240
(
    input clk,
    input n_rst,
    input adc_otr,//if(数据超过范围):1 else:0
    input adc_clk,
    input [13:0] AD_data_in,
    
    output reg [15:0] AD_data_out
    
);

reg [1:0] adc_clk_delayed;

always @(posedge clk or negedge n_rst ) //将采样时钟进行打拍
begin
       if(n_rst==1'b0)
            adc_clk_delayed <=2'b00;
       else
            adc_clk_delayed <={adc_clk_delayed[0],adc_clk};
end

wire fallingedge_adc_clk=(adc_clk_delayed==2'b10);

always @(posedge clk or negedge n_rst) 
begin
    if(n_rst==1'b0)
        AD_data_out <=16'd0;
    else if(fallingedge_adc_clk==1'b1)
        AD_data_out <={2'b00,AD_data_in};//补齐为16bit,以便ram的存储及usb通信
    else
        AD_data_out <=AD_data_out;
end

endmodule

值得注意的是:

1、输入adc_clk要满足时序参数要求

2、由于一般存储单位不为14bit,所以再得到转换数据后将其不全为16bit得到AD_data_out

四、结果验证

根据芯片手册的数据格式输出可知:

image-20230604212320113

由于这里的参考电压为2.5V,则其输入范围为-2.5V~2.5V,实际电压V的转换式子为:
$V=(ADDATA-8192)/8192*2.5$
最后通过输入不同幅值频率的正弦波,方波等进行验证可判断采样正确与否。

标签:采样,转换,AD,FPGA,clk,AD9240,时钟
From: https://www.cnblogs.com/lgziyan/p/17933436.html

相关文章

  • ARCHICAD 27:塑造未来的建筑设计神话
    ARCHICAD27是一款全球领先的建筑设计软件,它为建筑师提供了一个全面、高效且直观的设计环境,帮助他们实现创新和高效的建筑设计。点击获取ARCHICAD27 首先,ARCHICAD27具备强大的三维建模功能,使得建筑师可以以更加直观和精确的方式进行建筑设计。通过使用三维模型,用户可以更好......
  • Unity3D Shader在GPU上是如何执行的详解
    Unity3D是一款广泛应用于游戏开发的跨平台开发引擎,它提供了丰富的功能和工具来帮助开发者创建高质量的游戏。其中一个重要的功能就是Shader,它可以用来控制对象的渲染效果。在Unity3D中,Shader是在GPU上执行的,那么它是如何工作的呢?本文将详细解释Unity3DShader在GPU上的执行过程,并......
  • Unity3D Shader Compute Shader基于GPU的并发计算详解
    在游戏开发中,计算密集型的任务通常需要耗费大量的CPU资源,这可能导致游戏性能下降,影响玩家的游戏体验。为了解决这个问题,Unity3D引入了ShaderComputeShader技术,它使用GPU进行并发计算,将一些计算密集型任务从CPU转移到GPU上执行,以提高游戏的性能和效率。本文将详细介绍Unity3DSha......
  • xxl_job系列---【快速独立部署xxl-job,集xxl-job-admin和executor为一体】
    1.背景我们项目在用xxl-job的时候,只是用到了简单的定时调度http接口功能,所以,为了减少业务工程的侵入性,我决定把executor(执行器)集成到xxl-job-admin中,这样,我们只用部署一个jar包就实现了一个定时调度服务。我们只用在业务工程中写好任务,通过http对外提供服务,xxl-job使用GLUE(Jav......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、广播变量BroadcastVariables示例1、介绍2、广播变量示例3、验证三、BroadcastState与BroadcastVariable区别本文简单的介绍了flink中关于广播变量的简单使用示例。一、maven依赖为避免篇幅过长,所有基础依赖均在第一篇文章中列出,具......
  • Linux shell编程学习笔记36:read命令
     *更新日志 *2023-12-181.根据[美]威廉·肖特斯(Willian shotts)所著《Linux命令行大全(第2版)》            更新了-e、-i、-r选项的说明           2.更新了2.8的实例,增加了gif动图           3.补充......
  • uniapp实战 -- 个人信息维护(含选择图片 uni.chooseMedia,上传文件 uni.uploadFile,获取
    效果预览相关代码页面–我的src\pages\my\my.vue<!--个人资料--><viewclass="profile":style="{paddingTop:safeAreaInsets!.top+'px'}"><!--情况1:已登录--><viewclass="overview"v-if="mem......
  • 在Adobe Acrobat上如何做PDF文档签名
    AdobeAcrobat如何做PDF文档签名?PDF文档签名是指对PDF文档进行基于证书的数字签名,类似于传统的手写签名,可标识签名文档的人员。与手写签名不同,数字签名难以伪造,因为其包含签名者唯一的加密信息。为PDF文档进行基于证书的数字签名,不仅能保护文档不被篡改,同时验证文档签名者真实身份,......
  • ceph应用-RBD、radosgw对象存储、cephfs
    块存储(RBD)用于K8S、openstack、linux中直接挂载。类似使用iscsi块存储一样。块存储使用案例#1.创建存储池#语法:cephosdpoolcreate<存储池名><PG>[<PGP>][{replicated|erasure}]# PG:指定存储池的pg数量# PGP:指定存储池pgp数量,一般与pg相同。不填写默认就是和PG......
  • 「题解」Codeforces 1427G One Billion Shades of Grey
    感谢127的指导/ll\(|h_u-h_v|=\max(0,h_u-h_v)+\max(0,h_v-h_u)\),那么可以把它看成这样的问题:\[\min\{\sum_{(u,v)}\max(0,h_u-h_v+w_{u,v})c_{u,v}\}\]对偶一下,问题就变为:如果两个格子相邻就互相连容量为\(c_{u,v}=1\),费用为\(w_{u,v}=0\)的边,跑最大费用循环流。为了限......