1. 项目概述
这个智能体重秤项目是我去年为一个健康管理创业团队开发的硬件解决方案。不同于传统体重秤仅能显示数字,我们基于STM32设计了一款能自动记录数据、分析趋势并通过蓝牙同步到手机APP的智能设备。整套系统成本控制在50元以内,精度达到±50g医疗级标准,实测续航超过6个月。
市面上大多数智能秤采用现成模块拼装,而我们选择从底层开发,主要考虑三点:一是降低30%以上的BOM成本;二是实现完全自主的数据加密协议;三是为后续扩展体脂率等生物阻抗测量预留硬件接口。整个开发周期约3个月,其中最难攻克的是高精度ADC采样稳定性问题。
2. 硬件设计解析
2.1 核心器件选型
主控选用STM32F103C8T6这颗经典Cortex-M3芯片,主要看中其内置的12位ADC和丰富定时器资源。实测发现其ADC在5V供电时存在非线性误差,最终通过以下方案解决:
- 改用3.3V LDO稳压供电
- 添加RC低通滤波(截止频率10Hz)
- 采用过采样技术将有效分辨率提升至14位
称重传感器选用BHF-1kg铝合金悬臂梁式,四片组成全桥电路。关键参数计算:
code复制理论灵敏度 = 激励电压 × 灵敏度系数
= 5V × 2.0mV/V
= 10mV满量程
考虑到安全余量,实际ADC量程设置为±20mV
2.2 信号调理电路设计
特别要注意的是:
- 仪表放大器增益G=100时,需匹配1%精度的电阻对
- 在PCB布局上,模拟部分要远离蓝牙模块天线
- 接地采用星型拓扑,传感器地与数字地单点连接
调试中发现:当手机靠近秤体时,ADC读数会出现跳变。最终通过给传感器线加磁环和在PCB背面铺铜解决。
3. 软件架构实现
3.1 主程序流程图
c复制void main() {
硬件初始化();
while(1) {
if(检测到稳定重量()) {
滤波处理();
if(重量变化>100g) {
存储到FLASH();
蓝牙广播数据();
}
}
低功耗管理();
}
}
3.2 关键算法实现
动态称重算法:
- 采用移动平均滤波:窗口大小取15个采样点
- 重量稳定判定条件:
- 连续10次采样差值<30g
- 标准差σ<20g
- 去皮重处理:长按按键3秒清零
低功耗优化:
- 正常模式:每秒采样1次
- 休眠模式:关闭显示屏,保持BLE广播
- 通过RTC唤醒实现0.5μA待机电流
4. 生产测试方案
4.1 校准流程
使用标准砝码进行三点校准:
- 空载时ADC值→存储为Offset
- 加载5kg砝码→计算斜率K
- 加载20kg砝码→验证线性度
校准参数存储在STM32的Flash最后页,采用异或校验防止数据篡改。
4.2 老化测试项目
| 测试项 | 条件 | 合格标准 |
|---|---|---|
| 重复称重 | 10kg砝码50次 | 误差<±0.1% |
| 温度循环 | -10℃~50℃循环5次 | 零点漂移<30g |
| 跌落测试 | 1m高度自由落体3次 | 功能正常无破损 |
5. 开发经验总结
-
EMC问题排查:初期蓝牙传输会导致称重波动,最终发现是天线辐射干扰了传感器信号线。解决方法:
- 改用屏蔽双绞线连接传感器
- 在ADC输入端添加TVS二极管
- 蓝牙模块与主控板之间加π型滤波
-
机械结构优化:第一版外壳在用户踩踏边缘时会出现5%的称重误差。改进措施:
- 增加内部支撑肋板厚度至3mm
- 改用四点悬浮式支撑结构
- 在脚垫处添加硅胶缓冲层
-
生产良率提升:首批500台中有3%出现ADC读数不稳,经查是焊锡膏残留导致。后续工艺改进:
- 增加超声波清洗工序
- 对ADC引脚进行三防漆喷涂
- 采用选择性波峰焊替代手工焊
这个项目让我深刻体会到,一个看似简单的智能硬件产品,需要电子、结构、软件、生产工艺等多方面的协同优化。现在回看,如果改用STM32L系列低功耗芯片,续航还能再提升20%,这是后续迭代要改进的重点。