1. 项目概述:51单片机电子秤开发实录
去年帮朋友改造小吃店称重系统时,我基于STC89C52设计了一款带计价功能的电子秤。这个看似简单的项目实际涉及传感器选型、AD转换精度、人机交互设计等多个技术要点。本文将完整还原从元器件选型到代码调试的全过程,重点解析HX711模块的使用技巧和去皮功能的实现逻辑。
这款电子秤的核心功能包括:
- 称重范围0-5kg,精度±1g(使用24位AD的HX711)
- 四位数码管显示重量、单价和金额
- 独立按键调整单价(支持0.01元精度)
- 一键去皮功能(清零容器重量)
- 超重声光报警(蜂鸣器+LED)
2. 硬件设计详解
2.1 核心器件选型
主控芯片:
选用STC89C52RC(11.0592MHz)主要考虑:
- 内置4KB Flash满足程序存储需求
- 32个IO口足够驱动外设
- 成本仅3元左右
注意:烧录时需要选择6T模式(默认12T时钟周期会降低响应速度)
称重传感器:
采用铝合金悬臂梁式传感器(5kg量程),其特性包括:
- 额定输出2.0±0.15mV/V
- 非线性误差≤0.03%FS
- 需搭配3.3V激励电压
HX711模块:
这个24位AD转换芯片有三大优势:
- 内置128倍可编程增益放大器
- 支持差分输入(正负端抗干扰)
- 自带稳压电路可直接驱动传感器
接线示意图:
code复制HX711_DOUT -> P3^2 (INT0)
HX711_SCK -> P3^3
E+ E- -> 传感器输出
A+ A- -> 3.3V激励电压
2.2 人机交互设计
显示部分:
- 4位0.56寸共阳数码管
- 74HC595串行驱动(节省IO口)
- 动态扫描频率200Hz(无闪烁)
按键布局:
code复制[ 去皮 ] [ 单价+ ] [ 单价- ] [ 确认 ]
采用矩阵扫描方式,通过10ms延时消抖。实测发现机械按键在称重时会产生震动干扰,后来改为触摸按键方案。
3. 软件实现关键点
3.1 HX711驱动开发
传感器数据读取流程:
c复制unsigned long HX711_Read() {
unsigned long count = 0;
HX711_DOUT = 1;
_nop_();
while(HX711_DOUT); // 等待转换完成
for(char i=0;i<24;i++) {
HX711_SCK = 1;
count <<= 1;
HX711_SCK = 0;
if(HX711_DOUT) count++;
}
// 第25个脉冲选择通道和增益
HX711_SCK = 1;
_nop_();
HX711_SCK = 0;
return count ^ 0x800000; // 补码转原码
}
调试心得:SCK时钟周期需>200ns,过快的时序会导致数据错位。建议插入_nop_()空指令。
3.2 称重算法优化
原始AD值需要经过三重处理:
- 滑动平均滤波(取10次采样)
c复制for(i=0;i<10;i++) {
sum += HX711_Read();
delay_ms(5);
}
raw = sum/10;
- 重力标定公式:
code复制重量(g) = (当前值 - 空载值) / 比例系数
比例系数通过放置500g砝码实测得出。
- 数字滤波:
采用一阶滞后滤波,避免显示值跳动:
c复制filtered = (raw * 0.2) + (last_value * 0.8);
3.3 去皮功能实现
去皮本质是记录空载时的AD值:
c复制void Tare() {
offset = HX711_Read();
EEPROM_Write(0x00, offset>>8); // 保存到EEPROM
EEPROM_Write(0x01, offset&0xFF);
}
上电时自动读取EEPROM中的校准值,避免每次开机重新去皮。
4. 典型问题排查
4.1 称重数值漂移
现象:
静止时重量显示缓慢变化(±3g波动)
解决方案:
- 检查传感器安装是否牢固(螺丝需加弹簧垫片)
- 在HX711电源端并联100μF电解电容
- 软件上启用中位值平均滤波
4.2 按键响应延迟
现象:
称重过程中按键需长按才能生效
优化措施:
- 将按键扫描放在定时器中断(10ms周期)
- 采用状态机处理按键事件:
c复制if(key_press) {
if(++hold_time > 50) { // 500ms长按
// 快速调整单价
}
}
4.3 数码管显示残影
问题原因:
动态扫描时段选信号切换太慢
硬件改进:
- 在74HC595输出端增加74HC245缓冲器
- 数码管各段并联104瓷片电容
5. 进阶优化方向
- 低功耗设计:
- 空闲时关闭HX711电源(MOS管控制)
- 单片机进入掉电模式,通过按键唤醒
- 数据存储扩展:
- 增加AT24C02记录交易流水
- 通过蓝牙模块上传数据到手机APP
- 抗干扰增强:
- 传感器线改用屏蔽双绞线
- 在HX711输入端并联TVS二极管
这个项目最让我意外的是HX711对电源噪声的敏感性——当使用开关电源供电时,称重结果会出现周期性波动。后来改用LM1117线性稳压器后,精度立即稳定到±1g以内。建议大家在精度要求高的场合,务必重视电源质量。
