FPGA控制ADS1256的ADC采集(一)

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

手册分析

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

  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) 通信时序
在这里插入图片描述
在这里插入图片描述

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

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

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

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

(4)数据格式
在这里插入图片描述
上图给出了对应电压的数据格式,当你的输入超过上限呈现为7FFFFFh,0V呈现为000000h,负的电压一样,不过采取补码的方式存储。

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

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

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

(7) 指令表
在这里插入图片描述
同样的我们也只需要使用到上述指令(SELFCAL别看错了,不是SYSGAL指令)。下面来一一介绍

  1. RDATA: Read Data
    在这里插入图片描述
    读指令的操作很简单,注意指令下达完毕后等待t6的时间间隔即可。MSB在前。
  2. RREG: Read from Registers
    在这里插入图片描述
    读寄存器指令分为两个字节,第一个字节高四位表示指令,第四位表示读的地址,第二个字节表示从该地址开始读几个寄存器的数据的个数 -1 (eg:只读一个,那么这个值就设置为0x00即可),地址自动递增。
  3. WREG: Write to Register在这里插入图片描述
    写寄存器和读寄存器一样,也是两个字节,操作方式一摸一样,第一个字节指令加地址,第二个字节为长度-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。

结语

这篇文章已经讲了很多了,再多就不礼貌了。代码工程老规矩放到第二篇来讲。希望大家能够熟读手册后再来进行代码编写,否则有可能会变得不幸。。。

  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
FPGA驱动ADS1256下载是指将FPGA芯片与ADS1256模数转换器相连接,并且通过下载相应驱动程序实现FPGAADS1256的通信和数据传输。下面是关于FPGA驱动ADS1256下载的详细解释: 在FPGA设计中,我们通常需要与各种外设进行连接和通信,以满足特定应用的需求。ADS1256是一种高精度的24位模数转换器,适用于需要高精度数据采集的应用场景。而FPGA是一种可编程的逻辑芯片,具有灵活性和可定制性,适用于各种应用场景。 为了驱动ADS1256,我们首先需要了解ADS1256的通信协议和寄存器配置,以及FPGA的时序要求和数据传输方式。然后,我们可以编写相应的驱动程序,实现FPGAADS1256的通信。 对于FPGA驱动ADS1256下载,一般有以下几个步骤: 1. 在FPGA开发平台上创建一个新的工程或项目,选择适当的FPGA芯片类型。 2. 在工程中添加ADS1256的驱动程序文件,包括ADS1256的通信协议和寄存器配置。 3. 配置FPGA芯片的引脚分配,将FPGA芯片的IO口与ADS1256的相应引脚相连。 4. 根据ADS1256的通信协议和寄存器配置,编写FPGA的驱动程序,实现与ADS1256的通信和数据传输。 5. 在FPGA开发平台上生成比特流文件(Bitstream)。 6. 将生成的比特流文件下载到FPGA芯片中,完成FPGAADS1256的驱动下载。 需要注意的是,FPGA驱动ADS1256下载需要根据具体的FPGA芯片和ADS1256的型号进行相关配置和设置。同时,还需要确保FPGAADS1256的电源和地线连接正确,以保证正常的工作和通信。 总的来说,FPGA驱动ADS1256下载是通过编写相应的驱动程序实现FPGAADS1256的通信和数据传输。这样可以利用FPGA的灵活性和可定制性,实现高精度的数据采集和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值