☰
2019电赛F题纸张计数装置:电容传感与抗干扰实战复盘
2026/9/29 12:36:03 网站建设 项目流程

2019电赛F题,对当年参赛的人来说,几乎成了一种条件反射式的记忆。题目本身叫“纸张计数显示装置”,说白了就是做一个设备,把一叠纸放进两块极板之间,它就能告诉你这是几张。刚看到题面,很多人心里都觉得稳了——数纸而已,这有什么难的?可等真正上了赛道才发现,这道题把“精密测量”和“工程抗干扰”全部压进了一张薄薄的A4纸里:你做的装置,在评委那叠来历不明、干湿不均、新旧不一的纸面前,能不能每次读数都正确,这才是国一和国二之间真正的分水岭。

所以“测多少张纸才能获得国一”这个问题,翻译成工程语言其实是:你的量程做到多少、误差压到多少、现场稳定到什么程度,才能在2019电赛F题里站上最高领奖台。这篇文章就用赛后复盘的视角,把这个问题从头到尾拆一遍,包括题目考点、硬件选型、软件算法、实测数据形态,以及上海海事大学那支国一队伍方案里值得借鉴的细节。无论你是准备下一届电赛,还是单纯对电容感测感兴趣,这篇都能给你一点能直接落地的参考。

1. 先把F题的题眼拆明白:不是“数纸”,是“稳定复现那一叠纸的状态”

1.1 题目到底考什么:三个维度拆解“纸张计数”

凭记忆复盘一下,当年的F题要求是设计一个纸张计数显示装置,把若干张纸放到两块极板之间,装置自动测量并显示张数。基本要求我记得是在一定量程内实现计数,大概十几张以内,显示清晰、结果准确;发挥部分会往上加量程、加速度、加鲁棒性要求。具体数字每年可能会有细微差别,以官方真题为准,但核心永远就是三个字:数得准。

“数得准”这三个字背后,其实是三个维度的工程问题。

第一,测量对象是“一堆纸”。你看它普通,但纸有厚度、有克重、有含水量、有静电,甚至同一包纸在不同湿度下放几天,介电性能都会漂。纸张表面如果不平整,叠放在一起时层与层之间还有空气间隙,不是理想的一块均匀介质。

第二,测量环境不干净。实验室里有电磁干扰,测试桌上有人走动,评委和参赛者站在装置旁边,人体本身就是一个几十上百皮法的大电容。手悬在极板上方几厘米,读数就可能飘出一张纸的量。

第三,测量操作不可控。评委不会像你调试时那样小心翼翼地把纸摆正,他们可能是随手一放、快速抽换、甚至边说话边操作。装置必须对“不标准操作”有容忍度。

所以F题真正考的,不是你能不能做出一个能测纸的装置,而是你能不能做出一个“无论谁来操作、无论什么状态下放纸,都能稳定复现正确张数”的装置。国一和国二的分界线就在这。

1.2 为什么几乎所有国一方案都走电容路线

电容法能成为这道题的绝对主流,物理原理非常朴素:平行板电容器的电容公式是C = ε0·εr·S/d,其中εr是极板间介质的相对介电常数。空气的εr约为1,纸张的εr大约在2.5到3.5之间。当极板间距d固定、面积S固定时,往极板间塞入N张纸,就相当于把原本全是空气的介质空间,逐步替换成“纸+空气”的混合介质,整体等效εr会随着纸张数量增加而单调上升,电容也跟着变大。

你可以这样理解:极板间塞的纸越多,电场线经过的“高介电常数材料”占比就越高,极板容纳电荷的能力就越强。而且这是一个单调关系——纸多,电容就大,理论上不存在“某两种情况电容相同”的歧义。

那为什么不用其他方案?我把当年常见思路拉出来做个对比:

