全国大学生电子设计竞赛实战指南:从STM32到PID控制,详解系统设计与调试
2026/8/29 2:56:31 网站建设 项目流程

1. 项目概述:一场竞赛,一次蜕变

全国大学生电子设计竞赛,这个名字对于每一个电子信息、自动化、电气工程等相关专业的学生来说,都像是一座必须仰望和挑战的高峰。它不是一次简单的考试,而是一场为期四天三夜、集脑力、体力、团队协作和临场应变于一体的极限挑战。我唯一一次参加这项竞赛的经历,至今回想起来,依然心潮澎湃。那不仅仅是一次技术比拼,更是一次从学生思维到工程师思维的彻底蜕变。整个过程,从赛前漫无目的的焦虑准备,到赛题公布时的手足无措,再到最后通宵达旦调试出成品的狂喜与疲惫,每一个环节都充满了故事。

对于很多初次接触的同学,尤其是看到今年(2025年)TI杯E题这类具体题目时,最直接的问题往往是:“这到底是用什么程序编程的?” 这个问题看似简单,背后却隐藏着对竞赛技术栈、开发流程和核心能力的巨大困惑。今天,我就以一名“过来人”的身份,拆解我那次参赛的全过程,不仅回答“用什么编程”,更深入剖析“为什么这么用”以及“如何从零到一实现它”。无论你是正在备赛的学弟学妹,还是对电子设计充满好奇的爱好者,希望这篇近万字的实录能给你带来最真实的参考。

2. 赛前准备:方向比努力更重要

2.1 团队组建与角色定位

我们团队是经典的三人工科组合:一个擅长硬件电路与PCB设计(我),一个精通单片机编程与算法,还有一个负责文档撰写、报告整理与部分测试。这种组合几乎是竞赛的“黄金配置”。但组队成功只是第一步,更重要的是明确角色和磨合。我们提前半年组队,初期大量的时间花在了互相“摸底”和统一技术栈上。

注意:千万不要找三个都是“编程高手”或者三个都是“硬件达人”的队伍。合理的技能互补是成功的基础。同时,队长不一定是技术最强的,但一定是协调能力最强、最能抗压的。

2.2 技术栈选择与统一

