一款适合入门的 Delta-sigma (ΔΣ) ADC 芯片 —— TI ADS1115
前言
说 ADS1115 适合作为 ΔΣ ADC 的入门,主要源于以下几个方面:
- 创客界两个大V Adafruit、Seeedstudio 为它在树莓派上的使用写过教程,见 [1]、[2]。
- 入选了 TI High-performance / Precision ADCs 系列,虽然是在左下角垫底的,见下图 1。
- TI 在 2012 年发布了它的 AEQ-100 车规版,普通版发布时间应该更早,可见生命周期很长。
- 价格亲民,立创商城上的单价在 5 元左右,树莓派 和 Arduino 的模组也不贵。
- Datasheet 更新过多次,里面较为详细的介绍了 ΔΣ ADC 的特点和典型应用,详见 [3]。
今天我们就来介绍这款 ADC,文中素材主要来自 Datasheet(见 [3]),所以又是一期解读 spec。
ADS1115 概述
ADS1115 是一个 ΔΣ ADC(Delta-sigma ADC),芯片内部还包含输入端 MUX、PGA、基准参考电压、I2C 总线接口 和 比较器,框图如下:
理论分辨率是 16 bit,采样率(Data Rate)从 8 SPS 到 860 SPS (Samples per second),这个 SPS 指的是 I2C 总线上数据输出的速率。由于 ADS1115 的位数不算高,速率不算快,所以在 图1 里面是左下角垫底的。
有效分辨率 ENOB (Effective number of bits 或 Effective resolution)小于等于 16 bit,与数据速率、动态范围/基准参考电压等有关。从下图可以看到最差的情况,发生在最高速率输出(860 SPS)、并且动态范围/基准参考电压最小(±0.256V)的时候,为 13.8 bit:
ADS1115 支持单端输入(Single-ended)和差分输入(Differential),单端输入只用了一半的动态范围(FSR),差分输入用到了全部动态范围(± FSR)。
差分指的是 AINP 与 AINN 之间的相对差异,可正可负,但绝对值必须在 GND 与 VDD 之间,也就是不能为负电压,我在下图中做了标注:
数据输出是按照二进制补码格式提供 16 bit 数据。达到动态范围的正满量程(+FSR)输出二进制代码 7FFFh,负满量程(–FSR)输出二进制代码 8000h:
以上就是 ADS1115 的基本情况。
Delta-sigma (ΔΣ) ADC 的特点
Delta-sigma (ΔΣ) ADC 基于过采样原理(Oversampling),将输入信号以较高的调制器频率(fMOD)进行采样,随后经过数字滤波和抽取,最后以较低的速率输出转换后数据(Data Rate)。
调制器频率(fMOD)与输出数据速率(Data Rate)之间的比率称为过采样率系数 (OSR,Oversampling Ratio)。
引用 Datasheet 原文片段如下:
Delta-sigma (ΔΣ) analog-to-digital converters (ADCs) are based on the principle of oversampling. The input signal of a ΔΣ ADC is sampled at a high frequency (modulator frequency) and subsequently filtered and decimated in the digital domain to yield a conversion result at the respective output data rate. The ratio between modulator frequency and output data rate is called oversampling ratio (OSR).
By increasing the OSR, and thus reducing the output data rate, the noise performance of the ADC can be optimized. In other words, the input- referred noise drops when reducing the output data rate because more samples of the internal modulator are averaged to yield one conversion result. Increasing the gain also reduces the input-referred noise, which is particularly useful when measuring low-level signals.
The frequency at which the input signal is sampled is called the sampling frequency or the modulator frequency (fMOD). The ADS111x has a 1-MHz internal oscillator that is further divided by a factor of 4 to generate fMOD at 250 kHz.
这个调制器频率(fMOD)是 ΔΣ ADC 的核心。对于 ADS1115 来说,它始终固定为 250 kHz,不受输出速率配置的影响,但肯定比输出速率要高出很多倍。
ADI 在其 ΔΣ ADC 教程中有一张经典的图,描述了调制器(ΔΣ MOD)、数字滤波器(Digital Filter)、数据编码(DEC)、输出数据速率(ODR,Output Data Rate)之间的关系,并且绘制了输入信号(In-Band Signal)与量化噪声(Quantization Noise)的频谱情况,我觉得不错,供你参考如下:
简而言之,ΔΣ ADC 因为高频 fMOD ,实现 Oversampling,所以能带来额外的高带宽,用于噪声的整形和滤波。
Datasheet 中用频谱图示描述了 ΔΣ ADC 的优势:
对于噪声(Unwanted Signal),经过 fMOD 采样后,混叠到奈奎斯特第一象限(fMOD / 2),再经过 Output Data Rate 会影响输出信号。
此时,如果在前面加上外部的抗混叠滤波器(External Anti-aliasing Filter)的话,就比较容易将这种噪声滤除,又因为过采样的高带宽,这种抗混叠滤波器有平缓的衰减即可,因此比较容易设计。
关于 ΔΣ ADC、混叠、过采样的话题,前面几期也讲过,有兴趣可以翻阅。
典型电路
Datasheet 展示了一个测负载电流的典型电路,其中有 Shunt 电阻(将电流转换成电压)、运放(OPA333)、ADS1115,还有一些滤波及分压器件:
几个看点是:
- VCM(模拟公共端)连接到 AINN(负极输入),VCM 设置为 VDD 的 1/2,即 2.5V;
- AINP 可以比 AINN 大,也可以比 AINN 小,所以是差分输入,对应电流的双向流动;
- Shunt 电阻的阻值要合理,使得有比较合适的动态范围(FSR 为 ±0.256V );
- 阻容器件的设计,影响到输入阻抗,和前文提到的外部抗混叠滤波器(External Anti-aliasing Filter);
我觉得像这种结合了很多部件的电路设计,非常考验功底,这就要求我们多看、多读 Datasheet 及其典型电路,你说是吧。
DIY 上手模组
我正好有个 ADS1115 模组,与树莓派适配的,美其名约 ADC HAT(Hardware Attached on Top),可以用于上手:
上面还有一个 NTC 温度传感器,将跳线帽连接到 AIN0,按照教程 [1] 或 [2] 可以读到数据,关键步骤是配置好树莓派的 I2C 总线接口。
当然,NTC 需要从电压信号反推到电阻,再从电阻反推出真实温度。
另外,我看树莓派 I2C 总线的速率本身不是太高,据说在 100KHz,SPI 会更高一点 [5]。但树莓派对于高频的外部中断处理能力应该比较弱,可能要在 Kernel 层面进行开发(如 DMA、Fast Interrupt 等)。如果让树莓派连接高速 ADC,可能要利用带有 USB 或 Ethernet 的 ADC 模组,因为这两种通信方式在树莓派上更方便一点。
总之,ADS1115 的速率不算高,性价比合适,所以作为树莓派或 Arduino 的上手模组是非常不错的。
参考资料
- https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/
- https://wiki.seeedstudio.com/4-Channel_16-Bit_ADC_for_Raspberry_Pi-ADS1115/
- https://www.ti.com/product/ADS1115
- https://www.analog.com/en/resources/technical-articles/behind-the-sigma-delta-adc-topology.html
- https://raspberrypi.stackexchange.com/questions/108896/what-is-rpis-i2c-maximum-speed
欢迎关注我的微信公众号“疯狂的运放”
,及时收到最新的推文。