资讯动态

从电桥测温到数据采集:ADS1115电路设计与程序调试全解析

发布时间:2026/8/14 20:07:58 来源:尧图企业网站定制
1. 电桥测温原理与ADS1115选型温度测量在工业控制和物联网设备中非常常见而电桥电路因其高精度和稳定性成为测温的首选方案之一。PT1000热敏电阻作为电桥的一个桥臂其阻值会随温度变化导致电桥输出差分电压信号。这个微弱的电压信号通常在毫伏级别需要高精度的模数转换器才能准确采集。ADS1115作为一款16位精度的ADC芯片其最小可检测电压变化为0.0078mV在±0.256V量程下完全满足电桥测温的需求。相比常见的12位ADC它的分辨率提高了16倍。我在实际项目中发现当使用普通MCU内置ADC时温度波动经常达到±0.5℃而改用ADS1115后精度可以稳定在±0.1℃以内。选择ADS1115还有几个重要原因它内置可编程增益放大器(PGA)支持多种电压量程采用I2C接口只需要两根线就能实现通信芯片自带128SPS的数据速率既不会拖慢系统响应又能有效抑制噪声。记得第一次使用时我尝试用软件模拟I2C协议结果发现时序总是不稳定后来改用硬件I2C才解决问题。2. 电桥电路设计与信号调理2.1 电桥参数计算典型电桥电路由四个电阻组成我们使用PT1000作为温度敏感元件。假设在25℃时PT1000阻值为1000Ω其他三个桥臂电阻分别取2kΩ、2kΩ和1kΩ。这种非对称设计可以产生更大的输出电压变化。根据分压原理电桥输出电压Vout Vin*(R3/(R3R4) - R2/(R1R2))。实际焊接时有个细节要注意所有电阻都应该选用精度至少1%的金属膜电阻我曾在测试时发现温度读数漂移后来发现是用了5%精度的碳膜电阻导致。贴片电阻建议选择0805或更大封装0603虽然节省空间但手工焊接难度大。2.2 参考电压与差分信号处理电桥激励电压的稳定性直接影响测量精度。REF3025是一款2.5V精密电压基准温漂仅10ppm/℃比普通LDO稳压效果好得多。在PCB布局时这个芯片要尽量靠近电桥走线要粗短避免引入压降。ADS1115的差分输入阻抗高达6MΩ这意味着它几乎不会从电桥汲取电流保证了测量准确性。但要注意当电桥输出电压可能为负时比如温度低于0℃必须确保ADS1115的AIN0和AIN1引脚电压都在GND-0.3V到VDD0.3V范围内。我遇到过引脚电压超出范围导致芯片锁死的情况后来在输入端加了保护二极管才解决。3. ADS1115硬件连接与配置3.1 引脚定义与电路连接ADS1115采用MSOP-10封装关键引脚包括VDD2.0-5.5V供电GND接地SCL/SDAI2C时钟和数据线A0-A2地址选择引脚ALERT/RDY中断输出典型连接方式是将A0-A2接地这样I2C地址为0x48写入地址0x90读取地址0x91。如果板上有多个ADS1115可以通过改变这三个引脚的电平来区分。SCL和SDA线要加上拉电阻一般4.7kΩ即可长距离传输时可以减小到2.2kΩ。3.2 电源滤波与抗干扰虽然ADS1115功耗很低工作时约0.6mA但电源滤波仍然很重要。建议在VDD引脚就近放置一个0.1μF陶瓷电容和一个10μF钽电容。有一次我的读数总是有周期性波动后来发现是电源滤波不足增加电容后问题消失。对于高精度应用还可以考虑以下措施使用独立电源给模拟部分供电在I2C线上加EMI滤波器保持模拟地和数字地单点连接在PCB底层铺铜作为屏蔽层4. 程序设计详解4.1 I2C通信基础ADS1115采用标准I2C协议支持100kHz和400kHz速率。初始化时需要配置几个关键参数#define ADS1115_WRITE_ADDR 0x90 #define ADS1115_READ_ADDR 0x91 void I2C_Init() { // 初始化硬件I2C设置时钟频率等参数 // 不同MCU的初始化代码不同 }实际调试时建议先用逻辑分析仪抓取I2C波形。常见问题包括起始/停止条件不符合时序要求数据建立时间不足从设备无应答时钟速率设置错误4.2 配置寄存器设置ADS1115的配置寄存器(0x01)决定了工作模式主要关注这几个位OS单次转换触发位MUX输入通道选择PGA增益设置MODE连续/单次模式DR数据速率COMP_*比较器设置典型的温度测量配置如下void ADS1115_Config() { uint8_t config[3]; config[0] 0x01; // 指向配置寄存器 config[1] 0x8B; // 高字节AIN0-AIN1差分±0.256V单次模式 config[2] 0x83; // 低字节128SPS传统比较器非锁存 I2C_Write(ADS1115_WRITE_ADDR, config, 3); }4.3 数据读取与转换读取转换结果分为三步写入配置寄存器启动转换等待转换完成可轮询或使用中断读取转换寄存器(0x00)int16_t ADS1115_Read() { uint8_t reg 0x00; // 指向转换寄存器 uint8_t data[2]; I2C_Write(ADS1115_WRITE_ADDR, reg, 1); I2C_Read(ADS1115_READ_ADDR, data, 2); return (data[0] 8) | data[1]; }将原始数据转换为实际电压float rawToVoltage(int16_t raw) { float fsr 0.256f; // 对应±0.256V量程 return (raw * fsr) / 32768.0f; }4.4 负电压处理与温度计算由于ADS1115输出的是二进制补码需要先判断符号位int16_t raw ADS1115_Read(); float voltage; if (raw 0x8000) { voltage (raw - 65536) * 0.256 / 32768; } else { voltage raw * 0.256 / 32768; }根据电桥输出电压计算PT1000电阻值float R1 2000.0f; // 电桥电阻值 float Vref 2.5f; // 参考电压 float Rt (2 * Vref * R1) / (Vref - 2 * voltage) - R1;最后通过查表或公式将电阻值转换为温度。PT1000在0-100℃范围内近似线性可以使用简化公式float temperature (Rt - 1000.0f) / 3.85f;5. 调试技巧与常见问题5.1 硬件调试上电前务必检查电源电压是否正确所有接地是否连通I2C上拉电阻是否安装输入信号不超过量程常见硬件问题及解决方法读数全为零检查I2C地址是否正确芯片是否正常工作读数跳动大检查电源滤波缩短信号线长度负电压读数错误确认输入电压在允许范围内5.2 软件调试建议按以下步骤验证先确认能正确读写配置寄存器测试固定电压输入如分压电阻最后接入电桥电路调试时可以打印原始数据和转换结果printf(Raw: %d, Voltage: %.4fV, Temp: %.2fC\n, raw, voltage, temperature);5.3 精度优化要提高测量精度可以考虑使用外部精密基准源增加软件滤波如移动平均定期自动校准零点在稳定环境中进行多点校准我在一个冷链监控项目中通过三点校准0℃、25℃、50℃将系统精度提高到了±0.05℃。校准数据保存在EEPROM中每次上电自动加载。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价