ADS1115多路模数转换器
ADS1115 器件是兼容 IIC 的 16 位高精度低功耗模数转换器 (ADC),采用超小型无引线 X2QFN-10 封装和 VSSOP-10 封装。ADS111x 器件采用了低漂移电压基准和振荡器。ADS1114 和 ADS1115 还采用可编程增益放大器(PGA)和数字比较器。这些特性加以较宽的工作电源电压范围使得 ADS1115 非常适合功率与空间受限的传感器测量。
ADS111x 可在数据速率高达每秒 860 个样本 (SPS) 的情况下执行转换。PGA 可提供从 ±256mV 到±6.144V 的输入范围,从而实现精准的大小信号测量。ADS1115 具有 一个输入多路复用器 (MUX),可实现两次差动输入测量或四次单端输入测量。在ADS1115 中可使用数字比较器进行欠压和过压检测。 ADS1115既可在连续转换模式下工作,也可在单冲模式下工作。在单冲模式下,这些器件可在一次转换后自动断电;因此显著降低了空闲期间的功耗。
模块来源
规格参数
工作电压:2.0-5.5V
工作电流:150uA
采集精度:16位
采集通道:4通道
控制方式:IIC
管脚数量:10 Pin(2.54mm间距排针)
硬件连接
确保你的ADS1115模块和开发板按照如下方式连接:
- ADS1115的VDD接开发板的3.3V
- ADS1115的GND接开发板的GND
- ADS1115的SDA(数据线)接开发板的A4(SDA)
- ADS1115的SCL(时钟线)接开发板的A5(SCL)
- ADS1115的A0引脚接到需要ADC测量的地方
如果必要,可以接入ADS1115的地址引脚来改变其I2C地址,以便在总线上使用多个设备。
使用方法
安装库
你需要在Arduino IDE中编写程序来初始化I2C通信,配置ADS1115,读取数据。可以使用Adafruit提供的ADS1X15库来简化编程过程。
- 在Arduino IDE中安装Adafruit_ADS1X15库。进入"工具" > “管理库…”,然后搜索并安装Adafruit_ADS1X15库。
编写代码
c
/******************************************************************************
* 测试硬件:ColorEasyDuino开发板
* 版 本 号: V1.0
* 修改作者: www.lckfb.com
* 修改日期: 2024年04月08日
* 功能介绍:
*****************************************************************************
* 开发板软硬件资料与相关项目软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
******************************************************************************/
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads; // 默认的I2C地址是0x48,可以通过调整引脚来改变
void setup(void)
{
Serial.begin(9600);
Serial.println("Hello!");
Wire.begin(); // 初始化I2C系统
ads.begin(); // 初始化ADS1115通信
// GAIN_TWOTHIRDS = 6_144V,
// GAIN_ONE = 4_096V,
// GAIN_TWO = 2_048V,
// GAIN_FOUR = 1_024V,
// GAIN_EIGHT = 0_512V,
// GAIN_SIXTEEN = 0_256V
ads.setGain(GAIN_ONE); // 设置增益为1, 量程±4.096V
}
void loop(void)
{
int16_t adc0, adc1, adc2, adc3;
float ret;
// 读取通道0的模数转换结果
adc0 = ads.readADC_SingleEnded(0);
// 如果需要,也可以读取其他通道
// adc1 = ads.readADC_SingleEnded(1);
// adc2 = ads.readADC_SingleEnded(2);
// adc3 = ads.readADC_SingleEnded(3);
//默认最大量程为4.096V
Serial.print("ADC0: "); Serial.println(adc0);
// 分辨率计算:测量电压范围/(2^AD位数-1)
// 分辨率= 4.096V/2^15=0.000125
// 电压= 采集到的ADC值 * 分辨率
ret=adc0*0.000125;
Serial.print("voltage: "); Serial.println(ret);
// 为了方便观察,延时一段时间
delay(1000);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
使用验证
分别测量GND,5V,3V3。