方案类型测量原理优点致命问题
电容法纸张改变极板间等效介电常数,电容随张数单调变化非接触、对纸张外观无要求、可用现成芯片实现高分辨率、成本低易受温度和湿度影响、需要标定、人体耦合会干扰
红外透射法用红外发光管照射纸堆,根据透射光强推算厚度实现简单、响应快纸张克重、颜色、印刷内容都会影响透光率,黑白打印的纸和空白纸读数完全不同,基本没法用
机械厚度法用位移传感器测量纸堆厚度,除以单张平均厚度直观、抗电气干扰纸堆压缩程度不同,读数波动大;需要和纸面接触,磨损传感器且容易压坏纸张
超声波法超声在纸堆中反射/衰减非接触纸张是疏松多孔材料,超声衰减不稳定,分辨率到不了单张精度

电容法几乎是各方面综合下来唯一能同时满足“非接触、单张分辨率、低成本、实现周期短”四个条件的方案。这也是为什么当年你去看获奖作品公开的文档,十个队里有九个用的是电容测量思路。

1.3 国一和国二的分水岭到底在哪里

很多队伍做出来的装置,在自己桌上测试怎么测怎么准,一到了评测现场就开始抽风。问题往往不是原理错了,而是“稳定复现”这一关没过。

国二水平大概是这样的:用自己标定过的那包纸,好好摆正,手离远一点,基本能测对。但换个牌子、纸受点潮、或者评委手一靠近,读数就开始跳。

国一水平则完全不同:同一叠纸测十次,十次都对;换一叠现场随机拿来的纸,也能对;测评过程中评委反复抽插纸张、切换不同厚度,显示值依然稳定不闪烁。做到这个程度,才够资格站在最高领奖台上。

所以这道题的隐藏评分项其实有三个:量程达标、误差为零、重复性极好。前面两个靠硬件和算法堆,最后一个靠现场操作设计和抗干扰细节。后面我展开说硬件和软件分别怎么把这些指标抠出来。

2. 从0到1搭硬件:极板、传感芯片与单片机选型

2.1 极板尺寸与间距:别小看这块铜板,它是整个系统的测量基准

极板是电容传感器的“身体”,它的几何参数直接决定了基准电容大小和单张纸对应的电容增量。当年队伍里最常见的做法是用覆铜板或铝板裁成正方形,尺寸大概在10cm×10cm左右,能覆盖A4纸的中部区域。极板面积选大一点,基准电容变大,单位张数的电容增量也变大,有利于提高信噪比;但面积太大,边缘效应更明显,而且对放纸位置更敏感——纸稍微放偏一点,覆盖面积变化带来的电容变化可能超过一张纸本身的增量。

间距的选择更关键。我当时见过不少队伍把极板间距定在5到6毫米。为什么是这个数?你想,一张80g的A4纸厚度约0.1毫米,15张摞起来也才1.5毫米。如果极板间距是6毫米,那15张纸只填充了间隙的25%,等效介电常数从1变到大约1.4左右,电容增长了40%,这个变化量非常舒服。如果间距拉到20毫米,15张纸只填充7.5%,电容变化不到15%,信噪比就明显吃紧了。反过来如果间距只有2毫米,放纸不方便,纸稍微翘一点就顶到极板,机械扰动会直接变成测量误差。

还有两个细节很容易被忽略:极板表面处理和引线屏蔽。覆铜板表面的氧化层会带来接触电阻和电容漂移,调试之前用酒精擦干净、晾干再装。引线越短越好,最好用屏蔽线,屏蔽层接大地,否则长引线就像一根天线,人体靠近时耦合的噪声会叠加在测量信号上。

2.2 为什么用FDC2214而不是555振荡器

电容测量有好几条路线,我分别说说当年大家踩过的坑。

最朴素的做法是用NE555搭一个多谐振荡器,把极板电容并进RC定时电路里,通过单片机测频率变化反推电容。这个方案成本极低,但有两个硬伤:一是NE555的阈值翻转精度有限,频率抖动比较大;二是RC振荡频率受电源电压影响明显,电池电压稍微掉一点,读数就飘。想做定性演示可以,想稳定分辨“多一张纸”这种微小电容差,太勉强。

另一个路线是电容电桥加精密ADC。精度能做得很好,但电路复杂度高,需要正弦激励源、相敏检波、高分辨率ADC,调试周期很长,四天三夜里根本玩不转。

