ADS1115模拟采集提升传感器数据精度

在实验室里调试一个温湿度监测系统时,你有没有遇到过这样的尴尬:明明传感器标称精度很高,可读出来的数据却总是在跳动?尤其是在工业现场或长导线环境下,0.5℃的波动简直家常便饭。问题出在哪?很可能就是那个被忽略的“小透明”——MCU内置ADC。

别急着换主控芯片,先看看 ADS1115 这个低调的实力派选手。它不像GPU那样炫酷,也不像Wi-Fi模块那样引人注目,但它能让你的传感器真正发挥出应有的精度潜力 🎯。


为什么普通ADC“拖了后腿”?

我们常用的STM32、ESP32甚至Arduino Uno,自带的ADC大多是10位或12位。以12位为例,在3.3V参考电压下,最小分辨电压是:

$$
\frac{3.3}{4096} \approx 0.8~\text{mV}
$$

听起来不错?但当你面对输出只有几毫伏的应变片、热电偶或者pH探头时,这就相当于用米尺去量头发丝的直径——根本不够看!

更头疼的是:
- 参考电压不稳定(尤其是用VCC当参考)
- 地线噪声串扰严重
- 没有增益放大功能,小信号直接淹没在量化噪声中

这时候,外接一个高精度ADC就成了性价比最高的升级方案。而 ADS1115 ,正是这一领域的“六边形战士”。


ADS1115:不只是多几个比特那么简单

这颗来自TI的小黑块,看着不起眼,内里却大有乾坤。它不是简单的逐次逼近型ADC,而是采用了 ΔΣ(Delta-Sigma)架构 ——这种结构天生适合慢速、高精度测量。

简单来说,它的原理就像“积分+平均”:
1. 把输入信号变成一串高频脉冲;
2. 数这些脉冲的数量;
3. 再通过数字滤波器平滑处理,最终得到超高分辨率的结果。

结果是什么? 16位分辨率 ,也就是65536个离散电平!在±0.256V量程下,每一步的变化仅为:

$$
\frac{0.256 \times 2}{65536} = 7.8125~\mu V/\text{LSB}
$$

⚡️ 没错,是微伏级!这意味着你能检测到比手机充电器待机纹波还小的电压变化。

而且它还自带“望远镜”—— 可编程增益放大器(PGA) ,支持6档增益调节:

增益 满量程 适用场景
±6.144 V ×0.125 大信号直接接入
±4.096 V ×0.1875 工业4-20mA转换
±2.048 V ×0.375 通用测量
±1.024 V ×0.75 中等幅度信号
±0.512 V ×1.5 小信号增强
±0.256 V ×6 mV级传感器首选 🔍

比如你的压力传感器只输出0~30mV?直接扔进±6.144V量程,那相当于只用了不到1%的动态范围,有效分辨率暴跌到不足9位。但如果切换到±0.256V档位,瞬间就能把信噪比拉满,逼近理论极限。


实战技巧:让精度起飞的四个关键操作

✅ 差分输入:专治各种“地线噪声综合征”

你在工厂布线时是不是经常发现,明明接地了,数据还是乱跳?这就是典型的共模干扰——电源波动、电机启停、开关电源噪声全都耦合到了信号线上。

ADS1115有两个差分通道(AIN0-AIN1 和 AIN2-AIN3),这才是它的杀手锏!

举个例子:热电偶或惠斯通电桥这类传感器,天然输出差分信号。如果你用单端采样,地线上的100mV噪声会直接叠加进去;但换成差分模式,只要两边受到的干扰差不多,就会被自动抵消 💥。

#include <Wire.h>
#include <Adafruit_ADS1115.h>

Adafruit_ADS1115 ads;

void setup() {
  Serial.begin(9600);
  ads.begin();
  ads.setGain(GAIN_TWO);        // ±2.048V
  ads.setDataRate(RATE_ADS1115_128);
}

void loop() {
  int16_t raw = ads.readADC_Differential_0_1();  // 差分采集
  float voltage = raw * 0.000125; // 125μV per LSB

  Serial.printf("Diff Voltage: %.6f V\n", voltage);
  delay(1000);
}

💡 小贴士:差分走线尽量等长对称,远离强干扰源,效果更佳!


✅ PGA调增益:别再浪费宝贵的分辨率!

很多人以为“量程越大越好”,其实恰恰相反。选错增益等于主动放弃精度。

假设某传感器输出0~40mV,我们来对比不同PGA设置下的表现:

PGA量程 LSB大小 40mV对应码数 等效分辨率
±6.144V 187.5 μV ~213 ≈7.7位
±0.256V 7.8125 μV ~5120 ≈15.6位

