最近项目中使用到了 AD7685 ADC 芯片,其支持最基本的 SPI 接口,但与日常我们操作的大多数标准的 SPI 又不完全相同,故在此记录下完整的调试过程,并与大家分享。文后会附上测试代码,若整个调试过程中存在疑问或个人理解的错误,恳请大家在评论区指正,如果大家有自己的调试经验,也欢迎在评论区分享。
首先分享一下 AD7685 的官网,大家可以在此找到关于该芯片的所有资料(复制链接到浏览器打开):
https://www.analog.com/cn/products/ad7685.html
官网也能够下载到 AD7685 的芯片手册,在调试开始前需要将该手册准备好,在实际调试过程中需要参考到手册中的一系列参数。
在调试开始前我们先来简单了解一下这个芯片:
AD7685 是一款16位、电荷再分配、逐次逼近型模数转换器 (ADC),采用2.3V 至 5.5V 单电源 (VDD) 供电。该器件内置一个低功耗、高速、16位无失码采样ADC、一个内部转换时钟和一个多功能串行接口端口。还集成了一个低噪声、宽带宽、短孔径延迟的采样保持电路。在CNV上升沿,该器件对 IN+ 与 IN- 之间的模拟输入电压差进行采样,范围从0V 至 REF。基准电压 (REF) 由外部提供,最高可设置为电源电压,其功耗和吞吐量呈线性变化关系。
AD7685 有以下特性:
-
16位分辨率、无失码
-
吞吐速率:250 kSPS
-
积分非线性(INL):典型值±0.6 LSB,最大值±2 LSB(FSR的±0.003%)
-
信纳比(SINAD):93.5 dB(20 kHz时)
-
总谐波失真(THD):-110 dB(20 kHz时)
-
伪差分模拟输入范围:0 V至 VREF(VREF最高为VDD)
-
无流水线延迟
-
单电源工作:2.3 V至5.5 V,逻辑接口电压:1.8 V至5 V
-
串行接口:SPI®/QSPI™/MICROWIRE™/DSP兼容
-
以菊花链形式连接多个ADC、忙闲指示功能
-
功耗
1.4 μW (2.5 V/100 SPS)
1.35 mW (2.5 V/100 kSPS)、4 mW (5 V/100 kSPS) -
待机电流:1 nA
由于 SPI 最为普遍,所以大多数情况下我们都会使用 SPI 来进行采集,并且其分辨率为 16 位,意味着我们可以将 SPI 的数据长度设置为 16 位,通过 1 次数据交换就能获取到完整的采样数据。同时其吞吐速率为 250kSPS, 这就代表最快的采样间隔为 4 us。
有了以上要点,我们就得到了最基本的软件采样逻辑:
使用 SPI 接口,配置为 16 位数据长度,通过 1 次数据交换获取到采样值,两次采样的间隔需要大于 4 us。
接着我们来看采样的时序部分,此处需要注意,由于 AD7685 本身支持多种 SPI 操作方式,如 3线无BUSY,3线有BUSY,4线无