这是备赛的核心,直接决定了你们团队能应对的赛题范围。当时,主控平台的选择主要围绕STC89C52(51内核)、STM32F1/F4系列(ARM Cortex-M)和TI的MSP430展开。经过讨论,我们最终将STM32F103C8T6(俗称“蓝桥杯”或“最小系统板”)定为核心平台。理由如下:

  1. 性能与资源平衡:相比传统的51单片机,STM32拥有更高的主频(72MHz)、更丰富的外设(多个定时器、ADC、DAC、通信接口)和更大的存储空间,足以应对控制类、信号处理类等复杂题目。
  2. 生态与资料丰富:无论是正点原子、野火的教程,还是STM32CubeMX配置工具,学习资源和开发工具链都非常成熟,能极大降低学习成本。
  3. 性价比高:核心板价格低廉,周边模块(如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-Fi(ESP8266)、NRF24L01无线模块。

对于每个模块,我们都要求达到:硬件连接了然于胸、驱动程序稳定可靠、核心功能封装成库(提供清晰的API接口)。例如,针对MPU6050,我们不仅写出了读取原始数据的代码,还封装了姿态解算(互补滤波或卡尔曼滤波)的函数,这样在比赛中需要用到姿态信息时,直接调用函数即可,节省大量时间。

3. 赛题解析与核心方案设计

我们当年遇到的是一道典型的“控制类”题目(类似于近年来的小车避障、平衡车等),要求设计一个系统,能够自动追踪一个移动的光源并保持特定距离。这里,我就以这个题目和今年热门的“2025年TI杯E题”为引,来拆解方案设计的核心思路。

3.1 题目需求深度拆解

拿到赛题,第一步不是马上想电路或写代码,而是逐字逐句分析赛题要求,并用工程师的语言进行翻译。

  1. 核心功能:自动追踪移动光源。这意味着需要“感知”光源位置(输入),然后“控制”执行器移动(输出)。
  2. 性能指标:追踪速度、稳定距离误差、响应时间等。这些是评分的硬性指标,所有设计必须围绕优化这些指标展开。
  3. 限制条件:供电电压(如仅限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(微分):预测误差变化趋势,具有“超前调节”作用,能抑制振荡,提高稳定性。

我们的实操步骤:

  1. 先调P:将I和D设为0,逐渐增大P,让系统能快速响应,出现围绕目标点的振荡。
  2. 再调D:加入适当的D,用来抑制P引起的振荡,让系统快速稳定下来。
  3. 最后调I:如果稳定后与目标仍有微小差距(静差),则加入很小的I来消除它。
  4. 现场微调:比赛环境的光照、地面摩擦等与实验室不同,必须根据现场情况对PID参数进行微调。我们准备了通过蓝牙无线传输参数的上位机,可以实时修改PID参数并观察波形,这是极大的优势。

实操心得:PID参数整定没有万能公式,更多靠经验和试凑。准备一个能图形化显示传感器数据和控制器输出的简易上位机(可以用Python的Matplotlib或串口绘图工具),能让调试效率提升十倍。

4. 硬件设计与实现要点

4.1 核心电路设计:从原理图到PCB

传感器信号通常很微弱(毫伏级),而MCU的ADC输入需要伏特级,且需要抗干扰。因此,信号调理电路至关重要。

  • 放大电路:我们使用了仪表放大器(如INA128)来放大四象限光电管的差分输出信号。它的高共模抑制比能有效抑制环境光干扰。
  • 滤波电路:在放大后加入了低通滤波电路,滤除高频噪声(如日光灯频闪、电机火花干扰)。截止频率需要根据光源移动速度合理设计,太低了响应慢,太高了噪声大。
  • 电源设计:系统包含数字部分(MCU、逻辑芯片)和模拟部分(运放、传感器),必须采用星型单点接地或隔离,避免数字噪声串扰敏感的模拟信号。电机驱动部分更要单独供电,并通过光耦或磁耦隔离PWM控制信号。

我们使用Altium Designer绘制了双层PCB,将模拟区和数字区严格分开。虽然竞赛允许使用洞洞板,但自制PCB的可靠性和美观度会高很多,也能锻炼真正的硬件设计能力。

4.2 主控与编程环境实战

正如开头提到的“用什么程序编程”,这里给出具体答案。由于我们选用STM32,其编程核心是C语言,开发环境是Keil uVision,但编程的“灵魂”在于库的选择和工程管理

  1. 标准外设库 vs HAL库:当时我们选择了标准外设库(StdPeriph Lib),因为它更底层,代码效率高,对硬件理解更深。现在更主流的是STM32CubeMX+HAL库,它通过图形化配置生成初始化代码,开发速度快,但代码体积稍大,实时性稍弱。竞赛中,如果对性能有极致要求,推荐用标准库或LL库;如果追求开发速度,CubeMX是神器。

  2. 工程结构管理:一个清晰的工程结构是团队协作和后期调试的基础。我们的工程文件夹通常如下:

    /Project ├── /CMSIS (ARM核心支持包) ├── /StdPeriph_Driver (标准外设库) ├── /User │ ├── main.c │ ├── /bsp (板级支持包:按键、LED、延时初始化) │ ├── /driver (各类传感器、执行器的驱动代码) │ ├── /algorithm (PID、滤波等算法代码) │ ├── /task (FreeRTOS任务,如果使用的话) │ └── /communication (串口、蓝牙通信协议处理) ├── /Doc (设计文档、说明书草稿) └── /Hardware (原理图、PCB文件)

    这样划分,谁负责哪个模块一目了然,代码复用性也极高。

  3. 编程核心:中断与定时器竞赛系统是实时系统,必须高效利用中断。

    • 定时器中断:用于产生精确的时序控制,例如每10ms执行一次PID计算和控制输出。
    • 外部中断:用于处理紧急信号,如限位开关触发。
    • 串口中断:用于接收无线调试指令,不能使用阻塞式的查询法。 我们的做法是,在定时器中断服务函数里设置标志位,在主循环中查询该标志位来执行周期任务,避免在中断服务函数中做太多耗时操作。

5. 软件调试与系统联调实录

5.1 分模块调试法

硬件焊接组装完毕后,切忌直接上电进行全系统联调。必须遵循“分模块、逐级通电、信号溯源”的原则。

  1. 电源模块:首先单独测试电源板,确保各路输出电压(3.3V, 5V, 12V)准确、纹波小。
  2. 最小系统:仅连接MCU核心板,下载一个简单的LED闪烁程序,确认MCU工作正常。
  3. 感知模块:单独连接传感器(如四象限光电管+调理电路),用示波器观察输出波形,或用ADC读取数值并通过串口打印,验证其随光源移动的变化是否符合预期。
  4. 执行模块:单独连接电机驱动和电机,编写测试程序让电机正反转,确认功率电路无误。
  5. 控制算法:在Matlab或Python中先搭建仿真模型,初步确定PID参数的大致范围,避免在硬件上盲目调试。

5.2 系统联调与性能优化

当所有模块单独测试通过后,开始联调。这是问题爆发的集中阶段。

  • 问题1:电机启动时,传感器读数剧烈跳变。
    • 排查:这是典型的电源耦合干扰。电机启动瞬间电流很大,导致电源电压瞬间跌落,影响了模拟电路的供电。
    • 解决:为模拟电路部分增加LCπ型滤波;电机驱动电源与主控、传感器电源完全隔离;在软件上,电机启动时短暂停止ADC采样。
  • 问题2:追踪过程有抖动,不平滑。
    • 排查:可能是PID参数不佳,也可能是传感器数据噪声太大。
    • 解决:首先对传感器数据做软件滤波(如滑动平均滤波、卡尔曼滤波)。然后观察控制输出波形,如果输出频繁剧烈变化,可能是微分项D太强或比例项P太大,适当降低。同时检查机械结构是否有间隙,舵机本身是否有抖动。
  • 问题3:长时间运行后出现死机或跑飞。
    • 排查:最可能的原因是数组越界、堆栈溢出、中断嵌套冲突
    • 解决:检查所有数组访问的边界;增大启动文件中的堆栈大小;优化中断服务函数,确保其尽可能短小精悍;如果使用了RTOS,检查任务堆栈分配是否充足。

5.3 稳定性与鲁棒性测试

系统基本功能实现后,需要进行“破坏性”测试,模拟比赛现场的复杂环境。

  1. 不同光照条件:在强光(窗户边)、弱光(阴影处)、有干扰光源(手机手电筒)下测试追踪效果。
  2. 不同运动模式:让光源做匀速直线、变速、S形曲线甚至突然消失再出现等运动,测试系统的适应能力。
  3. 长时间拷机:让系统连续运行半小时以上,观察是否有内存泄漏、温升过高导致性能下降等问题。

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,其编程思想、系统设计方法都是相通的。

给准备参赛的同学几点最朴实的建议:

  1. 基础为王:吃透模电、数电、C语言、单片机原理这几门核心课程。很多赛题难题,归根结底是基础不牢。
  2. 动手至上:看一百遍视频不如动手做一遍。从点亮一个LED开始,到驱动一个传感器,再到完成一个综合项目,积累真实的项目经验。
  3. 模块化积累:建立自己的“代码库”和“电路库”,并做好文档注释。比赛时,你是在“组装”和“调试”一个系统,而不是从零开始创造所有部件。
  4. 善用工具:熟练掌握示波器、逻辑分析仪、信号发生器的使用。它们是你调试电路的“眼睛”。学会使用版本管理(如Git),哪怕只是本地管理,也能避免代码混乱。
  5. 拥抱合作:竞赛是团队战,信任你的队友,积极沟通。技术上的争论要对事不对人,共同目标是做出最好的作品。

全国大学生电子设计竞赛就像一场浓缩的工程研发实战。它很苦,很累,会让人崩溃,但当你看到自己设计的系统按照预想完美运行的那一刻,所有的汗水都化为了无比的成就感与自信。这份经历,将成为你技术生涯中最坚实的一块基石。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询