简介:这份资源面向电子信息、自动化及相关专业的课程设计学习者,提供一套基于电阻应变式传感器的2kg手提电子秤完整设计方案,帮助读者理解从重量信号采集到数字显示的整条测量链路。压缩包内共1个doc文档,约91KB,以文字与电路图形式系统梳理了测量电桥、差动放大、A/D转换与LED显示四大模块,并给出系统原理图与单元电路推导过程。内容涵盖电阻应变片的工作原理与桥式测量电路、LM358差动放大器的选型与放大倍数计算、ICL7107双积分A/D转换及显示电路连接方式,还提及Tedea-Huntleigh拉式称重传感器的选用思路。目前已有260人学习,适合需要完成电子秤课程设计、撰写设计报告或搭建传感器测量电路原型的读者参考,可据此快速把握方案框架与关键器件参数。
1. 从一张应变片到稳定读数:电子秤设计的核心链路
很多人第一次做电子秤,会下意识觉得难点在代码——ADC 读一下、换算成克、显示出来就完事。真正上手才发现,读数跳得厉害、空载不为零、放上砝码线性度差,问题几乎全出在模拟前端。电阻应变式传感器输出的满量程信号通常只有几毫伏到十几毫伏,叠在几十毫伏的零点偏置上,直接进 ADC 基本没法用。所以这套设计的核心链路是:应变片把重量转成差分电压,差动放大电路把差分信号放大到 ADC 能吃的量级,A/D 转换把它变成数字量,最后用软件做去皮、标定和滤波。适合电子、自动化专业做课程设计或毕设的人,也适合想把模拟前端这块补扎实的嵌入式从业者。下面按信号从物理量到数字量的顺序,把每一级的选型和参数讲清楚。
2. 电阻应变式传感器与惠斯通电桥的信号特性
2.1 应变片工作原理与电桥输出公式
金属箔式应变片贴在弹性体上,受力形变时电阻发生变化,关系是 ΔR/R = K·ε,K 是应变片灵敏系数,常见箔式片在 2.0 左右,ε 是应变。单片的电阻变化量极小,而且温漂直接混在信号里,所以工程上不会用单片,而是把四片接成惠斯通电桥。全桥接法下,四臂同时受力,输出为:
Vout = Vin · K · ε
半桥接法输出减半,单臂接法还要再减半,而且单臂的非线性误差最大。这就是为什么电子秤几乎都用全桥——灵敏度最高、温漂互相抵消、非线性最小。以常见的 1kg 量程传感器为例,额定输出标称 1mV/V,供桥电压 5V,满量程差分输出就是 5mV。这个数字要记住,后面放大倍数全靠它算。
2.2 供桥电压与传感器选型参数表
供桥电压不是越高越好。电压高,输出信号大,但应变片自热加剧,零点漂移会变大。常见做法是 5V 或 3.3V 供电,配合低噪声稳压。选传感器时重点看这几个参数:
| 参数 | 典型值 | 说明 |
|---|---|---|
| 额定输出 | 1mV/V | 满量程差分输出,决定放大倍数 |
| 非线性 | ±0.05%FS | 影响标定曲线拟合 |
| 零点输出 | ±0.1mV/V | 空载偏置,需软件去皮 |
| 输入阻抗 | 1000Ω | 影响供桥驱动能力 |
| 蠕变 | ±0.05%FS/30min | 长时间加载的漂移 |
选型时如果量程是 5kg,就别买 50kg 的传感器去测 500g,因为满量程输出被压缩,信噪比会明显变差。常见做法是让实际工作重量落在传感器量程的 30% 到 70% 之间。
2.3 用万用表先验证电桥是否正常
焊好传感器引线后,别急着上电放大,先用万用表确认电桥本身没问题。四线制传感器一般是红黑为激励、绿白为信号:
# 断电状态下测输入输出阻抗 # 红黑之间(输入阻抗)应为标称值,如 1000Ω 左右 # 绿白之间(输出阻抗)通常也是 1000Ω 左右 # 红黑与绿白之间不应导通,否则内部短路上电后用毫伏档测绿白差分电压,空载应在零点输出范围内,用手轻压弹性体,读数应有稳定变化。这一步能排掉大部分“焊反了”“线断了”的低级问题。如果空载差分电压就有几十毫伏,先检查供桥电压是否正常、应变片是否已经损坏。
3. 基于 LM358 的差动放大电路设计与参数计算
3.1 为什么用差动放大而不是单端放大
传感器输出是差分信号,两根信号线上都叠着共模电压(大约是供桥电压的一半,即 2.5V)。如果用单端放大,共模电压会被一起放大,运放直接饱和。差动放大电路只放大两输入之差,共模被抑制,这是它存在的根本理由。经典三运放仪表放大器共模抑制比最高,但成本高;对电子秤这种精度要求,用 LM358 搭两级差动放大就够,这也是热搜里 LM358 反复出现的原因——便宜、双运放、单电源能工作。
3.2 单级差动放大倍数计算与电阻取值
差动放大电路的增益公式,在 R1=R3、R2=R4 的匹配条件下为:
Gain = R2 / R1
假设满量程差分输出 5mV,希望放大到 1V 左右给 ADC,需要增益 200 倍。单级 200 倍不现实,因为电阻匹配误差会被同样放大,共模抑制会崩掉。常见做法是分两级,每级 14 倍左右,或者第一级 20 倍、第二级 10 倍。下面是一级差动放大的取值示例:
R1 = R3 = 1kΩ (反相端与同相端输入电阻) R2 = R4 = 20kΩ (反馈电阻) Gain = 20k / 1k = 20 倍电阻必须用 1% 精度金属膜电阻,四只电阻的匹配度直接决定共模抑制比。如果 R2/R1 和 R4/R3 不相等,共模电压就会漏到输出,表现为空载读数随供桥电压波动。
3.3 LM358 单电源供电的偏置与电压跟随器
LM358 不是轨到轨运放,输出最高只能到 Vcc-1.5V 左右,输入共模范围也不含负轨。单电源供电时,必须把信号抬到中间电位,否则负半周被削掉。常见做法是用两只等值电阻分压出 Vcc/2,再用一个电压跟随器做低阻基准:
Vcc = 5V R5 = R6 = 10kΩ 分压得到 2.5V LM358 另一半接成电压跟随器,输出 2.5V 基准电压跟随器的作用是把高阻分压点变成低阻输出,避免被后级差动电路的输入电阻拉偏。这个 2.5V 基准接到差动放大电路同相端的偏置电阻上,让输出静态工作点落在 2.5V 附近,这样正负方向的重量变化都有摆幅空间。热搜里的“LM358 电压跟随器”在这个位置就是干这个的。
3.4 两级级联的完整参数与实测调整
两级级联时,第一级增益不宜过高,否则第二级输入容易饱和。推荐第一级 20 倍、第二级 10 倍,总增益 200 倍。级间可以直接耦合,因为第一级输出已经抬到 2.5V 附近。调试时按这个顺序来:
- 空载上电,测第一级输出,应在 2.5V 附近,偏离超过 0.2V 就检查偏置电阻。
- 放上已知砝码,测第二级输出,用实际输出除以理论输出反推实际增益。
- 如果增益偏低,检查反馈电阻是否焊错;如果输出饱和到 3.5V 以上,说明增益过大或偏置不对。
注意:LM358 的压摆率只有 0.3V/μs,带宽 1MHz,放大 200 倍后带宽只剩 5kHz。电子秤信号变化慢,这个带宽完全够,但别指望它做高速采集。
4. A/D 转换选型与电子秤采样程序实现
4.1 分辨率估算:多少位 ADC 才够
先算需要多少分辨率。1kg 量程、希望分辨 1g,就是 1/1000,约 10 位。但这是理想情况,实际要考虑噪声和标定余量,通常留 4 倍余量,也就是需要 12 位以上有效位。常见选择是 HX711 这类专用 24 位称重 ADC,内置 PGA,直接接电桥,省掉外部放大。如果用通用 MCU 内置 12 位 ADC,配合前面 200 倍放大,理论分辨够,但 MCU 的 ADC 噪声和参考电压稳定性会成为瓶颈。课程设计里两种都常见:追求简单用 HX711,追求把模拟链路讲清楚就用 LM358 加 MCU 内置 ADC。
4.2 采样、去皮与滑动平均滤波代码
不管用哪种 ADC,软件部分都要做三件事:去皮、标定、滤波。下面是一段通用的采样处理逻辑:
class Scale: def __init__(self): self.zero_offset = 0 # 空载零点 self.scale_factor = 1.0 # 每克对应的 ADC 码值 self.buffer = [] def tare(self, raw): # 去皮:记录当前空载读数作为零点 self.zero_offset = raw def calibrate(self, raw, known_weight_g): # 标定:用已知砝码反推比例系数 self.scale_factor = (raw - self.zero_offset) / known_weight_g def read(self, raw): # 滑动平均滤波,窗口 8 self.buffer.append(raw) if len(self.buffer) > 8: self.buffer.pop(0) avg = sum(self.buffer) / len(self.buffer) return (avg - self.zero_offset) / self.scale_factor逻辑说明:tare在空载时调用一次,把零点存下来;calibrate放上已知砝码后调用,算出每克对应多少 ADC 码值;read每次采样先做 8 点滑动平均再换算。参数说明:窗口大小 8 是折中,太小滤波效果差,太大响应变慢;标定砝码建议选量程的 50% 到 80%,比如 1kg 量程用 500g 砝码,这样比例系数误差最小。
4.3 采样时序与参考电压的稳定性
如果用 MCU 内置 ADC,参考电压的稳定性直接决定读数稳定性。常见做法是用外部基准芯片,或者用 MCU 的 VDDA 但加 LC 滤波。采样时序上,电子秤不需要高速,10Hz 到 80Hz 足够,采样率太高反而把工频干扰采进来。可以在代码里做 50Hz 陷波,或者干脆把采样率设成 50Hz 的整数倍再平均,让工频干扰在平均中抵消。这一步是很多课程设计忽略的地方,读数跳往往不是放大不够,而是参考电压在抖。
5. 标定、线性度验证与常见故障排查
5.1 两点标定法与线性度检查
标定至少用两个点:空载和满量程附近。更严谨的做法是取 5 个点做最小二乘拟合,看非线性误差。操作步骤:
- 空载,调用
tare,记录零点。 - 放 200g 砝码,记录读数,与 200g 比较。
- 依次放 400g、600g、800g、1000g,记录每个点读数。
- 用读数对重量做线性拟合,看残差是否在 ±2g 以内。
如果中间点偏差大、两端准,通常是放大电路非线性;如果整体偏移,是标定系数问题;如果重复性差,是机械结构或传感器安装问题。
5.2 读数跳动的四类原因与定位方法
| 现象 | 可能原因 | 定位方法 |
|---|---|---|
| 空载跳动大 | 参考电压不稳 | 示波器看基准纹波 |
| 加载后漂移 | 应变片自热 | 降低供桥电压 |
| 读数随温度变 | 电桥温漂 | 检查是否全桥接法 |
| 数值阶跃 | ADC 丢码 | 检查采样时序 |
定位时先用示波器看放大输出,如果模拟输出本身就在跳,问题在前端;如果模拟输出稳、数字读数跳,问题在 ADC 或参考。这个二分法能省掉大量瞎猜时间。
5.3 用已知砝码做重复性测试的脚本
重复性比绝对精度更重要。下面这段逻辑用来做 10 次加载卸载测试:
def repeatability_test(scale, adc, weight_g, times=10): results = [] for i in range(times): input("放上砝码后回车") raw = adc.read() results.append(scale.read(raw)) input("取下砝码后回车") avg = sum(results) / len(results) spread = max(results) - min(results) print(f"平均 {avg:.1f}g, 极差 {spread:.1f}g") return spread参数说明:times取 10 次,spread是极差,反映重复性。如果极差超过 3g,说明机械安装或滤波需要改进。这个测试比单次标定更能暴露问题。
5.4 差动放大电路的共模抑制实测技巧
想验证差动放大的共模抑制,可以故意改变供桥电压,看输出变化。理想情况下供桥电压变化 0.1V,输出应该几乎不变。如果输出跟着变,说明电阻匹配不好。实测时用可调电源给电桥供电,从 4.9V 调到 5.1V,记录输出变化量。变化量除以供桥变化量再除以增益,就是等效共模增益。这个值越小越好,常见做法是四只电阻用同一批次、同阻值的金属膜电阻,匹配度能到 0.1% 以内。如果手头只有 5% 电阻,可以在同批里挑阻值最接近的四只,效果会好很多。
本文还有配套的精品资源,点击获取