资讯详情

资讯详情

大一电子设计竞赛实战心得:从零到STM32小车完整备战攻略

1. 大一打电赛先说结论值得但要想清楚怎么打先说身份我大一专业是电子信息类之前连单片机长什么样都没见过代码只写过C语言的课后作业。2024年暑假跟着学长组队参加了全国大学生电子设计竞赛从一开始连题目都读不懂到最后完成了一个能跑动的小车作品中间踩过的坑、熬过的夜、推翻重来的方案足够我写三千字的复盘。这篇心得写给两类人一类是和我一样大一就想冲电赛的想知道从零开始到底要准备什么另一类是已经组好队但还不知道怎么选题、怎么做系统、怎么应对现场调试的人。我尽量把整个过程拆开讲包括赛前准备、题目分析、硬件选型、软件调试、现场应急以及那些只有经历过才会懂的经验教训。电赛的全称是全国大学生电子设计竞赛常年和“四天三夜”这个关键词绑定在一起——从题目发布到封箱交作品一共四天三夜。听起来很吓人但实际上更考验人的不是那四天而是你在那之前几个月里积累了多少能直接调用的底子。大一参赛最大的劣势是知识储备少最大的优势是时间多、试错成本低、学长愿意带。我见过不少大一选手前期摸鱼、现场崩溃也见过认真准备的人哪怕最终只拿了省奖后续学习进步的速度却比周围人快一大截。差距不在天赋在于备赛的方法和态度。2. 赛前准备的核心逻辑不是学完再参赛而是在参赛中逼自己学2.1 大一时间线怎么安排我大概从3月中旬开始准备到8月初参赛前后是四到五个月。这个时间线对大一来说不算充裕但完全够用前提是你要把时间花在刀刃上。3月至4月基础补课期。你需要完成三件事学会用Keil或STM32CubeIDE写一个能跑的程序并下载到开发板上看懂原理图和芯片手册的基本引脚配置以及会用万用表、示波器这种最基本的仪器。这个阶段不要碰复杂的算法也不要急着做完整项目先用最小系统板点灯、用按键控制LED、用串口打印数据把“写代码—烧录—验证”这条链路跑通。5月至6月模块验证期。根据你选的赛题方向把可能用到的模块逐个买回来单独调通。测距模块的读数稳不稳、电机驱动能不能正反转、摄像头能不能识别目标颜色、陀螺仪的数据能不能融合出角度。注意这里的关键词是“单独”每个模块单独调通非常简单真正难的是把它们组合在一起时出现的各种奇怪问题。所以这个阶段还有个任务把每个模块的代码封装成函数留好接口后面组装系统时就可以把精力放在逻辑上而不是反复折腾某个传感器的驱动。7月到赛前完整训练期。找几道前几年的真题按四天三夜的节奏模拟至少一遍。这一步极其重要因为你会发现实际做起来的时间消耗远远超出预期。我们第一次模拟做2023年的一道小车题光是机械结构就装了一天半之后程序调试又花了一天整个方案写报告的时间完全不够最后只能草草交卷。正是因为模拟过现场比赛时我们对时间分配有了非常明确的意识。2.2 大一最该学什么、可以不学什么很多人一上来就扎进“需要学的东西太多”的焦虑里什么都想碰结果什么都没学透。我建议大一参赛者明确一个优先级先把“能用”看得比“精通”重。必须掌握的最低限度的技能是这些STM32单片机的基本外设使用GPIO、定时器PWM、串口、ADC、一种简单的控制算法PID最实用、一个传感器的使用根据题目方向选后续会详细说、以及会用硬件调试工具万用表、示波器至少会测波形和电压。这些听起来多但实际上每一样花两到三周就足以入门合计也就是两个多月的时间。可以暂缓学习的东西包括复杂的操作系统移植、上位机软件开发、复杂的信号处理算法、深度学习模型训练等等。不是说这些没用而是对第一次参赛的大一选手来说它们的时间投入产出比太低。赛场上最怕的不是你不会什么高级技术而是连最基础的模块都调不通。我再强调一个比较反直觉的点电赛的评委看重的往往不是方案多高级而是作品多稳定。你用一个超声波传感器完成了避障比用一个摄像头但识别率不稳定要得分高得多。稳定压倒一切这句话请刻在脑子里。3. 赛题方向怎么选小车、仪器和电源各有各的逻辑3.1 近年题目类型与趋势电赛的题目每年都会变但万变不离其宗。以我熟悉的2024年国赛为例本科组有A到H共八个题目大致可以分为三类一类是电力电子方向比如AC-DC变换器、逆变器对模拟电路功底要求很高一类是仪器仪表方向比如测量电路的特征参数对信号处理和精度有要求还有一类就是控制类典型的就是H题“自动行驶小车”和E题这种运动控制题对单片机、传感器、算法有要求。从最近几年的趋势来看控制类题目尤其是小车几乎年年有。2024年H题是自动行驶小车要求完成从起点到指定位置、识别二维码和数字后停车的任务再往前看有送药小车2023年我记得是E题还是F题、纸张测量仪2019年F题虽然那是仪器类但非常经典、自动行驶小车等各种变体。小车题之所以常青是因为它既能考察硬件、又能考察软件、还能考察机械结构非常全面。我个人的建议是如果你有学控制或嵌入式方向的学长学姐带优先选控制类如果你对模拟电路特别感兴趣且基础好可以选电力电子方向仪器类题目适合数学能力强、对信号处理有感觉的人。但对大一的你来说选择的第一原则不是“我喜欢什么”而是“我们队伍里能做出来什么”。3.2 控制类小车题需要什么知识储备如果选小车题你需要搭建的知识体系是单片机最小系统用现成开发板也行、电机驱动L298N、TB6612或者更专业的驱动板、底盘选型能买成品就别自己做机械、测速传感器霍尔编码器是标配、姿态传感器MPU6050很常用、测距传感器超声波或激光雷达测距模组、以及视觉识别如果题目要求识别颜色或二维码OpenMV或树莓派是常见选择。软件层面除了基础的初始化代码你至少要能写出一个能控制电机PWM输出的函数、一个能从编码器读回速度并算PID的函数、一个能处理多个传感器数据的调度逻辑。如果用到摄像头还得学会在OpenMV里写简单的颜色识别或二维码识别脚本并通过串口把结果发给主控。这些知识如果按顺序学下来大概需要每天投入两三个小时、坚持两到三个月。听起来不少但其实还算合理。真正的难点在于把这些模块组合成一个完整的闭环系统而这个过程只能靠练真题来体会。4. 从硬件到软件一辆自动行驶小车的完整拆解4.1 硬件选型和粗暴但有效的选型逻辑很多新手会纠结买什么底盘、什么开发板、什么传感器我的经验是第一原则是“模块化程度高、资料多”。底盘方面我推荐四轮车模或者二轮平衡车模。四轮车模的优点是稳定、好调试适合起步二轮平衡车的难点在于必须先调好直立平衡才能考虑移动对新手不太友好。我们用的是常见的麦克纳姆轮四轮底盘可以实现全向移动这在比赛场地上非常有用——调车的时候不用小心翼翼地绕大圈直接平移就行省了很多场地空间。主控我们用的STM32F407理由是性能足够、资料极多、网上能找到现成的外设驱动。如果你对ST官方库不熟悉也可以选ESP32但ESP32的性能和资料丰富度在电赛这个场景下还是不如STM32。传感器方面我们前后左右各装了超声波测距模块轮子上装了霍尔编码器顶部装了一个OpenMV摄像头用于识别数字和色块。这套配置看起来多其实价格不高加起来也就几百块。注意一个细节接线时所有传感器和驱动模块的电源要分开规划至少把电机电源和逻辑电源分开。我们第一次调车时电机一启动单片机就重启排查了很久才发现是电机瞬间压降导致主控供电不足。后来改用双电源方案问题立刻消失。这个坑值得记下来。4.2 控制逻辑从一个简单的转向算法说起小车的核心任务是自主走到目标位置中间要避开障碍物、识别指定信息并停车。整体控制逻辑可以分成三层任务层决定下一步该干什么、规划层决定怎么走比如直走、转向、停止、执行层PID闭环控制电机转速和转向。执行层的PID控制是最基础的。每个轮子都装了编码器可以测量实时转速然后和期望转速做差通过PID控制器输出对应的PWM占空比。有些同学一开始会觉得PID很难其实核心就是一句大白话看实际值和目标值的差距差距大就加大输出差距小就减小输出再用积分消除长时间存在的偏差用微分抑制过冲。我当时写的速度环代码大概是这样的结构简化版// PID参数初始化 float Kp 20.0f, Ki 0.5f, Kd 0.1f; float target_speed 100.0f; // 目标速度单位可自定义 float current_speed, error, last_error, integral; void speed_control_loop(void) { current_speed read_encoder_speed(); // 读取编码器速度 error target_speed - current_speed; integral error; derivative error - last_error; float output Kp * error Ki * integral Kd * derivative; set_motor_pwm(output); // 设置PWM last_error error; }实际调试时你会发现参数整定是个费力活。先调Kp让它产生响应但不振荡再加一点Kd压住超调最后加Ki消除静差。我们花了大半天时间才把四个轮子的参数整定到差不多的水平这还是只跑直线的情况下。4.3 视觉识别大一小白的实用方案2024年H题要求识别数字和二维码很多队伍会选择OpenMV。如果您没用过OpenMV我强烈建议从例程开始不要从零写算法。OpenMV自带的例程里就有颜色识别、二维码识别、Apriltag识别等模块直接改参数就够用。我们当时的视觉识别方案非常简单粗暴摄像头固定朝下识别地面铺设的标识区域颜色红、绿、蓝三色分别对应不同的停车位或转向指令再识别二维码中的数字作为终点编号。OpenMV每秒能跑十到二十帧识别速度完全够用。识别结果通过串口发送给STM32主控根据收到的指令决定下一步动作。遇到的问题倒是不少一是环境光线变化导致颜色识别阈值一直要改解决办法是尽量让摄像头的曝光时间固定并且在现场赛前用比赛现场的灯光重新调一遍二是OpenMV和主控的串口通信偶尔会丢数据解决办法是在通信协议里加上帧头帧尾和校验字节识别到非法数据就丢弃并请求重传。4.4 机械结构能用胶枪就不要想着打铝件这里特别想提醒大一的同学机械结构是很多程序员的短板但电赛最终要交出去的是一台能跑的实物。如果你和我一样没有机械背景就不要做复杂的金属加工用3D打印件加热熔胶枪的组合就够了。我们整车用的是成品铝合金底盘上面用3D打印的支架固定开发板、驱动模块、传感器。摄像头支架是打印了一个小U型槽配合螺丝固定到车头。整个装车过程用了不到半天可靠性却不差跑了几十圈也没有松动。后期调试中如果发现某个传感器位置不对直接撬下来换个角度用热熔胶重新固定五秒钟搞定比重新设计支架快得多。5. 现场四天三夜选题、分工、调试和报告5.1 选题那天的抉择电赛题目一般是早上八点公布然后你有四天三夜。选题环节最忌讳的是反复横跳。我们队友之间提前商量过如果控制类题目出现直接无脑选控制类不讨论不犹豫。确实2024年H题是自动行驶小车我们直接就确定了。但现场也看到不少队伍在题目之间犹豫不定一会觉得这个简单一会觉得那个分高结果一上午过去还没定下来白白浪费了宝贵的半天。其实选题的逻辑应该是看队伍的综合能力覆盖度。如果队伍里有人特别擅长运放电路可以选择仪器类如果擅长电源拓扑可以选电力电子如果大家都会单片机那首选控制类。千万不要因为“感觉这个题目分高”就选一个完全没准备的类型现场是现学不出什么的。5.2 四天的节奏如何分配我个人复盘下来最合理的时间分配大概是第一天上午选题、下午写整体方案、确定系统框图和各模块接口定义。晚上开始搭硬件和写基础框架代码争取让小车能动起来。第二天到第三天重点调功能先跑通基本任务再优化性能。这两天是真正的攻坚期也是最容易出现分歧和压力的时候。要有明确的任务分解比如一个人调PID、一个人调视觉、一个人写报告框架各管各的互不干扰。第四天上午做整体联调下午开始写设计报告、整理材料。注意很多队伍在第四天还在改代码导致报告写得极差。报告占比可不小没有报告等于白做。一定要预留至少半天写报告和准备演示流程。5.3 现场调试的几个关键经验现场和平时训练最大的不同是场地比赛现场的地面、光线、空间都可能和实验室不一样。我们提前把所有参数都做成可调的并把手动校准的增幅调大。这样到现场如果发现小车跑偏十几秒就能调整过来而不是现场改代码重新编译烧录。另外就是不要羞于备用的策略。一个任务可以有多种完成方式主用方案如果失败要有备用方案。比如自动识别数字失败时能不能用预先设定的位置参数硬走可以虽然得分效率低但至少保证不交白卷。这种“降级策略”我们在现场救了不少次命。5.4 设计报告的写法心得设计报告是电赛的硬性要求一般包括系统方案设计、理论分析、电路与程序设计、测试方案与结果、总结等部分。很多队伍把报告写成说明书流水账一样罗列使用了什么模块没有分析为什么这样设计也没有关键参数的计算过程这其实是很吃亏的。我更推荐的做法是报告围绕“需求-方案-验证”这条线展开。先讲清楚题目要求什么指标是什么然后讲你选择了什么样的系统架构为什么这样选接着写关键的软硬件设计尤其是控制算法和参数整定的过程最后放测试数据要真实最好有对比不同参数下性能的变化。这样的报告即使文字朴素也能让评委看到你的思考过程。6. 踩坑记录这些错我都犯过希望你别再犯6.1 硬件层面的坑最典型的坑我已经提过电机电源和逻辑电源不分开。这个问题我们调试时遇到过现场也看到好几支队伍抱着疑虑的表情围着电源模块发愁。还有一个常见坑是杜邦线接触不良。我们的摄像头串口线在调试时经常时通时断后来发现是杜邦线插头松了轻轻一碰就断信号。建议所有关键信号线直接用焊盘焊接别图方便用杜邦线。传感器布局也很讲究。我们把超声波传感器装在车头结果发现相互之间的串扰很严重一个传感器发出的超声波能被另一个传感器接收导致测距值明显偏小。解决办法是把左右两个传感器的触发时间错开或者给传感器加上隔离罩。这种问题不实际装上去很难发现。6.2 软件层面的坑代码里最大的坑是“跑飞”和“卡死”。单片机程序一旦进入死循环整车就失控了。我们加了一个看门狗定时器定期喂狗如果程序超过一定时间没有正常执行看门狗自动复位系统。这个方法粗糙但有效比赛现场至少帮我们避免了两三次交白卷的尴尬。还有一个是中断优先级配置。我们的编码器读取用了外部中断串口接收用了DMA中断摄像头识别数据又比较大。如果优先级配得不对会出现低优先级中断一直被高优先级中断打断数据一直来不及处理的状况。建议新手把所有周期性任务的执行节奏画一下明确哪些必须在某段时间内完成哪些可以延迟。6.3 团队协作与心态的坑四个人一般是三人但我们队是四人配置在四天高压下非常容易吵架。最常见的矛盾是对方案的意见不合有人想换更好的模块有人觉得现有模块调一下就行。我的经验是换新模块的决定权应该交给一个统一的负责人而且最好是在第一天做决定后面绝不动摇。现场换模块的代价往往超出想象。再一个就是熬夜。四天三夜听起来必须通宵实际上我们第一晚通宵后第二天白天整个人废了效率极低。后面吸取教训改成梯次熬夜——一人盯到两三点其他人休息第二天早上换个班。保证核心成员至少有一个清醒的头脑这个比多敲几行代码重要得多。7. 如果再来一次我会给大一的我这些建议7.1 提前半年做的事如果再次从大一出发我会至少在寒假就开始学单片机基础而不是等到开学后慢慢磨。时间越早留出的余量就越大。另一个建议是尽早混进学长的实验室。别觉得不好意思很多学长学姐其实非常乐意带人只要你表现出“能干活”的潜质。帮学长调线、焊板子、查资料这些杂活看似没技术含量但能让你在最短时间内接触到真实项目的全貌。7.2 比赛中最该盯住的一件事如果只能总结一条最深刻的经验那就是电赛拼的不是谁方案更高级而是谁的错误更少。我们最终的得分点绝大部分来自“稳定完成了基本任务”而不是某个炫酷的创新功能。赛前最后一天不要想着能不能加一个更花的功能而是把现有功能反复测试确保它在上台演示的几分钟里一定不翻车。评委打分看的是最终的演示效果不是看你在报告里写了多少雄心壮志。7.3 这场比赛对后续学习的真实影响打完电赛之后我最明显的变化是再去看课本上的模拟电路、数字电路、自动控制原理脑子里会自动把每个知识点和小车上遇到的问题对应起来。PID不再是一个抽象的公式而是我亲手调出来的参数组合STM32外设不再是一个陌生的黑盒而是我用来解决实际问题的工具。这种“从工程回到理论”的学习路径比单纯看书效率高太多。所以如果你还在犹豫要不要以大一的身份参赛我的回答是去但要带着正确的方法去。不要指望拿国奖先定一个小目标——完整跑完一个任务并交出一份像样的报告。你收获的会远远超过那张证书本身。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →