
2023年电赛国赛结束后的那个晚上我们没有去聚餐庆祝而是坐在基地里把四天三夜的工作记录从头翻了一遍。屏幕上还有没来得及保存的波形截图焊台旁边留着一段剪断的电源线。那一刻我忽然意识到真正让一支队伍拉开差距的不是谁的方案更高级而是那些在赛前被反复忽视的小决策选哪道题、电源怎么布局、数据用什么统一口径、现场操作卡写到什么程度。这篇复盘就是把这段经历完整拆开讲一讲一支三人队伍从省赛一路走到国赛在选题、硬件、软件、现场测评和赛后复盘里踩过哪些坑也希望能给准备参赛的同学和带队老师一点能用得上的经验。1. 从省赛到国赛我们是怎么把备赛状态调整到能打硬仗的1.1 三个人三种角色但必须共用一套语言电赛队伍通常就是三个人最常见的组合方式是一个主攻硬件、一个主攻软件、一个做系统整合。我们当时也基本按这个逻辑分工但中间经历了不少磨合所以我先把这套配置的逻辑讲清楚。A同学对电源和模拟电路最熟负责DC-DC电源模块、运放调理、保护电路这些低压稳不稳、信号纯不纯的事情。我主要写单片机程序负责显示、按键、数据采集、通讯和后面的校准算法。另外一位同学偏系统整合从整体方案到操作界面再到最后的设计报告和测试记录都归他管。这个分工看着简单真正难的是三个人必须共用一套术语和文档规范。刚开始我们经常出现类似硬件说改了引脚软件还在用旧定义的情况为了排查一个小问题浪费半个小时。后来定了一条规矩任何硬件改动不管多小修改完后必须在二十分钟内同步到共享表格里写上改动内容、影响范围和是否重新测试。这条规矩让我们在正式比赛那四天里少吃了很多亏因为电赛的改动是高频发生的今天上午飞一根线下午程序就要跟着适配没有同步机制基本等于在泥潭里转。如果是第一次组队我建议在省赛前就把这种分工和同步方式固定下来而不是等到国赛才临时磨合。共同语言还包括这个引脚现在是什么电平、这个信号是模拟地还是数字地、这个量是显示值还是测量值听起来都是小事但在凌晨两点的时候这些术语的混乱会造成大问题。1.2 赛前四周题可以不刷多但模块库必须落地备赛期很容易陷入一个误区疯狂刷往届真题觉得题目做得越多越稳。我们组在准备2023年国赛时前两周也刷了一些往年题目但后两周基本不做完整新题转而做一件更实用的事把手上所有要用的模块整理成可以直接拼装的积木库。这个积木库不是简单地把模块买回来插一下而是给每个模块建立一张参数卡。比如电源模块我们会标注实测最大输出电流、纹波大小、静态功耗、是否容易受到负载突变影响DDS波形模块我们会标出频率范围、幅度稳定度、以及不同频率下是否需要软件补偿OLED屏和按键部分则整理成统一驱动函数确保任何一道题拿来都能直接调用显示框架。这样做的好处到了比赛时体现得很充分。题目一出我们不需要再花时间去验证某个模块能不能用而是在基于赛前测好的参数去判断这个模块放到这个系统里够不够用。备赛阶段另一个容易被忽略的事情是建立测试记录表。我们之前参赛时吃过亏比赛结束后写报告结果想找某个频率点的输出电压数据翻遍手机相册和草稿纸都没有完整记录。这次我们准备了一个共享Excel内容很简单日期、测试对象、输入条件、输出数据、仪器型号、记录人。这个表后来直接变成了设计报告里数据部分的素材也让现场测评时面对评委提问能够从容回答。1.3 设计报告不是最后一天的事很多队伍把设计报告当成最后一天晚上的任务这其实是最危险的想法之一。电赛的评分里设计报告占的比例不低而且报告内容和现场实测数据高度挂钩。如果最后一天才写很容易出现数据总结不一致、测试条件写不完整、方案框图与实际结构对不上这种情况。我们在赛前四周定了一个原则报告素材跟着比赛进度走。训练期间每完成一个关键模块的测试就写一小段方案说明和测试记录放到共享文档的对应章节里。这样到了比赛第四天要交报告时我们只需要整理和润色而不是从零开始回忆四天里做了些什么。特别是测试数据这一块尽量做到每个指标都对应一个明确的测试条件比如输入信号频率是多少、负载是空载还是带载、用的测量仪器是哪一台。这些细节在现场测评时经常被评委问到能答得清楚就很加分。2. 拿到赛题后的第一个小时一次关键的选题决策2.1 读题阶段我们在纸上写了什么比赛题目发布后的第一个小时我们不写代码、不画原理图而是干三件事拆解评分点、盘点手里模块、评估队伍短板。具体操作是拿一张A4纸把每一道题的要求抄下来然后分成两列——必须达到的指标和加分/拓展指标。必须达到的指标里再进一步细分看看哪些是依靠成熟方案就能稳拿的哪些是需要现场临场开发的。这个步骤非常有必要因为题目里的指标往往写得很密集第一次读很容易忽视某些隐藏条件比如输入电压变化范围、负载调整率要求、信号最大频率范围等。接下来对照我们赛前整理的模块库估算每一道题需要重新开发的部分有多大。比如有一道题看着功能不多但要求一个很干净的模拟电源而我们手上没有太合适的模块如果硬选前期的电源调试就会吃掉大量时间。另一道题涉及结构装配我们队伍没有人擅长做机械工具也缺直接放弃。通过这种方式我们很快就把选择范围缩小到一道以信号发生与测量为主的题目上。选择它不是因为题简单而是因为我们在这条链路上有真实的技术积累能比较确定地做出保底分。2.2 为什么不选看起来最容易的题这里想多说一句选题哲学。我发现很多队伍倾向于选功能清单最短的题理由通常是看起来简单、好做完。但从我自己的观察来看这类题目往往把分数压在极少数的核心指标上一旦指标不够好评分区间很窄很难拉开优势。我们当时没有选那道看起来门槛最低的题因为仔细拆下来它的核心指标对温度漂移和长期稳定性要求很高这类问题恰恰是短期作品最难做好的。而我们选的信号类题目虽然功能多一点但每一项的评分权重都比较分散系统里就算有一两个指标没做到顶尖只要大部分指标都达到基本线总分也不会差。实际结果也证明这个选择是对的。现场测评时评委操作了多个测试项虽然每一项都不是满分但累计起来分数很稳。这给我的体会是竞赛评的是你做到多少不是你题目选得多难更不是你的方案看起来多高级。拿有限的时间换确定性的分数才是最重要的。2.3 当天下午就定下来的整体方案选题确定之后当天下午我们就画定了系统框图整个过程没有什么反复。主控选了一颗熟悉的ARM Cortex-M4处理器自带浮点运算单元做校准计算和快速傅里叶变换比较方便。信号生成部分用了DDS方案主控通过SPI接口配置频率和相位后级再接程控增益放大器做幅度调节。测量部分我们用比较器加定时器输入捕获来测频率用外置ADC模块来测幅值同时把一些按键、编码器、OLED显示这些交互层提前跑通。电源板单独做一块提供多路输出给模拟和数字部分使用。这套方案不是赛场上最花哨的但我们很清楚每个模块的脾气它们在我们备赛时都被单独测过组合起来以后最大的风险其实集中在系统级的干扰和校准而不是某个芯片能不能工作。当天下午我们就把这个框图发给了指导老师确认老师说了一句话我到现在还记得你们这套方案赢不了最快的但能保证不崩。后来想想这话还真说到了点子上。3. 硬件底座的搭建与纠偏电源、主控、信号链路的实战选择3.1 电源系统多数翻车事故的第一现场电源是整个作品里最容易在整机测试时出问题的部分没有之一。我们最初的设计是三路输出正负5V给运放和模拟链路3.3V给数字逻辑和DDS模块。选型时图省事负压一路用了一个小型电荷泵加后级LDO单独测这块板子时纹波还能控制在可接受范围结果一接到DDS和运放纹波直接到了80mV左右。80mV的纹波对数字电路可能没什么影响但对模拟信号输出来说就是灾难。示波器上看到的波形边缘全是毛刺幅度稳定性也不行。赛前训练时我们其实就遇到过类似问题所以这次没有犹豫直接把电源架构改了正压部分换成一棵成熟的降压开关电源做前级再用低噪声LDO做后级稳压负压部分换成隔离型电源模块不再用电荷泵那种压纹波很吃运气的方案。同时把3.3V的数字电源与模拟电源用磁珠做了单点汇接避免数字开关噪声通过电源平面串进模拟链路。这里可以给一个很实用的选型建议不要在比赛第一天做电源创新。尽量选择自己摸透的拓扑并且给电源预留后级滤波焊盘的位置这样现场即使发现纹波超标也能快速补一个LC滤波或者加大电容验证。电源板最好单独做和主控板、模拟板之间用插针或者杜邦线连接方便飞线调整。如果一开始把电源深埋在整机内部后期想换器件就麻烦了。下表是我们这次电源系统的粗略分配供参考电源轨主要负载典型电流选型策略正5V运放、DDS模拟部分约250mA开关电源预稳压LDO后级输出负5V运放负电源约120mA隔离电源模块避免电荷泵纹波3.3V数字主控、显示屏、通讯模块约300mA独立LDO数字模拟地单点连接3.3V模拟高精度参考源约20mA从主电源经磁珠后再接第二级LDO3.2 主控与波形生成芯片性能冗余不是越多越好主控的选择上我们当时对比过几颗芯片最后选定了内置浮点单元的ARM Cortex-M4。原因是系统里有两个计算量不低的任务一是频率测量后的数据处理和校准表插值计算二是显示界面和实时控制回路的刷新。浮点单元能让这些计算直接在主控上跑不需要为了实现算法额外加一块DSP。波形生成部分我们最初也犹豫过要不要上更高精度的DAC。后来把一个关键点想明白了系统输出的最终精度瓶颈往往不在DDS芯片的分辨率位数而在后级放大器的噪声、电源的质量以及参考电压是否稳定。如果前级DDS精度再高后级电源纹波很大输出的波形一样失真。所以我们把精力主要放在参考电压的稳定和运放选型上而不是单纯追求DAC位数。参考电压这一细节值得展开讲。DDS芯片的输出幅度通常和参考电压成正比参考电压一旦漂移输出幅度就跟着飘。我们给模拟部分单独安排了一颗高精度基准源芯片并且用独立的一路LDO给它供电不和主控数字部分共用电源。这个改动让输出幅度在半小时内的漂移明显变小也大大降低了软件校准的复杂度因为校准表不用反复重做。3.3 PCB与接线地回路比走线好看重要得多由于比赛时间有限我们没有等完整的PCB打样而是用洞洞板和飞线搭建了第一版原型一边调一边改。这种做法很适合电赛前三天因为改线速度快踩错了能马上拆了重来。但它对地线设计提出了更高的要求稍不留神就会引入地环路。我们踩过最典型的一个坑模拟地和数字地一开始直接连成一片结果DDS输出波形里出现了一个约8MHz的杂散分量。频率不高不低正好落在我们需要测量的频段附近导致频率计偶尔被干扰跳变。用示波器逐段探查后发现问题不在DDS芯片本身而是数字部分的地电流返回路径穿过了模拟低噪区形成了地环路电压。处理办法是手动割一条地线把模拟地和数字地分开只在电源入口处单点汇接。改完之后那个杂散分量彻底消失。这类问题在电路仿真软件里很难发现因为仿真模型不会模拟出整机布线和地阻抗的分布只有整机联调才能暴露。所以我建议参赛队伍从第一天搭建硬件开始就有意识地养成模拟数字分区地线单点汇接的习惯别等出了问题再返工。4. 四天三夜里的软件与联调三个最典型的故障定位过程4.1 输出波形总比设定低一截从参考电压到软件校准我们遇到的第一个软件相关现象是设定输出幅度1.000V时示波器测出来只有约0.8V左右。一开始怀疑程序里写幅度参数时单位搞错了检查半天发现设置没问题DDS控制字也对。后来把DDS芯片的参考电压引脚用了示波器探了一探发现参考电压只有标称值的八成问题出在硬件参考电平上。更换参考电路后幅度偏差缩小了但仍然存在一个随频率变化的误差。原因是后级运放的增益会随频率上升而略有下降这是运放带宽特性的自然结果不是软件能靠一个固定系数解决掉的。我们当时的做法是写一段频率-幅度校准程序在几个典型频率点先测出实际输出值建立一张补偿表然后其他频率用线性插值算出修正系数。这样处理后输出幅度在整个工作频段内的误差能控制在0.5%以内。这里可以给一段简单的伪代码示例展示校准表怎么用// 频率-幅度校准系数表freq单位为kHz // 测试条件负载1MΩ目标幅度1.000V const float freqTable[] {1.0f, 10.0f, 50.0f, 100.0f, 500.0f}; const float gainCompTable[] {1.000f, 0.997f, 0.985f, 0.962f, 0.913f}; float getCompensatedAmplitude(float targetAmp, float freq) { // 先找到freq在表中的上下界做线性插值 float comp linearInterp(freqTable, gainCompTable, sizeof(freqTable) / sizeof(float), freq); // 最终设置给DDS的幅度需要除以补偿系数 return targetAmp / comp; }这个思路本身不复杂但要注意补偿表必须在整机状态下测量而不是单独测一个模块时记录。因为整机状态下后级负载、线缆损耗和电源纹波都会影响实际输出单独模块测出来的数据搬到整机上往往会有偏差。4.2 频率测量偶尔跳变先看边沿再改程序频率测量稳定后我们又发现一个问题输入一个干净的10kHz方波显示值偶尔会跳到9.6k或10.4k虽然次数不多但现场测评时如果恰好被评委看到印象分就丢了。一开始我们怀疑定时器捕获配置不对或者中断优先级有问题于是反复调代码但问题依旧。后来用示波器直接看比较器输出波形才发现边沿处存在抖动信号在阈值附近反复穿越导致一次真实边沿被触发成了两次。解决办法分硬件和软件两条腿走。硬件上给比较器增加正反馈回路设置一个合适的回差窗口滤掉阈值附近的抖动软件上对连续的频率测量值做一个滑动中值滤波把偶发的跳变再次消除。这个问题的启发是当程序逻辑怎么看都正确时一定要回头查硬件信号质量。很多队伍习惯先怀疑算法狂改一气最后发现是信号完整性问题导致的。联调时桌上随时放一台示波器看真实波形而不是只盯着屏幕上的测量结果。4.3 无线模块整机联调时掉线一个被误判为程序的伪故障我们的作品里有一个用于与远端控制端通讯的2.4G无线模块。单独测试时一切正常放到整机里联调时却频繁丢包而且丢包没有规律。测了好几轮方向都指向软件协议甚至怀疑是SPI读取冲突。最后在用频谱仪观察模块天线附近的频谱时发现电源线上有一个明显的开关噪声峰而天线正好贴着这根电源线的走线。问题根源是天线近场耦合到了电源线上的开关噪声干扰了无线模块的接收灵敏度。解决办法很朴素把天线移动到PCB板边缘远离电源走线同时给电源线串了一个磁珠并加大电容滤波。改完之后丢包率立刻下降了一个数量级。这里也提醒一句无线模块在比赛现场最好预先配置好固定通信频段和重传机制别指望现场配对。我们额外准备了一块已经配置好的主控板作为备用如果无线模块现场出故障能最快时间替换。这种备用方案在电赛现场永远不嫌多。5. 现场测评全记录评委动手时我们提前做的那几手准备5.1 演示脚本不能只准备一条通往成功的路径很多队伍在实验室里把功能调通之后就以为现场测评只要照着演示一遍就行。实际上现场测评的评委不会完全按你的脚本走他们更习惯自己操作提出各种额外条件来验证作品的稳定性和真实边界。比如把输出频率设为15.0kHz幅度改为0.5V测一下误差或者现在把输入信号换成一个更小幅度看看显示是否还能跟上。我们当时准备了一份操作卡上面写清每一类操作的按键路径和界面显示含义从待机状态进入测量模式需要几步切换波形类型是哪几个键幅度和频率分别怎么调节。这些信息不需要多华丽但要求队里的三个人都能看懂哪怕正在操作的人紧张到说不出话另一个人也能从旁边帮上忙。这份操作卡在测评前还帮了我们一个忙让我们提前发现界面里有一个显示单位的切换方式太隐蔽现场临时操作容易误触于是赶在测评前改成了更直接的方式。作品做得好是一方面但别人能快速看懂并操作同样重要甚至可以说这部分直接影响评分过程中的交互效率和印象。5.2 现场烦人的电源噪声以及我们提前留的接地端子现场评测环境的电源质量通常比实验室差很多。一个工位上可能同时插着示波器、频谱仪、电脑、我们自己作品的电源各种设备的地电位不完全一致会形成地环路和共模噪声。我们在实验室调得很好的作品拿到现场测试时数据有明显偏差用万用表量了一下发现输入电源的纹波比实验室大了好几倍。好在我们提前做了两手准备。第一作品电源输入端设计了一个可换的接口板如果现场发现供电质量差可以快速在外部加一个直流稳压器再进设备。第二我们在外壳上预留了一个接地端子现场发现测量值偏大时直接把接地端子接到评测工位的电源地端子上共模干扰就被泄放掉了。这个问题如果事先没考虑现场临时飞线会非常狼狈。另外一个建议是在关键测试点预留测试插针。比如电源轨电压、DDS输出、比较器输出都可以通过分线插针引出。现场自检时用示波器探头往上一搭就能快速判断哪一级出了问题而不是把整个外壳拆开。作为一个强调现场可控性的细节这几次插针省下来的时间至少有一次让我们避免了拆机返工。5.3 问答环节和数据核验报告上的每个数字都别虚电赛现场测评通常会有提问环节评委对设计报告中出现的指标数据会抽查。我们这个作品有一项指标写的是频率测量误差小于0.1%评委看完后直接问了一句这个误差是在什么输入条件下测的幸好我们提前统一了测试条件报告里写了输入幅度1Vpp频率范围100Hz到500kHz室温环境下评委又让我们现场重测了三个频率点数据和报告都在容差范围内。这让我意识到一个容易被忽略的事情报告里的数据一定得能复现。如果只是在中途某一次测试中偶然测得一个漂亮数据写上去现场重测时条件稍有变化就对不上评委对整篇报告的信任度都会下降。我们后来定了一条死规矩报告上的每个数据必须来自正式的测试记录表同时记录当时的仪器型号和测试条件。宁可数据普通一点也不能写一个自己都没把握的数据。还有一个细节现场评委可能会操作你的作品去重现某个功能如果操作过程中界面反应太慢或者需要等好几秒才刷新他们会很不耐烦。我们专门把显示刷新的延迟优化到几百毫秒以内就是为了现场操作时跟手。这个观感上的优化对最终的评分有一定正面作用。6. 复盘能走到国赛靠的不只是努力而是这几个习惯6.1 整机测试越早开始比赛结束前你能改的东西就越多这是整个经历里让我最有感触的一点。很多队伍的习惯是第一天做硬件第二天写软件第三天联调第四天收尾。这个流程听起来合理但问题是第三天联调一旦发现整机级问题留给你修改的时间基本没有了。我们这次有意把整机联调的时间点往前挪第二天晚上就进行了第一次完整整机测试把电源、主控、波形输出、测量模块全部接在一起跑一个最简单的闭环流程。从那天开始每天晚上睡觉前都要做一次整机运行测试每次至少跑半小时。正是因为提前暴露了地环路、无线干扰、校准表不完善这些问题才能在正式测评前把它们逐一解决。整机测试要注意版本管理。我们最初几次联调时没有记录当前硬件状态和软件版本的对应关系测试中发现问题后改了一处硬件结果第二天做复测时忘了测试结果对应的是哪一版硬件不得不花了很长时间重新验证。后来每次联调前先在记录表里写清硬件版本V1.2软件版本V0.9这个动作看起来机械实际效果立竿见影。6.2 测试数据统一口径报告和现场才不会打架测试数据这件事我要单独立一条来强调。做电赛作品时队伍里可能有手持万用表、台式万用表、示波器甚至还有人习惯用简易电压表模块上面的读数。如果三个人各记各的到了写报告和现场测评时数据口径不统一问题很严重。我们这次统一了一个规则所有正式测试数据一律用台式万用表或示波器测量手持表只用来做快速排查和粗测。报告上每一组数据都来自正式的测试记录表并标注测试仪器型号和测试条件。这样不仅写报告省事现场被评委抽测时也能保证一致性。我还建议在比赛结束后保留所有原始波形截图和数据文件按日期和测试点命名放入共享文件夹。即使比赛结束了复盘时想追溯某个问题也能快速找到当时的证据。6.3 体力分配与心理预期四天三夜不是靠熬夜赢的关于四天三夜我见过太多队伍前三天疯狂熬夜最后一天测评时人已经处于半恍惚状态操作失误和接线错误频发。我们队这次的节奏比较克制第一天睡约五个小时第二天睡约四个小时第三天反而保持五个小时以上第四天测评前的晚上更要稳定休息。这不是说电赛不辛苦而是说要让精力用在最需要判断力的时候。凌晨四点半最容易犯迷糊我们队那次最严重的接线错误就发生在那个时间把一条本应接到3.3V的线接到了5V虽然器件没有烧坏但排查花了快一个小时。后来我们达成一致凌晨阶段只做重复性验证不进行冒险改动。心理上也要有预期管理。比赛题目永远做不完但分数是相对指标不是绝对指标。如果一直盯着我们这个功能还没完善容易陷入焦虑。我们当时的策略是保底优先拓展随缘先把所有基础指标测稳定确保现场能顺利复现再考虑加分项。这个策略在测评现场让我们心态很稳即使评委临时加测我们也有底气去应对。最后想分享一个小习惯也是这次经历里我们最受益的每天晚上收工前在项目文件夹里写一个明天要做什么的清单包括待解决问题的优先级、负责人和预计完成时间。第一次写的时候觉得浪费时间后来发现第二天早上看到这份清单整个人能快速进入状态不会因为无从下手而浪费早上的宝贵时间。这个习惯不止适用于电赛也适用于任何短期高强度的开发任务。参赛的同学们比赛不是靠一个灵光乍现就能赢的把每个环节的确定性攒起来你离国赛拿奖自然就近了。