当年绝大多数冲奖队伍选的都是TI的FDC2214。这颗芯片是专用的电容数字转换器,四通道,外接LC谐振电路,感测电容的变化量分辨率能做到飞法(fF)级别,I2C接口直接读出28位数字量,省掉了一大堆模拟调理电路。FDC2214内部的工作原理可以通俗理解为:它和外部电感L、感测电容C组成一个LC振荡回路,电容一变,谐振频率就变,芯片通过测量频率变化换算出电容变化。因为它测的本质是“频率比例”而不是绝对电压,所以抗电源干扰的能力比555方案强很多。

另外还要说句实在话:FDC2214在电赛圈子里资料多。当年赛后公开的方案报告里,你能找到大量现成的寄存器配置和读取代码,这等于帮你把最难的“从模拟到数字”这一段直接跳过。四天三夜的时间有多宝贵,能少踩一个坑就是赢。

2.3 原理图和PCB上容易翻车的小细节

硬件部分真正拉开差距的往往不是大方案,而是一堆不起眼的细节。我按当年调试顺序给你列几个高频翻车点。

第一是FDC2214的外部电感L选值。这颗芯片需要外接一个电感配合感测电容构成LC振荡器,电感值决定了谐振频率的落点。手册上有参考范围,常见做法是选18μH到33μH之间的电感,让空闲状态下的谐振频率落在芯片可测量的区间内。如果频率过高或过低,芯片会直接报错,或者读数分辨率明显变差。

第二是电源去耦。FDC2214对电源噪声不算特别敏感,但也不能裸奔。VDD脚附近放一个0.1μF陶瓷电容再加一个10μF钽电容,几乎是标配。单片机、显示屏和传感器模组尽量分开供电或至少用磁珠隔离,避免屏幕刷新时的电流毛刺串进测量通道。

第三是走线。FDC2214的输入引脚到极板之间的连线要尽量短,而且要避开I2C时钟线。当年有队伍为了结构方便把极板引线拉了20厘米,结果读数最大能跳三四张的量。后来把引线缩短到5厘米以内、换成屏蔽线,数据立刻稳下来。

第四是单片机选型。这个真不用纠结,STM32F103级别就够了。I2C跑400kbps,读一次数据也就几十微秒,主循环里做滤波、显示、按键扫描绰绰有余。别在控制器上浪费时间,把省下来的精力全部投到标定和现场测试上。

3. 软件层的胜负手:从原始电容值到稳定张数

3.1 先把读数稳定下来:滤波算法的正确打开方式

FDC2214读出来的原始数据基本是一条带有随机波动的曲线,波动来源包括极板微震动、空气湿度扰动、电源纹波等。直接拿单次读数去判张数,等于赌博。

一个非常实用且不费算力的方案是“排序去极值平均法”:连续采50个数据,排序后掐头去尾各去掉5个,把中间40个求平均,作为这一轮测量的代表值。这样既能剔除偶发的跳变尖峰,又不会因为极板被手指短暂碰一下就把平均值带偏。

#define SAMPLE_N 50 #define TRIM_N 5 uint32_t stable_read(void) { uint32_t buf[SAMPLE_N]; uint32_t sum = 0; for (int i = 0; i < SAMPLE_N; i++) { buf[i] = fdc2214_read_ch0(); delay_ms(2); } // 简单冒泡,凑合够用 for (int i = 0; i < SAMPLE_N - 1; i++) { for (int j = 0; j < SAMPLE_N - i - 1; j++) { if (buf[j] > buf[j+1]) { uint32_t tmp = buf[j]; buf[j] = buf[j+1]; buf[j+1] = tmp; } } } for (int i = TRIM_N; i < SAMPLE_N - TRIM_N; i++) { sum += buf[i]; } return sum / (SAMPLE_N - 2 * TRIM_N); }

注意采样间隔。我当时习惯每2毫秒采一次,50个点也就是100毫秒,人感觉不到延迟,但已经足够把高频噪声平滑掉。如果你的现场干扰更严重,可以把采样数提到100,代价只是每次测量多占用200毫秒,依然可以接受。