看出差距了吗?同样是16位ADC,合理配置能让有效精度提升近8位!这可不是简单的“数值好看”,而是实打实的稳定性提升。

所以记住一句话: 让信号尽可能填满量程,但不要溢出 。

ads.setGain(GAIN_SIXTEEN);  // 启用×6增益,±0.256V
int16_t reading = ads.readADC_SingleEnded(0);
float uV = reading * 7.8125; // 转成微伏

⚠️ 注意:高增益也意味着更容易受干扰,建议配合RC低通滤波(比如10kΩ + 100nF)使用。


✅ 单次转换模式:节能又安静

如果你做的是电池供电设备(比如野外气象站),ADS1115还有一个隐藏神技: 单次转换模式 。

开启后,它完成一次采样就立刻进入休眠状态,电流低至 <1μA !下次需要时再唤醒,既省电又能避免持续工作带来的自发热和电源扰动。

// 启动单次转换
ads.startADCReading(ADS1115_COMP_QUE_ONE, false);

// 等待完成(非阻塞也可用中断)
while (!ads.conversionComplete());

int16_t result = ads.getLastConversionResults();

对于每秒采一次的环境监测系统来说,这种方式简直是续航利器 ⚡🔋。


✅ 软件滤波:最后的“精修”步骤

即便用了ADS1115,原始数据仍可能轻微抖动。这时候就需要一点“后期处理”了。

推荐两种经典滤波方式:

① 移动平均滤波(适合缓慢变化信号)

#define N 16
int32_t buffer[N] = {0};
int idx = 0;

int32_t moving_avg(int16_t new_val) {
  buffer[idx] = new_val;
  idx = (idx + 1) % N;

  int32_t sum = 0;
  for (int i = 0; i < N; i++) sum += buffer[i];
  return sum / N;
}

适用于温度、光照、湿度等缓变信号,能显著平滑曲线。

② 中值滤波(对付突发尖峰噪声)

int16_t median(int16_t arr[], int n) {
  // 简单冒泡排序(n=5或7足够)
  for (int i = 0; i < n - 1; i++)
    for (int j = 0; j < n - i - 1; j++)
      if (arr[j] > arr[j+1]) swap(arr[j], arr[j+1]);
  return arr[n/2];
}

特别适合存在电磁干扰、接触不良导致的“毛刺”信号。

🎯 高阶玩法:先中值再去平均,双重净化,稳如老狗!


典型应用案例:低成本高精度电子秤

之前有人反馈说用HX711做小量程称重,零点漂移严重,10g以下根本分不清。换成ADS1115后,配合桥式传感器+差分输入,效果立竿见影:

问题 解法
零点漂移大 改用差分输入 + 定期软件清零
分辨率不足 PGA设为±0.256V,可达0.05g分辨率
数据跳动 加入16点移动平均滤波

最终实现:
- 量程:0~500g
- 分辨率:0.05g
- 重复性误差:<0.1g
- 成本控制在30元以内 💪

关键是整个过程不需要昂贵的仪表放大器,ADS1115自己全包了。


系统设计注意事项(血泪经验)

别以为插上就能用,这几个坑我替你踩过了:

🔧 I²C上拉电阻不能少
ADS1115的I²C引脚是开漏输出,必须外接4.7kΩ上拉电阻到VDD,否则通信不稳定。多个设备共享总线时尤其要注意。

🌡️ 注意温漂补偿
虽然内部参考电压还算稳定,但在-40℃~+85℃范围内仍有±30ppm/℃的温漂。如果要做长期稳定测量,建议定期做零点校准,或者外接低温漂基准(如REF3025)。

📍 PCB布局要讲究
- 差分走线尽量等长、平行;
- 模拟地与数字地分开,单点汇合;
- 电源加0.1μF陶瓷电容就近滤波;
- 远离开关电源、继电器等干扰源。

🔌 地址选择灵活
四款硬件地址可选(ADDR接GND、VDD、SDA、SCL),允许同一I²C总线上挂4个ADS1115,轻松扩展多通道采集系统。


结语:小改动,大收益 🌟

ADS1115或许不会出现在你的产品宣传页上,但它绝对值得被写进你的“可靠性设计清单”。

它不贵(单价普遍低于15元),不占地方(SOIC-8封装),接口简单(仅需I²C两根线),却能把原本“将就可用”的传感器系统,升级成真正 可靠、精准、抗干扰强 的数据采集前端。

下次当你觉得“这传感器不准”的时候,不妨换个思路:也许不是传感器的问题,而是你还没给它配上一双“看得清世界的眼睛” 👀。

正所谓:好马配好鞍,好传感器当然要配ADS1115!🐎✨

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