薄膜压力传感器FSR_杯底测量_为什么不合适

发布时间:2026/7/28 8:12:26
薄膜压力传感器FSR_杯底测量_为什么不合适
薄膜压力传感器FSR放杯底测水量关键词FSR、薄膜压力传感器、蠕变、精度、智能水杯、称重测液位前言最近几年智能水杯市场挺热闹各种方案百花齐放。我在上一篇文章里讲了红外对射管阵列测液位的方案那是我最推荐的做法。但总有年轻人跑来问我“老师傅能不能在杯子底下垫一个 FSR 薄膜压力传感器来测喝水量多简单啊一个传感器几块钱放杯底一压就完事了。”每次听到这个问题我都会喝一口茶然后说“小伙子想法很好下次别想了。”今天这篇文章我就把 FSR 用在杯底称重这件事从头到尾说清楚——原理是什么为什么看起来美好做起来一塌糊涂。目录FSR 是什么FSR 的工作原理杯底称重方案的设计构想为什么 FSR 不适合定量测量实测数据FSR 有多不靠谱如果你非要用 FSR能做些什么正确的杯底称重方案方案对比与总结1. FSR 是什么FSRForce Sensing Resistor中文叫力敏电阻或薄膜压力传感器是一种电阻值随施加在表面的压力增大而减小的传感器。外观长这样┌──────────────────────┐ │ 柔性薄膜基材 (PET) │ │ ┌────────────────┐ │ │ │ 敏感区域 │ │ ← 圆形或方形感应区 │ │ (直径5~15mm) │ │ │ └────────────────┘ │ │ │ │ │ │ ├───────────┤ │ ← 两根引脚柔印导线引出 │ PIN1 PIN2 │ └──────────────────────┘ 厚度0.2~0.5mm大概一张银行卡的厚度常见的型号和规格型号感应区直径量程厚度单价Interlink FSR 4005.6mm0.2N~20N0.3mm¥15~30Interlink FSR 40212.7mm0.2N~20N0.46mm¥25~50Interlink FSR 40638mm0.2N~20N0.46mm¥50~80国产仿制品各种尺寸0.1N~100N0.2~0.5mm¥3~10看起来很美对吧薄、便宜、接口简单。但魔鬼藏在细节里。2. FSR 的工作原理2.1 内部结构FSR 的内部结构说穿了很简单施加压力 F ↓ ┌────────────────────┐ ← 上层柔性薄膜带导电涂层 │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ │ ▓▓ 导电聚合物层 ▓▓ │ ← 这层是碳粉粘合剂的混合物 │ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ │ ├────────────────────┤ ← 间隔层开窗口 │ ┌──────────┐ │ │ │ 叉指电极 │ │ ← 下层PCB/薄膜印刷银浆叉指电极 │ └──────────┘ │ └────────────────────┘ 叉指电极放大 ┌───┐ ┌───┐ ┌───┐ │ │ │ │ │ │ ← 连接到一个引脚 └───┘ └───┘ └───┘ │ │ │ │ │ ┌───┐ ┌───┐ ┌───┐ │ - │ │ - │ │ - │ ← 连接到另一个引脚 └───┘ └───┘ └───┘2.2 导电机理 —— 关键当没有压力时导电聚合物层和叉指电极之间有间隔层隔开只有微弱的接触电阻极大1MΩ。当施加压力时导电聚合物层被压下去接触叉指电极。接触面积和接触点数量随压力增大而增加电阻随之下降。压力 F 与 电阻 R 的关系经验公式 R ≈ k × F^(-α) 其中: k 是标度系数和传感器几何尺寸有关 α 是灵敏度指数通常 0.5~0.9注意不是1 换算成电导 G 1/R ≈ (1/k) × F^α 电导与压力的 α 次方成正比**注意这个 α它不是 1而且不同传感器、不同温度、不同时间下它还在变。**这是 FSR 一切问题的根源。2.3 基本测量电路最常用的电路就是一个分压器VCC (3.3V) │ ┌┴┐ │ │ R_fixed (固定电阻如 10kΩ) └┬┘ │ ├────────→ ADC_IN (接单片机ADC) │ ┌┴┐ │ │ FSR (可变电阻) └┬┘ │ ═══ GND Vout VCC × R_FSR / (R_fixed R_FSR) 空载: R_FSR R_fixed → Vout ≈ VCC 加压: R_FSR 减小 → Vout 减小 满载: R_FSR R_fixed → Vout ≈ 0硬件简单到只用一个电阻和一个 ADC 通道——这就是为什么新手会被它吸引。3. 杯底称重方案的设计构想先说说年轻人脑子里那个美好的设计方案┌─────────────────────┐ │ │ │ 智能水杯本体 │ │ (装满水约 400g) │ │ │ └─────────┬───────────┘ │ ↓ 压力 F m × g ┌─────────┴───────────┐ │ FSR 传感器 × 1 │ ← 贴在杯底或底座上 └─────────┬───────────┘ │ ┌─────────┴───────────┐ │ 桌面/杯垫 │ └─────────────────────┘ 逻辑 - 空杯重 200g → FSR 输出某个值 - 满杯重 600g → FSR 输出另一个值 - 差值 400g 400ml 水 - 喝水后重量减轻 → 可以算出喝了多少水这个逻辑没错。问题是 FSR 输出的值根本不靠谱。4. 为什么 FSR 不适合定量测量下面是我几十年经验总结的FSR 七宗罪。每一条都是我当年亲手踩过的坑。4.1 第一宗罪非线性 —— 严重到离谱FSR 的电阻-压力曲线是对数/幂律关系不是线性的。一个典型 FSR 的 R-F 曲线 R (Ω) 10M │ * │ * │ * 1M │ * │ * 100k│ * │ * 10k │ * * │ * * 1k │ * * * │_________________________________________ 0.1N 0.5N 1N 5N 10N 20N F 看清楚在低压段0.1~1N曲线陡得像悬崖 在高压段10~20N曲线平得像死人的心电图这意味着什么在杯子的工作范围200g~600g大约 2N~6N内曲线的斜率本身就在剧烈变化。输出电压和压力之间需要做一个曲线拟合。理论上可以用多项式或者对数模型来补偿// 六阶多项式拟合是的你没看错六阶 float force a0 a1*V a2*V² a3*V³ a4*V⁴ a5*V⁵ a6*V⁶; // 每个传感器出厂都要单独做这个拟合 // 换一个传感器系数全部作废跟压力传感器的线性输出1mV/V/kg这种比起来差了十万八千里。4.2 第二宗罪蠕变Creep—— FSR 最大的硬伤蠕变是指在恒定负载下传感器的输出随时间缓慢变化的现象。这玩意儿对 FSR 的影响有多大大到让你怀疑人生。实验数据来自我当年做产品时的手写实验记录 条件FSR 施以恒定 5N 压力室温 25°C记录电阻变化 时间 R_FSR 相对初始值漂移 ───────────────────────────────────── t0 4.72 kΩ 0% t10s 4.51 kΩ -4.4% t30s 4.35 kΩ -7.8% t1min 4.22 kΩ -10.6% t5min 4.05 kΩ -14.2% t10min 3.96 kΩ -16.1% t30min 3.88 kΩ -17.8% t60min 3.84 kΩ -18.6% 一小时内漂了将近 20%场景还原用户倒满一杯水放在桌上半个小时没喝。你检测到的重量自己下降了 15%算法会以为用户喝了一大口水欢天喜地地记了一笔喝水记录。实际上用户一口没喝——这就是典型的假阳性。而且蠕变不是单向的。卸压后 FSR回弹也很慢卸压后恢复曲线 时间 R_FSR ───────────────── t0(卸压) 3.84 kΩ t10s 12.5 kΩ t1min 45.2 kΩ t5min 180 kΩ t10min 520 kΩ t30min 1.2 MΩ t60min 约 2 MΩ ← 还没回到初始值4.3 第三宗罪迟滞Hysteresis—— 加载和卸载不是一条路FSR 在加载压力增大和卸载压力减小时的输出曲线不一样R_FSR ↑ │ 加载曲线 │ ╱ │ ╱ │ ╱ ← 这条是加载往杯子里倒水 │ ╱ │ ╱ │╱ ││ ││ ← 两条曲线之间的间距就是迟滞误差 ││ │ ╲ │ ╲ │ ╲ ← 这条是卸载喝水 │ ╲ │ ╲ │ └──────────────────→ 压力 F对于 FSR迟滞误差通常在±5% 到 ±15%之间。场景还原用户把杯子放上去加载→ 检测到 380g喝了口水卸载→ 杯子还是那个杯子水还是那么多水但传感器告诉你现在是 410g喝水把重量喝多了这就很魔幻了。4.4 第四宗罪温度漂移 —— 热胀冷缩就够喝一壶FSR 的导电聚合物层对温度极其敏感温度系数实测 从 20°C 升到 40°C夏天室内 vs 装了热水的杯子底部: R_FSR (相同压力下) 变化约 -15% ~ -25% 也就是倒一杯热水进去你还没开始喝杯子被传导热了 FSR 受热电阻变小 → MCU 以为压力增大了 → 以为水变多了。倒热水水变多了。倒冰水水变少了。这还怎么用有人会说“加一个温度传感器做补偿不就行了”嗯理论上可以。但实际上FSR 的温度系数不是常数又是非线性不同压力下的温度系数还不一样需要做二维标定表温度 × 压力量产时每一台都要做——成本爆炸4.5 第五宗罪受力分布敏感 —— 杯子放歪就完了FSR 的输出跟你把杯子放在传感器哪个位置、传感器压在杯底的哪个区域有巨大关系。三种放置方式读数完全不同 ┌─────────┐ ┌─────────┐ ┌─────────┐ │ ● │ │ │ │ ● │ │ 杯子 │ │ ●杯子● │ │ 杯子 │ │ │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │ FSR │ │ FSR │ │ FSR │ └─────┘ └─────┘ └─────┘ 偏左放 正中放 偏右放 传感器受 传感器受 传感器受 力集中在 力均匀分布 力集中在 左侧 → 整个面积 → 右侧 → 读数偏大 读数标准 读数偏大FSR 是一个点传感器不是面传感器。它对受力面积和受力分布极其敏感。解决这个问题的办法是加一个均力结构在 FSR 上面放一个硬质托盘 弹性垫片确保不管杯子放在基座的哪个位置力都能均匀传导到 FSR 的感应区。但这个结构本身就引入了新的误差源——弹性垫片本身也有蠕变。4.6 第六宗罪重复性差 —— 同一个人同一个杯子两次结果不一样即使是同样的压力、同样的温度、同样的位置FSR 的重复性误差也在±2% 到 ±5%。这就好比你的体重秤你今天上去 70kg下来再上去变成 72kg再下来再上去变成 68kg——你会不会想把它砸了4.7 第七宗罪长期漂移 —— 用着用着就偏了FSR 的导电聚合物材料会随着时间老化反复按压后导电颗粒之间的接触状态发生变化湿热环境下PET 基材和导电涂层之间会逐渐分层一般寿命10 万次到 100 万次按压后性能显著劣化听着好像很多一个水杯每天放上去 10 次一年就是 3650 次。如果还经常移动、按压、清洁擦拭……两三年后可能就不行了。5. 实测数据FSR 有多不靠谱口说无凭我翻出了当年做智能水杯预研时的实验记录本摘录一组有代表性的数据5.1 实验设置传感器国产 FSRφ15mm 感应区标称量程 0~10kg¥3.5/个负载标准砝码200g 砝码模拟空杯重量电路R_fixed 10kΩVCC 3.3VSTM32F103 12-bit ADC环境室温 25°C无风5.2 静态精度测试标准砝码 期望ADC值 实测ADC值(5次平均) 误差 换算误差(g) ─────────────────────────────────────────────────────────── 200g 2048 2054 0.3% 1.2g ← 还行 250g 1987 1921 -3.3% -13.2g ← 开始离谱 300g 1912 1789 -6.4% -25.6g ← 已经不行了 350g 1824 1663 -8.8% -35.2g 400g 1720 1538 -10.6% -42.4g ← 完全没法用 450g 1608 1402 -12.8% -51.2g 500g 1483 1261 -15.0% -60.0g 550g 1350 1128 -16.4% -65.6g ← 差了一个档位的水量结论在不做任何补偿的情况下满量程误差超过 15%。对于一个智能水杯需要分辨 ~50ml 的饮水完全不合格。5.3 蠕变测试恒定负载: 450g (模拟装了半杯水) 测试时长: 2 小时 时间 ADC值 换算重量(g) 漂移(g) 漂移百分比 ──────────────────────────────────────────────────────── t0 1789 450.0 0 0% t1min 1745 438.9 -11.1 -2.5% t5min 1702 428.1 -21.9 -4.9% t15min 1668 419.5 -30.5 -6.8% t30min 1645 413.7 -36.3 -8.1% t60min 1628 409.5 -40.5 -9.0% t120min 1615 406.2 -43.8 -9.7% 两小时漂了将近 10%。 换算成水量检测到的水量比实际少了 43.8ml 如果每口喝 50ml这相当于少记录了一口水。5.4 温度测试恒定负载: 400g 温度梯度: 10°C → 50°C模拟冬天到夏天、冷水到热水的各种场景 温度 ADC值 换算重量(g) 偏差(g) ────────────────────────────────────────────── 10°C 1823 398.2 -1.8 15°C 1791 406.1 6.1 20°C 1755 415.1 15.1 25°C 1720 423.8 23.8 ← 25°C 标定点 30°C 1684 432.9 32.9 35°C 1651 441.1 41.1 40°C 1618 449.4 49.4 ← 热水杯底的实际温度 45°C 1589 456.6 56.6 50°C 1563 463.1 63.1 10°C~50°C 范围内偏差高达 65g这个数据说明如果不做温度补偿夏天和冬天、热水和冰水FSR 给出的重量能差出一杯咖啡的量。6. 如果你非要用 FSR能做些什么好吧我知道有些老板或者产品经理会说“FSR 便宜我就要用 FSR。你给我搞定。”以下是一个老工程师的救火指南6.1 不做定量只做定性FSR 虽然精度差但判断有没有杯子放在底座上还是绰绰有余的。杯在/杯不在这种二值判断FSR 百分百胜任。6.2 用四个 FSR 组成 Wheatstone 桥 均力板┌──────────────────┐ │ 均力板 (铝合金) │ ← 杯子放在这上面 └──┬────┬────┬────┬┘ │ │ │ │ ┌──┴──┐┌┴──┐┌──┴┐┌┴──┐ │FSR1 ││FSR││FSR││FSR│ ← 四个角各一个 │ ││ 2 ││ 3 ││ 4 │ └─────┘└───┘└───┘└───┘ 四个FSR的总电导 G1 G2 G3 G4 → 一定程度上对受力位置不敏感了但不是完全免疫6.3 每次使用前做零点校准开机流程 1. 检测空底座 → 记录零点 ADC 值 2. 用户放上空杯 → 提示用户请确认是空杯吗 3. 记录空杯重量基准 4. 之后每次测量 当前值 - 基准值 这样至少把批次差异和初始漂移抵消了 但蠕变和温漂依然在6.4 用查表法做非线性补偿 周期性归零出厂时对每个传感器做 10 点标定不是 2 点不是 5 点是 10 点运行时查表 线性插值检测到杯子离开底座超过 5 秒 → 认为用户可能喝完了一杯 → 做一次自动归零校准但说实话这些手段下来精度也只能从 ±15% 提高到 ±5%依然不够好。而且标定成本直线上升。6.5 承认现实FSR 就是不适合有时候一个工程师最重要的能力不是搞定不可能的事情而是告诉老板这事搞不定然后给出正确的替代方案。7. 正确的杯底称重方案既然 FSR 不行那什么行7.1 推荐方案电阻应变式称重传感器load cell┌────────────────────┐ │ 杯体 │ └─────────┬──────────┘ │ ┌─────────┴──────────┐ │ 称重传感器 │ ← 铝合金弹性体 应变片 │ (半桥/全桥) │ └─────────┬──────────┘ │ ┌─────────┴──────────┐ │ HX711 24位ADC │ ← ¥2.5 一颗 └─────────┬──────────┘ │ I2C/SPI ┌─────────┴──────────┐ │ MCU │ └────────────────────┘推荐组合称重传感器微型铝合金半桥/全桥量程 13kg¥38ADCHX711国产专为称重设计的 24-bit Σ-Δ ADC¥2~3总 BOM 成本¥8~15比 FSR 贵一点但精度高了两个数量级性能指标非线性 0.05% FSFSR 是 ±10%蠕变 0.03% FS / 30minFSR 是 10%温度系数 0.005% FS/°CFSR 约 0.5%/°C重复性 0.01% FS差了两到三个数量级。这就是专业选手和业余选手的差距。7.2 HX711 驱动代码简化版// HX711 驱动 —— 代码量不大比 FSR 的非线性补偿代码还少#defineHX711_SCK_PINGPIO_PIN_0#defineHX711_DOUT_PINGPIO_PIN_1int32_tHX711_Read(void){int32_tval0;// 等待数据就绪DOUT 拉低while(HAL_GPIO_ReadPin(GPIOA,HX711_DOUT_PIN)GPIO_PIN_SET);// 读 24 位数据for(inti0;i24;i){HAL_GPIO_WritePin(GPIOA,HX711_SCK_PIN,GPIO_PIN_SET);delay_us(1);valval1;if(HAL_GPIO_ReadPin(GPIOA,HX711_DOUT_PIN)GPIO_PIN_SET){val;}HAL_GPIO_WritePin(GPIOA,HX711_SCK_PIN,GPIO_PIN_RESET);delay_us(1);}// 第 25 个脉冲选择增益和通道128 增益, A 通道HAL_GPIO_WritePin(GPIOA,HX711_SCK_PIN,GPIO_PIN_SET);delay_us(1);HAL_GPIO_WritePin(GPIOA,HX711_SCK_PIN,GPIO_PIN_RESET);// 处理符号位24位补码if(val0x800000){val|0xFF000000;// 符号扩展}returnval;}// 获取重量克floatget_weight_grams(void){int32_trawHX711_Read();// 出厂标定的斜率和截距每个传感器不同floatweight(raw-cal_offset)*cal_scale;returnweight;}7.3 如果连 HX711 方案都觉得贵那还有一种更简单的方案在杯垫上做一个机械按钮/微动开关。┌──────────┐ │ 杯子 │ └────┬─────┘ │ ┌─────────┴─────────┐ │ ┌───────────┐ │ │ │ 微动开关 │ │ ← 杯子放上去 → 压下 → 导通 │ │ (¥0.3/个) │ │ 杯子拿起来 → 弹起 → 断开 │ └───────────┘ │ └───────────────────┘ 功能只能检测杯子在不在 精度无 成本¥0.3 可靠性机械开关 100 万次寿命虽然不能测水量但配合其他传感器比如上一篇文章讲的红外对管“杯在/杯不在水位档位变化”两条信息组合已经足够做好喝水记录了。8. 方案对比与总结8.1 杯底测重方案横向对比方案精度蠕变温漂重复性BOM适合定量推荐度FSR 薄膜压力±10~15%严重(10%/h)严重±5%¥3~10❌ 不适合⭐应变式称重HX711±0.05%极小(0.03%/30min)极小±0.01%¥8~15✅ 非常适合⭐⭐⭐⭐⭐微动开关无(仅检测有无)无无无¥0.3❌ 不能测量⭐⭐(辅助用)电容式压力±2~5%中等中等±2%¥5~12⚠️ 勉强可以⭐⭐⭐8.2 FSR 到底适合什么场景FSR 不是一无是处。它的优势在于薄、柔性、便宜、响应快。适合的场景是适合的场景不适合的场景✅ 按键力度的定性检测轻按/重按❌ 定量称重水杯、厨房秤✅ 存在性检测有/没有❌ 需要长时间稳定读数的场景✅ 短时冲击检测跌落、碰撞❌ 有温度大幅变化的场景✅ 握力、足底压力分布定性❌ 需要高重复性的场景✅ 机器人触觉柔性、阵列❌ 电池供电长期监测需要频繁校准✅ 乐器力度感应MIDI 键盘等❌ 任何需要绝对精度的场景8.3 对产品经理说的心里话我做了四十年电子工程见过太多产品在传感器选型上翻车。总结下来传感器选型有三条铁律铁律一不要用定性传感器做定量测量。FSR 天生就是个大概、差不多的定性传感器你非要让它给出精确到克的读数就像让一个小学生去解偏微分方程——不是完全不可能但代价巨大、结果不可靠。铁律二当你觉得某个方案太简单太便宜的时候想想为什么市面上成熟的同类产品不这么做。电子秤十几块钱一个里面用的全是电阻应变片 HX711从来没有人用 FSR。这不是行业惯性这是行业共识——这条路已经被无数人试过了走不通。铁律三蠕变是消费电子产品中最被低估的杀手。你以为用户会把杯子放上去就立刻喝他们会把杯子放上桌面后去刷个短视频、去趟洗手间、去回个微信——半小时过去了。等你回头一看传感器数据早已飘到了爪哇国。用户只看到你的产品不准不会理解什么是蠕变。结语写这篇文章比上一篇红外对管那篇费劲多了。上一篇是教你做一个靠谱的东西这一篇是告诉你为什么某个东西不靠谱——后者比前者更难写因为要说清楚为什么不靠谱需要更多的理论和数据支撑。做技术选型知道自己要什么很重要知道自己不要什么同样重要。FSR 是一个好传感器——在它该在的场景里。杯底称重不在这个场景里。如果你正在做智能水杯或者类似的液体计量产品我个人的推荐排序是液位检测红外对管阵列 电容式 超声波重量检测电阻应变片 HX711 气压计 FSR把 FSR 留给那些需要柔性、需要阵列、需要定性判断的场景。杯底称重这件事交给该干这事的人传感器去干。作者简介一入电子深似海几十年来未曾改。做过医疗设备CFDA 三类有源、消费电子智能穿戴/智能家居、工业自动化等领域。版权声明本文为作者原创欢迎转载请注明出处。文中提到的所有实测数据来自作者当年的实验记录本具体数值可能因传感器型号、测试条件而异但数量级和趋势是真实的可作为工程参考。友情提醒本文对 FSR 的评价基于定量称重这一具体场景。如果你的应用场景是按键力检测、碰撞检测、机器人触觉等FSR 依然是一个优秀的选择。技术选型永远要结合具体场景——这不是甩锅这是搞工程。写于 2026 年 7 月某个闷热的下午。实验室的空调又坏了热得我差点把示波器拆开给它扇风。测了一下午的 FSR 蠕变然后把这些年对 FSR 的怨念一口气写了出来。舒服了。