ADS1115 外设底层详解:寄存器配置、工作模式与 I2C 通信时序
1.ADS1115 芯片简介
ADS1115 是德州仪器(TI)推出的一款高精度、低功耗、16 位模数转换器(ADC)。它集成了多个功能,适合各种模拟信号采集和处理应用,如传感器接口、电压监测、便携设备等。ADS1115 通常通过 I²C 接口与微控制器连接,电路中包括电源引脚(VDD、GND),SCL 和 SDA 用于 I²C 通信,ADDR 引脚用于设置设备地址,A0~A3 为模拟输入引脚。

主要特性如下:
- 分辨率:16 位,提供高精度的数据转换
- 可编程采样速率:最高可达 860 样本/秒(SPS),可根据应用需求调节
- 输入配置:ADS1115 提供了输入多路复用器(MUX),支持四个单端输入或两个差分输入
- 可编程增益放大器(PGA):内置 PGA,增益范围可调(±6.144 V 至 ±0.256 V),提高信号的可测量范围
- 接口:标准 I²C 接口,通过引脚选择地址(ADDR 引脚)实现多设备连接
- 低功耗:连续模式消耗电流约 150μA,而单次转换模式会进一步降低待机时的电流消耗
- 宽电源范围:工作电源范围广泛,从 2.0V 到 5.5V
- 内部低漂移参考电压:提供稳定的参考电压,确保高精度的模数转换
- 内部振荡器:配备内部振荡器,消除了对外部时钟源的依赖
2.ADS1115 芯片内部结构和引脚说明
ADS1115 芯片提供如下引脚:


各个引脚功能如下:
- VDD (电源引脚):供电电压范围是 2.0 V 至 5.5 V,最大工作电流为 150 µA
- GND (接地引脚):接地,用于提供参考地
- SCL (串行时钟引脚):I²C 接口的时钟线,输入高电压为 0.7 × VDD 至 VDD + 0.3V,输入低电压为 0V 至 0.3 × VDD,支持高达 400 kHz 的通信速率,需要外部上拉电阻(典型值为 4.7kΩ)
- SDA (串行数据引脚):I²C 接口的数据线,电气参数同 SCL 一样,一样需要上拉电阻
- ADDR (地址选择引脚):该引脚用于设置 ADS1115 的 I²C 地址,根据引脚的接线情况,可以有 4 个不同的 I²C 地址

- ALERT/RDY (中断/准备引脚):可配置为比较器中断引脚,或者数据转换准备完毕时的信号指示引脚,为开漏输出需要外部上拉电阻
- AIN0, AIN1, AIN2, AIN3 (模拟输入通道):四个模拟输入通道,用于单端或差分输入,输入电压不能超过 VDD + 0.3V 或低于 GND - 0.3V,并且输入电压范围还与 PGA (可编程增益放大器) 配置有关

ADS1115 芯片内部结构如下:

包括如下单元:
- MUX(多路复用器):通过配置多路复用器,我们可以选择对四个输入通道 (AIN0 到 AIN3)使用差分测量或单端测量
- PGA(可编程增益放大器):放大输入信号,并将其传递给 16 位 ΔΣ ADC,增益可配置,用于适应不同范围的输入信号
- I²C 接口:用于与外部 MCU 通信,采用标准的 SCL (时钟) 和 SDA (数据) 信号,而 ADDR 引脚可用于设定器件地址,这允许在同一 I²C 总线上连接多个 ADS1115 芯片
- Comparator 电压比较器:可选的比较器功能,结合 ALERT/RDY 引脚,可以在数据准备好或达到设定的阈值时发出中断信号
- 16 位 ΔΣ ADC:将模拟信号转换为 16 位数字信号,通过 I²C 接口传输数据
- 内部电压参考、时钟振荡器:提供稳定的内部时钟和电压参考,用于精确的模数转换
2.1 多路复用器
ADS1115 内置多路复用器(Multiplexer, MUX),它允许我们从多个输入通道中选择信号进行测量,输入信号的连接方式主要有两种,差分输入和单端输入:
- 差分输入:指信号由两个输入引脚(正输入和负输入)之间的电压差来测量,对于 ADS1115,这意味着它测量
AINP(正输入)和AINN(负输入)之间的电压差;差分输入可以测量正负电压,即输入范围是±Vref,这是一个全量程范围(双极性),差分输入方式可以利用 ADC 的全部分辨率,此时所有 16 位都可以用来解析信号,全量程范围分为 2^16 = 65536 个离散值,分辨率为2Vref / 65536 - 单端输入:指信号从一个通道输入,而另一个通道接地(通常连接到
GND),ADC 实际上测量的是输入信号相对于地的电压;单端输入的测量范围为 0 到Vref,即只能测量正电压,无法测量负电压,信号的有效输入范围变成了单极性,单端输入模式只使用了其中的 15 位,导致分辨率损失了 1 位,全量程范围是 2^15 = 32768 个离散值,分辨率变为Vref / 32768
多路复用器(MUX)是一种电子开关装置,用于在多个信号源中选择一个作为输出:

