
2019年8月上海海事大学的电子设计竞赛实验室里一群人围着一块覆铜板、一摞A4纸和一排杜邦线反复折腾。别的队都在调电机、跑飞控我们却蹲在桌上跟一堆纸片较劲。原因很简单2019年全国大学生电子设计竞赛F题——纸张计数显示装置要求做一个能通过非接触方式判断纸叠里到底夹了多少张纸的仪器0到10张一张不许错。测多少张纸才能获得国一这个话题说穿了不是问纸的数量上限而是问一个方案要做到什么程度才能从全国上千支队伍里杀出重围拿到国一。我以当年参赛者的视角把整个方案从题目拆解、器件选型、极板制作到算法标定、现场调试完整复盘一遍。里面有不少是我们踩过坑之后才总结出来的硬经验希望能给后来参加电赛或者其他需要做电容检测类项目的朋友一些实打实的参考。1. 吃透题目F题的评分逻辑与国一门槛1.1 题目到底要我们做什么2019年电赛F题的基本要求是设计并制作一个纸张计数显示装置装置能够将若干张A4复印纸放入检测区域后实时显示纸叠中的纸张数量检测范围0到10张要求显示准确。发挥部分则增加了设定纸张数、超限报警等交互功能。也就是说你做的不是一个测厚度的尺子而是一个能自动判读里面有几张纸的智能检测系统。很多人第一反应是这不就是称重吗用红外对射不就行了但题目明确写着纸叠放入检测区域而且是整叠放入光电对射透不过厚纸称重则会被纸张厚度密度影响且分辨率难以做到一张的级别。这道题真正考察的核心能力是微小电容变化的精确测量与稳定处理。纸张作为电介质进入平板电容极板之间改变了等效介电常数从而引起电容值变化。每一张纸带来的电容增量大约只有几pF甚至更小要在这个量级下稳定分辨0到10张纸才是真正的技术难点。1.2 评委怎么打分为什么测准10张比测到20张更值钱先纠正一个常见误区F题并不追求能测多少张而是追求在0到10张范围内每一次都判定正确。国一评奖看的是基本要求全对、发挥部分稳定可靠加上现场测评时的速度与鲁棒性。题目写到0到10张你就算能做20张、30张如果10张以内偶尔判错一次评测时当场就会被扣分。评委不会惊叹你的量程拓展只会在意屏幕上显示的数字与实际纸数是否一致一致就是分不一致就是零。所以整个方案的设计逻辑应该围绕测准而不是测多极板结构够不够稳定FDC2214的采样够不够干净标定算法能不能在温度、湿度波动的现场环境下仍然可靠这些才是决定你能不能拿国一的根子。我们当时的目标非常具体用现场提供的同一包A4纸连续测50次0到10张的随机组合一次不差。2. 方案选型为什么全行业都盯着电容法2.1 光电、称重、电容三条路的直接对比纸张计数看起来简单但把所有可能方案摆到桌面上比一圈才能明白为什么最终几乎所有拿国一的队伍都选了电容法。光电法红外对射只能判断有纸没纸叠起来之后光路完全被遮挡没法数数量。用激光扫描测厚度的话纸张的压缩程度、表面平整度都会带来巨大误差而且设备体积和成本对于电赛来说完全不可控。称重法一张A4纸约4到5克10张就是40到50克用高精度称重传感器理论上能分辨但传感器受温度漂移、桌面震动影响极大评测现场不可能给你一个隔振平台。关键是纸张湿度不同重量也不同同一包纸在南方和北方差出来的重量都可能超过半张纸。电容法利用平行板电容原理纸作为电介质插进两极板之间介电常数改变导致电容变化一张A4纸的电容增量在合理设计下可以做到稳定可分辨。没有运动部件、响应快、成本低而且FDC2214这种专用电容检测芯片把测量分辨率推到了fF量级这让电容法成为F题的唯一正解。2.2 FDC2214 MCU的主流架构与取舍2019年那届电赛TI是赞助商FDC2214几乎是明牌选手。这颗芯片基于LC谐振原理外接一个电感和被测电容构成谐振回路芯片内部通过测量谐振频率的变化来反推电容值输出24位或28位数字结果。相比直接用ADC采集电容充放电电压的做法FDC2214的分辨率和抗干扰能力都高出好几个数量级。我们用的主控是STM32F103ZET6原因很简单学校实验室库存多、资料全、IIC硬件接口现成配合FDC2214的IIC从机模式读数据就是几行代码的事。你问为什么不用MSP430也完全可以题目没限定主控但STM32的开发效率在我当时的习惯里是最高的库函数调用几十行就能把传感器数据读回来留给算法调试的时间更充裕。至于为什么不用自己搭的LC振荡器加频率计方案——理论上可行但温漂和分布电容会让你调到头秃。FDC2214把激励、谐振检测、数字化整合在一颗芯片内等于把最难的模拟前端标准化了你只需要关心极板设计和数据处理这才是拿奖的正确姿势。3. 从零搭一套国一方案关键器件与制作细节3.1 极板设计铜箔怎么贴、间距怎么定、屏蔽罩怎么加电容法的核心传感器就是一对平行极板。我们踩了很多次坑之后总结出一套比较靠谱的制作方法极板材料与尺寸用双面覆铜板裁成8cm×8cm的方形铜面朝内作为电极。尺寸不能太小小了边缘效应占比大电容变化非线性严重也不能太大大了极板间的杂散电容和对外干扰都变大。8cm×8cm放A4纸绰绰有余而且电容基准值在几个pF到十几个pF之间比较好处理。间距与压紧方式上下两块极板之间需要固定间距但又不能完全刚性锁死因为纸叠放进去后需要压紧让纸张和空气间隙尽量小。我们做的是底部极板固定在亚克力底座上顶部极板用四根铜柱支撑铜柱外套弹簧让顶板可以上下浮动。这样放纸后顶板会因为弹簧压力自动压紧纸叠空气间隙被压缩到最小信号强度最大。弹簧的力度要适中太紧会导致放纸困难太松会导致纸间有空气层读数不稳定。屏蔽是关键中的关键电容极板本身就是个天线人手靠近、桌面金属、电源线摆动都会在输出数据上产生明显波动。我们的做法是用马口铁或铝箔做一圈屏蔽罩将极板四周和顶部包住屏蔽罩接地。信号线用屏蔽线屏蔽层单端接地。这一条几乎决定了现场数据能不能看务必重视。3.2 FDC2214配置与数据采集IIC读取、频率/电容换算、防饱和FDC2214的寄存器映射比较简单核心步骤是配置参考时钟我们直接用芯片内部振荡器。配置通道0的激励频率和电流接入合适的电感。FDC2214需要外接一个电感与传感器电容组成LC谐振回路我们选了10μH的电感这样谐振频率落在几百kHz到几MHz区间比较稳定。设置转换时间和分辨率。采样周期拉长可以降低噪声但会拖慢响应速度。我在实测中比较下来每通道采样时间设为约30ms分辨率就能稳定达到0.1pF以下完全够用。IIC连续读取28位数据转换成频率值再根据公式反算电容值。伪代码大概是这样的框架uint32_t read_fdc2214(void) { // 配置寄存器0x14选择通道0启动单次转换 // 等待转换完成轮询状态寄存器 // 读取DATA_CH00x00和0x01组合成28位原始值 // 通过公式 f FDC_CLOCK / (1 DATA / (2^28)) // 再通过谐振频率反算电容 C 1 / (4 * pi^2 * f^2 * L) return capacitance_pF; }有一点我要特别提醒FDC2214的输入电容范围是有限的如果极板的基准电容加上纸叠后的增量超出芯片允许范围数据会直接饱和表现为读数卡在最大值附近不动。选极板尺寸时就要估算好基准电容控制在pF到几十pF的级别不要贪大。我们最初用15cm×15cm的极板就遇到了饱和问题缩小到8cm×8cm后一切正常。3.3 标定算法从原始数值到纸张数别硬写阈值这是整个方案里最体现技术水平的部分。很多人拿到FDC2214之后读到的数据是一个随纸张数量变化的电容值于是简单粗暴地写几个阈值区间比如读数在11.2到11.5之间就是3张。这种做法在实验室里能跑一到现场就会被纸张批次、湿度、温度的变化打脸。我们的做法是相对值插值映射第一步标定基准每次开机后先空板测量50次取平均作为0张基准值C0。这一下就消除了大部分温漂和器件差异因为环境变化对极板基准电容的影响和对纸叠电容变化的影响是叠加的减去基准后剩下的是纯纸张贡献。第二步建立映射表用现场提供的同一包纸分别放1张、2张……10张各采样50次记录每档的平均电容值形成一个11个点的数组。第三步判定算法实际测量时取当前20次采样的平均值与映射表中每个档位的值比较取差值最小的档位作为结果。同时计算最小差值和次小差值之间的比值如果比值太小说明当前结果处于两个档位的边界上判为不稳定并继续采样。这个最小距离置信度的思路远好于写死阈值因为它天然适应了环境漂移和批次差异。这里有个实操小技巧不要用绝对电容值做映射表而是用相对变化量ΔC C - C0。一张纸带来的ΔC在同一极板结构下相对稳定但环境温漂是叠加在绝对电容值上的用差分数据可以成倍提高稳定性。3.4 界面与人机交互快速显示与评测时的小心机题目要求实时显示纸张数量并且发挥部分还要能设定纸张数、超限报警。界面我们用了一块0.96寸OLED显示当前N 张设定值用两个按键加减。代码逻辑不复杂但有一个雷区OLED刷新速度和采样循环不能互相卡死。我们用了简单的分时调度主循环里每50ms刷新一次显示但采样和判定逻辑每200ms才执行一次避免在IIC读取过程中被显示刷屏打断导致数据丢失。评测时还有一个细节评委放纸后装置需要尽快稳定显示但也不能太快到读数还在乱跳就显示出来。我们设置了一个连续3次判定结果一致才刷新显示的防抖逻辑实际评测中大概1秒内就能锁死结果表现非常稳。这个防抖策略让现场演示的节奏感很好评委也不会因为屏幕数字反复跳变而产生不信任感。4. 现场翻车实录调不出来时的排查顺序4.1 数据乱跳的排查先查电源和接线再查手我们第一次把极板接上FDC2214时读数像抽风一样乱跳1张纸和3张纸的数据区间完全重叠。排查过程走了不少弯路后来整理出固定检查顺序第一步看电源。FDC2214对电源纹波敏感我们用AMS1117从5V降到3.3V但AMS1117在高频段纹波不小后来换成LM1117-3.3再加一个10μF陶瓷电容和0.1μF高频去耦电容贴芯片旁数据明显变稳。第二步查IIC总线上拉电阻和线长。杜邦线超过20cm后信号完整性和噪声都变差我们把IIC线压缩到10cm以内并接上4.7kΩ上拉电阻。第三步检查人体电容干扰。手一靠近极板读数就跳这是必然的因为人体是导体会和极板形成寄生电容。所以评测时手要离开极板区域或者用屏蔽罩隔开。我们甚至养成了触碰极板后必须等数据稳定再记录的习惯。这顺序背后是有逻辑的电源噪声影响的是所有采样的底噪接线和寄生电容影响的是信号的稳定性和一致性先排除全局性问题再处理局部干扰效率最高。4.2 读数不对边缘效应和环境干扰的解决办法另一个高频翻车点是测出来总是偏多或偏少一张。问题通常出在边缘效应上平行板电容的边缘存在电场发散纸张放进去时边缘部分的电场分布和中间不一样导致电容变化量和纸的摆放位置有关。如果纸叠没有完全覆盖极板中心或者纸放歪了读数就会飘。解决方法是固定纸叠的位置。我们在底部极板上画了一个和A4纸尺寸一致的定位框评测时只要把纸叠对齐框线放进去即可。另外纸张的褶皱和翘角也会改变局部空气间隙放纸前把纸叠在桌面上顿整齐效果立竿见影。环境干扰方面最隐蔽的是空调出风口和评测现场的塑料隔板静电。有一次数据总是间歇性跳变排查了半天发现是场地通风系统启动瞬间纸叠被吹得微微浮动。后来在屏蔽罩底部加了一个轻质压块问题彻底消失。4.3 评测前夜的保命检查清单最后分享一个我们比赛前夜总结的检查清单每一条都是血泪教训确认极板表面没有氧化和异物测试前用酒精棉片擦拭铜面。确认弹簧压紧机构顺滑纸叠放入后能迅速压实放纸后等1秒再开始采样。换纸后重新执行一次标定流程不要懒。检查所有线缆连接是否牢靠杜邦线最好点胶固定防止评测时移动导致虚接。多准备几包同样的A4纸避免评审现场临时换纸后接到不同克重纸张。程序里留一个现场快速标定的按键流程一键把11档映射表重采一遍。关于测多少张纸才能获得国一我的最终回答是2019年的F题国一方案的成功秘诀从来不是把量程做到20张、30张而是把0到10张这个范围内的每一次测量都做到重复性好、可靠性高。测准比测多重要得多。我个人的经验是电赛拿国一拼的是工程细节的完成度——极板加工得够不够工整、采样数据处理得够不够干净、标定流程设计得够不够傻瓜、现场评测时的防错机制够不够周全。那些看起来平平无奇的队伍往往就是把这些细节做到了极致。如果你后续要做类似项目我建议在FDC2214的基础上把重点放在极板结构和标定算法的迭代上。可以先搭个最简单的平板电容跑通数据链路再一步步加弹簧压紧、屏蔽罩、定位框、差分标定这些工程化手段。每次改动后都用同一套测试脚本回测0到10张的准确率数据说话比任何玄学都可靠。祝你的作品也能稳稳站在国一的领奖台上。