赞
踩
最近在做一个项目,需要使用到高精度的ADC采集,由于项目对采集速率并没有太高的要求,所以就将成本尽可能地花在采样精度上,最后选择了TI的ADS1256这款比较热门的24位高精度AD芯片,调完后来写篇文章记录一下。
老规矩,在介绍如何用FPGA控制其进行AD转换之前先来聊聊它的数据手册。
(1) 框图以及引脚介绍
如上所示为ADS1256的整体框图,从左到右为整片的测量顺序,模拟输入经过选择器后到Buffer,然后是PGA,再是模数转换单元,最后是通信和时钟接口,一目了然,下面介绍一下该芯片的引脚。
(左图为ADS1255,使用方式和ADS1256一摸一样,只是片内资源少了许多,改一下寄存器配置即可,如若不需要太多的测量通道的话可以使用,节省成本。)
对于上述的引脚说明:
(2) 通信时序
ADS1256的SPI通信和大多数的SPI芯片一样,CS选中之后即可开始通信,下降沿的时候发送和接收数据(所以对于FPGA而言,下降沿的时候把数据读进,但是在发送数据的时候上升沿将数据准备好,那么下降沿的时候发送出去即可,这个应该好理解)需要注意的是通信的时序,这边挑几个重要的进行讲解:
好了,讲了这么多,大家一定也发现了,上面介绍的5us也好,20us也罢,都是5us的倍数,所以我们只需要在程序中定义一个5us的计数器,再对结果进行计数即可得到对应的延时时间。
(3) 通道选择
由上图可见我们可以选择任意两个通道作为P、N段的输入,实际上ADS1256在工作的时候就是测量的AINP-AINN的电压,如果你的硬件条件只需要单端测量,后面对于寄存器的配置时将N段配置为AINCOM(接地)即可。
(4)其他特殊功能
ADS1256的功能相当强大,如果从头到尾全部讲完第一篇幅太长不合适,第二大部分都用不到浪费大家时间,所以一下只列出重要的几个讲解。
好啦,就讲这么多,如果你需要更多的功能实现,详情可以阅读手册,或者评论区和我交流。下面介绍本文的重头戏,测量时序。
(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端口,没用到,后两个存储对应的滤波分频数,可以尝试的去读一下,更多功能本人也没深究过。
(7) 指令表
同样的我们也只需要使用到上述指令(SELFCAL别看错了,不是SYSGAL指令)。下面来一一介绍
这篇文章已经讲了很多了,再多就不礼貌了。代码工程老规矩放到第二篇来讲。希望大家能够熟读手册后再来进行代码编写,否则有可能会变得不幸。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。