ADS1115 可以通过配置寄存器的 MUX 位选择不同的输入模式,当测量单端信号时,MUX 会将 ADC 的负输入端(AINN)内部连接到地(GND)。
ADS1115 的信号输入通道还有静电放电(ESD)保护二极管,这些二极管用于保护 ADC 输入免受过压或负压的影响,为了避免这些 ESD 二极管导通,输入信号的电压必须保持在以下范围内:
GND - 0.3V < AINx < VDD + 0.3V
如果输入信号可能超出该范围,推荐使用外部肖特基二极管(Schottky Diodes)或串联电阻来限制输入电流,从而保护 ADC;同时在使用 ADS1115 时,如果某些输入通道未连接信号且可能被“过驱动”(即输入电压超出有效范围),可能会影响其他通道的转换结果,建议为这些未使用的输入通道提供电压钳位(如通过肖特基二极管)以避免对测量的影响。
2.2 模拟信号输入
ADS1115 使用了一种开关电容结构来测量差分电压,这个结构依赖于开关(S1 和 S2)的闭合和断开时序来对输入电容进行充电和放电:

其中,S1 为充电开关,S2 为放电开关:

- S1 充电开关:S1 控制电容从输入端 AINp、AINn 对外部信号的采样,当 S1 闭合时,电容充电,此时电容被充至 AINp、AINn 的电压;当 S1 断开时,电容保持采样电压并准备下一个阶段的放电
- S2 放电开关:S2 在 S1 断开之后闭合,开始放电过程;此时,电容中的电荷被放电到基准电压(一般为 0.7V 或者 0V),此过程的目的是为下一次采样做准备
由于电容的充放电会引起瞬时电流,这些电流非常小,但其平均值可以用于计算 ADC 的有效输入阻抗:
$$
\text{Effective Input Impedance (}Z_{\text{in}}\text{)} = \frac{V_{\text{IN}}}{I_{\text{AVERAGE}}}
$$
其中
$$
V_{\text{IN}}
$$
是输入电压,$$I_{\text{AVERAGE}}$$是平均电流。当 ADS1115 内置 PGA 使用不同增益时,ADS1115 的 ADC 全量程不同,其输入阻抗也不相同:

2.3 PGA 可编程增益放大器
PGA 是一种可以通过外部控制信号动态调整放大倍数的放大器,它可以根据不同的输入电压动态调整增益,以确保信号适合 ADC 的输入电压范围。
PGA 的内部结构主要包括以下几个部分:

- 增益控制电路: 增益控制电路通常由一组电阻网络组成,通过开关矩阵选择不同的增益设置,电阻网络中的不同电阻值可以改变输入信号的放大倍数
- 反馈电路: PGA 依赖于反馈控制来确保放大器的稳定性。通过调节反馈电阻,PGA 可以控制输出的放大倍数
- 差分输入与输出: PGA 通常使用差分输入(两个输入端:正输入和负输入),用于减少噪声干扰和共模信号
- 放大器核心: 这部分是运算放大器,负责实际的信号放大,运放接受来自增益控制电路的输入信号,并根据所选的增益倍数输出放大信号
接下来,我们通过举例方式说明 PGA 的作用和对输入信号范围的影响,假设我们正在测量一个传感器的输出,该传感器输出的模拟信号范围为在 0.001V 附近波动,而使用的 ADC 测量信号范围是 0~5V,分辨率是 10 位,则每个数字步长(最小变化)为 5V/1024 = 0.00488V,那么经过 ADC 转换后,计算得到的数字信号始终为 0,我们无法通过 ADC 有效检测到传感器的微小变化。
为了提高信号的检测能力,我们引入了一个 PGA,将输入信号放大 100 倍,此时输入信号的变化范围变为 0.1V,经过放大后,ADC 转换后得到的数字信号将为 0 到 20 之间,我们能够观察到输入信号的波动:

然而,使用 PGA 的同时也会影响输入信号的范围,此时由于 PGA 放大倍数为 100,那么信号输入范围也缩小了 100 倍,ADC 原本的输入范围(0~5V)将变为 0~0.05V,如果我们尝试输入一个高于 0.05V 的信号(例如 0.1V),将会超出 PGA 的输入范围,可能导致输出饱和或失真。
选择合适的 PGA 放大倍数对确保 ADC 能够有效测量信号至关重要,我们需要确保 PGA 的增益设置能够将输入信号提升到 ADC 的最佳测量范围内,通常,ADC 的输入范围是从 0 到某个参考电压(如 0 到 3.3V),所以输入信号幅度应当调整到这个范围内;同时,务必确保 PGA 的增益设置不会使输出信号超过 ADC 的最大输入电压(如 3.3V)
ADS1115 中使用了可编程增益放大器(PGA)来对输入信号进行放大,该 PGA 具有多种增益设置,包括 213、1、2、4、8 和 16;在 PGA 的不同增益设置下,全尺度输入范围有所不同,即 ADC 能够接受的最大模拟输入电压范围会随之改变:

