还剩8天就是那种四天三夜、现场命题的电子设计竞赛了。每年到这个节点总有人跑来问我“现在开始准备是不是晚了”。我的回答基本一致晚不晚取决于你想拿个什么成绩。如果目标是一等奖现在才开始确实有点晚了但如果目标是“尽最大努力不翻车、不丢人、能完整交作品”8天完全有机会而且这8天做的事比前几个月的零散积累更重要。这篇就按竞赛的类别——控制类、信号类、电源类、仪器仪表类和通信类——逐一说清楚最后阶段该练什么、舍什么、注意什么再讲一讲硬件整理、代码备份和现场排错的实操心得。信息量大一点但保证每一句都是能直接用的。1. 最后8天先把这四件事想清楚1.1 认清赛制你只有四天三夜没有第二个“改方案”的机会比赛通常早上发题四天三夜后封箱封板期间不能离场所有硬件设计和制作都必须在赛场内完成。这意味着什么意味着你的设计方案必须在拿到题目的前一两个小时内拍板否则后面基本做不完更别提留时间联调和打磨。我见过太多队伍开场什么都想做好结果做到第二天发现跑偏最后交上去的作品甚至不亮。反而是那些平时代码库积累扎实、模块齐全的队伍拿到题当天中午就能定下方案剩下时间全部用来解决真正的难点。所以最后8天要做的事不是临时学新技术而是把已经会的东西练到“条件反射”的程度。再说直白一点比赛考的不是“谁会得多”而是“谁在高压下不犯错”。四天三夜里你会经历半夜的疲惫、方案推倒、队友意见分歧只有基本功足够扎实才能在这些干扰里把分数稳稳拿住。1.2 盘点你的“弹药库”硬件模块检查与备份这一周的第一件事就是把自己常用的硬件清点一遍列一张表格。别嫌麻烦这比多写一百行代码都有用。我一般会按这样分类主控类主控芯片/开发板、下载器、USB线、备用最小系统板。 执行类电机驱动模块、舵机、直流电机、编码器电机、继电器模块。 传感器类灰度传感器、光电编码器、超声波、陀螺仪/加速度计、红外测距模块、摄像头模块。 电源类锂电池、降压模块、稳压芯片、大电容、保险丝。 人机交互类OLED屏、数码管、按键、拨码开关、蜂鸣器。 连接类杜邦线、排针排母、焊锡丝、热缩管、扎带。列的时候想三件事功能是否完好、接插件是否松动、备件够不够。特别要重点检查的是杜邦线和排针排母这类小东西——它们的故障率极高现场一旦出现接触不良排查起来比代码bug还耗时间。我的习惯是每种常用接口线准备三份并且用标签贴上用途省得现场拆来拆去。另外给每个关键模块准备第二块备用板。不要觉得浪费竞赛现场最便宜的成本就是时间。如果只有一块电机驱动、一块OLED屏坏了就只能干瞪眼有两块至少能快速替换继续跑流程。1.3 做减法练熟三件事比多学五件事有用8天时间深入学习不可能但针对性练熟可以。我个人建议把所有精力集中到三件事上。第一一个稳定的底层驱动库。GPIO、定时器、ADC、PWM、串口这几样要做到“不用翻手册也能直接写出来”。比赛现场没人给你时间慢慢查寄存器底层接口必须形成肌肉记忆。第二一个万能的调试手段。串口打印、OLED显示、按键菜单三者至少有一个非常熟悉。现场大量的时间都花在“确认变量对不对”上一个高效的调试链路能把排查时间缩短一半。第三一个类别相关的核心算法。控制类练PID信号类练FFT/滤波电源类练闭环稳压。这些算法不需要多高级但必须亲手调过、踩过坑、记录过参数而不是只在纸上看得懂。不要再去啃那些比赛八成不会考的冷门知识了。曾经有个队伍在最后一周花了两天研究语音识别模块结果比赛题目和语音完全不沾边基础的控制题反而因为时间不够做得仓促。该放弃的就要果断放弃。1.4 把8天切成三段补弱、模拟、检修最后8天不宜每天平均用力我建议切成三个阶段。前3天针对自己队伍的短板补一补。比如很少写DMA就花一下午把ADCDMA调通不会用示波器测波形就找一块信号模块反复测把探头补偿、触发电平这些基本操作练熟。如果你完全不会画PCB这时就不要从头学了但至少要能把原理图和模块接线图整理清楚方便现场参考。中间3天组织一次完整模拟赛。如果学校有条件可以提前把题目风格相近的往届题拿出来严格按比赛节奏从早上8点开始做中间不间断。模拟赛的目的不是做完美方案而是暴露问题所以结束后一定要开个总结会把卡住过的地方全部记下来。哪个模块驱动没调通、哪根线接错了、哪段时间浪费了全部列出来比赛时避免重蹈覆辙。最后2天做设备检修、代码备份、器件封装整理并且把现场会用到的所有调试脚本和测试程序跑一遍确认可用。这些琐事若放到现场做既占用时间又容易出乱子。可以画一个简单的时间表阶段时间分配核心目标前3天补短板把常用模块和接口练熟中间3天模拟赛暴露问题、磨合流程最后2天检修备份排除硬件隐患、整理文档2. 按类别拆解各类别冲刺重点2.1 控制类PID不是调出来的是测出来的控制类题目几乎年年稳定出现常见方向包括小车循迹、倒立摆、简易机械臂等。共同特征是传感器数据加控制算法加执行机构三者缺一不可。到了冲刺阶段最忌临阵抱佛脚学新算法而是要把老方案调到一个“最高可靠性”状态。控制类最后阶段最该练的我先说循迹。灰度传感器或摄像头循迹逻辑要熟至少准备两套方案一套基础的开关量循迹适合赛道简单、灰度值稳定的情况一套进阶的线性PID循迹适合弯道多、起跑线复杂的场地。现场拿到题目后快速判断赛道难度再决定用哪套方案比一头扎进PID调参稳妥得多。然后是PID调参方法论。很多人临时学PID但从没系统跑过参数到了现场只能凭感觉乱调。我建议花半天时间做一个“PID调参记录表”P、I、D数值分别记下来对应观察到的响应现象超调、振荡、响应慢、稳态误差一张表写满现场直接对照调整。比如比例增大后车身左右摆动明显就记下“P过大→振荡”等现场出现类似现象时秒级定位。还有编码器和电机响应。编码器接线极性、电机PWM频率这些是控制类最容易卡壳的地方。提前写好“速度读取—显示—调PWM”的总装测试程序现场换电机场合直接用。否则每个新电机都要从头调浪费大量时间。控制类还有一个容易忽视的坑传感器可靠性。很多队伍控制算法写得很漂亮但灰度传感器数据受供电不稳定影响出现跳变所谓“PID调不出来”很多时候根源是传感器数据本身不可靠。建议所有传感器统一供电并且和电机驱动电源分开避免大电流噪声干扰信号。我的经验是控制类赛场上把车调成“能稳定跑完全程只是慢一点”的成绩往往比“追求极限速度但偶尔翻车”的成绩更高。因为测试现场往往没有时间给你重赛第二次稳定永远优先于极限。2.2 信号类频率和幅值一个都不能含糊信号类题目通常是制作信号发生器、滤波器、放大器或进行波形分析。这类题目的核心卖点是测量精度与指标达标哪怕你方案新颖只要输出频率偏了、幅值增益不对测试老师一眼就能看出问题。信号类冲刺重点第一是学会用示波器和信号发生器进行“自测”。如果做信号发生器至少测输出频率、幅值、波形失真是否达标如果做滤波器用扫频方式测幅频特性曲线尤其留意截止频率点的滚降特性。自测的意义在于你对自己作品的性能指标有底现场测试时就不会慌。第二波形生成模块的配置代码提前写好。若使用常见的DDS模块把SPI或并口通信封装成独立函数现场只需传频率参数正弦波、方波、三角波三者的切换逻辑也要做好避免周期切换时出现相位毛刺。若题目要求输出两路同步信号两路在代码里最好共用一个相位累加器保证相位差恒定。第三运放电路的电源与阻抗问题。很多信号类翻车不是电路原理错而是运放供电电压接错、输入端悬空导致噪声、带宽不足拉垮高频。准备几块常用通用运放模块并熟记其基本带宽和增益参数现场可以快速替换。测量时还要注意示波器探头带宽匹配问题廉价探头在高频时衰减明显测量结果会骗你。信号类题目要养成“所有关键节点都留测试点”的习惯。所谓测试点就是原理图上的一个小焊盘或探针接触点。现场测试老师很可能直接拿示波器点你的输出端如果你预留的测试点位置清晰、信号干净第一印象就会好很多。2.3 电源类先稳定再效率电源类题目的核心是DC-DC变换、稳压稳流、效率测量。这类题目看着硬核其实最后考的就是环路稳定性和指标测量的严谨程度。只要思路清楚电源类反而是最容易拿基本分的类别之一。电源类最后阶段要注意闭环控制要练熟。用单片机ADC采集输出电压和电流用PID或状态机控制PWM占空比这是一套完整的“数显数控电源”流程。建议提前写好一个简单的电压电流双环控制框架现场只需要改参数不要从零开始搭。接着是负载测试。给电源接电子负载或大功率电阻记录电压跌落情况和带载能力注意效率测试点的选择。效率计算要卡好电压电流的测量位置别把导线电阻的损耗也算进负载里。做测试时拿万用表和示波器同时观察数据会更准确。再就是纹波测量手法。纹波本身是一个频带较宽的信号测量手法不严谨会比真实值偏大很多。要记得将示波器设置为AC耦合地线夹尽量靠近输出焊点并使用短地线弹簧探头。很多人因为地线夹太长引入共模噪声误以为自己电源纹波超标白白改了半天的环路参数。电源类建议提前焊好几块可以复用的DC-DC模块、继电器切换模块以及电流采样电路。现场直接搭电源系统会快很多。调试时优先保证输出电压稳定、不炸管再去追求效率指标。电源类一旦冒烟修复时间往往比重新搭一块还长。2.4 仪器仪表类与通信类测量与传输的细节决定成败仪器仪表类题目如相位测量、阻抗测量、音频分析本质上是一条“信号链”工程传感器输入 → 信号调理 → ADC采样 → 算法处理 → 显示。每一个环节的误差都会累积到最终结果里所以冲刺重点应该是精度控制和校准。仪器仪表类的ADC采样参数要熟分辨率、采样率、参考电压。如果题目要求两个通道相位差测量两个通道最好采用同步采样方式或者至少用同一个采样时钟源否则相位差算不准。代码层面要留一个校准系数数组现场用已知信号做偏置和增益校准一键写入。通信类题目则要重点准备无线模块的吞吐量和抗干扰能力测试。赛场环境电磁干扰比实验室高得多模块天线摆放位置、收发缓冲区大小都会影响性能。赛前一定要做长距离连传测试并写一个自动统计丢包率和时延的小脚本省得现场拿眼睛盯着一闪而过的数据判断好坏。仪器仪表和通信类有一个共同点最后测试时老师主要看显示数据和结果的“一致性”。你第一次测出1.000V第二次测出1.000V第三次还是1.000V老师就会认为你的系统稳定可靠。所以保证测量重复性比追求单次准确值更重要。3. 软件和代码库体检赛前一天的必做清单3.1 代码架构用状态机对付现场的不确定性我强烈建议在最后一周把所有比赛主程序的框架统一改成状态机形式。现场会遇到各种奇怪的时序按键按下、传感器触发、串口命令传来、上位机握手。状态机能把“什么时候干什么”梳理清楚也方便现场临时加功能。简单来说一个控制类主循环结构大致如下typedef enum { STATE_INIT, STATE_CALI, STATE_RUN, STATE_STOP, } sys_state_t; while (1) { switch (state) { case STATE_INIT: // 初始化各外设校准传感器 state STATE_CALI; break; case STATE_CALI: // 快速标定如灰度阈值校准 if (cali_done) state STATE_RUN; break; case STATE_RUN: // 循迹/闭环主逻辑 if (stop_btn_pressed) state STATE_STOP; break; case STATE_STOP: // 停车待机 break; default: break; } }这种结构的好处是现场改逻辑几乎不会互相干扰每个状态只关心自己的任务也方便测试中途暂停或复位。如果你现在的主程序是一大坨顺序执行赶紧花一晚上重构成状态机这笔时间绝对值得。3.2 调试利器串口是人机对话的唯一桥梁比赛现场不会有丰富调试器和IDE联动调试条件你能依靠的最快调试手段就是串口打印。要把printf重定向到串口的代码提前备好并且能在显示器上同时输出多个变量。我的习惯是串口打印用固定格式的字段比如“speed: 120 | err: 30 | pwm: 1500”字段用管道符隔开肉眼扫描非常高效。如果是上位机做波形显示我通常会设计一个简单的矩阵协议把多个采样值打包发送方便在电脑端绘图观察。前提是协议简单、稳定不要在比赛前临时搞花活。注意printf重定向如果没成功程序往往不会报错但数据就是出不来。赛前一定要单独写一个“串口自检程序”100ms打印一次自增计数确认OK再集成进主程序。否则现场很容易陷入“串口没接好还是主程序卡死”的排查泥潭。3.3 备份策略唯一不该省的三分钟比赛现场代码改动频繁唯一能保住你劳动果实的做法是“版本备份”。每完成一个里程碑比如“能够循迹跑完全程”或“输出电压稳定在5V”马上拷贝一份源文件到另一个文件夹命名规则清晰比如带日期和功能描述。并在代码注释里写清楚修改时间和改动内容。不要依赖“我记得到时候改回来”四天三夜的高压下大脑完全不靠谱。另外引脚定义表、模块接线图、原理图文档建议打印一份纸质版放桌上。现场翻纸比在电脑里翻文件快得多而且不会因为电脑崩溃、文件夹路径太深而找不到内容。4. 常见故障排查实录先做“最廉价”的检查4.1 上电没反应按这个次序查效率最高遇到整机不亮别慌按顺序排查比盲目拆焊快得多。第一用万用表量电源指示灯和各关键节点电压确认5V、3.3V、供电开关处电压正常。很多时候就是电池没充满、开关接触不好或者电源线脱落。第二检查反接保护和短路用万用表二极管档或蜂鸣档测电源输入两端如果直接响就是板上有短路多半是焊接时锡连在一起。第三检查下载器插上电脑看能不能识别设备不能就换个USB口或按复位键有些板子下载引脚悬空时会被外部干扰。第四拆外设把传感器、显示屏、电机驱动全部拔掉留下最小系统板测试如果能跑再一个个插回去。这套顺序的本质是“由简单到复杂由电源到逻辑”。不要把最昂贵的时间花在最早期的玄学问题上。4.2 传感器数据乱跳绝大多数是供电和接地问题“灰度值一直在抖”“加速度计数据漂移”这类问题绝大多数和接线、供电质量有关和代码关系不大。除非你变量真的写错否则先把注意力放到硬件上。处理办法很明确所有数字传感器和模拟传感器的地必须与主控共地不能有浮空的情况。传感器供电处要加104电容和100μF电解电容并排放在离传感器最近的位置相当于一个小水库吸收电流尖峰。如果有电机或舵机务必让执行机构电源与传感器电源分开两个电源可以共地但不要共用一条粗线走大电流否则电机启动瞬间电压跌落直接干扰传感器。信号线尽量短、直不要贴着电机驱动走线更不要让杜邦线绕成一团。我曾经遇到一辆小车灰度值在电机加速时剧烈跳动什么滤波都无效最后发现是信号线和电机电源线扎在一起了把线分开后问题秒消。4.3 程序烧不进去先检查最愚蠢的原因“下载失败”常年排在比赛故障榜前列常见原因不少。选错芯片型号、接线不牢尤其是SWDIO、SWCLK、RST这几根线接触不良目标板被外部电源拉死导致下载期间主控不复位。解决办法也很直白把下载线换成短一点的排线降低寄生电容和干扰概率下载时按住复位键待软件提示“连接中”时松开这时候成功率会高很多再准备一个“烧写专用底板”用独立供电给板子供电保证下载期间供电稳定。比赛现场最忌讳的就是边下载边晃动排线一旦松动程序写一半会直接报废还得重新来。把下载操作当成固定流程别贪快。4.4 比赛现场的最后20分钟永远做这三件事封箱前的最后20分钟不要再去调大功能了再大的功能也改变不了已经做好的部分。专心做三件事。第一用最后版本代码重新烧录主控板确认板上的程序和你电脑上的源文件一致。第二把所有关键测试点拍照片留底包括示波器波形、万用表读数、显示界面为写报告和整理材料保留现场依据。第三给整机装好外壳或底座把电池、开关、外接线理顺防止运输途中震落或拉扯断线。我见过不少队伍封箱前十分钟还在焊板子改代码最后测试时板子不工作不是运气差而是最后阶段流程没控制住。比赛场上越到后面越要克制“多做一点”的冲动。5. 一点经验收尾8天的核心心态我总结成一句话不要试图在最后一周创造奇迹而是把所有你已知的正确操作练成肌肉记忆。我的做法是把比赛四天三夜当成一个工程交付项目来管理写日志、定里程碑、做备份、按优先级取舍。最后成绩往往和代码量无关而是取决于现场效率、排查速度和心态稳定性。这恰恰就是这8天能准备出来的东西。如果你明天才开始准备也不用慌。按上面说的先清点硬件再练通一个调试链路最后做一次完整模拟赛。其余时间尽早休息保持状态赛场见。