
1. 项目概述一场竞赛一次蜕变全国大学生电子设计竞赛这个名字对于每一个电子信息、自动化、电气工程等相关专业的学生来说都像是一座必须仰望和挑战的高峰。它不是一次简单的考试而是一场为期四天三夜、集脑力、体力、团队协作和临场应变于一体的极限挑战。我唯一一次参加这项竞赛的经历至今回想起来依然心潮澎湃。那不仅仅是一次技术比拼更是一次从学生思维到工程师思维的彻底蜕变。整个过程从赛前漫无目的的焦虑准备到赛题公布时的手足无措再到最后通宵达旦调试出成品的狂喜与疲惫每一个环节都充满了故事。对于很多初次接触的同学尤其是看到今年2025年TI杯E题这类具体题目时最直接的问题往往是“这到底是用什么程序编程的” 这个问题看似简单背后却隐藏着对竞赛技术栈、开发流程和核心能力的巨大困惑。今天我就以一名“过来人”的身份拆解我那次参赛的全过程不仅回答“用什么编程”更深入剖析“为什么这么用”以及“如何从零到一实现它”。无论你是正在备赛的学弟学妹还是对电子设计充满好奇的爱好者希望这篇近万字的实录能给你带来最真实的参考。2. 赛前准备方向比努力更重要2.1 团队组建与角色定位我们团队是经典的三人工科组合一个擅长硬件电路与PCB设计我一个精通单片机编程与算法还有一个负责文档撰写、报告整理与部分测试。这种组合几乎是竞赛的“黄金配置”。但组队成功只是第一步更重要的是明确角色和磨合。我们提前半年组队初期大量的时间花在了互相“摸底”和统一技术栈上。注意千万不要找三个都是“编程高手”或者三个都是“硬件达人”的队伍。合理的技能互补是成功的基础。同时队长不一定是技术最强的但一定是协调能力最强、最能抗压的。2.2 技术栈选择与统一这是备赛的核心直接决定了你们团队能应对的赛题范围。当时主控平台的选择主要围绕STC89C5251内核、STM32F1/F4系列ARM Cortex-M和TI的MSP430展开。经过讨论我们最终将STM32F103C8T6俗称“蓝桥杯”或“最小系统板”定为核心平台。理由如下性能与资源平衡相比传统的51单片机STM32拥有更高的主频72MHz、更丰富的外设多个定时器、ADC、DAC、通信接口和更大的存储空间足以应对控制类、信号处理类等复杂题目。生态与资料丰富无论是正点原子、野火的教程还是STM32CubeMX配置工具学习资源和开发工具链都非常成熟能极大降低学习成本。性价比高核心板价格低廉周边模块如OLED、陀螺仪、电机驱动配套齐全非常适合学生竞赛。在编程语言和开发环境上我们统一使用C语言和Keil MDK-ARM。虽然也有人用Arduino基于C或IAR但Keil在STM32开发中普及率最高遇到问题更容易找到解决方案。2.3 模块化训练与“武器库”建设我们并没有一开始就去做一个完整的系统而是采用了“模块化”训练法。我们将可能用到的功能拆解成一个个独立的模块进行预研和代码封装传感器模块超声波测距HC-SR04、陀螺仪与加速度计MPU6050、温湿度DHT11、颜色识别TCS3200等。执行器模块直流电机驱动L298N、TB6612、舵机SG90、步进电机驱动A4988、继电器等。人机交互模块OLED显示屏SSD1306、按键矩阵、旋转编码器。通信模块蓝牙HC-05/06、Wi-FiESP8266、NRF24L01无线模块。对于每个模块我们都要求达到硬件连接了然于胸、驱动程序稳定可靠、核心功能封装成库提供清晰的API接口。例如针对MPU6050我们不仅写出了读取原始数据的代码还封装了姿态解算互补滤波或卡尔曼滤波的函数这样在比赛中需要用到姿态信息时直接调用函数即可节省大量时间。3. 赛题解析与核心方案设计我们当年遇到的是一道典型的“控制类”题目类似于近年来的小车避障、平衡车等要求设计一个系统能够自动追踪一个移动的光源并保持特定距离。这里我就以这个题目和今年热门的“2025年TI杯E题”为引来拆解方案设计的核心思路。3.1 题目需求深度拆解拿到赛题第一步不是马上想电路或写代码而是逐字逐句分析赛题要求并用工程师的语言进行翻译。核心功能自动追踪移动光源。这意味着需要“感知”光源位置输入然后“控制”执行器移动输出。性能指标追踪速度、稳定距离误差、响应时间等。这些是评分的硬性指标所有设计必须围绕优化这些指标展开。限制条件供电电压如仅限12V单电源、主控芯片是否指定TI平台今年E题很可能指定了TI的MCU如MSP432或Tiva C系列、成本、尺寸等。这些是设计的边界。3.2 系统架构设计基于需求我们快速勾勒出系统框图这是硬件选型和软件规划的基础。[光源] - [光电传感器阵列] - [信号调理电路] - [ADC] - [主控MCU] - [算法处理] - [PWM] - [电机驱动] - [执行机构云台/小车] [人机交互界面OLED/按键] - [主控MCU] - [无线调试接口蓝牙]感知层我们选择了四象限光电管或线性CCD作为光源位置传感器。它比普通光敏电阻方向性更好能直接输出光斑在X/Y轴上的偏移量。控制层主控MCU负责读取传感器数据运行PID控制算法计算出控制量并通过PWM波驱动电机舵机。执行层采用二自由度云台两个舵机分别控制水平和俯仰来承载传感器和指向光源。3.3 核心算法选型PID的实战应用对于“追踪”这个动态调节过程PID控制算法是绝对的核心。这里详细解释我们当时是如何实现和调试的。P比例误差越大控制作用越强。单纯用P会存在静差始终差一点追不上。I积分累积历史误差用于消除静差。但I太强会引起系统超调甚至振荡。D微分预测误差变化趋势具有“超前调节”作用能抑制振荡提高稳定性。我们的实操步骤先调P将I和D设为0逐渐增大P让系统能快速响应出现围绕目标点的振荡。再调D加入适当的D用来抑制P引起的振荡让系统快速稳定下来。最后调I如果稳定后与目标仍有微小差距静差则加入很小的I来消除它。现场微调比赛环境的光照、地面摩擦等与实验室不同必须根据现场情况对PID参数进行微调。我们准备了通过蓝牙无线传输参数的上位机可以实时修改PID参数并观察波形这是极大的优势。实操心得PID参数整定没有万能公式更多靠经验和试凑。准备一个能图形化显示传感器数据和控制器输出的简易上位机可以用Python的Matplotlib或串口绘图工具能让调试效率提升十倍。4. 硬件设计与实现要点4.1 核心电路设计从原理图到PCB传感器信号通常很微弱毫伏级而MCU的ADC输入需要伏特级且需要抗干扰。因此信号调理电路至关重要。放大电路我们使用了仪表放大器如INA128来放大四象限光电管的差分输出信号。它的高共模抑制比能有效抑制环境光干扰。滤波电路在放大后加入了低通滤波电路滤除高频噪声如日光灯频闪、电机火花干扰。截止频率需要根据光源移动速度合理设计太低了响应慢太高了噪声大。电源设计系统包含数字部分MCU、逻辑芯片和模拟部分运放、传感器必须采用星型单点接地或隔离避免数字噪声串扰敏感的模拟信号。电机驱动部分更要单独供电并通过光耦或磁耦隔离PWM控制信号。我们使用Altium Designer绘制了双层PCB将模拟区和数字区严格分开。虽然竞赛允许使用洞洞板但自制PCB的可靠性和美观度会高很多也能锻炼真正的硬件设计能力。4.2 主控与编程环境实战正如开头提到的“用什么程序编程”这里给出具体答案。由于我们选用STM32其编程核心是C语言开发环境是Keil uVision但编程的“灵魂”在于库的选择和工程管理。标准外设库 vs HAL库当时我们选择了标准外设库StdPeriph Lib因为它更底层代码效率高对硬件理解更深。现在更主流的是STM32CubeMXHAL库它通过图形化配置生成初始化代码开发速度快但代码体积稍大实时性稍弱。竞赛中如果对性能有极致要求推荐用标准库或LL库如果追求开发速度CubeMX是神器。工程结构管理一个清晰的工程结构是团队协作和后期调试的基础。我们的工程文件夹通常如下/Project ├── /CMSIS (ARM核心支持包) ├── /StdPeriph_Driver (标准外设库) ├── /User │ ├── main.c │ ├── /bsp (板级支持包按键、LED、延时初始化) │ ├── /driver (各类传感器、执行器的驱动代码) │ ├── /algorithm (PID、滤波等算法代码) │ ├── /task (FreeRTOS任务如果使用的话) │ └── /communication (串口、蓝牙通信协议处理) ├── /Doc (设计文档、说明书草稿) └── /Hardware (原理图、PCB文件)这样划分谁负责哪个模块一目了然代码复用性也极高。编程核心中断与定时器竞赛系统是实时系统必须高效利用中断。定时器中断用于产生精确的时序控制例如每10ms执行一次PID计算和控制输出。外部中断用于处理紧急信号如限位开关触发。串口中断用于接收无线调试指令不能使用阻塞式的查询法。 我们的做法是在定时器中断服务函数里设置标志位在主循环中查询该标志位来执行周期任务避免在中断服务函数中做太多耗时操作。5. 软件调试与系统联调实录5.1 分模块调试法硬件焊接组装完毕后切忌直接上电进行全系统联调。必须遵循“分模块、逐级通电、信号溯源”的原则。电源模块首先单独测试电源板确保各路输出电压3.3V, 5V, 12V准确、纹波小。最小系统仅连接MCU核心板下载一个简单的LED闪烁程序确认MCU工作正常。感知模块单独连接传感器如四象限光电管调理电路用示波器观察输出波形或用ADC读取数值并通过串口打印验证其随光源移动的变化是否符合预期。执行模块单独连接电机驱动和电机编写测试程序让电机正反转确认功率电路无误。控制算法在Matlab或Python中先搭建仿真模型初步确定PID参数的大致范围避免在硬件上盲目调试。5.2 系统联调与性能优化当所有模块单独测试通过后开始联调。这是问题爆发的集中阶段。问题1电机启动时传感器读数剧烈跳变。排查这是典型的电源耦合干扰。电机启动瞬间电流很大导致电源电压瞬间跌落影响了模拟电路的供电。解决为模拟电路部分增加LCπ型滤波电机驱动电源与主控、传感器电源完全隔离在软件上电机启动时短暂停止ADC采样。问题2追踪过程有抖动不平滑。排查可能是PID参数不佳也可能是传感器数据噪声太大。解决首先对传感器数据做软件滤波如滑动平均滤波、卡尔曼滤波。然后观察控制输出波形如果输出频繁剧烈变化可能是微分项D太强或比例项P太大适当降低。同时检查机械结构是否有间隙舵机本身是否有抖动。问题3长时间运行后出现死机或跑飞。排查最可能的原因是数组越界、堆栈溢出、中断嵌套冲突。解决检查所有数组访问的边界增大启动文件中的堆栈大小优化中断服务函数确保其尽可能短小精悍如果使用了RTOS检查任务堆栈分配是否充足。5.3 稳定性与鲁棒性测试系统基本功能实现后需要进行“破坏性”测试模拟比赛现场的复杂环境。不同光照条件在强光窗户边、弱光阴影处、有干扰光源手机手电筒下测试追踪效果。不同运动模式让光源做匀速直线、变速、S形曲线甚至突然消失再出现等运动测试系统的适应能力。长时间拷机让系统连续运行半小时以上观察是否有内存泄漏、温升过高导致性能下降等问题。6. 文档撰写与比赛现场应对6.1 设计报告你的第二张答卷竞赛评分中设计报告占很大比重。报告不是赛后才写而是与开发过程同步进行。我们分工明确一人负责写硬件和软件同学提供素材和图表。核心内容系统方案论证、理论分析与计算如传感器选型计算、控制模型建立、电路参数计算、电路与程序设计附上核心电路图和程序流程图、测试方案与数据用表格和图表展示测试结果如追踪误差随距离变化的曲线、总结。格式与细节图文并茂公式使用公式编辑器图表清晰有标注。所有自己设计的电路图、程序代码都必须出现在报告中。测试数据要真实哪怕结果不完美也要分析原因这体现了严谨的科学态度。6.2 比赛现场心态与技巧四天三夜是对身心的极大考验。时间管理我们制定了粗略的时间表第一天上午确定方案、采购元件下午到第二天完成核心硬件和软件第三天全天调试优化第四天上午完善文档、制作答辩PPT下午封箱。分工与协作避免三人同时挤在一个问题上。一个人调硬件一个人调软件一个人写文档和准备测试。定期如每半天开短会同步进度和问题。睡眠与饮食再忙也要保证核心睡眠后半夜至少睡2-3小时饮食规律。头脑清醒时效率远高于疲劳硬撑。应对突发状况准备备用方案和关键备件如多一块MCU、核心传感器。我们曾烧毁过一个电机驱动芯片因为备件充足十分钟就完成了更换。7. 回顾总结与给后来者的建议那次竞赛我们最终拿到了省级一等奖虽然与国家奖失之交臂但整个过程收获的成长远超一纸证书。它让我真正理解了什么是系统工程如何将书本上的理论变成实际可运行的装置如何在一个高压环境下与队友高效协作、解决层出不穷的问题。针对大家最关心的“2025年TI杯E题用什么程序编程”我的答案是编程语言极大概率是C开发环境可能是Code Composer Studio (CCS) 或 IAR for MSP430/ARM核心在于对TI单片机架构、外设以及相应控制算法的掌握。不要纠结于工具本身而要聚焦于工具所实现的功能。无论是STM32还是TI的MSP432其编程思想、系统设计方法都是相通的。给准备参赛的同学几点最朴实的建议基础为王吃透模电、数电、C语言、单片机原理这几门核心课程。很多赛题难题归根结底是基础不牢。动手至上看一百遍视频不如动手做一遍。从点亮一个LED开始到驱动一个传感器再到完成一个综合项目积累真实的项目经验。模块化积累建立自己的“代码库”和“电路库”并做好文档注释。比赛时你是在“组装”和“调试”一个系统而不是从零开始创造所有部件。善用工具熟练掌握示波器、逻辑分析仪、信号发生器的使用。它们是你调试电路的“眼睛”。学会使用版本管理如Git哪怕只是本地管理也能避免代码混乱。拥抱合作竞赛是团队战信任你的队友积极沟通。技术上的争论要对事不对人共同目标是做出最好的作品。全国大学生电子设计竞赛就像一场浓缩的工程研发实战。它很苦很累会让人崩溃但当你看到自己设计的系统按照预想完美运行的那一刻所有的汗水都化为了无比的成就感与自信。这份经历将成为你技术生涯中最坚实的一块基石。