3.2 标定表与分类判别:不要用固定阈值,用距离判断

数据稳定之后,下一步是把“读数”翻译成“张数”。这里的核心工作叫标定:拿一包你信任的标准A4纸,从0张开始,每增加一张记录一次稳定读数,一直到量程上限,形成一张标定表。

判断新读数对应几张纸,最稳的方法不是设置一堆固定阈值区间,而是做“最近邻匹配”:把当前读数跟标定表里每一档数值求差的绝对值,离谁最近就判成谁。

我解释一下为什么固定阈值不靠谱。电容测量存在整体漂移,比如现场湿度比标定时高了,所有档位的读数可能整体上升一小截。如果固定阈值,本来该判5张的读数可能被整体抬高后落进6张区间。但如果用距离判断,即使整体漂移,当前读数依然会落在标定表5档和6档的中间靠近5档的位置,正确率会高很多。当然这不是万能药,漂移太大照样会错,但至少给你留了缓冲空间。

// 标定表:cal_data[n] 表示n张纸对应的稳定读数 // 范围 0 ~ CAL_MAX int nearest_bucket(uint32_t value) { int best = 0; uint32_t best_dist = 0xFFFFFFFF; for (int n = 0; n <= CAL_MAX; n++) { uint32_t dist = value > cal_data[n] ? value - cal_data[n] : cal_data[n] - value; if (dist < best_dist) { best_dist = dist; best = n; } } return best; }

更进阶一点,你可以在标定表相邻两档之间做线性插值,把“最近邻”升级成“分段线性映射”,这样即使纸张厚度和标定纸有细微差异,也能通过比例关系修正,稳定性会进一步上升。当年很多冲国一的队伍,软件上都会加这个插值步骤。

3.3 手离开之后读数才准:国赛现场最经典的翻车点

F题现场有个特别经典的场景:选手把纸放进极板之后,手还悬在装置上方,屏幕上的读数就开始往上飘。放6张纸显示8张,手一拿开又跌回6张。评审老师眉头一皱,这装置基本就告别国一了。

这个现象的原理是人体对地电容。人站在地面上,手靠近极板时,相当于在测量电容上并联了一个额外的耦合电容,读数自然偏高。解决思路分硬件和软件两层。

硬件层可以做两件事:一是在极板周围加一圈接地保护环,把向外的电场收住,削弱外部物体靠近时的耦合;二是把整个测量装置用一个接地的金属外壳包起来,只留出放纸的槽口。这个屏蔽措施对手悬停干扰的抑制非常明显。

但真正让装置“智能化”的,是软件层的稳定判定。做法是:连续多次调用稳定读数函数,如果连续3轮到5轮的结果之差不超过某个容差(容差可以定为“半张纸对应的读数增量”),就判定为“读数已稳定”,这时才把结果显示出来。如果还在跳,就一直刷新但不输出最终结果。这个逻辑等于告诉评委:我的装置不是急急忙忙给你个数字,而是确认纸放稳了才会报数。

int stable_result = -1; uint32_t last = 0; int consecutive = 0; while (1) { uint32_t val = stable_read(); if (abs(val - last) <= TOLERANCE) { consecutive++; } else { consecutive = 0; } if (consecutive >= 4) { stable_result = nearest_bucket(val); display_number(stable_result); break; } last = val; }

3.4 温度和湿度漂移:不解决它,换一包纸就翻车

如果说人体耦合是“突发性”干扰,那温度和湿度就是“慢性”干扰。纸是吸湿材料,环境湿度一变,纸张本身的介电常数就变;温度变化则会影响电子元件的参数和极板间空气的介电常数。这两者叠加,会让你的标定表在上午准、下午漂。

简单的补救办法是在装置里加一个温湿度传感器,比如SHT30,标定时记录环境湿度,实测时如果湿度变化超过一定范围,启动一个偏置校正流程:先放一张标准纸,重新标定当前偏置,再把这个偏置应用到所有档位。这相当于把整张标定表上下平移,能解决大部分漂移问题。

