ZHCAEH2A October 2019 – September 2024 ADS1015 , ADS1115 , TLA2024
| 输入测量 | ADC 输入 | 数字输出 ADS1115 |
|---|---|---|
| PGA[2:0] = 000,FSR = ±6.144V | 0V 至 5V | 0 至 26667 0000h 至 682Bh |
| VDD | GND | |
|---|---|---|
| 5V | 0V | |
许多应用要求在尽可能小的空间内进行大量测量。该电路介绍了一个 16 通道测量系统,该系统使用四个具有 I2C 接口的超小型 ADS1115 器件。这些器件具有精确的内部电压基准,并可针对多个输入范围进行编程,用作 15 位单端模数转换器 (ADC)。系统中的 ADC 高度可配置,可针对不同的数据速率和电压范围进行配置,甚至可用于警报功能。此外,输入可成对配置,从而构成一个具有差分输入测量的 8 通道测量系统。ADS1115 器件采用超小型 1.5mm × 2.0mm X2QFN 封装,在电路板上占用的空间非常小。该电路可用于 PLC 模拟输入模块、服务器板上的电源管理和各种通用测量等应用。

此电路使用四个多路复用的 ADS1115 ADC 来测量十六个不同的通道。为此,这四个器件必须使用不同的 I2C 地址,这些地址通过连接到每个器件的 ADDR 引脚来设置。ADDR 引脚连接到四个节点之一,以响应不同的从器件地址,如下表所示。
| ADDR 引脚连接 | 从器件地址 | |
|---|---|---|
| GND | 1001000 | |
| VDD | 1001001 | |
| SDA | 1001010 | |
| SCL | 1001011 | |
ADS1115 器件具有一个多路复用器,用于测量多个通道。在此设计中,系统会循环使用每个器件的每个模拟输入。虽然可以进行差分测量,但图中显示,该系统通过循环使用所有模拟输入来对 GND 节点进行单端测量。
可通过下表所示的配置寄存器来配置器件。在配置寄存器中,MUX[2:0] 为 ADC 选择 AINP 和 AINN 节点,并设置每个器件的输入通道。表中的设置展示了单端测量的设置。如 ADS111x 具有内部基准、振荡器和可编程比较器且兼容 I2C 的超小型、低功耗、860SPS、16 位 ADC 数据表所示,可以使用 MUX[2:0] = 000 至 011 设置来进行差分测量。
| 输入测量 | ADC 输入 | 器件输入选择 |
|---|---|---|
| 通道 1 | MUX[2:0] = 100 | AINP = AIN0,AINN = GND |
| 通道 2 | MUX[2:0] = 101 | AINP = AIN1,AINN = GND |
| 通道 3 | MUX[2:0] = 110 | AINP = AIN2,AINN = GND |
| 通道 4 | MUX[2:0] = 111 | AINP = AIN3,AINN = GND |
循环使用器件的全部四个通道后,系统会选择下一个器件并重复该循环。
ADS1115 ADC 具有用于精确测量的内部基准和可扩展的测量增益。在本电路文档中,所示的测量值均为单端测量,负模拟输入接地。由于 ADS1115 器件是用于差分测量的 16 位 ADC,因此单端测量只有 15 位分辨率。
该 ADC 可设置为 FSR(满标量程)的 6 种设置之一。这相当于在 ADC 前端安装了一个可编程增益放大器。配置寄存器的 FSR[2:0] 位的设置范围为 ±0.256V 至 ±6.144V。用于单端测量时,输入范围为 0V 至 0.256V 到 0V 至正 FSR 值。如前所述,即使 FSR 设置为大于 VDD 的电压,ADC 模拟输入的工作范围也介于地和 VDD 之间。例如,当 FSR 设置为 ±6.144V 且 VDD 设置为 5V 时,模拟输入限制为 0V 至 5V。
FSR 设置允许进行各种不同的测量,从温度传感器或电流采样电阻等小电压测量,到无需分压器即可测量自身电源的较大电压测量 ADC。
下表显示了 ADS1115 FSR 的设置。
可根据器件内部振荡器将 ADS1115 器件配置为八种数据速率之一。此数据速率具有 ±10% 的容差。数据速率由 DR[2:0] 位设置,如下表所示。
| 数据速率设置 | 数据速率 |
|---|---|
| DR[2:0] = 000 | 8SPS |
| DR[2:0] = 001 | 16SPS |
| DR[2:0] = 010 | 32SPS |
| DR[2:0] = 011 | 64SPS |
| DR[2:0] = 100 | 128SPS |
| DR[2:0] = 101 | 250SPS |
| DR[2:0] = 110 | 475SPS |
| DR[2:0] = 111 | 860SPS |
所选数据速率为 128SPS,这是 ADS1115 器件的默认设置。该数据速率是可用的最快速率,对于所有 FSR 设置,可提供优于一个 LSB 的噪声性能。
配置寄存器会设置 ADC 的操作模式和配置。配置包括前面各节中描述的所有设置。在 16 个位之间使用九个字段来配置器件。下表显示了配置寄存器字段描述以及位名称和位置、读写用法和复位值。
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
|---|---|---|---|---|---|---|---|
| OS | MUX[2:0] | PGA[2:0] | 模式 | ||||
| R/W-1h | R/W-0h | R/W-2h | R/W-1h | ||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DR[2:0] | COMP_MODE | COMP_POL | COMP_LAT | COMP_QUE | |||
| R/W-4h | R/W-0h | R/W-0h | R/W-0h | R/W-3h | |||
OS 会设置操作状态并启动单次转换。MUX[2:0] 位将输入多路复用器设置为循环执行不同的测量。MODE 位会将器件设置为单次转换模式。DR[2:0] 位会设置器件的数据速率。其余字段用于本设计中未使用的 ADC 比较器设置。有关配置寄存器的更多详细信息,请参阅 ADS111x 具有内部基准、振荡器和可编程比较器且兼容 I2C 的超小型、低功耗、860SPS、16 位 ADC 数据表。
例如,一个 ADC 设置为使用连接到 VDD 的 AIN0 测量其自身的接地电源。FSR 设为 ±6.144V,数据速率为 128SPS。配置寄存器字段的设置如下表所示。
| 位 | 字段 | 设置 | 说明 |
|---|---|---|---|
| 15 | OS | 1 | 开始转换 |
| 14:12 | MUX[2:0] | 100 | 单端输入测量,AINP-AINN = AIN0-GND,选择第一通道 |
| 11:9 | PGA[2:0] | 000 | FSR = ±6.144V,将 ADC 设置为能够测量 0V 至 VDD 的整个电源电压范围 |
| 9 | 模式 | 1 | 单次转换模式下的运行 |
| 7:5 | DR[2:0] | 100 | 数据速率 = 128SPS |
| 4 | COMP_MODE | 0 | 传统比较器 |
| 3 | COMP_POL | 0 | 低电平有效 |
| 2 | COMP_LAT | 0 | 非锁存比较器 |
| 1:0 | COMP_QUE[1:0] | 11 | 比较器已禁用 |
结合字段描述中的这些位,配置寄存器值为 1100 0001 1000 0011 或 C183h。
若要循环使用该系统的每个通道,需逐一启动每个通道的转换过程,等待转换完成,然后读回数据。然后,开始下个通道的转换过程。在移动到下一个 ADC 之前,对四个单端输入通道重复每次测量。对系统中的所有四个 ADC 重复此序列,即可循环使用所有通道。
写入配置寄存器会启动转换并将 ADC 配置为正确的运行模式。通信从写入器件的 I2C 从器件地址开始。I2C 写入后跟三个字节。第一个字节是 01h,用以指示配置寄存器。接下来的两个字节是写入配置寄存器的数据。
对器件配置寄存器的写入从对所选 I2C 地址 (1001000) 的写入开始。下一个字节是地址指针,指示配置寄存器 01h。写入操作通过将两个字节的数据写入配置寄存器来完成。四个字节的完整通信如下表所示。
| I2C 地址: 1001000 写入 |
地址指针: 配置寄存器 |
配置 MSB:开始转换、设置输入、FSR、单次转换模式 | 配置 LSB:128SPS, 比较器已禁用 |
|---|---|---|---|
| 1001 0000 | 0000 0001 | 1100 0001 | 1000 0011 |
然后,主器件等待转换完成。在本示例中,ADS1115 器件设置为默认数据速率 128SPS。该器件使用内部振荡器,因此数据速率存在一些变化。为确认在 ADC 完成转换后读取器件,微控制器会等待转换完成所需的最长时间。该等待时间是标称数据周期加上 10%(用以补偿器件的内部振荡器变化)。对于每个单次转换,ADC 唤醒时间都额外增加 20µs。使用以下公式计算总等待时间。
例如,如果器件以 128SPS 运行,则标称数据周期为 7.82ms。所需的等待时间为:
读取器件从写入转换寄存器 (00h) 的寄存器指针开始,然后从同一 I2C 地址再次读取两个字节。五个字节的完整通信如下表所示。
| I2C 地址: 1001000 写入 |
地址指针: 配置寄存器 |
I2C 地址: 1001000 读取 |
读取转换数据 MSB | 读取转换数据 LSB |
|---|---|---|---|---|
| 1001 0000 | 0000 0000 | 1001 0001 | xxxx xxxx | xxxx xxxx |
输入电压的转换基于 ADC 的满标量程 (FSR) 设置。FSR 由配置寄存器中的 PGA[2:0] 位进行设置。
即使 ADC 用于单端测量,ADS1115 器件也是差分 ADC。如果 ADC 具有负偏移,并且 ADC 在输入通道上测得 0V,则 ADC 会报告一个负数。用二进制补码表示法报告负读数。例如,十进制 –1 在转换寄存器中报告为 FFFFh。
如前所述,16 位 ADS1115 器件替换为 12 位 ADS1015 ADC 或 TLA2024 ADC。对于这些器件,数据格式为 12 位,右侧填充了四位零。满标量程读数为 7FFh,而从转换寄存器中读取时为 7FF0h。
下面显示了伪代码序列以及从四个器件的每个通道设置转换并在每次转换后收集数据所需的步骤。它还包括连接到 ADC 的微控制器的设置。
对于每个通道,微控制器同时设置 ADC 配置并启动转换。微控制器会等待转换完成,等待足够的时间以完成转换以及内部振荡器频率的任何变化。然后从转换寄存器中读取数据。继续循环使用每个器件的每个通道。该设置假设采用之前的配置,转换等待时间的数据速率设置为 128SPS。
Configure microcontroller for I2C mode
Loop
{
Conversions from four channels of device 1:
{
Write I2C addr 1001000, send 0x01 0xC1 0x83; // start conversion for device 1, AIN0-GND
Wait 8.62ms
Write I2C addr 1001000, send 0x00, read I2C addr 1001000, read two bytes; // Read conversion
Write I2C addr 1001000, send 0x01 0xD1 0x83; // start conversion for device 1, AIN1-GND
Wait 8.62ms
Write I2C addr 1001000, send 0x00, read I2C addr 1001000, read two bytes; // Read conversion
Write I2C addr 1001000, send 0x01 0xE1 0x83; // start conversion for device 1, AIN2-GND
Wait 8.62ms
Write I2C addr 1001000, send 0x00, read I2C addr 1001000, read two bytes; // Read conversion
Write I2C addr 1001000, send 0x01 0xF1 0x83; // start conversion for device 1, AIN3-GND
Wait 8.62ms
Write I2C addr 1001000, send 0x00, read I2C addr 1001000, read two bytes; // Read conversion
}
Conversions from four channels of device 2:
{
Write I2C addr 1001001, send 0x01 0xC1 0x83; // start conversion for device 2, AIN0-GND
Wait 8.62ms
Write I2C addr 1001001, send 0x00, read I2C addr 1001001, read two bytes; // Read conversion
Write I2C addr 1001001, send 0x01 0xD1 0x83; // start conversion for device 2, AIN1-GND
Wait 8.62ms
Write I2C addr 1001001, send 0x00, read I2C addr 1001001, read two bytes; // Read conversion
Write I2C addr 1001001, send 0x01 0xE1 0x83; // start conversion for device 2, AIN2-GND
Wait 8.62ms
Write I2C addr 1001001, send 0x00, read I2C addr 1001001, read two bytes; // Read conversion
Write I2C addr 1001001, send 0x01 0xF1 0x83; // start conversion for device 2, AIN3-GND
Wait 8.62ms
Write I2C addr 1001001, send 0x00, read I2C addr 1001001, read two bytes; // Read conversion
}
Conversions from four channels of device 3:
{
Write I2C addr 1001010, send 0x01 0xC1 0x83; // start conversion for device 3, AIN0-GND
Wait 8.62ms
Write I2C addr 1001010, send 0x00, read I2C addr 1001010, read two bytes; // Read conversion
Write I2C addr 1001010, send 0x01 0xD1 0x83; // start conversion for device 3, AIN1-GND
Wait 8.62ms
Write I2C addr 1001010, send 0x00, read I2C addr 1001010, read two bytes; // Read conversion
Write I2C addr 1001010, send 0x01 0xE1 0x83; // start conversion for device 3, AIN2-GND
Wait 8.62ms
Write I2C addr 1001010, send 0x00, read I2C addr 1001010, read two bytes; // Read conversion
Write I2C addr 1001010, send 0x01 0xF1 0x83; // start conversion for device 3, AIN3-GND
Wait 8.62ms
Write I2C addr 1001010, send 0x00, read I2C addr 1001010, read two bytes; // Read conversion
}
Conversions from four channels of device 4:
{
Write I2C addr 1001011, send 0x01 0xC1 0x83; // start conversion for device 4, AIN0-GND
Wait 8.62ms
Write I2C addr 1001011, send 0x00, read I2C addr 1001011, read two bytes; // Read conversion
Write I2C addr 1001011, send 0x01 0xD1 0x83; // start conversion for device 4, AIN1-GND
Wait 8.62ms
Write I2C addr 1001011, send 0x00, read I2C addr 1001011, read two bytes; // Read conversion
Write I2C addr 1001011, send 0x01 0xE1 0x83; // start conversion for device 4, AIN2-GND
Wait 8.62ms
Write I2C addr 1001011, send 0x00, read I2C addr 1001011, read two bytes; // Read conversion
Write I2C addr 1001011, send 0x01 0xF1 0x83; // start conversion for device 4, AIN3-GND
Wait 8.62ms
Write I2C addr 1001011, send 0x00, read I2C addr 1001011, read two bytes; // Read conversion
}
}
该器件通过写入配置寄存器来开始转换。这需要一个四字节的事务。字节 1 是地址写入,后跟一个字节的配置寄存器指针和两个字节的配置数据。
当器件读取转换时,需要一个五字节的事务。字节 1 是写入器件的地址,后跟字节 2 中的转换寄存器指针。字节 3 是从转换寄存器读取的地址,后跟两个字节的 ADC 数据。
| 器件 | 输入通道 | 命令 | 字节 1 | 字节 2 | 字节 3 | 字节 4 | 字节 5 |
|---|---|---|---|---|---|---|---|
| 器件 1 | 通道 1 AIN0 至 GND |
开始转换 | 1001 0000 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1100 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– |
| 读取转换 | 1001 0000 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0001 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 2 AIN1 至 GND |
开始转换 | 1001 0000 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1101 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0000 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0001 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 3 AIN2 至 GND |
开始转换 | 1001 0000 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1110 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0000 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0001 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 4 AIN3 至 GND |
开始转换 | 1001 0000 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1111 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0000 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0001 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 器件 2 | 通道 5 AIN0 至 GND |
开始转换 | 1001 0010 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1100 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– |
| 读取转换 | 1001 0010 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0011 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 6 AIN1 至 GND |
开始转换 | 1001 0010 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1101 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0010 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0011 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 7 AIN2 至 GND |
开始转换 | 1001 0010 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1110 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0010 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0011 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 8 AIN3 至 GND |
开始转换 | 1001 0010 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1111 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0010 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0011 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 器件 3 | 通道 9 AIN0 至 GND |
开始转换 | 1001 0100 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1100 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– |
| 读取转换 | 1001 0100 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0101 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 10 AIN1 至 GND |
开始转换 | 1001 0100 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1101 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0100 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0101 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 11 AIN2 至 GND |
开始转换 | 1001 0100 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1110 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0100 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0101 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 12 AIN3 至 GND |
开始转换 | 1001 0100 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1111 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0100 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0101 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 器件 4 | 通道 13 AIN0 至 GND |
开始转换 | 1001 0110 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1100 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– |
| 读取转换 | 1001 0110 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0111 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 14 AIN1 至 GND |
开始转换 | 1001 0110 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1101 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0110 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0111 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 15 AIN2 至 GND |
开始转换 | 1001 0110 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1110 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0110 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0111 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> | ||
| 通道 16 AIN3 至 GND |
开始转换 | 1001 0110 (I2C 地址,写入) |
0000 0001 (指向配置寄存器的指针) |
1111 0001 (配置寄存器 MSB) |
1000 0011 (配置寄存器 LSB) |
– | |
| 读取转换 | 1001 0110 (I2C 地址,写入) |
0000 0000 (指向转换寄存器的指针) |
1001 0111 (I2C 地址,读取) |
<数据 MSB> | <数据 LSB> |
下面显示了四个 ADS1115 器件之一的示例布局。使用 0402 电阻器和电容器添加 RC 输入滤波。生成的布局约为 260mil × 340mil。此测量未考虑 I2C 上拉电阻器或 ALERT/RDY 上拉电阻器。每个系统都需要一套此类电阻器。
示例布局| 器件 | 主要特性 | 链接 | 其他可能的器件 |
|---|---|---|---|
| ADS1115 | ADS111x 具有内部基准、振荡器和可编程比较器且兼容 I2C 的超小型、低功耗、860SPS、16 位 ADC | 具有 PGA、振荡器、VREF、比较器和 I2C 的 16 位、860SPS、4 通道 Δ-Σ ADC | 精密 ADC |