目录
5.2 转换寄存器(P[1:0] = 0x00) [reset = 0x0000] (只读)
5.3配置寄存器(P[1:0] = 0x01) [reset = 8583h]
5.4Lo_thresh (P[1:0] = 2H) [reset = 8000h] Hi_thresh (P[1:0] = 3H) [reset = 7FFFh]寄存器
1.ADS1115简介
ADS1115是德州仪器推出的具有IIC接口的16位ADC转换器,超小型X2QFN或VSSOP 封装,低功耗(20uA),宽电压输入2.0V-5.5V,可编程数据转换速率8SPS-860SPS,四个单端输入或两个差分输入。可应用于,电池电压电流检测,低速便携式仪表以及温度测量系统中。
2.引脚功能
3.功能介绍
3.1 噪声表现
注:采样速率不宜过高,由表格看出当采样速率大于128SPS时,分辨率在不同量程下均有所下降
3.2 Multiplexer 复用器
ADS1115包含一个输入多路器,四个单电压输入或者两个差分输入。AIN0和AIN1可以与AIN3进行差分测量,多路复用器由配置寄存器中的位MUX [2:0]配置。 测量单端信号时,ADC的负输入通过多路器内的开关内部连接到GND。
3.3量程与分辨率
3.4 采样速率与转换时间
采样速率可以由配置寄存器中的DR[2:0]位来控制,AD转换可以在一个周期内完成,因此转换时间为1/DR。
3.5数字比较器(在本次实验不使用)
ADS1115具有可编程的数字比较器,可以在ALERT/RD引脚上发出警报。Config寄存器中的COMP_MODE位将比较器配置为传统比较器或窗口比较器。 在传统的比较器模式下,当转换数据超过高阈值寄存器(Hi_thresh)中设置的限制时,ALERT / RDY引脚将置为有效(默认为低电平有效)。 然后,仅当转换数据降至低阈值寄存器(Lo_thresh)中设置的限制以下时,比较器才会置为无效。 在窗口比较器模式下,当转换数据超过Hi_thresh寄存器或低于Lo_thresh寄存器值时,ALERT / RDY引脚将置为有效。
在窗口模式或传统比较器模式下,均可将比较器配置为在被配置寄存器中的COMP_LAT位置位后锁存。即使输入信号未超出阈值寄存器的范围,此设置也将保留断言。只能通过发出SMBus警报响应或读取转换寄存器来清除此锁存的断言。可以通过Config寄存器中的COMP_POL位将ALERT / RDY引脚配置为高电平有效或低电平有效。
两种比较器模式只有在一定数量的连续读数超过阈值寄存器中设置的阈值(Hi_thresh和Lo_thresh)之后,比较器也可以配置为激活ALERT / RDY引脚。 Config寄存器中的COMP_QUE [1:0]位将比较器配置为在激活ALERT / RDY引脚之前等待超过阈值的一,二或四个读数。 COMP_QUE [1:0]位还可以禁用比较器功能,并将ALERT / RDY引脚置于高电平状态
3.6 操作模式
ADS1115由两种模式,连续转换和单次转换,配置寄存器中的MODE位选择相应的工作模式。
3.6.1 单次转换
当配置寄存器中的MODE 位设置为1时,ADS1115进入掉电状态,并以单次转换模式工作,首次上电时,此状态时ADS的默认状态。尽管进入了掉电模式,但设备仍会响应命令。 ADS1115保持此掉电状态,直到将1写入配置寄存器中的操作状态(OS)位。当OS位有效时,器件将在大约25μs的时间内上电,将OS位复位为0,并开始单次转换。当转换的数据准备好后,设备会再次掉电。正在进行的转换时将1写入OS位无效。要切换到连续转换模式,请将0写入MODE中的MODE位。
3.6.2 连续转换
在连续转换模式(MODE位设置为0)下,ADS1115连续执行转换。转换完成后,ADS1115将结果放入转换寄存器,并立即开始另一次转换。配置新的设置时,当前正在进行的转换将使用先前的设置完成转换。此后,将开始使用新的设置进行连续转换。要切换到单次转换模式,请向配置寄存器的MODE位写入1或复位设备。
4. ADS1115 的IIC
4.1 IIC地址的选择
ADS1115具有一个地址引脚ADDR,用于设置器件的I2C地址。 该引脚可以是连接到GND,VDD,SDA或SCL,因此可以通过一对IIC引脚选择四个不同的地址。
一般我们将地址位接GND,1001000,最后一位是确定IIC的写/读状态,写的时候是1,读的时候是0.所以slave address读写地址是0x90/0x91(10010000/10010001)
4.2 接收模式
ADS1115在从机接收模式下,主机发送到从机的第一个字节由7位设备地址组成,其次是低的R / W位。 主机发送的下一个字节是地址指针寄存器, ADS1115收到地址指针寄存器字节, 接下来的两个字节被写入地址由寄存器地址指针位P [1:0]给出。最后ADS1115返回字节。 数据寄存器字节为首先发送最高有效字节,然后发送最低有效字节。
4.3 发送模式
在从机发送模式下,主机发送的第一个字节是7位从机地址,后跟高R / W位。 该字节将从机设置为发送模式, 从机发送的字节是数据寄存器的最高有效字节,由数据寄存器地址指针位P [1:0]指示, 然后,其余的最低有效字节由从机发送。
4.4 写入和读取寄存器
要从ADS1115访问特定的寄存器,主机必须首先写一个适当的值到地址指针寄存器中的地址指针位P [1:0]。在从机地址字节,低R / W位和成功的从机确认之后,直接写入地址指针寄存器。写入地址指针寄存器后,从机应答,而主机发出STOP或重复的START条件。从ADS1115读取时,写入位P [1:0]的前一个值确定要读取的寄存器。要更改读取哪个寄存器,必须将新值写入P [1:0]。要将新值写入P [1:0],主机发出R / W位为低的从机地址字节,后跟地址指针寄存器字节。主机不必发送其他数据,并且可以发出STOP条件。如果需要重复读取同一寄存器,则无需连续发送地址指针寄存器,因为ADS1115会存储P [1:0]的值,直到被写操作修改为止。
读时序操作步骤:
1.发送写地址给ADS1115(0x90);
2.向地址指针寄存器写数据,后两位有效,只能写0x00,0x01,0x02,0x03;
3.发送读地址给ADS1115(0x91);
4.读取ADS1115的数据(两个字节,MSB先行);
写时序操作步骤:
1.发送写地址给ADS1115(0x90);
2.向地址指针寄存器写数据,后两位有效,只能写0x00,0x01,0x02,0x03;
3.发送数据给ADS1115(高位在前)
4.5 数据格式
ADS1115以二进制补码格式提供16位数据。 正满量程(+ FS)输入时,输出的AD值代码为7FFFh,负满量程(-FS)输入时,输出的AD值代码为8000h。这些代码的输出为了提示超量程的提示。
5.寄存器
ADS1115具有四个寄存器,可通过I2C接口使用AddressPointerRegister进行访问寄存器。 ConversionRegister包含上一次转换的结果。 ConfigRegister用于更改ADS1115工作模式并查询设备状态。 其他两个寄存器Lothresh和Hithresh,设置用于比较器功能的阈值。
5.1 地址指针寄存器(只写)
5.2 转换寄存器(P[1:0] = 0x00) [reset = 0x0000] (只读)
16位转换寄存器包含二进制二进制补码格式的最后一次转换结果。 上电后,转换寄存器清除为0,并保持0直到第一次转换完成。
5.3配置寄存器(P[1:0] = 0x01) [reset = 8583h]
16位配置寄存器用于控制工作模式,输入选择,数据速率,满量程范围和比较器模式。
5.4Lo_thresh (P[1:0] = 2H) [reset = 8000h]
Hi_thresh (P[1:0] = 3H) [reset = 7FFFh]寄存器
比较器使用的上下阈值以二进制补码格式存储在两个16位寄存器。 比较器为数字比较器。 因此,只要更改PGA设置,就必须更新这两个寄存器中的值(使能比较器前提下)。 通过将Hi_thresh寄存器MSB设置为1并将Lo_thresh寄存器MSB设置为0,要使用ALERT / RDY引脚的比较器功能,Hi_thresh寄存器值必须始终大于 Lo_thresh寄存器值。
6.代码实现
//i2c_ads1115.h
#ifndef __IIC_ADS1115_H
#define __IIC_ADS1115_H
#include "i2c.h"
#define ADS1115_WRITE_ADDRESS 0x90
#define ADS1115_READ_ADDRESS 0x91
//以下两个预处理作为配置寄存器预处理要更改其配在这里更改
//也可以添加新的预处理对不同通道的采集或者选取不同的采样速率等
#define CONFIG_REG_H ADS1115_REG_CONFIG_OS_START|\
ADS1115_REG_CONFIG_MUX_Diff_01|\
ADS1115_REG_CONFIG_PGA_4|\
ADS1115_REG_CONFIG_MODE_SINGLE
#define CONFIG_REG_L ADS1115_REG_CONFIG_DR_128|\
ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\
ADS1115_REG_CONFIG_COMP_POL_LOW|\
ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\
ADS1115_REG_CONFIG_COMP_QUE_DIS
/***************/
//配置寄存器说明
//config register
/*CRH[15:8](R/W)
BIT 15 14 13 12 11 10 9 8
NAME OS MUX2 MUX1 MUX0 PGA2 PGA1 PGA0 MODE
CRL[7:0] (R/W)
BIT 7 6 5 4 3 2 1 0
NAME DR0 DR1 DR0 COM_MODE COM_POL COM_LAT COM_QUE1 COM_QUE0
-----------------------------------------------------------------------------------
* 15 | OS | 运行状态会单词转换开始
* | | 写时:
* | | 0 : 无效
* | | 1 : 开始单次转换处于掉电状态时
* | | 读时:
* | | 0 : 正在转换
* | | 1 : 未执行转换
* -----------------------------------------------------------------------------------
* 14:12 | MUX [2:0] | 输入复用多路配置
* | | 000 : AINP = AIN0 and AINN = AIN1 (default)
* | | 001 : AINP = AIN0 and AINN = AIN3
* | | 010 : AINP = AIN1 and AINN = AIN3
* | | 011 : AINP = AIN2 and AINN = AIN3
* | | 100 : AINP = AIN0 and AINN = GND
* | | 101 : AINP = AIN1 and AINN = GND
* | | 110 : AINP = AIN2 and AINN = GND
* | | 111 : AINP = AIN3 and AINN = GND
* -----------------------------------------------------------------------------------
* 11:9 | PGA [2:0] | 可编程增益放大器配置(FSR full scale range)
* | | 000 : FSR = В±6.144 V
* | | 001 : FSR = В±4.096 V
* | | 010 : FSR = В±2.048 V (默认)
* | | 011 : FSR = В±1.024 V
* | | 100 : FSR = В±0.512 V
* | | 101 : FSR = В±0.256 V
* | | 110 : FSR = В±0.256 V
* | | 111 : FSR = В±0.256 V
* -----------------------------------------------------------------------------------
* 8 | MODE | 工作模式
* | | 0 : 连续转换
* | | 1 : 单词转换
* -----------------------------------------------------------------------------------
* 7:5 | DR [2:0] | 采样频率
* | | 000 : 8 SPS
* | | 001 : 16 SPS
* | | 010 : 32 SPS
* | | 011 : 64 SPS
* | | 100 : 128 SPS (默认)
* | | 101 : 250 SPS
* | | 110 : 475 SPS
* | | 111 : 860 SPS
* -----------------------------------------------------------------------------------
* 4 | COMP_MODE | 比较器模式
* | | 0 : 传统比较器 (default)
* | | 1 : 窗口比较器
* -----------------------------------------------------------------------------------
* 3 | COMP_POL | Comparator polarity
* | | 0 : 低电平有效 (default)
* | | 1 : 高电平有效
* -----------------------------------------------------------------------------------
* 2 | COMP_LAT | Latching comparator
* | | 0 : 非锁存比较器. (default)
* | | 1 : 锁存比较器.
* -----------------------------------------------------------------------------------
* 1:0 | COMP_QUE [1:0] | Comparator queue and disable
* | | 00 : Assert after one conversion
* | | 01 : Assert after two conversions
* | | 10 : Assert after four conversions
* | | 11 : 禁用比较器并将ALERT/RDY设置为高阻抗 (default)
* -----------------------------------------------------------------------------------
*/
//地址指针寄存器
#define ADS1015_REG_POINTER_CONVERT (0x00)
#define ADS1015_REG_POINTER_CONFIG (0x01)
#define ADS1015_REG_POINTER_LOWTHRESH (0x02)
#define ADS1015_REG_POINTER_HITHRESH (0x03)
// 单次转换开始
#define ADS1115_REG_CONFIG_OS_START (0x1U << 7)//设备单词转换开启 高字节的最高位
#define ADS1115_REG_CONFIG_OS_NULL (0x0U << 7)
//输入引脚选择和输入方式选择
#define ADS1115_REG_CONFIG_MUX_Diff_01 (0x0U << 4) // 差分输入0引脚和1引脚
#define ADS1115_REG_CONFIG_MUX_Diff_03 (0x1U << 4) // 差分输入0引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_13 (0x2U << 4) // 差分输入1引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_23 (0x3U << 4) // 差分输入2引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_SINGLE_0 (0x4U << 4) //单端输入 0
#define ADS1115_REG_CONFIG_MUX_SINGLE_1 (0x5U << 4) //单端输入 1
#define ADS1115_REG_CONFIG_MUX_SINGLE_2 (0x6U << 4) //单端输入 2
#define ADS1115_REG_CONFIG_MUX_SINGLE_3 (0x7U << 4) //单端输入 3
//量程选择
#define ADS1115_REG_CONFIG_PGA_6 (0x0U << 1) // +/- 6.1144
#define ADS1115_REG_CONFIG_PGA_4 (0x1U << 1) // +/- 4.096
#define ADS1115_REG_CONFIG_PGA_2 (0x2U << 1) // +/- 2.048
#define ADS1115_REG_CONFIG_PGA_1 (0x3U << 1) // +/- 1.024
#define ADS1115_REG_CONFIG_PGA_05 (0x4U << 1) // +/- 0.512
#define ADS1115_REG_CONFIG_PGA_02 (0x5U << 1) // +/- 0.256
//运行方式
#define ADS1115_REG_CONFIG_MODE_SINGLE (0x1U << 0) // 单次
#define ADS1115_REG_CONFIG_MODE_CONTIN (0x0U << 0) //连续转换
//转换速率
#define ADS1115_REG_CONFIG_DR_8 (0x0U << 5)
#define ADS1115_REG_CONFIG_DR_16 (0x1U << 5)
#define ADS1115_REG_CONFIG_DR_32 (0x2U << 5)
#define ADS1115_REG_CONFIG_DR_64 (0x3U << 5)
#define ADS1115_REG_CONFIG_DR_128 (0x4U << 5)
#define ADS1115_REG_CONFIG_DR_250 (0x5U << 5)
#define ADS1115_REG_CONFIG_DR_475 (0x6U << 5)
#define ADS1115_REG_CONFIG_DR_860 (0x7U << 5)
//比较器模式
#define ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL (0x0U << 4)//默认
#define ADS1115_REG_CONFIG_COMP_MODE_WINDOW (0x1U << 4)
#define ADS1115_REG_CONFIG_COMP_POL_LOW (0x0U << 3)//默认
#define ADS1115_REG_CONFIG_COMP_POL_HIG (0x1U << 3)
#define ADS1115_REG_CONFIG_COMP_LAT_NONLATCH (0x0U << 2)
#define ADS1115_REG_CONFIG_COMP_LAT_LATCH (0x1U << 2)
#define ADS1115_REG_CONFIG_COMP_QUE_ONE (0x0U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_TWO (0x1U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_THR (0x2U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_DIS (0x3U << 0)
void ads1115_config_register(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
int16_t ads1115_read_data(I2C_HandleTypeDef ads1115_I2cHandle);
double ads1115_get_voltage_val(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
#endif