大一零基础参加电子设计竞赛:从单片机到PID的完整备赛与实战指南
大一那年我真的什么都还没学会连51单片机都是开学之后才听说的就跟着学长报了全国大学生电子设计竞赛。当时很多朋友劝我说大一去打电赛基本就是做分母、帮学长焊板子但我自己心里很清楚我需要的不只是一张获奖证书而是被一个真实项目推着往前走的动力以及逼着自己把书本知识变成手上功夫的机会。这篇文章不打算写成标准的竞赛攻略因为以一个大一学生的认知水平写不出那种系统又完备的教程。我更想记录一下作为一个几乎零基础的人从组队、备赛、熬夜调车到最终能交出一份作品的完整过程顺便把那些真正起作用的经验、以及踩过的坑都摊开来讲。适合谁看呢如果你现在大一大二正在纠结我这点水平能不能参加电赛或者已经报名了却不知道从哪里下手这篇应该能给你一些具体到能照着做的方向。1. 为什么大一就报名电赛1.1 先接纳零基础这个事实大一打电赛最大的障碍不是知识储备是心理门槛。我当时的真实状态是C语言刚学完指针模电数电还在讲等效电路别说设计电路了连万用表都用不利索。但后来我发现电赛这个舞台对大一身份其实是宽容的它最需要的不是你已经会了多少而是你愿不愿意在赛前那几周里疯狂吸收。电赛全称是全国大学生电子设计竞赛四年一届的赛制实际是奇数年国赛、偶数年省赛/区域赛交替每届题目覆盖电源、控制、仪器仪表、通信这些方向。大一选手最常见的心理误区是我得先把课程学完才能参赛但实际上比赛题目和课程进度之间从来不是严格对应的。像近几届特别火的H题自动行驶小车、送药小车这类题目核心就落在单片机控制、传感器、电机驱动、PID算法这四件事上这些东西课本里讲得少但网上资料和实践项目一抓一大把只要你肯花时间大一完全够得着。所以我的第一个建议特别朴素先报名再补课。不要等自己准备好再上车因为在电赛里你的能力是被DDL逼出来的不是被教材教出来的。报名这个动作会把你的身份从围观者切换成参赛者后续所有的学习动力都会跟着变。1.2 大一参赛的真实收获预期聊点实际的大一打电赛到底能收获什么先说赛果层面大一拿国奖的确实不多但拿省奖、赛区奖的并不算罕见。以我身边的经验为例每年都有大一队伍在省赛里拿到不错的成绩因为他们有足够长的备赛时间而且心态比高年级更放松反而能在赛场上发挥得更稳。再往深一层说就算最终没拿奖这段经历也绝对不亏。我有三个特别明显的感受第一焊接和仪器使用能力会突飞猛进。赛前练习那几周我几乎每天都能焊废几块洞洞板但到了比赛时焊一个模块电路手已经不抖了用示波器看波形也能快速判断问题。第二你会提前理解系统这个概念。课堂上的知识都是孤立模块而电赛要求你把传感器、执行器、控制器串成一个完整闭环这种系统思维是光看书学不来的。第三简历和面试的话题有了。大二找实验室、申请项目时电赛经历会帮你打开很多门哪怕只是大一的参赛经历也能证明你有动手意愿和抗压能力。2. 备赛阶段从零开始的知识恶补2.1 先把单片机这块硬骨头啃下来如果说电赛有个新手村那一定是单片机。当时我们队选择的方案是STC系列51单片机起步然后根据题目需要再上STM32。为什么这么选因为对于大一来说51的寄存器少、资料多、教程遍地都是拿来理解单片机到底在干什么特别合适而STM32虽然性能强、外设丰富但一上来就学它的库函数和时钟树很容易被劝退。我的学习路径可以给你参考先跟着教程点亮一颗LED再学按键输入然后是定时器中断、外部中断、PWM输出、ADC采集。这六个知识点基本覆盖了80%的赛题需求。别小看这些基础操作自动行驶小车要用PWM调速送药小车要用ADC读灰度传感器、用定时器做编码器计数全部都是这些基本功的组合。学的时候有一个特别重要的建议不要只看视频不动手。视频里讲得再清楚你不在板子上亲手跑一遍永远不知道下载程序时忘了选芯片型号是什么感觉也永远不会理解为什么中断回调函数里不能写延时。我见过太多同学收藏了一堆教程结果比赛时连点灯都要翻笔记这就是平时光看不练的后果。2.2 传感器和驱动模块的最小可用清单大一备赛最容易踩的坑就是贪多求全什么都想学结果什么都没学透。我后来整理出了一个最小可用清单应付大多数控制类题目足够循迹/测距类红外对管、灰度传感器用于循迹、超声波用于避障、OpenMV用于视觉识别视题目而定。运动控制类直流减速电机加编码器、TB6612或L298N电机驱动、舵机用于转向或机械臂。姿态测量类MPU6050六轴传感器如果题目涉及平衡或方向判断。每个模块的学习方法都一样先看数据手册的引脚定义再找一份现成的驱动代码把数据读出来最后自己改一改参数理解每行代码的含义。这个过程不需要多高深的理论但一定要动手把模块接出来、跑起来。在选型上有一个过来人的提醒传感器和模块尽量选资料多的型号。比如灰度传感器市面上最常见的那款TCS3200或者最普通的红外对管阵列网上例程一大堆遇到问题一搜就能找到解决方案。千万别为了追求性能去买那些小众模块一旦出了问题你连参考资料都找不到那就真的抓瞎了。2.3 团队分工三条腿走路比一个人硬扛强电赛是三人一队好的分工能省下大量时间。我们队当时的配置是一个偏硬件、一个偏软件、一个偏机械结构但这里有个容易犯的错误分工不等于各干各的。我当时负责软件部分但比赛过程中发现不摸硬件、不亲手焊板子你写出来的代码是飘的。比如电机PWM频率设高了电机驱动芯片会发烫这个现象如果你不亲自接电路光看原理图根本想不到。同样负责硬件的队友如果完全不懂代码逻辑调起板子来也会很痛苦。所以我们的做法是每个人都有明确的主方向但前两周的备赛阶段三个人一起把每个模块都过了一遍这样赛场上任何一个人都可以临时补位。这里还要说一个组队的反常识经验和水平比自己高很多的人组队并不一定是好事。我当时差点加入一支大三学长的队伍后来想想还是选择了和两个同级的同学一起。原因是学长队里的技术栈已经定型了大一去了基本只能打杂没有成长空间而平级组队虽然水平菜但大家都愿意学遇到问题一起查资料、一起调这种共同成长带来的收获远大于挂名一个奖项。3. 比赛现场真正动手时的方案与调试3.1 拿到题目后怎么快速确定方案电赛题目在开赛后统一公布四天三夜的紧张就从那一刻开始。第一件事不是写代码是读题。我们当时拿到2024年H题自动行驶小车这类题目时很多人上手就开始画电路但聪明的做法是先花一两个小时把题目要求逐条拆解列出必做的基本要求和加分项。我习惯用一个表格把需求拆分清楚比如自动行驶这个大目标下可以拆出路线检测、速度控制、方向控制、避障、停车、显示几个子任务。然后给每个子任务标记一个技术方案子任务可选方案推荐选择理由路线检测红外对管循迹 / 摄像头视觉红外对管大一上手快、实时性好速度控制开环PWM / 编码器闭环PID编码器闭环抗干扰强、可调速方向控制差速转向 / 舵机转向差速转向结构简单、适合小车底盘避障停车超声波 / 红外测距超声波精度够用、资料多这个表一列出来整体的工作量差不多就清楚了。这里还有一个过来人的忠告比赛题目一般会要求发挥部分那是在完成基本要求之后才有余力去做的。大一队伍千万不要一开始就想着把发挥部分也做了先把基本要求的链路打通保证能跑通、能得分再谈优化。3.2 自动行驶小车的完整实现逻辑下面拿自动行驶小车这个典型题目从一个大一选手的视角说说完整的实现链路。这不仅是当年H题的热门方向也是送药小车这类任务型题目的底层能力。硬件连接上我们用STM32最小系统板作为核心电机通过TB6612驱动编码器接在定时器的正交解码引脚上灰度传感器阵列接在普通GPIO口超声波模块用定时器捕获测距。整个系统供电用的是7.4V锂电池电机驱动单独一路单片机用降压模块稳定到5V和3.3V。这里有个特别容易出问题的地方电机启动瞬间电流很大会造成电压跌落一旦单板机复位小车就会像抽风一样乱跑。解决办法是在电源输入端并联大电容同时把逻辑电源和电机电源分开布线。控制逻辑分成三块感知、决策、执行。感知层就是不断读传感器数据灰度传感器把八个点的黑线信息编码成一个8位数据超声波模块把距离数据更新到全局变量决策层是一个简单的有限状态机比如寻线直行转弯停车几个状态之间的切换执行层就是根据状态计算目标速度然后输出PWM到电机驱动。大一实现PID控制时我推荐先从位置式PID开始只用比例和微分两个环节就够应付循迹了。我当时调参的步骤是先设Kp为一个很小的值让车能缓慢跟上线然后逐步增大Kp直到车开始左右抖动再把Kd加上去抑制抖动最后配合Ki消除稳态误差。整个过程最好在赛前就练熟因为到了赛场你会发现真正用来调参的时间可能只有几个小时。3.3 现场调试验证的正确顺序很多新手队伍到了赛场的常见状态是一堆代码堆在一起出了问题根本不知道从哪里下手。我打得多了以后总结了一套固定的排错顺序可以大大提高效率先查电再查通信再查控制最后查算法。查电用万用表量每一级供电电压是否正常特别是电机驱动板的逻辑电源和主控板的电压。我遇到过电机一启动单片机就重启的经典问题最后发现就是供电端压降太大。查通信把串口打印打开看传感器数据是否能正常更新。灰度传感器是否读到预期值、编码器计数是否随轮子转动而变化、超声波测距是否稳定这些都是肉眼可查的。查控制先用手扶着小车手动给一个目标速度看电机响应是否快速准确。如果PWM输出和电机转速不成比例大概率是驱动板的死区时间没处理好。查算法上述全部正常后再去查控制逻辑和状态机这通常是思路上的问题比如状态切换条件写反了、边界判断有问题。这个顺序看起来简单但真到了赛场那种高压环境下很多人会病急乱投医。我见过有队友因为代码逻辑问题去调了半个小时的传感器阈值最后发现根本不对症。所以一定要在赛前养成这种系统排查的习惯。4. 备赛与比赛中的典型问题排查4.1 供电不稳导致的幽灵复位我最早一次调试小车时遇到过一个问题小车静止时一切正常一启动电机就疯狂复位现象是屏幕闪烁、代码从头开始跑。排查了很久才发现是电源问题。电机堵转电流轻松达到1A以上就算正常转动瞬时电流也会把电源电压拉低。如果单片机的供电和电机驱动共用一根线电压跌落超过单片机的复位阈值系统就自动重启了。解决办法是电源路径分离电机驱动直接从电池取电单片机经过降压模块单独供电。并联大电容在电机驱动电源输入端并联470uF及以上的电解电容吸收瞬时电流。如果条件允许使用两节18650电池供电提高整体余量。这个坑大一几乎必踩提前知道能省下很多冤枉时间。4.2 传感器受光线和干扰影响的坑灰度传感器循迹最怕的就是环境光变化。同一个阈值下午比赛场地光线亮的时候能正常识别到了傍晚光线暗下来就开始乱判。这是典型的环境相关干扰。解决办法不是靠调阈值死磕而是第一做归一化处理。在赛前让小车在起点处自动校准记录明线和暗线对应的最大值和最小值用这两个值作为基准做动态阈值而不是用一个固定值。第二使用带遮挡罩的传感器减少外部光线干扰。第三如果条件允许可以考虑用红外发射管带调制的方式但这对于大一来说成本偏高一般动态阈值就够了。另外电机和驱动板在工作时会产生电磁干扰如果传感器信号线太长就很容易被干扰。我当时用了几根杜邦线飞线连接传感器结果读回来的数据经常跳变后来把线改成双绞线并且尽量贴近底盘走就稳定多了。4.3 时间管理四天三夜怎么分配电赛四天三夜的节奏如果你从头到尾熬夜第三天基本就废了。我们队当时总结出一套时间分配方案效果还不错第一天下午到晚上定方案、画原理图、搭建最小系统、验证关键模块是否符合预期。这个阶段的重点是敢于砍——如果某个传感器数据一直读不出来立刻换个型号或者换个思路不要在第一天就陷入无休止的调试。第二天全天集中做核心功能。比如小车就是先实现循迹和前进送药小车就是先实现路线闭环。这个阶段要把基本要求对应的工作量全部完成给自己留出充足的缓冲时间。第三天优化发挥部分同时开始写设计报告。很多队最后报告写不完只能草草交一个文档这很影响成绩。其实第三天白天开始写报告晚上再集中调车节奏会很舒服。第四个白天整体测试、整理测试数据、打印报告。晚上只做微调绝对不搞大方案重构。熬夜这事我多说一句凌晨三点的效率通常只有白天的一半与其硬撑着调车不如轮流休息。我们队的约定是每天晚上必须有一个人保证完整睡眠第二天出问题的时候他总能提供清醒的思路。5. 给大一新手的建议与心法5.1 把学会放在得奖前面大一参赛最怕的是把得奖当成唯一目标一旦进度落后就开始焦虑、互相埋怨甚至中途放弃。我的心态后来发生了一个重要转变把从我要拿奖改成我要把这条技术栈走通。这样一来每一段经历都会变成收获。比如赛前学会用KiCad画一块电路板比赛后用不用得到都算赚到了比如PID调参调了整整一下午最后发现是传感器没装正虽然过程很痛苦但从此以后我学会了先怀疑硬件再怀疑算法。这些认知上的成长不会因为没有获奖而贬值。5.2 查资料和提问的正确姿势大一遇到不会的问题喜欢直接去群里问但很多问题只要稍微搜一下就能解决。我的习惯是遇到报错先复制错误信息到搜索引擎看前三条结果如果没有解决方案再看论坛。这里分享一个提问技巧描述问题的时候把环境、代码、现象、期望四件事说清楚。你们用的什么型号的单片机代码里哪一段疑点最大实际现象是什么样的有没有照片或视频你希望它达到什么效果能够把这些问题问出来其实问题就已经解决了一半。我见过太多人上来就问有没有自动行驶小车的代码这种问题往往得不到实质性的回答因为信息量太少了。5.3 比赛结束不是终点而是起点每次电赛结束后会场外都会出现一个很有意思的场面有人在收拾东西准备回学校补觉有人蹲在角落复盘自己为什么没做出来。我的建议是回学校之后花两天时间做一次认真的复盘把这三天的技术决策、遗憾和意外都记录下来。复盘的作用不只是总结经验它还会告诉你下一阶段该学什么。比如我在赛后发现自己对嵌入式实时系统的理解太浅就专门学了FreeRTOS后来做毕业设计是的这段经历影响了我整个大学的技术路线和研究生课题时这些都成了基础。电赛像一个坐标原点它把很多散落在教材里的知识点串成了一张网你要做的就是在这张网上继续往上生长。我个人在带队和后续接触更复杂的项目时越来越觉得大一打电赛这个起点选得太对了。它让我提早意识到工程实现不是背书而是遇到问题、定位问题、解决问题的循环。如果你已经报名了就放心去折腾稳扎稳打完成一个能跑的小作品比什么都强。相信我四天三夜熬过来之后你会感谢那个敢在大一就报名参赛的自己。
