STM32F103C8T6 + ADS1256 高精度电子秤:从1mV/V传感器到24位ADC的300倍放大电路设计
STM32F103C8T6 + ADS1256 高精度电子秤:从1mV/V传感器到24位ADC的300倍放大电路设计
在工业测量和实验室应用中,高精度称重系统对微弱信号的处理能力直接决定了整个系统的性能边界。本文将深入解析如何构建一个基于STM32F103C8T6和24位Σ-Δ ADC ADS1256的高精度电子秤系统,重点攻克1mV/V灵敏度应变传感器的信号调理难题,实现总增益300倍的超低噪声放大链路。
1. 系统架构与设计挑战
典型的高精度电子秤系统由四个关键模块构成:应变传感器、模拟信号调理电路、高分辨率ADC和数字处理单元。当使用1mV/V灵敏度的应变片传感器时,10V激励电压下满量程输出仅10mV,而系统需要检测的最小重量变化可能对应纳伏级别的电压变化。
主要技术难点:
- 传感器输出的差分信号包含高达5V的共模电压
- 有用信号被淹没在电源噪声和环境干扰中
- 300倍增益要求下需保持极低的噪声和漂移
- 24位ADC的完整性能挖掘需要精心设计模拟前端
关键指标:系统总噪声需控制在3μVpp以下,温漂小于0.5ppm/℃,才能实现0.01%FS的测量精度。
2. 信号调理电路设计
2.1 仪表放大器级设计
第一级采用TI的INA128仪表放大器构建差动放大电路,这是整个信号链噪声性能的决定性环节。该级承担三个核心任务:
- 抑制5V共模电压
- 提供初始增益(约50倍)
- 保持高输入阻抗避免负载效应
// 增益计算公式 Gain = 1 + (50kΩ / Rg) 选择Rg=1.02kΩ获得G=50的增益关键参数对比:
| 参数 | INA128 | AD620 | LT1167 |
|---|---|---|---|
| 输入噪声 | 8nV/√Hz | 9nV/√Hz | 6nV/√Hz |
| 共模抑制比 | 120dB | 100dB | 130dB |
| 增益误差 | 0.5% | 0.3% | 0.05% |
| 温漂 | 3μV/℃ | 1μV/℃ | 0.5μV/℃ |
2.2 二级放大与电平转换
经过仪表放大后的信号仍需进一步放大并转换为单端信号。采用OPA2333运放构建两级电路:
- 电压跟随器隔离前后级阻抗
- 反相放大器完成信号极性转换和增益调节
反相放大器关键设计:
# 反相放大器增益计算 Rf = 100kΩ Rin = 10kΩ 增益 = -Rf/Rin = -10 总增益 = 50(INA) × 6 = 300实际PCB布局时需注意:
- 在反馈电阻两端添加0.1μF去耦电容
- 采用1%精度的金属膜电阻
- 信号走线做Guard Ring保护
3. 低通滤波与抗混叠设计
24位ADC的有效分辨率极易受到高频噪声影响。设计一个二阶Sallen-Key低通滤波器,截止频率设定为10Hz:
截止频率公式: fc = 1/(2π√(R1R2C1C2)) 取R1=R2=16kΩ, C1=C2=1μF 实际fc ≈ 9.95Hz滤波器特性:
- 衰减斜率:-40dB/decade
- 在50Hz工频处衰减>60dB
- 使用C0G材质的电容保证温度稳定性
4. ADS1256接口设计与配置
4.1 硬件连接优化
STM32与ADS1256采用4线SPI接口,特别注意:
- 将DRDY引脚连接到STM32的外部中断输入
- 在SCLK和DIN之间加33Ω电阻抑制振铃
- 模拟和数字地单点连接在ADC下方
推荐电源配置:
AVDD: +5V → LP2951 → +3.3V模拟电源 DVDD: 直接连接STM32的3.3V 参考电压: 使用ADR445提供5.000V基准4.2 寄存器配置流程
// 初始化序列示例 void ADS1256_Init(void) { // 复位芯片 ADS1256_WriteCmd(CMD_RESET); Delay(10); // 配置数据速率和增益 uint8_t buf[2] = { 0x01, // DRATE[2:0]=001(10SPS), PGA=1 0x03 // 增益=8,自动校准使能 }; ADS1256_WriteReg(REG_ADCON, buf, 2); // 设置输入多路复用器 ADS1256_WriteReg(REG_MUX, 0x01); // AIN0-AIN1 }注意:上电后需等待至少50ms再进行校准操作,确保基准电压稳定。
5. 数字滤波与数据处理
5.1 滑动加权平均算法
ADC原始数据需经过数字滤波处理。采用改进的滑动窗口算法:
#define SAMPLE_SIZE 32 float WeightedAverage(int32_t new_sample) { static int32_t samples[SAMPLE_SIZE]; static uint8_t index = 0; static float sum = 0; sum -= samples[index] * (index+1); // 去除旧样本 samples[index] = new_sample; sum += new_sample * (index+1); // 加入新样本 index = (index + 1) % SAMPLE_SIZE; return sum / ((SAMPLE_SIZE*(SAMPLE_SIZE+1))/2); }该算法特点:
- 对新数据赋予更高权重
- 有效抑制周期性干扰
- 计算量适中适合STM32F103
5.2 温度补偿策略
应变片的灵敏度受温度影响显著。采用NTC热敏电阻测量环境温度,建立三维补偿表:
| 温度(℃) | 零点偏移(μV) | 灵敏度系数 |
|---|---|---|
| -10 | 12.5 | 1.012 |
| 0 | 8.2 | 1.005 |
| 25 | 0.0 | 1.000 |
| 50 | -6.7 | 0.992 |
| 75 | -15.3 | 0.981 |
补偿公式:
校正值 = 原始值 × (1 + αΔT) + βΔT 其中α是灵敏度温漂系数,β是零点温漂系数6. 性能测试与优化
6.1 噪声测试结果
在不同配置下测量输入端短路时的噪声(折合到输入端):
| 增益 | 带宽 | 噪声(μVrms) | ENOB |
|---|---|---|---|
| 100 | 10Hz | 2.1 | 21.5 |
| 200 | 5Hz | 1.8 | 22.1 |
| 300 | 3Hz | 2.3 | 21.3 |
6.2 线性度测试
使用标准砝码进行满量程测试,数据经最小二乘法拟合:
线性误差 = 0.008%FS 重复性误差 = 0.003%FS 迟滞误差 = 0.005%FS优化方向:
- 改用三运放仪表放大器结构可提升CMRR 10dB
- 采用4线制传感器连接消除线阻影响
- 增加数字陷波滤波器抑制特定频率干扰
