1. 项目概述:基于STM32的智能电子秤设计
在超市收银台前,我们常常能看到收银员将商品放在电子秤上,屏幕瞬间显示重量、单价和总价——这个看似简单的过程背后,其实融合了传感器技术、嵌入式系统和人机交互设计的精华。我最近完成了一个基于STM32的多功能电子秤项目,它不仅实现了基本的称重计价功能,还加入了金额累加、语音播报和自动收银抽屉控制等实用特性。
这个电子秤的核心由STM32F103C8T6单片机驱动,配合HX711称重模块、LCD显示屏和自定义按键系统组成。与市面上简单的电子秤不同,我的设计特别强化了商业场景下的实用性:支持多达9次的金额累加、掉电保存参数、自动去皮功能,甚至还模拟了超市收银系统,通过到位开关触发舵机动作来"打开收银抽屉"。这些功能使得这个电子秤不仅适合学习嵌入式开发,还能直接应用于小型零售场景。
2. 系统设计与核心组件解析
2.1 硬件架构设计
整个系统的硬件架构可以分为五个主要模块:
-
主控模块:STM32F103C8T6最小系统板,作为整个电子秤的大脑,负责数据处理和外围设备控制。选择这款单片机是因为它性价比高,具有足够的GPIO和计算能力,且开发资源丰富。
-
称重模块:HX711芯片配合5kg量程的称重传感器。HX711是专为电子秤设计的24位ADC芯片,能直接读取称重传感器的微弱信号并转换为数字量。我在PCB设计时特别注意将HX711尽量靠近传感器放置,以减少信号干扰。
-
显示模块:1.44寸TFT彩屏,相比传统的LCD1602,彩屏能显示更多信息且视觉效果更好。实际测试发现,在强光环境下需要调整背光亮度才能清晰可见。
-
输入模块:四个机械按键(K1-K4),采用矩阵扫描方式连接。按键功能分配如下:
- K1:单价+
- K2:单价-
- K3:金额累加
- K4:取消累加
-
扩展模块:
- JR6001语音芯片:用于播报操作提示
- SG90舵机:模拟收银抽屉开关
- 到位开关:检测"结算"动作
提示:HX711模块需要特别注意供电稳定性,建议使用LDO稳压芯片单独供电,避免因电源波动影响称重精度。
2.2 关键电路设计要点
在电路设计过程中,有几个关键点需要特别注意:
-
称重传感器接口:
- 采用全桥接法连接应变片传感器
- 信号线使用双绞线并尽量缩短长度
- 在HX711的输入端添加0.1μF去耦电容
-
电源设计:
- 主电源采用5V/2A适配器
- 3.3V通过AMS1117稳压获得
- 为HX711单独增加LC滤波电路
-
抗干扰设计:
- 所有数字信号线串联22Ω电阻
- 关键信号线布置在PCB内层
- 模拟和数字地分开布局,单点连接
-
机械结构:
- 称重平台与传感器之间采用刚性连接
- 设计防过载结构,避免超过5kg量程
- 外壳预留散热孔,避免温度影响
3. 软件设计与核心算法实现
3.1 主程序流程设计
系统软件采用前后台架构,主循环负责状态检测和显示更新,中断处理关键事件。以下是精简后的伪代码:
c复制void main() {
hardware_init(); // 硬件初始化
load_parameters(); // 从Flash加载保存的参数
auto_tare(); // 自动去皮
while(1) {
read_weight(); // 读取重量
calculate_price(); // 计算金额
update_display(); // 更新显示
if(key_scan()) { // 按键扫描
process_key(); // 处理按键
}
if(check_settle()) { // 检查结算
settle_account(); // 执行结算
}
}
}
3.2 称重数据处理算法
称重数据的处理是本项目的核心难点,主要经过以下步骤:
-
原始数据采集:
- 通过HX711获取24位ADC原始值
- 采用滑动平均滤波(窗口大小=8)
- 采样频率设置为10Hz
-
重量计算:
- 使用两点校准法:零点(0kg)和满量程(5kg)
- 计算公式:重量 = (原始值 - 零点值) * 满量程重量 / (满量程值 - 零点值)
- 加入非线性补偿,使用二次多项式拟合
-
动态处理:
- 检测重量变化率判断是否稳定
- 稳定阈值:连续5次采样变化<0.5%
- 只有稳定后才更新显示
-
自动去皮:
- 上电后自动记录当前重量为零点
- 去皮范围限制在±100g以内
- 提供手动去皮功能(本设计未实现)
3.3 金额累加与结算逻辑
金额累加功能是商业电子秤的关键特性,实现逻辑如下:
-
数据结构:
c复制typedef struct { float price; // 当前单价 float weight; // 当前重量 float amount; // 当前金额 float total; // 累计总金额 uint8_t count; // 累计次数 float history[9]; // 历史记录 } ScaleData; -
累加流程:
- 用户设置单价(K1/K2)
- 称重稳定后显示金额
- 按K3将当前金额加入累计
- 语音播报"已累计"
- 在屏幕下方显示历史记录
-
结算触发:
- 到位开关被按下(模拟收银动作)
- 舵机旋转90度(模拟开抽屉)
- 语音播报提示信息
- 清空累计数据
-
数据存储:
- 使用STM32内部Flash保存校准参数
- 采用EEPROM模拟技术
- 掉电前自动保存关键数据
4. 关键技术与实现细节
4.1 HX711驱动优化
HX711虽然使用简单,但要获得稳定读数需要特别注意:
-
时序控制:
- 严格按照数据手册的时序要求
- 时钟线切换速度控制在1MHz以下
- 读取间隔建议80ms以上
-
数据处理技巧:
c复制long HX711_Read(void) { unsigned long count = 0; HX711_DOUT_HIGH(); delay_us(1); while(HX711_Read_DOUT()); // 等待准备就绪 for(int i=0; i<24; i++) { HX711_CLK_HIGH(); delay_us(1); count = count << 1; HX711_CLK_LOW(); delay_us(1); if(HX711_Read_DOUT()) count++; } // 补充第25个脉冲选择下次通道 HX711_CLK_HIGH(); delay_us(1); HX711_CLK_LOW(); delay_us(1); return (count ^ 0x800000); } -
校准方法:
- 空载时调用
set_zero()记录零点 - 放置已知重量(如1kg砝码)调用
set_scale() - 校准数据保存在Flash中
- 空载时调用
4.2 显示界面设计
-
主界面布局:
code复制------------------- | 智能电子秤 v1.0 | |-----------------| | 重量: 1.25 kg | | 单价: 5.6 元/kg | | 金额: 7.0 元 | | | | 累计:3次 21.5元 | | 1:7.0 2:6.5 3:8.0| ------------------- -
显示刷新策略:
- 只有数据变化时才刷新对应区域
- 使用双缓冲技术避免闪烁
- 重要信息使用大字体显示
-
动画效果:
- 称重时显示波动动画
- 累加时显示飞入效果
- 结算时全屏闪烁提示
4.3 语音提示系统
JR6001语音芯片通过UART控制,预存了以下提示音:
-
操作提示:
- "请输入单价"
- "已累计"
- "累计已取消"
-
结算提示:
- "请支付XX元"
- "支付完成后请携带好您的物品"
-
异常提示:
- "超重,请减少物品"
- "系统校准中"
语音播放采用非阻塞方式,通过中断通知播放完成,避免影响主流程。
5. 调试与优化经验
5.1 称重不准问题排查
在实际调试中,我遇到了称重读数波动大的问题,通过以下步骤解决:
-
机械结构检查:
- 确保传感器安装平整
- 检查所有螺丝是否拧紧
- 确认无外力干扰
-
电气测试:
- 测量传感器激励电压(建议5.0V±1%)
- 检查信号线阻抗(应<1Ω)
- 用示波器观察输出信号噪声
-
软件优化:
- 增加数字滤波强度
- 调整采样间隔
- 添加温度补偿算法
-
环境因素:
- 避免风扇直吹
- 远离振动源
- 保持环境温度稳定
5.2 低功耗优化技巧
虽然本设计采用市电供电,但为适应更多场景,我尝试了低功耗优化:
-
工作模式:
- 正常运行:45mA
- 休眠模式:3.2mA(保持基本功能)
- 深度睡眠:0.5mA(需按键唤醒)
-
优化措施:
- 动态调整屏幕亮度
- 非活跃状态降低采样率
- 关闭未使用外设时钟
-
唤醒策略:
- 重量变化超过阈值唤醒
- 定时唤醒检查状态
- 按键中断唤醒
5.3 生产测试方案
为验证批量生产一致性,我设计了以下测试流程:
-
自动化测试项目:
测试项 标准 工具 零点误差 ±2g 标准砝码 线性度 ±0.5%FS 多组砝码 重复性 ±3g 1kg砝码多次测试 按键寿命 10万次 自动化测试仪 -
老化测试:
- 高温高湿运行72小时
- 连续称重循环测试
- 快速电源开关测试
-
校准流程:
- 自动进入校准模式
- 依次放置0kg、1kg、5kg砝码
- 系统自动计算校准系数
6. 功能扩展与改进方向
基于现有设计,还可以进一步扩展以下功能:
-
无线连接:
- 增加蓝牙模块连接手机APP
- 支持Wi-Fi上传数据到云端
- RFID识别商品自动匹配单价
-
商业功能:
- 商品数据库管理
- 销售统计报表
- 支持多种支付方式接口
-
硬件改进:
- 改用S型传感器提高精度
- 增加防作弊检测
- 设计防水防尘外壳
-
算法升级:
- 基于机器学习的动态补偿
- 自适应滤波算法
- 预测性维护功能
在实际项目中,我发现称重系统的稳定性不仅取决于硬件和算法,还与机械结构设计密切相关。建议在初期就考虑整体结构强度和环境适应性,避免后期反复调整。另外,商业电子秤需要特别注意防作弊设计,比如检测非正常外力、判断称重平台是否被篡改等,这些都是在实际应用中积累的经验。