更彻底的做法是采集不同湿度下标定表数据,生成一张“湿度-偏移量”补偿曲线,实测时根据当前湿度实时修正。这个工作量大一些,但也是当年真正拉开档次的地方——能稳定应对不同环境纸样的队伍,现场表现的从容程度完全不一样。

4. 实测数据复盘:什么样的指标才配得上“国一”

4.1 一组标定数据的真实形态

很多人以为标定数据是完美的直线关系——电容和纸张数量严格成正比。实际根本不是。因为纸堆层与层之间有空气间隙,加上纸本身的压缩程度不同、极板边缘电场发散,电容随张数的曲线是一条“先陡后缓”的曲线。也就是说,1到5张之间每张的电容增量比较明显,越往后增量越小,到接近量程上限时,相邻两张的读数差可能只有1到2张时的一半。

这里给一个示意性的数据形态(具体数值因极板尺寸、距离、电感值而异,不要直接抄):

纸张数量稳定读数(示意义)相邻档位差值
010000-
11008080
21015575
31022570
51035560
101064042
151083028
201096016

看到没有,越往后相邻差值越小,到了15张以上,两档之间可能只有二十几的差值,而测量噪声可能有5到10。这种情况下,如果只靠单次读数碰运气,很容易判错。这也是为什么滤波和稳定判定不是可选项,而是必需项。

4.2 现场测试最容易翻车的五个场景

我结合当年赛后和各队交流的情况,把现场出过事的场景归一下类,你可以对照检查自己的装置。

第一,纸张受潮。选手紧张,手心出汗,拿过的纸边角会吸潮变软,介电常数直接变,数据偏大。遇到这种情况,最有效的办法是现场等几秒让纸含水分布均匀,或者挑选纸张中部区域作为判据区。

第二,纸上静电累积。干燥天气下,纸从包装袋里抽出来会产生静电荷,静电电场会叠加在测量电容上,让读数产生无规律跳动。解决方法是标定和测量之间尽量保持相同的操作习惯,不要用力摩擦纸张,也不要穿着化纤衣服在现场反复抽纸。

第三,评委手悬停在装置上方。哪怕你的软件已经做了稳定判定,如果评委一直保持一个姿势不动,手对极板的耦合就是一个恒定偏置,稳定判定会认为“数据已稳定”,但显示的是一个偏大的值。所以硬件屏蔽一定要做,最好让极板周围有一圈接地的金属围挡,把手的电场影响降到最低。

第四,纸放歪了。放歪之后,有效覆盖面积变小,读数偏小。如果你的量程内相邻档位间隔本来就窄,这一点偏置可能直接错一张。应对办法是在极板上画出纸张轮廓线,提醒操作者按线放置。

第五,同一叠纸反复插入导致的磨损变形。评测现场评委可能为了试重复性,同一叠纸插拔十几次,纸边会起毛、卷曲,厚度和介电性能都略有变化。你能做的是在算法里稍微放宽判断容差,避免边缘情况一刀切。

4.3 现场演示的操作策略:把“稳定”两个字演出来

测评过程本质上是一场“技术答辩+现场演示”。你的装置能不能拿国一,除了硬指标,还有评委的主观印象。在评测现场,有几个策略特别重要。

第一个策略是“慢就是快”。放纸进去之后,不要急着按键,等稳定判定指示灯亮起再操作下一步。评委看到的是一个从容不迫、每次读数都确认之后才报数的装置,而不是一个数字乱跳、操作者慌慌张张重试的设备。

第二个策略是主动做重复性展示。如果测评时间允许,同一叠纸当着评委的面测三次,每次结果一致,比说什么都管用。“稳定复现”这四个字,放到明面上展示出来,冲击力极强。

第三个策略是预置“现场校准”流程。在装置上留一个“校准”按键,换纸样之前先放一叠已知张数的纸做一次偏置校正。这不仅提升准确率,还能在答辩时展示你对环境漂移有清晰认识,是个加分项。

第四个策略是把装置的测量时间控制在3秒以内。评委不会给你20秒等一个结果,采样和滤波的总时间要提前调好,尽量在2到4秒区间输出稳定结果。

5. 拿国一的真实门槛与赛后反思

