1. 从“小白”到“焊武帝”:我的电赛初体验
说起全国大学生电子设计竞赛,在工科生的圈子里,这绝对是一个能瞬间点燃肾上腺素的名字。它不像某些竞赛那样可以靠“水”论文或者PPT过关,四天三夜,一个题目,一队三人,从零到一做出一个能跑、能测、能演示的实物系统,这种硬核的挑战性让它成为了检验电子、自动化、计算机等相关专业学生综合能力的“试金石”。我参加的那一届,正是题目风格开始向“系统集成”与“智能控制”深度转型的时期,我们队抽到的题目,恰好就是如今在网络上被热议的类似题型——一个要求软硬件深度结合,对控制算法和实时性要求极高的题目。当时我们三个“菜鸟”,靠着实验室角落里吃灰的元器件、熬夜啃完的数据手册,以及无数次“炸”芯片后的经验总结,硬是磕了下来。这段经历,远不止是一张证书那么简单,它更像是一次从理论到实践、从个人到团队的“成人礼”。今天,我就以这段唯一的电赛经历为蓝本,拆解一下这类竞赛的核心玩法、技术栈选择,以及那些指导书和培训课上绝不会告诉你的“血泪”经验。
2. 赛题本质拆解:它到底在考什么?
很多人拿到赛题,第一反应是“我要用什么芯片?”“我要怎么写程序?”。这其实是本末倒置了。电赛,尤其是控制类题目,考核的核心是“系统思维”和“问题分解”能力。题目描述的是一个复杂的、多目标的工程问题,你的第一要务不是埋头焊电路或敲代码,而是把它拆解成一个个可独立设计、测试,最后再集成的子系统。
以我们当年遇到的,以及现在热词中提到的“2025年TI杯E题”这类控制题为例,其典型特征如下:
- 被控对象明确但模型复杂:可能是倒立摆、平衡车、无人机、机械臂等。题目会给出物理结构,但精确的数学模型(如转动惯量、摩擦系数)需要你自己辨识或估算。
- 控制目标多维:不仅仅是“稳住”,往往还包括“轨迹跟踪”、“定点悬停”、“抗扰动”、“快速响应”等多个性能指标,这些指标之间可能存在矛盾(比如响应快可能超调大),需要权衡。
- 传感器信息融合:绝不会只用一个传感器。例如,平衡车题目会同时用到陀螺仪(测角速度)和加速度计(测倾角),你需要通过算法(如互补滤波)融合两者数据,得到更稳定、准确的姿态角。摄像头、超声波、编码器等也常组合出现。
- 执行机构受限:电机的功率、驱动电路的电流、舵机的扭矩和速度都是有限的。你的算法必须在这些物理约束下工作,否则就是纸上谈兵。
- 实时性要求苛刻:这是一个运行在真实物理世界中的闭环系统。从传感器采样、算法计算到驱动输出,必须在毫秒级甚至更短的时间内完成,任何延迟都可能导致系统失稳。
所以,面对题目,我们花了将近半天时间,就在草稿纸上做了一件事:画系统框图。明确系统的输入(传感器信号、给定指令)、输出(电机PWM波、舵机角度),以及中间的处理环节(信号调理、数据融合、控制算法)。这个框图,就是我们后续所有硬件选型和软件架构设计的“宪法”。
3. 硬件平台选型:为什么是它?
硬件是算法的载体,选型失误,满盘皆输。电赛官方通常会推荐或指定使用TI的处理器平台,这也是“TI杯”的由来。但这并不意味着你必须用最高端的型号。
3.1 核心控制器:MCU还是MPU?
这是第一个分水岭。对于大多数需要复杂控制算法(如PID、模糊控制)和实时多任务管理的题目,一款性能足够的微控制器(MCU)是首选,而非微处理器(MPU)。
- 为什么选MCU?MCU将CPU、内存(RAM/Flash)、各种外设(ADC、PWM、定时器、通信接口)集成在一颗芯片上,系统结构简单,实时性确定性强。你写的程序对硬件的控制是“直接”的,没有操作系统的调度开销,适合对时序要求极其严格的闭环控制。
- 典型选择:TI的MSP430(低功耗)、C2000系列(专为实时控制设计,我们当时用的就是这款),以及ARM Cortex-M内核的MCU(如STM32系列,因其生态丰富,也被很多队伍私下选用)。C2000系列内置了高精度PWM、快速ADC和硬件加速的数学运算单元,对于电机控制这类题目几乎是“开挂”般的存在。
- 避坑经验:不要盲目追求主频。对于控制算法,更重要的是外设是否够用、是否高效。比如,PWM发生器能否产生中心对称的波形以用于电机驱动?ADC的采样速率和精度是否满足要求?芯片的数学运算(浮点、三角函数)是否有硬件加速?这些才是选型时需要逐项核对的清单。
3.2 传感器与执行器:精度、速度与成本的平衡
传感器和执行器的选型,直接决定了系统性能的天花板。
- 姿态传感器:MPU6050(六轴陀螺仪+加速度计)是经久不衰的“明星”。但这里有个大坑:它输出的是原始数据,你需要自己编写代码进行校准、滤波和姿态解算。我们当时就栽在这里,直接用原始数据,噪声极大,系统根本稳不住。后来花了大量时间研究卡尔曼滤波和互补滤波,才把数据“洗干净”。
- 距离/位置传感器:超声波模块便宜但易受干扰,响应慢;激光测距精度高、响应快,但价格贵,且对反射面有要求。我们的策略是:关键闭环用激光(如平衡车的位移),辅助避障用超声波。
- 电机与驱动:这是耗电和发热大户。务必根据负载计算峰值电流,并选择余量足够的驱动芯片(如TB6612、DRV8833等)。我们曾因驱动芯片电流不足,导致电机在启动瞬间“堵转”,芯片直接烧毁冒烟,一夜回到解放前。教训就是:驱动芯片的连续电流和峰值电流参数,必须留出至少50%的余量。
- 电源管理:最容易被忽视,也最容易出问题的一环。电机、舵机工作时会产生巨大的电流尖峰,导致系统电压瞬间跌落,可能导致MCU复位。必须为数字部分(MCU、传感器)和模拟/功率部分(电机驱动)进行电源隔离,通常采用磁珠或0欧电阻配合大电容组(如100uF电解电容并联0.1uF陶瓷电容)进行滤波。
4. 软件架构与核心算法:程序到底怎么写?
这是网络热词最关心的问题:“到底是用什么程序编程的?” 答案是:用C语言,在集成开发环境(IDE)中编程。但对于电赛,真正的核心不在于语言,而在于程序的结构和算法。
4.1 软件架构:时间片轮询 vs. 前后台系统
对于没有操作系统的MCU,常见的程序结构有两种:
- 时间片轮询:在一个大循环里,依次调用各个任务函数(如传感器读取、算法计算、控制输出)。每个任务函数必须足够短,不能“阻塞”,否则会影响其他任务的执行。这种结构简单,但任务间的优先级管理比较粗糙。
- 前后台系统(中断驱动):关键任务(如定时采样、电机PWM更新)放在高优先级的中断服务程序(ISR)中执行,确保实时性;非关键任务(如状态显示、参数调试)放在主循环中执行。这是电赛中最推荐的结构。
我们的做法是:
- 用一个高精度定时器中断作为“系统心跳”,例如1ms中断一次。在这个中断里,执行最核心的“控制闭环”:读取传感器、运行控制算法、更新PWM输出。确保控制周期绝对固定。
- 主循环(后台)负责初始化、状态机管理、通过串口与上位机通信(发送数据、接收调试参数)等非实时任务。
- 关键技巧:在中断服务程序里,只做最必要的操作,避免浮点运算和函数调用(如果不可避免,要确保函数是可重入的)。我们把耗时的浮点运算和复杂的滤波算法放在了主循环中,中断里只做简单的数据搬运和比例运算。这需要对算法进行精心的模块化设计。
4.2 核心控制算法:PID的“魔改”与进阶
PID是控制理论的基石,但在电赛里,直接用教科书上的PID公式,99%会失败。
- 位置式PID与增量式PID:对于电机这类执行机构,增量式PID是更安全的选择。因为它输出的是控制量的增量,即使计算出现问题,也不会产生巨大的突变,且天然具备抗积分饱和的能力。
- 积分抗饱和:这是必做项。当系统误差长期存在时(如电机被卡住),积分项会不断累积到一个非常大的值,一旦系统恢复,这个巨大的积分量会导致严重的超调甚至震荡。必须对积分项设置一个限幅。
- 微分先行与滤波:微分项对噪声极其敏感。直接对误差求微分,会放大传感器噪声,导致输出抖动。我们的做法是“微分先行”,即只对反馈值(测量值)进行微分,同时对微分项进行低通滤波。
- 参数整定:这是玄学,也是科学。我们采用的方法是“先P后I再D”:
- 纯P控制:逐渐增大P,直到系统出现等幅振荡。此时记下比例系数Ku和振荡周期Tu。
- 加入I:根据齐格勒-尼克尔斯等经验公式,设置I参数(例如,Ki = 0.45 * Ku / Tu),消除静差。
- 最后加D:引入D来抑制超调和振荡,同样需要根据公式估算并微调。
- 最关键的一步:所有参数必须在实物系统上调试,仿真的结果只能参考。我们一边看着系统的响应曲线(通过串口发送到电脑上位机显示),一边手动微调参数,这个过程持续了整整一天。
注意:PID参数没有“最优解”,只有“满意解”。需要在响应速度、超调量、稳态误差之间根据题目要求进行权衡。我们的经验是,在保证系统稳定的前提下,优先满足题目明确要求的性能指标(如调整时间)。
5. 调试、测试与“玄学”问题排查
四天三夜,至少有两晚是在调试和排错中度过的。很多问题匪夷所思,但都有其物理或逻辑根源。
5.1 系统性调试方法
- 分模块调试,隔离问题:绝不把所有代码和硬件一次性连起来调。先调电源,用万用表和示波器看电压是否干净、稳定。再单独调试传感器模块,确保读出的数据经过滤波后是合理的。然后单独调试执行机构(电机、舵机),给固定PWM看它转不转。最后,才把传感器、算法、执行机构连成闭环。
- 善用“软件示波器”:这是我们的救命稻草。在代码中,将关键变量(如误差、PID输出、传感器原始值)通过串口定时发送到电脑,利用串口绘图工具(如SerialPlot、Vofa+)实时绘制成曲线。这比肉眼观察LED灯或者数码管直观一万倍,能清晰看到系统是如何震荡、超调或发散的。
- 制造测试用例:用手轻轻推一下小车,看它能否自己回到平衡点,这是测试抗扰动能力。给它一个阶跃指令,看它跟踪的速度和精度。这些测试要记录下来,作为优化算法的依据。
5.2 那些令人崩溃的“玄学”问题
- 问题一:系统偶尔无故复位。
- 排查:首先怀疑电源,用示波器捕捉复位瞬间的电源电压,发现电机启动时,3.3V数字电源上有约0.5V的跌落毛刺。
- 解决:在电机驱动板的电源入口处加大容量电解电容(470uF以上),并在靠近MCU电源引脚处增加一个0.1uF的陶瓷电容。同时,检查MCU的复位电路,确保复位引脚的上拉电阻和电容值合适,必要时在复位引脚对地加一个小电容(如0.01uF)滤除高频干扰。
- 问题二:控制效果时好时坏,尤其是用手靠近时。
- 排查:这大概率是电磁干扰(EMI)。电机碳刷火花、PWM快速切换都会产生强烈的空间辐射。
- 解决:给所有电机的电源线套上磁环。传感器信号线使用双绞线或屏蔽线。确保整个系统的地线连接良好,形成“单点接地”,避免地环路引入噪声。将敏感的模拟电路部分(如传感器信号调理电路)用金属罩(甚至用锡纸)屏蔽起来。
- 问题三:代码稍微改动,系统就崩溃。
- 排查:检查堆栈溢出。在中断函数或递归函数中定义了大型局部数组,可能导致栈空间不足。
- 解决:在IDE中查看编译后生成的map文件,关注栈(stack)的使用情况。将大型数组定义为全局变量或静态变量(位于堆区),而非局部变量。同时,检查是否有野指针或数组越界访问。
6. 团队协作与时间管理:比技术更重要的能力
电赛是团队战,三个人的分工与协作决定了最终效率。
- 理想角色分配:
- 硬件担当:负责原理图设计、PCB绘制(如果时间允许)、电路焊接调试、元器件选型与采购。需要心细手稳,对电路原理和仪器使用非常熟悉。
- 软件/算法担当:负责MCU程序架构设计、核心控制算法实现、传感器数据融合、上位机通信协议。需要扎实的编程功底和数学基础。
- 系统与调试担当:这是一个常被忽略但至关重要的角色。他负责将硬件和软件集成,进行系统级调试,制定测试方案,同时也是文档撰写和报告排版的主力。需要极强的逻辑思维、沟通能力和抗压能力。
- 时间节点控制:四天三夜,必须制定严格的计划。
- 第一天上午:彻底消化题目,确定方案,完成系统框图和初步器件清单。
- 第一天下午至第二天结束:硬件电路搭建与分模块调试基本完成;软件框架和核心算法模块完成。
- 第三天全天:系统联调,参数整定,解决主要bug。这是最痛苦也是最重要的阶段。
- 第四天上午:性能优化,完善功能,录制演示视频。
- 第四天下午:撰写报告,整理材料,封装作品。报告一定要提前开始写!不要把所有内容堆到最后半天。
- 沟通与决策:每天早晚开短会,同步进度和问题。遇到技术分歧,不要争吵,快速设计一个“小实验”来验证哪种方案更优。队长要有决断力,在关键时刻做出取舍(比如为了稳定性牺牲一点响应速度)。
7. 赛前准备与资源利用
“台上一分钟,台下十年功”,电赛的四天是对平时积累的集中检验。
- 知识储备:
- 电路基础:模电、数电是根基,尤其是运放电路、滤波电路、电源电路。
- C语言编程:指针、结构体、位操作必须熟练。要会看芯片的数据手册(Datasheet),能对着寄存器编程。
- 控制理论:PID及其变种是核心,最好能了解一些现代控制理论(如状态空间)的概念。
- 工具使用:示波器、信号发生器、万用表、逻辑分析仪,必须会用且用熟。
- 常用模块积累:平时可以焊接、调试一些通用模块,如最小系统板、电机驱动板、传感器模块(MPU6050、超声波、OLED屏等),并写好对应的驱动程序库。比赛时可以直接拿来用或稍作修改,能节省大量时间。
- 信息获取:多逛电子技术论坛,看看往年优秀作品的分享,了解常见的解题思路和“骚操作”。但切记,不要指望找到一模一样的解决方案,重点学习别人的系统设计思维和调试方法。
回望那唯一一次的电赛经历,它带给我的远不止奖项。它让我真正理解了“工程”二字的含义——不是在理想环境下推导公式,而是在资源、时间、知识的多重约束下,寻找一个可行的、健壮的解决方案。那种为了解决一个接地干扰问题,蹲在实验室地板上,用示波器探头一点点寻找噪声源,最终在凌晨三点看到一条干净波形时的喜悦;那种和队友因为一个算法参数争得面红耳赤,又一起通宵调试直到问题解决的革命友谊,是任何课堂学习都无法替代的。如果你也有机会踏上这个赛场,请全力以赴,因为这注定是一段让你快速成长、终身难忘的硬核旅程。最后一个小建议:比赛期间,保证睡眠和饮食比熬夜硬扛更重要,清醒的头脑是解决复杂问题的前提。