1. 项目背景与硬件选型思考
第一次接触电子秤项目是在三年前帮朋友改造健身房设备时。传统机械秤存在读数不准、功能单一的问题,而市面上的智能秤又价格昂贵。当时就萌生了自己动手做的念头,经过多次迭代最终确定了这套基于STM32F103的方案。
选择STM32F103C8T6作为主控芯片主要基于三点考虑:
- 72MHz主频完全满足称重传感器的数据处理需求
- 内置12位ADC配合HX711可实现0.01kg的分辨率
- 丰富的GPIO口方便扩展OLED显示和功能按键
提示:C8T6的64KB Flash和20KB RAM对于这个项目绰绰有余,如果考虑后续扩展蓝牙功能,建议选择STM32F103CBT6(128KB Flash)
称重传感器选用常见的5kg量程悬臂梁式传感器,市场价约15-20元。这里有个坑要注意:传感器分铝合金和不锈钢两种材质,长期使用建议选不锈钢的,虽然贵5块钱但寿命长很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. HX711模块的深度使用技巧
HX711作为24位ADC转换芯片,是项目精度的关键。第一次使用时就踩了个坑:直接照搬官方例程发现读数跳变严重。后来发现需要做这几步优化:
2.1 硬件滤波配置
在HX711的AVDD和AGND之间并联10μF+0.1μF电容,DVDD和DGND之间同样处理。实测显示这能将噪声降低60%以上。
2.2 软件滤波算法
采用滑动加权平均滤波效果最好,代码实现如下:
c复制#define FILTER_LEN 10
int32_t filter_buf[FILTER_LEN];
int32_t HX711_GetFilteredValue(void) {
static uint8_t index = 0;
filter_buf[index++] = HX711_Read();
if(index >= FILTER_LEN) index = 0;
int64_t sum = 0;
for(uint8_t i=0; i<FILTER_LEN; i++) {
sum += filter_buf[i] * (i+1); // 加权系数
}
return sum / (FILTER_LEN*(FILTER_LEN+1)/