5.1 上海海事大学方案里值得借鉴的细节

标题里提到的上海海事大学,当年那支国一队伍的方案在赛后各个交流群和复盘文章里被反复讨论过。我并没有拿到他们内部的完整源码或原理图,这里更多是根据公开的赛后分享和评分表现反推出来的几个关键特征,供你参考。

第一,他们在极板周围做了完整的接地屏蔽环。这个细节在论文里可能只占一句话,但在实际测试中是“手悬停不漂移”和“手一靠近就狂跳”两种天壤之别的关键。屏蔽环不是随便画一圈铜皮,而是围绕极板四周、保持一定间隙、单独接到系统地的一个闭环,效果接近把极板包在一个“法拉第笼”里。

第二,他们的数据处理明显采用了“稳定窗口判定+最近邻分类”的组合。从现场演示视频里能看到,纸张放入后,装置并不是立刻显示,而是大概等了一到两秒,屏幕数字落定后不再变化,这是典型的“确认稳定后才输出”逻辑。比那些一放纸就出数字但数字一直在跳的装置,观感和可信度完全不同。

第三,他们预留了快速标定流程。现场换用不同品牌的纸张时,操作者会先放一叠已知张数的纸,然后按一下校准键,整个过程不超过5秒。这个流程既解决了纸张批次差异问题,也向评委展示了装置具有工程实用性,不只是实验室玩具。

5.2 如果让我重做一次,我会改什么

每年带队伍复盘,我都会列一张“如果重来一次”的清单。F题这个项目,我的清单是这样的。

第一,极板面积我会再做一轮实验优化。当年我们用的10cm×10cm极板已经不错,但后来发现稍微加大到12cm×12cm,边缘效应的相对影响会进一步下降,单张增量更稳定。代价是设备体积变大,但赛题对体积没有严格限制,这个钱花得值。

第二,我会把湿度传感器从“可选”改成“标配”。只要加上SHT30这类传感器,配合简单的偏置修正算法,就能把“只能测标定纸”升级成“能测大多数纸”。这几乎是国一和国二在功能完备性上最直接的区别。

第三,我会增加对“纸张位置偏差”的容忍度。可以在极板上画标线、加定位挡板,甚至做一个小型的导轨结构,让纸张每次都被引导到同一位置。这个机械细节看似土,但能把测量重复性提升一个台阶。

第四,标定点数我会做到量程上限,而不是题目要求的下限。很多队伍为了省时间只标定到基本要求的上限,结果发挥部分一加量程就抓瞎。直接预标定到最大可能张数,多花1小时,现场能少几个问号。

5.3 给下一届参赛队的几条实在建议

最后说几句掏心窝子的话。

第一,先确保基本要求100%全对,再去做发挥部分。国赛评分的逻辑是基本要求一项不达标,后面做得再花哨也可能直接掉档。你能稳定测对15张,比“能测30张但偶尔抽风”拿到的分数高得多。

第二,至少留出整整一个白天做“现场模拟测试”。找几个没碰过你装置的同学来操作,让他们故意放歪、快速抽纸、手悬停、换纸,把你能想到的恶搞场景全跑一遍。当场翻车当场改,比在评测现场翻车强一百倍。

第三,准备一块备用板。哪怕是同一版硬件,也可能因为焊点松动、器件损坏而在关键时刻掉链子。电赛现场心态崩不崩,很多时候取决于你有没有Plan B。

第四,把标定纸和测试纸分开保存。标定的时候用专用纸,测试的时候让队友拿来另一包纸,保证标定数据不会因为你反复用同一包纸而“过度拟合”。这个习惯能让你在现场面对陌生纸样时心里更有底。

2019电赛F题已经过去好几年了,但它留给后来者的东西远不止一道题。电容法的工程细节、抗干扰思路、稳定判定的软件逻辑,换一个壳子几乎可以复用到任何精密测量场景。如果你能把这个题完整啃下来,下次再遇到类似“测一个微小物理量”的赛题,你脑子里自然会有清晰的路线图——用什么样的传感器、怎么处理数据、现场怎么稳住。这就是那道题最值钱的遗产。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询