
电赛这个词对很多做电子、测控、自动化的学生来说第一次听到时会带着一股热血几个人一起做一台能跑的机器调一块能检测信号的板子最后在评委面前把功能完整演示出来。真正走了几个月之后你会发现它并不是“热血”两个字能概括的。第一次参加电赛那年我们踩过很多坑经历过模块烧掉、通信乱码、参数改一版不如一版也经历过大半夜几个人围着屏幕不知道问题在哪。那个学期确实很累甚至一度很迷茫。但等演示结束、文档归档、复盘做完我才确认那句话是对的第一次参加电赛整个过程虽然辛苦但事实证明它完全值得。这篇内容不打算写成获奖感言也不准备说“只要努力就能拿奖”这种空话。我更想按整个参赛周期把“为什么会累、为什么会迷茫、哪些准备真正有用、哪些坑可以提前避开”拆一遍。如果你也准备第一次参加或者正在备战过程中觉得方向不清可以参考这套路线。1. 先别急着堆功能把“完整作品”的验收标准定下来第一次参加电赛的队伍最常见的问题不是做不出来而是想做的范围太大。开题时觉得摄像头要做显示界面要做无线通信要做上位机也要做好像功能越多得分越高。实际上比赛拼的是在有限时间内能不能拿出一个完整、可验证、在现场稳定工作的作品。1.1 “能跑通”和“能交付”是两回事第一次参赛一定要分清两个词能跑通与能交付。“能跑通”指的是你手边的开发板上模块在某一次调试时正常工作了。“能交付”指的是把程序烧进最终硬件接上比赛现场的电源和输入按正常操作流程从头启动能在规定时间内完成全部目标功能并且这个过程可以重复。很多队伍栽在最后一步。平时开发环境里电脑一直给单片机供电传感器放在桌上位置固定线束不会乱动。到了正式演示电源换了一路传感器要重新对准操作者可能是一个不熟悉代码的人问题就全冒出来了。所以第一次备赛时一定要尽早给“完成”下定义。我会建议三个人坐下来用最简单的纸笔确认三类问题现场演示时评委按下启动或者我们按下启动之后第一个动作是什么作品的预计完成时长是多久最后需要读取哪些数据或看到哪些现象如果某个模块故障是否能降级运行或者快速切换而不是整体瘫痪这三类问题的答案就是你们作品的验收基线。基线不是越高越好而是要在规定时间内可执行。功能列表里那些“锦上添花”的内容放到基线确定之后再做。1.2 把验收点拆成几个层级避免后期谁都不愿意砍需求很多第一次参赛的同学都有这种经历某个功能已经明显不收敛但负责模块的队友就是舍不得砍觉得“再调一个晚上就能好”。这种情况下团队里不能只靠争论要有一个公共的评判框架。我们当时把所有功能按四个层级排列L0保底功能。没有它作品不能算完成比如最基本的启动、运动、采集或显示。L1核心指标。题目中明确给出的精度、范围、响应速度这是打分的主要依据。L2体验优化。操作更顺手、显示更直观、上位机界面好看这些只是辅助。L3炫技扩展。比如语音播报、远程监控、自动生成报告等优先级最低。排完层级之后还要加一个硬规则先保证 L0 和 L1 连续跑通三次再考虑 L2 和 L3。连续跑通三次的意思是从冷启动开始中间不修改代码不重新接插线不更换模块连续做三遍同样的流程结果基本一致。如果达不到这个标准说明可靠性还不够这时候把精力放在新功能上是浪费。这样做的好处是减少了很多内耗。以后队友想增加功能时不再是直接讨论“好不好看”而是先问一句“它属于哪一层会影响 L0 或 L1 的稳定性吗”如果会优先级后移。第一次参赛容易因团队意见分散而吵架提前定好这套规则等于给所有人的工作量上了一道保险。2. 准备期最有价值的投资先解决调试环境再解决具体功能很多人在备赛时会默认找齐模块、下载例程、把代码拼起来系统就能工作。实际上第一次参赛最大的时间黑洞是“基础调试手段不完善”。当你有了板子却不知道传感器输出是不是正常当你改了一行代码只能通过“重新上电看现象”来验证当电机不转时只能反复重启而不是看日志判断原因——这些问题都会把时间压榨得非常狠。2.1 别急着写复杂算法先把最小调试链搭起来我建议第一次参赛的团队在拿到开发板的第一周先不要碰任何复杂算法把四件事做完学会烧录和查看串口日志。无论用什么单片机都要保证能通过串口往电脑打印变量。给主控板配一个稳定的电源方案并能测量电压和电流。把每个准备使用的模块单独跑一遍官方例程确认模块本身是好的。把可能用到的工具放到同一个工具箱里数字万用表、杜邦线、排针、镊子、剥线钳、电烙铁、备用芯片和接口转换器。在这个阶段觉得“太简单没意思”是正常的但千万别跳过。串口日志是后续排查所有软件问题的第一双手万用表是排查硬件问题的第一双眼。很多现场故障看起来是程序逻辑的问题最后查下来要么是供电电压不够要么是地线没有共地要么是某个接口虚焊。没有测量工具和日志就只能靠猜猜出来的结论大概率不准。如果条件允许优先准备一台带限流功能的可调电源。比赛现场的供电环境不一定像实验室那么干净有时候电压波动或瞬间电流不足会让人误以为算法出了问题。用带限流的电源可以先接好线观察启动瞬间的电流曲线看电机起步时电压是否跌穿单片机的最低工作电压。这个步骤能排除大量“莫名其妙重启”“程序跑飞”“传感器数值跳变”的问题。2.2 模块备份和使用记录是准备期的隐形竞争力准备期内团队至少要有两张表。第一张是“物料清单表”记录模块名称、数量、当前状态、放在哪个箱子、是否需要备份。第二张是“基准测试表”记录每个模块在一个标准程序下的正常表现比如串口打印的原始数值范围、正常响应时间、稳定工作电流。这两张表看似是浪费时间最后却会帮你解决很大问题。举个例子一个超声波传感器刚买来时能测到 5 到 200 厘米经过几天折腾后测量值开始跳变。如果你手头有当时的基准测试记录就能很快判断是不是硬件老化、接线松动或受干扰。如果没有记录你只能从头开始排查环境、距离、供电浪费大量时间。参加电赛真正拉开差距的往往不是谁更聪明而是谁的调试基础更扎实。一个能快速判断问题在“输出端还是输入端”的队员价值远大于一个只会背复杂公式但不知道如何验证的人。3. 集成阶段不要依赖玄学按“电源—通信—模块—逻辑”逐层查第一次参赛的团队在把硬件搭起来之后会遇到一个集中爆发问题的阶段传感器读数不对、电机不转、屏幕花屏、通信时断时续。这时候人是很容易懵的。我这里给出的建议是遇到异常不要急着改参数先定义清楚故障现象到底是什么。3.1 系统不工作的排查顺序应该是“输入到输出”而不是“哪里可疑查哪里”一个常见的错误是怀疑某个传感器受干扰就拼命给传感器加滤波怀疑程序逻辑问题就反复改软件状态机怀疑算法算不准就调 PID 参数。这样查了半天最后发现只是传感器电源线断了或者公共地没有接好。遇到系统级故障我会先按下面这个链路走一遍先看电源主控板电压是否正常模块电压是否正常启动瞬间电流是否超限。再看通信确认单片机的 TX/RX 接到了模块的 RX/TX波特率是否一致电平是否匹配地线是否共地。再看具体执行器件电机驱动板的使能引脚是否拉高舵机电源是否独立继电器模块是不是低电平触发。最后才看软件逻辑状态机的跳转条件有没有可能永远不满足某个变量有没有溢出某个数组越界有没有把其他内存区域改掉。在很多情况下第一次参加电赛的同学会觉得最后的结果“很奇怪”但记录下所有环节的现象之后你会发现问题和上面某个环节明显相关。比如“程序运行到一半重启”这种现象。表面上看起来是代码有 bug或者看门狗超时。实际上在硬件比赛里最常见的原因是电力瞬时不稳电机突然启动大电流导致主控供电被拉低单片机复位电机和主控重新上电。这时候你把驱动板的电源与主控电源彻底分开或者加一个大一点的储能电容问题马上就消失了。如果只看代码日志你会在“系统重启”这个问题上卡整整一天。3.2 表格式排查清单能明显降低两个人同时调试时的沟通成本以下是一张我在实际比赛过程中整理过的快速排查表。它不能解决所有问题但能在你们精神最疲惫时提供方向。故障现象第一个要查的方向容易忽略的地方上电后模块没反应供电电压与电流驱动板或传感器需要独立供电只靠主控板带不动串口输出乱码波特率、电平、地线板子之间的地线没有共地或 USB 转 TTL 的 RX/TX 接反传感器数值固定不变初始化代码与接线模块的电源正常但数据引脚悬空或虚焊电机/舵机不动作驱动板供电与使能信号控制信号是 3.3V而驱动器要求 5V或者没有设置 PWM 频率程序运行中反复重启供电瞬间跌落电机或大功率模块启动电流过大把主控电压拉低无线通信时断时续天线位置和模块供电模块放在金属外壳旁边或者电源滤波不足这份清单里提到的现象几乎每个第一次参加电赛的队伍都遇到过。它的作用并不是直接给你答案而是让你知道遇到故障不要先怀疑“自己是不是笨”而是按顺序去测、去量、去打印。把问题定位到某一个具体环节之后再去找解决办法通常会比反复重启整个系统快得多。就算调试陷入僵局也要有一个原则不临时改线。每次只改一个变量。很多队伍为了试错一次改供电方式、换传感器、调参、改代码结果问题没有消失他们都后悔了。通过“每次只改一个变量”就能知道异常是否与上一次修改有关。4. 冲刺阶段不是拼谁的方案最酷而是拼谁的演示最稳比赛最后两三天是体力和心态的双重考验。越到这个时候越不能想“反正还有时间再做做新功能”。一旦进入冲刺期任何新功能都可能引入新的 bug。真正该做的是把这些功能冻结起来把它们连接到演示流程和验证环境中一遍一遍地重复。4.1 从冷启动开始把演示流程完整跑顺很多队伍在实验室里测试时习惯直接从已经烧好程序的开发板开始按一个复位或者直接点击电脑上的按钮。可是现场演示绝不会只让你展示一个模块。你需要从插上电源、打开开关、等待启动、按下启动按钮、观察现象这一整个流程去做。我的建议是至少在最终验收前完整反复做十遍“无干预演示”。所谓无干预演示就是调试人员碰过不该碰的接线程序按正常启动操作者只能按预设好的流程动作。以下清单可以作为模板断开电源断开信号线放好作品和测试对象。重新连接电源并把电脑上的串口调试助手或上位机打开。启动电源观察主控是否正常启动。等待系统初始化观察指示灯是否变成正常状态。把测试对象放到指定位置按下“开始”按钮。记录从头到尾的运行时间观察输出结果是否一致。如果出现失败先记录现象再决定是否修改代码。连续十次里面至少成功八次以上才说明这个作品到了可以演示的状态。这里尤其要注意冷启动。很多看起来稳定的代码其实是“热的”上一次调试时串口缓冲区里残留着数据某些变量在复位前已经初始化过传感器模块在调试人员手动上电后稳定下来才启动主控。到了现场一上电大家都是一起启动的就可能因为传感器还没稳定而读到错误初始值。解决方案是在程序里加一个系统启动后的延迟等待和状态打印确认各模块就绪后再进入主流程。4.2 硬件和软件冻结之后临时修改要经过否决权冲刺期最常见的灾难是某个队员在最后一晚突然说“我发现换一组参数精度更高。”然后所有人陪着深夜改参数结果改完发现其他功能全乱了第二天没有时间调回去。在面对比赛压力时必须明确一个字冻结。在特定时间点之后所有硬件接线方案、软件代码和参数表都要固定下来。如果有人提出改进不是不可以但需要在日程表里增加风险属性而不是直接改掉正式版本。一个有效的做法是在版本仓库里同时保留一个“比赛版”和一个“体验版”临时想做的改进都在“体验版”里进行比赛版只接受 bug 修复和极小的边界调整。任何改动至少经过两个人确认并更新之前测试结果记录。很多队伍第一次参加电赛会觉得“改参数”一点都不可怕。但正式比赛中的演示分数往往不是靠精度极限拿的而是靠“能够完整演示出来”拿的。你调了一组很难复现的高精度参数看起来很美如果现场就因为一组电路噪声没有复现出来损失会非常大。要把精度余量留出来选择一组在多次测试中都稳定的参数而不是拿最大指标去赌现场环境。5. 又累又迷茫时更应该留下文字记录而不是只靠情绪扛这个学期太累了很多同学会迷茫。其实迷茫往往不是某一天出现的而是连续很多天累积出来的一种状态每天都很忙却说不清自己在忙什么每天都有任务却不清楚任务对整体结果有多少贡献。这种状态真正有效的解药是复盘和记录。5.1 每天结束前写下四条内容我不太建议比赛期间写太长的日记。时间长压力大没有人能坚持下去。比较实用的方式是每天在手机或本子上固定写四行字今天完成了什么。必须是可验证的最后一眼能看到的结果。今天卡在哪个问题上。写清楚现象而不是猜测原因。明天最小目标是什么。只写一件事最多两件事。有什么需要队友协助或决策的内容。这四条内容加在一起超过 500 字也不多但它至少会让你在很累的时候看到自己的进度。人之所以迷茫常常是因为觉得“什么都没做成”。记录之后你会发现自己不是没做成而是做过的很多事没有形成信息闭环改过一次参数换了根线调了一晚上代码最后却没有把结果和原因写下来等于白忙。比赛结束后整理日志时会发现大部分项目里的“突然重大进展”都是因为之前的记录里埋了线索。比如某天记录“传感器数据跳动是因为电源不稳”后面遇到另一个模块不稳定时就能想到要检查电源。如果把这些问题只保存在记忆里熬过三天基本就忘干净了。5.2 即便没有拿到理想的奖项这个过程也值得复盘第一次参加电赛不一定每个团队都能拿到非常好的成绩。完整比赛下来你会发现真正留下长期价值的东西往往不是一个牌子的得失而是下面几项能力拿到一个不确定任务时能把它拆成可验证的小步骤。在有限时间里能对优先级做减法而不是一味做加法。面对“看起来像玄学”的故障能按照测量和日志去逐层定位。学会用记录让队友之间的沟通更清晰减少互相扯皮的消耗。这些能力放在以后做项目、做毕业设计、进入工程岗位都会反复用到。第一次参加电赛如果把这些基本功打扎实了哪怕这一次没有实力突出之后的比赛和项目也会快很多。如果真的想再给自己留一些可执行的复盘可以问三个问题如果再给一次机会我会把更多时间花在哪一部分哪些功能提前砍掉更合理哪些排查顺序应该重新排序这些问题比“我做得好不好”更有用。比如我们的复盘结论是应该把电源验证和串口日志工具提早一周不要等集成阶段才开始准备再比如代码冻结的节点要提前一天因为最后一天的效率真的非常低往往还容易导致失误。电赛不会直接告诉你“人生的答案”但它会帮你暴露很多软肋用最低的时间成本。校园里很多项目是“做完就结束”但电赛是一个把完整项目闭环压缩到几十天里的过程。你需要学会在受限条件下做选择学会在看不清结果时继续行动还要学会在疲惫时和队友保持沟通。经历过一次之后你就会明白“值得”的意思不是简单地指不后悔而是对那些曾经的劳累、迷茫和反复尝试进行确认它们终于变成了你身上新的能力。这个学期确实很累也确实迷茫过但第一次参加电赛后我能确定地说走过的每一步都算数。