FPGA控制ADS1256的ADC采集(一)

这篇具有很好参考价值的文章主要介绍了FPGA控制ADS1256的ADC采集(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在做一个项目,需要使用到高精度的ADC采集,由于项目对采集速率并没有太高的要求,所以就将成本尽可能地花在采样精度上,最后选择了TI的ADS1256这款比较热门的24位高精度AD芯片,调完后来写篇文章记录一下。

手册分析

老规矩,在介绍如何用FPGA控制其进行AD转换之前先来聊聊它的数据手册。
(1) 框图以及引脚介绍
FPGA控制ADS1256的ADC采集(一)
如上所示为ADS1256的整体框图,从左到右为整片的测量顺序,模拟输入经过选择器后到Buffer,然后是PGA,再是模数转换单元,最后是通信和时钟接口,一目了然,下面介绍一下该芯片的引脚。
FPGA控制ADS1256的ADC采集(一)
(左图为ADS1255,使用方式和ADS1256一摸一样,只是片内资源少了许多,改一下寄存器配置即可,如若不需要太多的测量通道的话可以使用,节省成本。)
FPGA控制ADS1256的ADC采集(一)
对于上述的引脚说明:

  1. 电源部分不再多说,区分好数字地和模拟地即可。再是参考电压的选择,本人选择的是VrefP接2.5V,N端接模拟地,即设置参考电压为2.5V。
  2. 随后是9个模拟输入口,一般来说AINCOM端口直接接到AGND上去,作为单端输入使用的N端口(这个后面细说)。其他模拟输入口则悬空处理,等待模拟量输入。
  3. 然后介绍SYNC/PDWN引脚,该引脚用来同步,从本文将要介绍的测量方式来说,当我们开始测量的时候选择拉低这个引脚一段时间进行同步(具体多久手册上有说明,实际上是一个很宽的范围),当同步结束后即可读取测量的数据,同步的方式也可以通过SPI发送指令开始同步,这样第一节省资源,第二简单方便,所以本设计不采用引脚同步,将其接到高电平,选择指令同步方式。
  4. DRDY接口,一个很重要的接口,ADS1256内部转换有相当多的时序,如果靠用户一一去计数进行操作会相当麻烦,而且无法保证数据准确,DRDY接口表示当前数据可读,也就是说每当我们进行测量操作后,只有当DRDY引脚拉低后才能进行数据读取,此外,当我们对芯片进行复位、初始化后也需要等待DRDY引脚拉低,表明复位或者初始化完成,之后才能进一步通信,进行测量。
  5. 最后就是四个SPI接口了,相信大家都很熟悉,MISO即DOUT,ADS1256传数据给FPGA的端口;MOSI即DIN,FPGA传数据给ADS1256的端口,CS选通,SCK时钟信号。

(2) 通信时序
FPGA控制ADS1256的ADC采集(一)
FPGA控制ADS1256的ADC采集(一)

ADS1256的SPI通信和大多数的SPI芯片一样,CS选中之后即可开始通信,下降沿的时候发送和接收数据(所以对于FPGA而言,下降沿的时候把数据读进,但是在发送数据的时候上升沿将数据准备好,那么下降沿的时候发送出去即可,这个应该好理解)需要注意的是通信的时序,这边挑几个重要的进行讲解:

  1. 首先就是t1,SCK的周期,从上图中我们可以看出SCK时钟周期既有上限也有下限,所以需要挑一个合适的中间值。由上可见,tCLKIN为输入时钟源的周期,时钟源为一个7.68MHz的石英晶振,所以一个周期大约为0.13us,tDATA表示设定的采样速率,预计的采样速率为1000Hz,所以采样周期为1ms,这样一来我们所设置的SCK周期只需要在4 × 0.13 = 0.52us到10 × 1ms = 10ms之间即可。我们选择10us的SCK周期,即5us高电平,5us低电平即可。
  2. 第二讲一下t6,它表示你给如一个读操作的指令,到数据输出的一个间隔,可以理解为读指令和数据输出的一个等待间隔,最小为50 × 0.13 = 6.5us,所以这里我们设定为20us。
  3. 第三讲一下t3和t10,表示CS变化到SCK变化的时间间隔,这里我们也设置为5us。
  4. 第四,相当重要的一个时间段,t11,表示当前指令结束到下一个指令开始的时间间隔。从上图中我们看出不同的指令所需要的时间周期也不同。我们在实操的过程中必须严格按照手册中所述的时间间隔进行操作,否则大概率是得不到正确结果的(血的教训,本人调了好久这块芯片,一开始由于度手册不仔细数据一直出错,后来还是得认认真真细读手册,最后才出结果)。
  5. 最后提醒一下,上表中没有提到两个CS周期之间CS需要拉高的时间间隔,但是我们在操作的过程中最好留一下,所以我在每一个指令输出的过程中都给了CS一个5us的拉高时间,之后才拉低进入通信,这个在后面看我代码的时候注意一下即可。

好了,讲了这么多,大家一定也发现了,上面介绍的5us也好,20us也罢,都是5us的倍数,所以我们只需要在程序中定义一个5us的计数器,再对结果进行计数即可得到对应的延时时间。

(3) 通道选择
FPGA控制ADS1256的ADC采集(一)
由上图可见我们可以选择任意两个通道作为P、N段的输入,实际上ADS1256在工作的时候就是测量的AINP-AINN的电压,如果你的硬件条件只需要单端测量,后面对于寄存器的配置时将N段配置为AINCOM(接地)即可。
(4)其他特殊功能
ADS1256的功能相当强大,如果从头到尾全部讲完第一篇幅太长不合适,第二大部分都用不到浪费大家时间,所以一下只列出重要的几个讲解。

  1. 开启Buffer,ADS1256可以配置为高输入阻抗的状态,通过开启Buffer将会呈现出一个约80M的输入阻抗,但同样是有代价的,开启后所能测量的电压范围将会变小,具体测量上限约为AVDD-2.0V。本次设计中未开启。
    FPGA控制ADS1256的ADC采集(一)
  2. PGA设置,即内部增益放大器。如若你所测量的信号幅值很小,可以开启PGA对你所测的电压进行放大,当然,放大后的电压不可超过上限 2 × Vref,放大倍数可控。
    FPGA控制ADS1256的ADC采集(一)

好啦,就讲这么多,如果你需要更多的功能实现,详情可以阅读手册,或者评论区和我交流。下面介绍本文的重头戏,测量时序。

(3)测量时序
首先在介绍时序之前我想先来说一下ADS1256的测量模式,根据手册上说,总共有四种测量模式,而本次设计则选用最常用的一种测量方式“Using the Input Multiplexer”来进行AD转换。测量时序如下所示:
FPGA控制ADS1256的ADC采集(一)
由上图可见当DRDY拉低表示数据可读之后,主控向其连续发送四个指令后即可读出数据,很简单的操作流程,但是大家需要注意的是每一个指令都有属于自己的周期,指令和指令之间不是连续发送的,每当一个指令周期结束后,需要拉高CS结束一个指令周期,然后再拉低开启下一个指令周期,本设计中我给的每一个CS高电平间隔为5us,以保证满足上述t11的要求。此外,当最后一个RDATA指令发出后,到数据读出还有一个时间间隔t6,这也是我们所需要考虑的,本设计中给定为20us。

(4)数据格式
FPGA控制ADS1256的ADC采集(一)
上图给出了对应电压的数据格式,当你的输入超过上限呈现为7FFFFFh,0V呈现为000000h,负的电压一样,不过采取补码的方式存储。

(5)校准
每一次测量之前都建议大家对ADS1256进行校准,本设计在上电后进行一次复位,一次初始化,一次校准,之后开始一直测量。而复位后、初始化后、校准后都需要等待DRDY信号拉低表示完毕,测量也是等待DRDY拉低表明数据可读。

(6)寄存器介绍
FPGA控制ADS1256的ADC采集(一)
寄存器只需要掌握前面四个即可,IO寄存器控制D0-D3端口,没用到,后两个存储对应的滤波分频数,可以尝试的去读一下,更多功能本人也没深究过。

  1. STATUS寄存器
    FPGA控制ADS1256的ADC采集(一)
    高四位固定,第四位设置数据为MSB还是LSB,上电后默认为MSB这个我们不需要去更改;ACAL表示是否开启子校准,开启后每次更改PGA倍数、采样率和BUFFER是否开启后都会进行一次自动校准;BUFEN选择是否开启Buffer,DRDY只读,状态和DRDY引脚一致。
  2. MUX寄存器
    FPGA控制ADS1256的ADC采集(一)
    高四位控制AINP的端口,低四位控制AINN的端口输入,最终测的电压就是AINP-AINN。
  3. AD CON寄存器
    FPGA控制ADS1256的ADC采集(一)
    低三位表示控制的PGA倍数(放大倍数),第七位只读,剩下四位控制时钟输出以及电流检测,我们没用到,保持默认即可。
  4. DRATE寄存器
    FPGA控制ADS1256的ADC采集(一)
    采样速率设定,这个不用多介绍,本设计设置为10100001,每秒1000次。(可见该芯片最高也只能到30k)

(7) 指令表
FPGA控制ADS1256的ADC采集(一)
同样的我们也只需要使用到上述指令(SELFCAL别看错了,不是SYSGAL指令)。下面来一一介绍

  1. RDATA: Read Data
    FPGA控制ADS1256的ADC采集(一)
    读指令的操作很简单,注意指令下达完毕后等待t6的时间间隔即可。MSB在前。
  2. RREG: Read from Registers
    FPGA控制ADS1256的ADC采集(一)
    读寄存器指令分为两个字节,第一个字节高四位表示指令,第四位表示读的地址,第二个字节表示从该地址开始读几个寄存器的数据的个数 -1 (eg:只读一个,那么这个值就设置为0x00即可),地址自动递增。
  3. WREG: Write to RegisterFPGA控制ADS1256的ADC采集(一)
    写寄存器和读寄存器一样,也是两个字节,操作方式一摸一样,第一个字节指令加地址,第二个字节为长度-1,地址递增。
  4. SELFCAL: Self Offset and Gain Calibration
    这个指令用来进行校准。
  5. SYNC: Synchronize the A/D Conversion + WAKEUP: Complete Synchronization or Exit Standby Mode
    这两个指令要一起用(当然是在不同的指令周期),SYNC之后下一个指令周期要跟一个WAKEUP指令,用来进行同步操作。
  6. RESET
    这个指令我没用到,因为本设计直接采用RESET引脚来复位,圈出来只是告诉大家有时用到复位的操作,以及注意一下复位的时长为5us。

结语

这篇文章已经讲了很多了,再多就不礼貌了。代码工程老规矩放到第二篇来讲。希望大家能够熟读手册后再来进行代码编写,否则有可能会变得不幸。。。文章来源地址https://www.toymoban.com/news/detail-431465.html

到了这里,关于FPGA控制ADS1256的ADC采集(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(一)

    3.1 系统需求分析 3.1.1 系统功能设计要求 本硬件处理平台的主要任务有三类,一是数据采集,包括采集惯性测量元件 的输出信号,接收外部系统校正信息,如 GPS 信息等;二是数据处理与计算,包 括惯性测量元件的误差补偿、初始对准、导航参数解算和在线校正滤波等;三是

    2024年02月01日
    浏览(67)
  • FPGA中的ADC采集方法详解

    ADC(模数转换器)是一种关键的硬件组件,用于将模拟信号转换为数字信号。在FPGA(现场可编程门阵列)设计中,ADC的使用非常常见,可以实现对外部模拟信号的准确采集和处理。本文将详细介绍FPGA中的ADC采集方法,并提供相应的源代码示例。 ADC基础知识 ADC是一种将连续变

    2024年02月05日
    浏览(40)
  • 基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(二)模拟电路设计

    如图 4.1 所示是系统硬件系统的信号框图,数字信号处理板上的主要核心是 两个处理芯片,即 FPGA 和 DSP ,其中 FPGA 主要作用是做 DSP 和外围接口的 桥梁及数据预处理, DSP 做为数据解算核心。 FPGA 通过各种的数据总线接收外部设备传输过来的数据,并进行打包处理 以及其他

    2024年02月02日
    浏览(53)
  • 基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(三)系统性能测试

    系统性能分析与测试 本章将首先对系统电路的噪声和温漂进行分析,而后对采集系统的性能进行 测试,并对测试数据进行分析。 5.1 高精度 AD 转换电路噪声和温漂分析 5.1.1 电阻噪声与温漂 1 、电阻的噪声 电阻是一种噪声源,其严重程度取决于电阻值、温度、施加的电压和电

    2024年02月01日
    浏览(91)
  • ADC采集方法 - 基于LVDS接口的FPGA实现

    ADC采集方法 - 基于LVDS接口的FPGA实现 在数字信号处理和通信系统中,模数转换器(ADC)是最基本、最重要的电子器件之一。一种广泛应用的ADC采集方案是使用低电压差分信号(LVDS)接口。这种接口可以提供较高的信噪比和抗干扰性能,在数据传输距离远的情况下也表现出色。

    2024年02月03日
    浏览(38)
  • 基于FPGA的ADC7768数据采集系统设计

    基于FPGA的ADC7768数据采集系统设计 随着科技的不断发展,数字信号处理在各个领域中的应用越来越广泛。而模拟信号的采集和转换成数字信号是数字处理的第一步。本文将介绍基于FPGA的ADC7768数据采集系统设计,该系统能够高效、准确地采集模拟信号并将其转换为数字信号。

    2024年02月11日
    浏览(45)
  • 基于ZYNQ FPGA的8路ADC数据采集与存储实现

    基于ZYNQ FPGA的8路ADC数据采集与存储实现 概述: 在工程设计和科学研究中,数据采集与存储是一个重要的任务。为了满足高速、高精度和大容量的数据采集需求,本文将介绍如何基于ZYNQ FPGA平台实现8路ADC数据采集与存储。通过合理的硬件设计和软件开发,我们可以实现快速而

    2024年02月11日
    浏览(46)
  • FPGA学习笔记:数据采集传输系统设计(三):AD采集驱动ADC128S052

    ADC128S052为 12 位、8通道 的模数转换器 (ADC),转换速度高达 10 MSPS,采用SPI串行通信。 (1)工作时序图 应注意DIN中配置好的通道地址ADD在下一次采样时才生效 。 从时序图中可得出,ADC芯片在上升沿时采样,读取DIN数据;DOUT在下降沿时改变数据。 (2)串行时序图 片选信号在

    2024年02月07日
    浏览(55)
  • FPGA对高速采集ADC(8路并行数据)进行峰值检测,并记录峰值位置

              本模块主要是ADC(2Gsps)采集信号波形进行峰值检测,主要是检测单音信号或者脉冲信号中的所有峰峰值信号(对噪声大信号适用性不是很好),并记录峰值点的位置。         1. 峰值检测8路并行数据端口 2.连续3点检测峰值,被例化8次,                

    2024年02月16日
    浏览(71)
  • FPGA实现SPI协议基于ADC128S022进行模拟信号采集

    使用vivado联合modelsim实现SPI协议基于ADC128S022进行模拟信号连续采集。 SPI是串行外设接口,是一种同步/全双工/主从式接口。通常由四根信号线构成: CS_N :片选信号,主从式接口,可以有多个从机,用片选信号进行从机选择; SCLK :串行时钟线,由主机提供给从机; MISO :主机

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包