24小时联系电话:18217114652、13661815404
中文
技术专题
使用ADS1115
使用ADS1115
ADS1115是一款精密的16位ADC,具有四个多路复用输入-您可以单独使用每个输入,也可以成对使用每个输入进行差分测量。它具有内部校准的基准,可实现高精度。
这个ads1115教程向您展示如何设置库来驱动芯片,以及如何使用不同的PGA增益设置获取读数。它还介绍了即使仅使用单电源供电的设备也能够测量负电压的方法。这使其可用作电流吸收器或电流源测量设备。
有关芯片的重要信息:
具有16位分辨率。
可以根据PGA设置检测到0.187mV至7.8uV。
可以采样8到860 SPS。
具有内部参考电压。
具有内部PGA(可编程增益放大器)。
该设备的典型精度为0.01%(但最大精度为0.15%)。该精度包括所有误差源(参考电压,增益误差,失调和噪声)。
ADS1115接线板
ADS1115详细信息
ADS1115规格
范围 |
价值 |
电源电压(V DD) |
2V0〜5V5 |
绝对最大V DD |
-0.3V〜7V0 |
测量范围 |
-300mV〜Vdd + 300mV |
界面 |
I2C |
I2C率 |
100kHz,400kHz,3.4MHz |
解析度 |
16位(±15位) |
数据速率 |
8〜860 SPS |
多路输入的数量 |
4 |
有功电流 |
〜150uA(最大200uA) |
掉电电流 |
0.5uA(最大2uA) |
偏移误差[1] |
±3 LSB |
积分非线性(INL)[1] |
1 LSB |
增益误差[1],[2],@ 25°C |
0.01%(典型值)0.15%(最大) |
I2C地址(可选) |
0x48、0x49、0x4a,0x4b |
工作温度 |
-40°C〜125°C |
[1]
FSR±2.048V
[2]包括来自参考电压和PGA的所有误差。
ADS1115框图
数据表中的图片
ADS1115引脚排列
ADS1115精度
有趣的图显示了设备的真正功能,数据表中的图19所示:
总误差与输入信号
注意系统的准确性如何包括所有错误源:
获得错误,
差分输入误差
偏移误差
和噪音。
ADS1115 I2C寻址
您可以使用四个地址之一来设置ADS1115,因此可以在单个I2C总线上放置4个ADS1115芯片:
0x48、0x49、0x4a,0x4b。
寻址控制是不常见的,因为您只需要使用一个输入引脚作为地址控制引脚即可。
通常,您需要两个输入才能在4个地址之间切换,但是ADS1115 16位ADC使用的是巧妙的方案。对单个地址输入进行连续采样,如果将其连接到GND,VDD,SDA或SCL,则可以分别从0x48、0x49、0x4a和0x4b设置地址。
ADS1115省电
连续模式
在连续转换模式下,ADS1115的静态电流高达150uA。在这种模式下,您可以让ADS1115在8Hz至860Hz之间采样。
单发模式
ADS1115的默认模式是单次模式,该模式下器件唤醒,进行测量然后返回睡眠状态。睡眠时,该芯片仅消耗0.5uA的典型电流。由于设备在上电时进入此模式,因此不会产生启动电流的激增。
注意:命令界面在掉电模式下仍处于活动状态,因此您仍然可以从芯片中获取数据!
该芯片和模式非常适合需要精确度的电池供电设备。由于超小型封装(X2QFN)的尺寸仅为2 mm x 1.5 mm x?0.4毫米
性能与噪声之间的权衡
低速平均
如果以低速运行ADS1115,则内部采样率不会降低,因为这是delta sigma转换器通过过采样操作的方式。内部振荡器设置为1MHz,并降低至ADC时钟的250kHz。
在活动模式下,将连续收集样本。这些样本在内部进行平均,从而改善了噪声性能。这也节省了您的处理时间,即您不必在微控制器中执行平均。
因此,如果要获得最佳的噪声性能,请以8Hz(最低采样率)运行采样率。
低采样率的唯一缺点是设备必须连续开启,因此必须始终使用电源。如果您更关心节省功率,而又不太担心噪声性能,则可以实施突发模式操作。
高速Speed Burst模式
在微控制器的控制下,您可以实现突发模式以节省功耗。数据表建议您使用连续模式下使用功率的1/100。这样您就可以平均使用1.5uA的电流。
这类似于焦耳小偷电路,在该电路中,存储在电感器中的能量突发会在短时间内使LED产生脉冲。您可以获得足够的可用光,但平均功率降低了。
为了如上所述模拟8SPS速率,您将使ADS1115每125ms(1 / 125e-3 = 8)8 Hz拍摄一次单次信号(您可以通过微控制器代码中的计时器设置此重复率)。
您还可以将ADS1115的SPS速率设置为860Hz,以获得高速捕获。当然,您可以将两次捕获之间的时间间隔更改为每秒或每小时,以进一步节省电量。
ADS1115处于低电流模式时,单次读数仅需花费1.2ms的时间,剩下的时间就不存在了。这是ad1115转换延迟,并在数据表中进行了说明。
注意: ADS1115大约需要25us上电-很好!
使用ALERT / READY引脚
ALERT / Ready引脚有两种用途。第一个是“比较器阈值”警报(默认模式)。第二个是“ ADC读取准备就绪”警报。您必须设置一些寄存器以操作ADC就绪ALERT模式。
阈值检测
ADS1115有一个内部比较器,可将信号输出到ALERT引脚(默认模式)。您可以使用此功能自动检测超出范围的条件(由阈值寄存器设置)。COMP_QUE寄存器允许您指定断言警报之前有多少转换超出上限或下限。
ALERT引脚为开漏引脚,因此需要上拉电阻。
比较器有两个阈值(高和低)。当输入信号在阈值之间时,ALERT信号设置为高电平(窗口比较器模式)。您可以使用COMP_POL反转Alert输出信号。
ADC就绪中断信号
该引脚的另一种用途是用作ADC就绪信号。如果将引脚设置为ADC就绪信号,则可以将其馈入微控制器上的外部中断引脚,以便获取ADC读数。
检测ADC是否已完成的另一种方法是读取寄存器值(配置寄存器位15),但是由于要进行I2C事务,因此这当然会花费更多的时间。
注意:转换就绪信号是一个8us宽(高)脉冲,表示转换在下降沿可用。
要将芯片设置为转换就绪模式,请设置以下寄存器:
将高阈值寄存器的MSB设置为1
[例如,Hi_thresh = 0x8000]。
将低阈值寄存器的MSB设置为0
[例如,Lo_thresh = 0x0000]。
将比较器队列控制位设置为00(0x11以外的任何值)
[例如COMP_QUE [1:0] = 0]。
配置寄存器&=配置寄存器0x0003; //清除b0,b1。
输入多路复用器
您可以使用输入多路复用器在4个单端输入0〜FSR或两个差分输入±FSR之间选择。但是,还有另一种MUX模式,该模式使用AIN3作为AIN0,AIN1和AIN2的参考作为该参考的差分输入。
您可以在下图的左侧看到MUX:
从图中还不清楚,但是MUX具有3种模式:
输入信号参考地(所有4个输入都是可选的)
AIN0(+)〜GND(-),
AIN1(+)〜GND(-),
AIN2(+) 〜GND(-)。
AIN3(+)〜GND(-)。
两个差分输入:
AIN0(+)〜AIN1(-),
AIN2(+)〜AIN3(-)。
三个参考输入:
AIN0(+)〜AIN3(-),
AIN1(+)〜AIN3(-),
AIN2(+)〜AIN3(-)。
请参见数据表“配置寄存器”以控制此操作。
PGA增益设定
ADS1115中的增益设置寄存器确实具有标准值,例如x2 x4等(除了最大的2/3值),更容易想到满量程读数的分辨率和量程功能。数据表的排列方式是这样的-因为该器件使用内部固定的基准电压源。
您只需要选择接近所测信号的最佳范围即可(或在前面添加一个放大器来设置范围)。
您不能像其他ADC一样通过添加外部基准电压来更改FSR值。范围和分辨率如下表所示。
满量程FSR |
重塑(1 LSB) |
±6411毫伏 |
187.5uV |
±4096毫伏 |
125uV的 |
±2048毫伏 |
62.5微伏 |
±1024毫伏 |
31.25uV |
±512毫伏 |
15.625uV |
±256毫伏 |
7.8125微伏 |
满量程分辨率
尽管ADS1115具有16位分辨率,但它使用二进制补码来表示一个值(MSB表示符号位)。这实际上是一个15位分辨率的ADC,能够进行负电压和正电压测量(在GND至V DD的电源范围内!
这样,从GND到正满量程电压的输入信号就具有15位的分辨率,而从GND到负满量程电压的分辨率则为15位。但是,ADS1115只能测量低于地面的-300mV。
当使用差分模式和电平转换运算放大器将输入信号移至GDN至V DD范围内时,才真正使用±15bit分辨率。有一个例外:
要获得±FSR,您可以使用256mV范围,或使用输入运算放大器来对输入进行电平转换和缩放,或者使用差分输入)。或者,将一个输入用作其他两个输入的参考。
注意:从上表中可以看到,15位分辨率仍然是非常准确的分辨率。
如上所述,可测量的输入电压下降到负300mV。
在最低PGA增益值下,您可以使用器件的满量程分辨率(±256mV),这也适合ADS1115的-300mV测量能力。
因此,即使仅使用单个电源芯片,您也可以制造一种能够测量灌电流和灌电流的电流测量设备。为此,您将使用合适的测量电阻器并对其进行差分测量。负电压能力测试结果在这里。
选择较高的PGA增益仍然可以让您以较低的分辨率测量负值。
关于PGA设置的注意事项
可编程增益设置寄存器(PGA)允许8个值,但最后3个值均提供相同的增益,因此对于PGA值为5、6和7的FSR为256mV。
因此,共有6种可用设置,允许FSR分别为±6.144V,±4.096V,±2.048V,±1.024V,±0.512V,±0.256V。
输入电压范围
绝对最大电压输入为:
-0.3V〜7V
测量电压范围是:
GND-0.3V〜VDD + 0.3V。
请记住,测量范围是固定的,因此最大可测量输入电压为±6.144V。
测试负电压输入
我曾是 不确定是否可以测量负电压,尤其是使用ADS1115的单电源供电时。数据表确实表明它能够在-256mV的范围内进行测量,并且在-300mV以上的电压下不会爆炸。
事实证明这是对的,因为我通过将-5V电源小心地连接到10k电位计并调整抽头(确保其不低于-300mV)来测试输入,其值是-100mV,-260mV
这是-260mV输入的结果:
A1:-260.437mV PGA:6144 mv acc:187.5uV
A1:-260.375mV PGA:4096 mv acc:125uV
A1:-260.375mV PGA:2048 mv acc:62.5uV
A1:-259.969mV PGA:1024 mv acc:31.25uV
A1:-259.234mV PGA:512 mv acc:15.625uV
A1:-256.016mV PGA:256 mv acc:7.8125uV
警报/ RDY 0
这是-100mV(大约)输入的结果:
A1:-104.625mV PGA:6144 mv acc:187.5uV
A1:-104.500mV PGA:4096 mv acc:125uV
A1:-104.500mV PGA:2048 mv acc:62.5uV
A1:-104.531mV PGA:1024 mv acc:31.25uV
A1:-104.484mV PGA:512 mv acc:15.625uV
A1:-104.499mV PGA:256 mv acc:7.8125uV
警报/ RDY 0
对于-260mV测量,您可以看到256mV的FSR达到了满量程,这是您所期望的-这是针对256mV的PGA增益设置(因为260mV高于256mV的量程能力)。
您还可以看到,对于所有PGA增益,都正确测量了-100mV读数。
因此,这证实了ADS1115无需单独的电源即可读取低至-256mV最小测量能力的负电压。
注意:此输出的ADS1115 arduino代码可在页面的下方找到。
ADS1115 ADC FSR
正输出的满量程值为:
0x7FFF
负输出的满量程值为:
0x8000
ADC的正值是0x0001,负值是0xFFFF(负2是0xFFFE)。
警告:对于单端测量,在测量0V时,由于器件失调,您仍然会获得负ADC值。
差速器怎么处理?
一种 差分测量使用两个输入,一个用于低端,一个用于高端电压,因此您可以测量电路中任何一点的电压差。正常的单端测量(Ardiuno ADC)只能测量参考到地的电压。
您可以具有一组差分输入或一组差分输入(如下所示):
两个差分输入:
AIN0(+)〜AIN1(-),
AIN2(+)〜AIN3(-)。
其他配置在这里。
通常,您需要跨小而准确的电阻进行测量以确定电流。ADS1115可以测量正负电压。
差分测量是通过使用设备内的差分放大器(运算放大器)实现的瞬时测量。此测量的最大优势在于,由于跨被测元件的噪声信号相同,因此消除了共模噪声误差。因此,噪声被减去。
使用差分测量的另一个原因是,您可能希望测量未参考到地的电压,例如,电流检测电阻器未在一侧接地,而是在电路中的其他位置。这就是所谓的高端测量,即两个测量电压都远不接近零。
软件
Arduino IDE:版本1.8.9+
I2Cdev库
I2Cdevlib具有ADS1115库代码以及许多其他设备的代码。
该库具有很多功能,受支持的芯片,并且可以在多个处理器上运行,但是安装涉及更多一点,因此您不能使用自动Arduino zip文件安装程序。
ADS1115 Arduino库
解压缩文件(ic2devlib-master),然后导航到ic2devlib-master中的Arduino目录。将目录ADS1115和I2Cdev复制到Arduino库目录(通常在Windows上):
C:\ Users \ <用户名> \ Documents \ Arduino \ libraries
库代码警告
256mV范围的常数已设置为四舍五入的值。
导航至ADC1115.h并更改以下行:
#define ADS1115_MV_0P256
0.007813
#define ADS1115_MV_0P256B 0.007813
#define ADS1115_MV_0P256C 0.007813
至
#define ADS1115_MV_0P256
0.0078125
#define ADS1115_MV_0P256B 0.0078125
#define ADS1115_MV_0P256C 0.0078125
硬件
组件
Arduino Uno R3。
ADS1115转接板。
连接线。
100nF电容器。
1万锅。
连接数
为了进行测试,请使用Arduino Uno并按如下所示进行连接:
Arduino的 |
ADS1115 |
5伏 |
VDD |
地线 |
地线 |
A5 |
SCL |
A4 |
SDA |
地线 |
地址 |
2个 |
警报 |
10k锅的雨刷器。 |
A1 |
注意:将10k电位器的两端连接到5V和GND。
在5V和GND之间连接100nF电容器。
ADS1115面包板布局
使用ADS1115的Arduino示例
草图示例1
您可以使用以下程序通过轮询来测试ADS1115:
要查看注册状态信息,请对ads1115.h进行编辑,以通过取消注释以下行来允许调试输出:
//#define ADS1115_SERIAL_DEBUG
在串行监视器中键入字母s以查看寄存器状态。
注意:我更改了pollAlertReadyPin()代码,以便在失败时重新初始化ads1115。打开和关闭PC时,将重置寄存器,并将队列寄存器设置为11:禁用警报就绪引脚。现在,如果发生此错误,则芯片将正确重启。
复制草图
// I2C设备类(I2Cdev)演示ADS1115类的Arduino草图
//读取
ADS1115的两个差分输入并以mV表示值的示例// // Eadf(2016-03-22)
//
//变更日志:
// 初始版本
//
//修改了JFM,以重新初始化和输出多个PGA分辨率,以便
//比较读数。同样,当调试处于活动状态时,串行接收's'
//输出寄存器值。