1 引言
本blog记录了四点式悬挂称重设备开发过程中的一些内容,在写中总结,在写中分析,亦便于日后的回顾和复习。
2 滤波器
2.1 一阶低通滤波
2.1.1 概念
一阶低通滤波器,目的是将截止频率以内的信号无衰减通过,高于截止频率的信号被阻断(产生衰减)。

上述H(s)是一阶低通滤波器的传递函数。
2.1.2 电路一阶低通滤波器
如下展示为最常见的RC一阶低通滤波器。

其传递函数如下:

对比标准传递函数公式,可得 ,因此可根据截止频率fc来设计RC得值。
2.1.3 数字一阶低通滤波器
如下是一阶低通滤波器模型。

下图展示了经过一阶低通滤波后,波形的前后对比。

2.2 Butterworth 滤波器
ButterWorth滤波器是IIR无限脉冲响应滤波器的一种,是经典逼近式。设计目标是使通带内的频率响应尽可能平坦(无波纹),且整体幅频响应单调下降。代价是过渡带(从通带到阻带的下降斜率)相对平缓,信号的选择性不如其他类型。
2.3 常见滤波器总结
2.3.1 IIR滤波器
IIR是无限冲激响应滤波器,输出不仅取决于当前输入信号,也取决于过去的输入和过去的输出。
2.3.2 IIR滤波器
FIR是有限冲激响应滤波器,FIR 只会“记住”有限个输入样本,影响输出的仅是有限个样本。
常见滤波器比较:

3 系统方案
3.1 硬件方案
主控MCU:STM32L431
ADS1261高精度ADC模块:20SPS+FIR
3.2 数据稳定性判断方案
数据稳定性判断,开辟了12个数据作为缓存基础数据,每新来一个数据则替换掉最旧的数据。

(1)窗口数据不满时,不稳定;
(2)新数据超过当前数据平均值上下,连续两次,则判断为数据不稳定;
(3)计算窗口缓存数据方差,方差小,则表明数据较为稳定;
3.2 零点自动追踪方案
在不放重物清空下,ADC采集应变片的数值也会随机跳变,且因为应变片具有迟滞性,空载0点不一定是一个固定值。因此为了测量精度更高,在应变片adc值变化较小时,空载0点需合理的跟随实际的0点进行微小的变化。
(1)数据不稳定时,判断adc值是否穿越了0点adc0,如果有穿越,那么数据异常重量显示清零;
(2)零点自动跟随方案使用的是一阶低通滤波:
zero_new = zero_old + α × (ADC_current - zero_old)
更新频率是每1.5s间隔,调用一阶低通滤波算法,进行一次0点自动更随。只有ADC值变化小于500这个数值或测量重量变化在0.1kg变化内,才允许自动跟踪。
3.3 二阶ButterWorth 低通滤波器
二阶Butterworth滤波器传递函数如下。

其特点如下(来自deepseek):

在称重采集应变片传感器 ADC 值时选择 Butterworth 滤波器,核心原因在于称重信号本质上是直流或极低频信号,而 Butterworth 滤波器在通带内具有“最大平坦”的幅频响应,意味着它能在有效滤除高频噪声和振动干扰的同时,不引入任何通带纹波,从而避免对真实的重量直流分量造成周期性调制或失真。
项目中使用Butter worth滤波器对信号滤波,并使用IIR滤波器进行对比,滤波器设计如下。
IIR滤波器:
参数:一阶低通滤波、α = 0.6
公式:zero_new = zero_old + α × (ADC_current - zero_old)
Butter Worth滤波器:
参数:采样率5Hz 、 截止频率0.016Hz、二阶低通滤波、窗口大小是12
项目中滤波器滤波前后比对如下。




在采样率和截止频率设置不对情况下,可能会出现不好的滤波效果,如下图示。

空载时波形变化。

3.4 四点式悬挂称重
本项目是四点悬挂式称重,每个悬挂点有一个应变片传感器,通过ads1261采集传感器的模拟量,然后再使用最小二乘法直接拟合,实现对物体的称重。
// 矩阵直接拟合方案
// W = cw[0]*x1 + cw[1]*x2 + cw[2]*x3 + cw[3]*x4
// Mx = cmx[0]*x1 + cmx[1]*x2 + cmx[2]*x3 + cmx[3]*x4
// My = cmy[0]*x1 + cmy[1]*x2 + cmy[2]*x3 + cmy[3]*x4
// 参数说明:
// x1 ~ x4 分别是四个通道采集到的adc值
// cw 是 重量与adc系列
// cmx、cmy是 重心位置与adc值系数
3.5 温度补偿
本项目工程中使用两点线性温度预测模型。

// 如以常温T0 = 25度、T1 = 80度为范围进行温度补偿参数计算
// 零点补偿系数
// k0 单位是 count/°C = "每变化 1°C,零点漂几个 count"
k0 = ( adc0(80°C) − adc0(25°C) ) / ( T2 − T1 )
//灵敏度补偿系数
// k1 单位 1/°C = "每变化 1°C,灵敏度相对变了百分之几
k1 = ( cw(80°C) − cw(25°C) ) / ( cw(25°C) × (80 − 25) )
= ( cw_t2 − cw_ref ) / ( cw_ref × 55 )
温度补偿参数确认需进行如下标定示例。
时间点1:常温 25°C
└─ 跑一次完整 CALIB_ALL(0kg + 28 点)
→ 得到 adc0(25°C)、cw(25°C) ← 这就是"参考点",T_cal = 25时间点2:5°C(已热平衡)
└─ 快速量两组:0kg 各通道零位 + 50kg 放台面中心各通道
→ 得到 adc0(5°C)、cw(5°C) ← 这就是"第二点",T2 = 5
(1)零点补偿系数k0 单位(count/°C)

零点温度补偿模型:
补偿值(adc) = K0 * 温度 = x count/℃ * y ℃ = count
重量 = cw * ( adc值 + 补偿值(adc)) = x kg/count * y count = kg
(2)灵敏度补偿系数k1 单位(1/°C)
![]()
灵敏度温度补偿模型:
补偿值cw_new = cw * ( 1 + k1) * Δ温度 = x kg/count
重量 = cw_new * adc值 = x kg/count * y count = kg
总温度补偿模型:
重量 = cw_new * ( adc值 + 补偿值(adc)) = x kg/count * y count = kg
本文介绍基于四点式悬挂应变片的高精度称重设备设计,涵盖硬件选型(STM32L431+ADS1261)、数据稳定性判断、零点自动追踪、二阶Butterworth低通滤波器应用及温度补偿模型。重点分析滤波算法对低频称重信号的保真处理,以及最小二乘法在多点传感器融合中的实现,确保直流重量信号无失真、抗干扰强、温漂可控。
119

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



