2026 Make Blocks #3阶段2 - 基于ADS1115的多通道ADC采集模块
该项目使用了ADS1115,实现了ADC采集模块的设计,它的主要功能为:4通道ADC采集。
标签
ADC
Make Blocks
ADS1115
无言的朝圣
更新2026-07-16
75

任务介绍

设计一款基于普及型ADC芯片的电压采集模块,作为各类测量系统的入门基础。

1、核心设计要求

芯片选型:选用ADS1115或同类入门级ADC芯片

功能目标:将外部0-5V或0-12V的模拟电压信号转换为数字量,通过I2C或SPI数字接口输出给MCU读取处理

量程适配:设计分压电阻网络,解决ADC芯片仅支持低电压输入的量程转换需求

2、PCB设计规范

电源处理:在芯片电源引脚旁紧贴放置去耦电容,保障供电稳定

外设配置:板上配备接线端子,方便外部模拟信号接入

接口配置:预留MCU专用接口,方便与主控板快速连接

制作出可稳定采集外部电压、并将数字量传输给单片机的功能模块,作为学习模拟信号数字化处理的入门实践载体。

设计方案介绍

本次选用的ADS1115是一个四通道的ADC采集芯片,我们需要对输入通道进行划分,比如对于高压信号的数据如何分配,这样实现支持大量程采集。本次的设计主要包含硬件模块如下:
0

模块介绍

本次选用TI的ADS1115作为核心器件,设计多通道数据采集模块。这款16位Δ-Σ架构ADC采用超小封装,仅2mm×1.5mm,适配空间受限的嵌入式与便携设备。它支持2.0V-5.5V宽压供电,可直接对接3.3V/5V MCU,无需额外电平转换。芯片高度集成内置低漂移基准源、PGA与精密振荡器,无需外挂周边电路,大幅简化设计、降低BOM成本。它支持4路模拟输入,可切换单端/差分采集模式,通过I2C接口通信,最多可挂载4片实现16通道扩展,采样速率8-860SPS可调,功耗低至0.5μA,还自带阈值比较中断功能,是传感器采集、便携仪表、环境监测等场景的高性价比入门ADC方案。

原理图和PCB模块介绍
0

原理图
0

PCB
0

3D效果图
0

实物图

调试记录

我们这次设计的是一个4通道的ADC采集模块,最多支持四路的ADC采集,,通过I2C接口进行配置和通信,这次我们使arduino R4开发板进行基本控制和通信,使用便携调试装备输出1.67V,基本连接如下:
0

这里我们找到了一个arduino库进行快速验证,注意addr引脚的连接要对应上,具体代码如下:

#include <Wire.h>
#include <DFRobot_ADS1115.h>

DFRobot_ADS1115 ads(&Wire);

void setup(void)
{
Serial.begin(115200);
ads.setAddr_ADS1115(ADS1115_IIC_ADDRESS1); // 0x48
ads.setGain(eGAIN_TWO); // 2x gain
ads.setMode(eMODE_SINGLE); // single-shot mode
ads.setRate(eRATE_128); // 128SPS (default)
ads.setOSMode(eOSMODE_SINGLE); // Start a single-conversion (default)
ads.setCompMode(eCOMPMODE_TRAD); // Traditional comparator with hysteresis (default)
ads.setCompPol(eCOMPPOL_LOW); // Comparator polarity: Active low (default)
ads.setCompLat(eCOMPLAT_LATCH); // Latching comparator
ads.setCompQue(eCOMPQUE_ONE); // Comparator queue: Assert after one conversion
// ADC Range: 2x gain (1 bit = 0.0625mV)");
// Serial.println("Comparator High Threshold: 32000 (2.000V)");
ads.setHighThreshold(32000);
ads.init();
delay(1000);
}

void loop(void)
{
if (ads.checkADS1115())
{
int16_t result01, result03, result13, result23;
Serial.println("Get the voltage difference between two channels");
Serial.println(" ");
result01 = ads.comparatorVoltage(01);
Serial.print("The voltage difference between A0 and A1 ");
Serial.print(result01);
Serial.println("mV");
result03 = ads.comparatorVoltage(03);
Serial.print("The voltage difference between A0 and A3 ");
Serial.print(result03);
Serial.println("mV");
result13 = ads.comparatorVoltage(13);
Serial.print("The voltage difference between A1 and A3 ");
Serial.print(result13);
Serial.println("mV");
result23 = ads.comparatorVoltage(23);
Serial.print("The voltage difference between A2 and A3 ");
Serial.print(result23);
Serial.println("mV ");
}else
{
Serial.println("ADS1115 Disconnected!");
}

delay(1000);
}

注意地址的选择以及基本的配置。

串口打印效果,可以看到我们连接的通道可以采集正确的电压,但是悬空的通道也有居然有输出啊,后续设计可以注意,不要悬空:

image.png

心得体会

本次设计的核心是做一块功能完整的ADC电压采集模块,最大的亮点是同时提供4路独立的模拟输入通道,用户可以一次性接入4个不同的电压信号进行采集,灵活性远超单通道方案,能很好地应对多传感器同时测量的实际场景。我们使用arduino进行代码配置和通信可以看到对于正常连接外部信号的通道,采集的数据非常的准确,说明精度还是挺不错的。

附件下载
comparatorVoltage.zip
4CH-ADC.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号