2.4 ADC 模数转换单元
ADS1115 采用二进制补码格式存储模拟信号模数转换后的结果:

- 当输入信号达到能存储的最大正值时,ADC 对应存储转换结果的寄存器值为
7FFFh,相当于十进制的 32767,当输入信号超过最大正值时,ADC 对应存储转换结果不变 - 当输入信号达到能存储的最小负值时,ADC 对应存储转换结果的寄存器值为
8000h,相当于十进制的-32768,当输入信号超过最小负值时,ADC 对应存储转换结果不变 - ADS1115 最小分辨率与 PGA 增益设置有关,PGA 增益设置改变则全尺度范围改变
输入电压与代码转换的关系如下所示:

为了防止频域混叠,ADC 数据采样率需要是输入信号频率的两倍及以上,ADS1115 芯片内置的数字滤波器可以对高频噪声进行一定程度的衰减,但在某些应用中,可能需要外部滤波器,同时在设计输入滤波器电路时,需要考虑滤波网络与 ADS1115 芯片输入阻抗之间的相互作用。
ADS1115 的 ADC 可以在两种模式下运行,连续转换模式和单次转换模式:
- 连续转换模式:在这种模式下,ADS1115 芯片会不断进行模数转换,每完成一次转换后,转换结果会存放在转换寄存器中,并立即开始下一次转换
- 单次转换模式:在单次转换模式下,ADS1115 会等待配置寄存器的 OS 位被设置为高电平,一旦 OS 位被置位,即启动单次模数转换,同时该位会被设置为 0,表示当前正在进行转换,一旦转换数据准备就绪,OS 位会重新置位,并且设备将进入低功耗状态
2.5 内部电压比较器
ADS1115 芯片内置电压比较器,同时该比较器功能可进行设置:
- 传统比较器:在此模式下,
ALERT/RDY引脚在转换数据超过高阈值寄存器中设置的限制时触发(默认为低电平激活);当输入信号低于低阈值寄存器的值时,比较器会解除触发 - 窗口比较器:在此模式下,如果转换数据超过高阈值寄存器或低于低阈值寄存器,
ALERT/RDY引脚将触发

同时,该电压比较器还具有 COMP_LAT 锁存位,可以配置比较器在触发后保持激活状态,即使输入信号不再超出阈值;电压比较器的 COMP_POL 极性设置位可配置 ALERT/RDY 引脚为高电平或低电平激活。

同时,比较器可以配置为在达到阈值之后,等待信号产生一定数量的超过阈值才进行触发,COMP_QUE 位可以设置为等待 1、2 或 4 次读取超过阈值,COMP_QUE 还可以禁用比较器功能。
并且 ALERT/RDY 引脚,根据寄存器的配置,它可以作为报警引脚,也可以作为数据准备完成信号,具体看 1.4.4.4 节 电压比较器阈值寄存器 部分。
2.6 ADS1115 芯片与微控制器的连接
使用 ADS1115 采集外部信号时,常用连接如下:

其中,VDD 引脚外接滤波电容,保证供电稳定;ADS1115 通过 I2C 接口与微控制器连接,同时 ALERT 引脚也需要连接上拉电阻。
每个 ADS1113/4/5 通过地址引脚(ADDR)可以配置不同的 I²C 地址,最多允许四个设备连接到同一总线:

3.ADS1115 芯片的寄存器介绍
ADS1115 芯片具有如下寄存器:
- Pointer Register (指针寄存器):用于选择要访问的寄存器,通过写入不同的值,指针寄存器可以让主控制器访问不同的寄存器
- Config Register (配置寄存器):配置 ADS1115 的操作模式,包括输入通道选择、增益设置、数据速率等
- Conversion Register (转换寄存器):用于存储内部 ADC 模数转换后结果
- Lo_thresh and Hi_thresh Registers(电压比较器阈值寄存器):用于设置内部电压设置比较器的阈值
ADS1115 在上电时会执行复位,在复位过程中,芯片会将配置寄存器中的所有位设置为各自的默认设置。
3.1 Pointer Register (指针寄存器)
用于选择要访问的寄存器,低两个数据位可写:

通过写入不同的值,指针寄存器可以让主控制器访问不同的寄存器:

3.2 Config Register (配置寄存器)
该寄存器可读可写,具有 16 个数据位:

各个数据位含义如下:


