ADS1115高精度ADC采样工业检测方案
在工厂车间的某个角落,一台小小的传感器正默默感知着管道内的压力变化。它输出的信号可能只有几毫伏——比手机充电器纹波还小——但正是这微弱的电压,决定了整个生产流程是否安全可控。如何把这种“ whispers of the machine(机器的低语)”准确捕捉下来?这就是高精度ADC存在的意义。
TI 的 ADS1115 ,这块小小的16位Δ-Σ ADC芯片,就像一位听力敏锐的工程师,能在嘈杂的工业噪声中听清最细微的变化。它不追求高速采样,而是专注于“看得更细、测得更准”。今天我们就来聊聊,怎么用它构建一套真正可靠的工业级数据采集系统 🧰🔧。
为什么是ADS1115?不只是多几个有效位那么简单 💡
你可能会问:我MCU自带12位ADC,不够用吗?
我们做个简单计算:假设供电3.3V,12位ADC的最小分辨约为 0.8mV (即 3300mV / 4096)。而一个K型热电偶在室温附近每摄氏度只产生约41μV电压——这意味着你的ADC连1°C都分不清!😱
再看ADS1115:
- 16位分辨率
- 内置PGA(可编程增益放大器),最高×16增益
- 最小可分辨 0.125μV (当满量程为±6.144V时)
换句话说,它能“放大细节”,让原本淹没在噪声中的微弱信号浮出水面。
而且它通过I²C通信,仅需两根线就能搞定四路输入(差分或单端),封装只有VSSOP-10,贴片焊接毫无压力。对于需要紧凑设计的远程IO模块、电池供电节点来说,简直是天选之子 ✨。
它是怎么“听清楚”的?深入工作原理 🔍
ADS1115不是普通的逐次逼近型ADC,它采用的是 Δ-Σ调制技术 —— 类似于高保真音响里的“过采样+数字滤波”思路。
它的核心流程可以理解为三步走:
-
先放大 :信号进来后,先进入PGA。你可以选择不同的增益档位(×1、×2…×16),相当于调节“麦克风灵敏度”。
- 比如你要测±200mV的小信号,那就把增益设成×16,把信号“拉大”到±3.2V去匹配ADC的参考电压。 -
再调制 :放大后的信号送入Δ-Σ调制器,生成一串高频脉冲流(bitstream)。这个过程像是不断比较输入和反馈值,记录误差累积。
-
最后滤波 :数字低通滤波器对这个脉冲流做积分处理,提取出稳定的16位结果。
整个过程有点像“称重时反复加减砝码并取平均”,虽然慢一点(最快860SPS),但极其精准,尤其擅长压制白噪声和工频干扰。
⚙️ 提示:如果你的应用不需要实时响应(比如温度监测),完全可以使用 单次转换模式 。每次读完就自动休眠,功耗低至 <1μA ,特别适合无线传感节点!
实战代码来了!Arduino快速上手 📟
下面这段代码跑在ESP32或者Arduino上都能用,借助Adafruit官方库,几分钟就能点亮ADS1115:
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads; // 默认I²C地址 0x48
void setup() {
Serial.begin(115200);
Wire.begin();
if (!ads.begin()) {
Serial.println("❌ ADS1115未连接!");
while (1); // 卡住报错
}
ads.setGain(GAIN_ONE); // ±4.096V量程
ads.setDataRate(RATE_ADS1115_16); // 16 SPS,抗50Hz干扰友好
ads.setMode(ADS1115_MODE_SINGLE); // 单次模式省电
}
void loop() {
int16_t raw = ads.readADC_SingleEnded(0); // 读AIN0
float volts = ads.computeVolts(raw); // 自动转电压
Serial.print("Raw: "); Serial.print(raw);
Serial.print(" | Voltage: ");
Serial.print(volts, 6); Serial.println(" V");
delay(500);
}
✨ 小技巧:
- computeVolts() 会根据当前增益自动换算,省去手动查表;
- 若想提升稳定性,建议加上 滑动平均滤波 (比如取最近10次均值);
- 差分输入推荐使用 readADC_Differential_0_1() ,抗干扰能力更强。
工业现场不能只靠芯片本身!前端调理才是关键战场 🛡️
ADS1115虽强,但在真实工厂里,电磁环境堪比“战场”:电机启停、变频器干扰、静电放电……稍不留神就会让数据跳字甚至损坏器件。所以必须配一套靠谱的前端电路。
🔹 输入保护:别让第一道防线失守
传感器 → [10Ω限流电阻] → [TVS二极管(SMAJ3.3CA)] → [100nF瓷片电容→GND]
↘ → 连接到ADS1115输入引脚
这套组合拳的作用:
- 10Ω电阻 :限制瞬态电流,防止芯片内部ESD结构被击穿;
- TVS二极管 :一旦电压超过3.3V,立即导通泄放能量(应对±8kV ESD);
- 100nF电容 :滤掉MHz级以上射频噪声,避免误触发。
📌 经验之谈:不要省掉这三件套!我在某项目中因未加TVS,上线三天烧了五块板子 😭。
🔹 处理4–20mA信号?这样接才稳!
很多工业变送器输出的是4–20mA电流信号,我们需要把它变成电压给ADS1115读取。
✅ 正确做法:
- 在 AIN0 和 AIN1 之间接入一个 125Ω ±0.1% 精密金属膜电阻 ;
- 配置为差分输入模式;
- PGA设为×1(±4.096V足够覆盖0.5~2.5V范围);
这样:
- 4mA → 0.5V
- 20mA → 2.5V
动态范围刚好落在ADC中间区域,信噪比最优!
💡 优势:
- 差分输入天然抑制共模干扰;
- 支持远距离传输(屏蔽双绞线+电流信号抗干扰强);
- 不依赖传感器接地,适应复杂现场环境。
🔹 电源去耦:稳压就是稳定测量
ADC的精度很大程度取决于参考电压的纯净程度。哪怕电源上有几十毫伏纹波,都会直接映射成测量误差。
推荐电源设计:
- VDD与GND间并联两个电容 :
- 10μF钽电容(储能)
- 100nF X7R陶瓷电容(高频去耦)
- 距离芯片引脚越近越好(<1cm);
- 如果主电源是开关电源(如DC-DC),建议加个π型LC滤波器(10μH + 两端各10μF);
- 数字地和模拟地 单点连接 于电源入口处,避免地环路引入干扰。
🧠 插一句:有人喜欢用磁珠隔离DGND/AGND,其实多数情况下没必要,反而增加阻抗风险。不如老老实实做好布局和铺地。
实际应用场景拆解 🏭
来看看一个典型的工业数据采集系统长什么样:
[PT100温度传感器]
↓
[恒流源激励 + 差分放大] → [ADS1115] ⇄ I²C ⇄ [STM32]
↓
[RS-485(Modbus)]
↓
[PLC / SCADA上位机]
在这个链路中:
- STM32负责定时读取ADS1115数据;
- 做冷端补偿、查表法转温度;
- 加入滑动平均或中值滤波;
- 打包成Modbus寄存器上传;
- 异常时驱动继电器报警或本地LED闪烁。
是不是很简单?但魔鬼藏在细节里。
常见坑点 & 解决方案 💥➡️✅
❌ 问题1:小信号漂移严重(如热电偶读数乱跳)
🔍 可能原因:
- 共模干扰未抑制
- 电源噪声过大
- 缺少硬件滤波
✅ 解法:
- 改用差分输入;
- 增加RC低通滤波(R=10k, C=10μF → 截止频率~1.6Hz);
- 使用LDO供电(如TPS7A47)替代DC-DC;
- 软件端加 指数平滑滤波 : filtered = α * new + (1-α) * old
❌ 问题2:多个ADS1115地址冲突
I²C总线上最多只能挂4片ADS1115,因为ADDR引脚只有4种配置方式:
- GND → 0x48
- VDD → 0x49
- SDA → 0x4A
- SCL → 0x4B
✅ 扩展方案:
- 使用 TCA9548A I²C多路复用器 ,一片即可扩展8条独立总线;
- 或改用SPI接口ADC(如ADS1256),灵活性更高。
❌ 问题3:50Hz工频干扰明显(周期性波动)
这是国内工业现场最常见的“幽灵噪声”。
✅ 对策:
- 设置ADS1115采样率为 100SPS 或 200SPS ,使其整数倍避开50Hz奇次谐波(如150Hz、250Hz);
- 启用数字陷波滤波器(在MCU中实现);
- 使用 屏蔽双绞线 连接传感器,并将屏蔽层单点接地;
- 避免将信号线与动力电缆平行布线!
🎯 小知识:ADS1115在8SPS档位下具有最佳抗50/60Hz干扰能力,因为它正好是工频的整数分频。
设计 checklist:老司机私藏经验清单 🚗💨
| 项目 | 推荐做法 |
|---|---|
| PCB布局 | 模拟走线远离数字信号线;底层完整铺AGND平面 |
| 接地策略 | 模拟地与数字地在电源入口处“星型”单点连接 |
| 采样率选择 | ≤100SPS优先选8SPS或16SPS,增强抗工频能力 |
| 校准机制 | 出厂前校准零点偏移;现场每季度执行一次满度标定 |
| 故障诊断 | 开机自检读取内部GND通道(应接近0);添加看门狗 |
| 成本控制 | 多通道需求下可用一片ADS1115轮询,节省BOM |
结语:高精度的本质,是系统思维 🎯
ADS1115的成功,不仅仅在于那16位分辨率,更在于它把 PGA + 基准源 + 数字滤波 + I²C接口 高度集成在一起,降低了工程门槛。
但它终究只是拼图的一块。真正的工业级可靠性,来自于:
- 合理的前端调理,
- 干净的电源设计,
- 抗干扰的PCB布局,
- 智能的软件滤波,
- 定期的现场校准。
当你把这些环节都打通,你会发现:原来所谓“高精度”,并不是某个芯片的魔法,而是一整套严谨工程实践的结果。
🛠️ 所以,下次你在调试一个跳动的数据时,不妨问问自己:
“是我没选对ADC,还是忘了加那个100nF电容?” 😉
ADS1115或许不会解决所有问题,但它一定能让通往精确的路上,少走几步弯路。

766

被折叠的 条评论
为什么被折叠?