3.3 Conversion Register (转换寄存器)
16 位转换寄存器包含 ADC 转换后的结果,以二进制补码形式保存;上电后,转换寄存器清除为 0,并保持 0 直到第一次转换完成。

3.4 Lo_thresh and Hi_thresh Registers(电压比较器阈值寄存器)
ADS1115 的 Lo_thresh 和 Hi_thresh 寄存器用于比较器的阈值设定,这些寄存器存储了比较器的上下限阈值,以便确定输入信号是否超出设定范围,当输入信号的电压超过阈值时,设备可以通过 ALERT/RDY 引脚发送信号:
Lo_thresh寄存器保存的是比较器的下限阈值,它的值代表当输入信号电压低于该阈值时,会解除或触发ALERT/RDY引脚的输出,具体需要看当前比较器工作模式Hi_thresh寄存器保存的是比较器的上限阈值,它的值代表当输入信号电压高于该阈值时,会触发ALERT/RDY引脚的输出- 一般情况下,
Hi_thresh寄存器的值必须大于Lo_thresh寄存器保存的值。

这些寄存器中的值以二进制补码形式存储,当最高有效位(MSB,bit 15)为 0 时,表示正数;当最高有效位为 1 时,表示负数。
这里,需要注意的是,ADS1115 包含一个可编程增益放大器(PGA),其作用是设置输入信号的最大量程范围,确保模拟信号在采样前经过适当的放大或缩小,满量程输入电压范围(FSR)可以在 ±6.144V 和 ±0.256V 之间变化;当 PGA 增益设置更改时,设备的分辨率也会相应改变,因此在修改 PGA 设置后需要重新调整阈值寄存器的值。
例如:
- 当 PGA 设置为 ±6.144V 时,1 LSB 代表的电压约为 187.5µV
- 当 PGA 设置为 ±0.256V 时,1 LSB 代表的电压约为 7.8125µV
在不同的 PGA 增益设置下,Lo_thresh 和 Hi_thresh 寄存器中存储的数值会对应不同的电压范围。
这里,ADS1115 还提供了一个 ALERT/RDY 引脚,根据寄存器的配置,它可以作为报警引脚,也可以作为数据准备完成信号。
- 报警功能:当输入信号电压超出
Lo_thresh或Hi_thresh设定的范围时,ALERT/RDY引脚会发出报警信号,此功能类似于一个电压比较器 - 数据准备完成功能(RDY 模式):在单次转换模式下,每次转换完成后
ALERT/RDY引脚会输出配置寄存器的OS数据位,指示转换完成;在连续转换模式下,ALERT/RDY引脚会在每次转换完成时发出一个脉冲。要实现这个功能,只需要将Hi_thresh寄存器的MSB设置为 1,将Lo_thresh寄存器的MSB设置为 0
4.ADS1115 芯片的 I2C 通信接口
以设置 ADS1115 芯片进入连续转换模式为例(假设此时芯片地址为 0x48),首先需要向配置寄存器写入相应的配置值:
- 第一字节:发送从设备的 I²C 地址
0b1001000(0x48),再加上一个写操作位0 - 第二字节:指向配置寄存器,即给指针寄存器发送
0b00000001(0x01),该字节告诉 ADS1115 芯片接下来要写入的是配置寄存器

- 第三字节:配置寄存器的 MSB 部分(高 8 位),例如
0b10000100(0x84),这一字节设定了 ADS1113/4/5 的一些主要工作模式

- 第四字节:配置寄存器的 LSB 部分(低 8 位),例如
0b10000011(0x83),这一字节包含增益放大器(PGA)的设置、数据速率(Data Rate)等

这里,向指针寄存器和配置寄存器都执行的是写操作,ADS1115 芯片 I2C 写格式如下:

配置完成后,我们需要读取 ADC 每次转换后的结果,此时首先需要设置指针寄存器:
- 第一字节:发送从设备的 I²C 地址
0b1001000(0x48),再加上一个写操作位0 - 第二字节:向指针寄存器发送
0b00000000(0x00)指向转换寄存器
然后读取转换结果:
- 第一字节:发送从设备的 I²C 地址
0b1001000和一个读操作位1,即0b10010001 - 第二字节:ADS1113/4/5 设备将发送转换寄存器的高 8 位(MSB)
- 第三字节:ADS1113/4/5 设备将发送转换寄存器的低 8 位(LSB)
读取 ADC 转换结果流程如下图所示:


ADS1115 是德州仪器(TI)推出的一款高精度、低功耗、16 位模数转换器(ADC)。它集成了多个功能,适合各种模拟信号采集和处理应用,如传感器接口、电压监测、便携设备等。ADS1115 通常通过 I²C 接口与微控制器连接,电路中包括电源引脚(VDD、GND),SCL 和 SDA 用于 I²C 通信,ADDR 引脚用于设置设备地址,A0\~A3 为模拟输入引脚。
浙公网安备 33010602011771号