全国大学生电子设计竞赛(电赛)是电子、自动化、计算机等相关专业学生最重要的学科竞赛之一。对于初次参赛或经验尚浅的“小白”选手而言,面对官方发布的器件清单,往往感到无从下手:哪些是核心必选?哪些是锦上添花?如何根据有限的预算和时间,搭建一个既能满足题目要求又便于调试的系统?这份“省心版”清单解读,旨在帮你理清思路,将官方清单转化为一份可执行、可落地的备赛采购与学习指南。
本文不会简单罗列器件型号,而是围绕“控制类”、“信号类”、“电源类”等常见赛题方向,拆解清单中器件的核心用途、选型要点、组合方案以及新手最容易踩的坑。你将了解到如何将一块单片机、几个传感器和模块,组合成一个能够稳定运行并完成特定任务的竞赛系统。文章后半部分将提供一套从零开始的备赛环境搭建流程、最小系统调试方法,以及当作品无法正常工作时,应该遵循的排查路径。
1. 理解电赛器件清单:从官方列表到实战系统
官方发布的器件清单通常是一个范围,而非具体型号。例如,清单中会写“单片机最小系统板(如 STM32、GD32、ESP32 等)”,这给了选手选择空间,但也带来了选择困难。对于小白选手,首要任务是理解清单中每一类器件在竞赛系统中所扮演的角色。
1.1 核心控制器:系统的大脑
控制器是整套系统的核心,负责数据采集、逻辑处理、算法执行和最终控制。
- 常见选项:STM32F1/F4系列、GD32系列、ESP32系列、树莓派 Pico。
- 选型核心:
- 性能与资源:主频、Flash大小、RAM大小、外设(ADC、DAC、PWM、定时器、串口)的数量和精度。
- 生态与资料:STM32资料最全,社区支持最好,是大多数人的首选。GD32兼容STM32,性价比较高。ESP32集成Wi-Fi/蓝牙,适合需要无线通信的题目,但实时性稍弱。
- 开发环境:STM32/GD32常用Keil、STM32CubeIDE或VSCode+PlatformIO。ESP32常用Arduino框架或ESP-IDF。
- 新手建议:优先选择STM32F103C8T6(蓝桥杯板)或STM32F407ZGT6。前者成本极低,资源足够应对多数基础任务;后者性能更强,外设丰富,是进阶选择。至少准备两块同型号核心板,一块用于开发,一块作为最终作品主控。
1.2 传感器与信号调理:系统的感官
传感器负责将物理量(如距离、角度、温度、光强)转换为电信号。原始信号往往微弱或含有噪声,需要“信号调理”电路进行处理。
- 关键器件解读:
- 运算放大器(运放):清单中的核心。用于信号放大、滤波、电压跟随、比较。常用型号如LM358(双运放,通用)、OPA2188(高精度)、LM393(比较器)。
- 模数转换器(ADC):单片机内置ADC精度通常为12位。若题目要求高精度测量(如微弱电压、电流),需外接16位或24位ADC芯片,如ADS1115。
- 数字传感器模块:如陀螺仪MPU6050、超声波测距HC-SR04、灰度传感器、颜色传感器TCS34725等。它们通过I2C、SPI或单总线输出数字信号,简化了电路设计,但可能响应速度或精度不如自建调理电路。
- 组合策略:对于模拟量测量(如测量正弦波幅度),标准流程是:传感器 -> 运放放大/滤波 -> 单片机ADC。对于开关量或频率测量(如光电编码器),可能只需要一个比较器或直接接入单片机定时器输入捕获引脚。
1.3 执行器与驱动:系统的手脚
执行器根据控制器的指令动作,如驱动电机、点亮灯带、发出声音。
- 电机与驱动:
- 直流电机:配H桥驱动芯片,如TB6612FNG(双路,驱动能力强)、L298N(经典但发热大)。
- 步进电机:配专用驱动模块,如A4988、DRV8825。需要特别注意细分设置和电流调节。
- 舵机:分180度舵机和360度连续旋转舵机。控制信号为PWM,驱动简单。
- 其他执行器:MOS管(如IRF540N)用于开关大电流负载(如LED灯带、加热片)。继电器模块用于控制220V交流设备(注意安全!)。
1.4 电源与基础模块:系统的血液与骨架
稳定的电源是系统可靠工作的基石。
- 电源模块:
- 降压模块:如LM2596、MP1584EN,将12V/9V等输入降压至5V或3.3V。务必注意最大输出电流。
- 升压模块:如MT3608,将电池电压(如3.7V)升至5V/12V。
- 线性稳压:如AMS1117-3.3,用于给单片机等对噪声敏感的芯片提供干净电源。通常接在开关降压模块之后。
- 基础电路与模块:
- 电阻、电容、电感、二极管、三极管、电位器:用于搭建基础电路,如分压、滤波、稳压、开关。
- 显示模块:OLED (SSD1306) 最常用,I2C接口,节省IO。LCD1602/2004也可用,但占用IO多。
- 按键、旋转编码器:人机交互输入。
下表总结了针对不同赛题方向的器件准备侧重点:
| 赛题方向 | 核心控制器 | 传感器重点 | 执行器重点 | 电源与信号重点 |
|---|---|---|---|---|
| 控制类(如小车、云台) | STM32 (定时器、PWM资源丰富) | 编码器、陀螺仪、超声波、摄像头 | 直流/步进电机及驱动、舵机 | 电机驱动需独立供电,注意电源隔离与滤波 |
| 信号类(如测量、滤波) | STM32 (高精度ADC或外接ADC) | 运放、ADC/DAC芯片、模拟开关 | 可能较少 | 基准电压源、低噪声LDO、精密电阻电容 |
| 电源类(如逆变、稳压) | STM32 (高分辨率PWM,如高级定时器) | 电流采样芯片、电压互感器、比较器 | MOSFET、IGBT、电感、大电容 | 大电流走线、散热、隔离采样、保护电路 |
| 仪器仪表类(如示波器、信号源) | STM32 + FPGA (高速处理) | 高速ADC、DAC、运放 | 可能较少 | 时钟发生器、信号完整性、屏蔽 |
2. 构建你的“省心”备赛开发环境
拥有器件后,下一步是建立一个高效的开发环境,避免在软件安装和配置上浪费比赛时间。
2.1 软件工具链安装与配置
- IDE与编译器:
- STM32:安装
STM32CubeIDE。它集成了STM32CubeMX(图形化配置工具)和编译调试环境,一站式解决。同时安装STM32CubeProgrammer用于烧录。 - 备用方案:使用
VSCode+PlatformIO插件。PlatformIO库管理非常方便,适合管理多个项目。
- STM32:安装
- 驱动安装:
- 将单片机通过USB线连接电脑,在设备管理器中查看端口和调试器驱动(如ST-Link)是否正常识别。若不识别,需安装对应驱动。
- 必备软件:
- 串口调试助手:如
SecureCRT、MobaXterm或开源的Putty、CoolTerm。用于查看单片机打印的调试信息。 - 代码版本管理:强烈建议学习使用
Git,并在Gitee或GitHub上建立仓库。每天备份代码,避免意外丢失。 - 画图软件:
Altium Designer或立创EDA用于画PCB(后期)。前期可用Fritzing或Draw.io绘制简单的接线示意图。
- 串口调试助手:如
2.2 建立标准项目结构与代码库
混乱的代码和项目结构是调试的噩梦。在备赛初期就建立规范。
- 项目目录结构示例:
/Your_Contest_Project ├── /docs # 存放题目要求、设计报告草稿、参考资料 ├── /hardware # 原理图、PCB图、器件datasheet ├── /firmware # 单片机程序 │ ├── /Core # 核心外设初始化、主循环(由CubeMX生成) │ ├── /Drivers # HAL库或标准库文件 │ ├── /UserApp # **你的应用代码** │ │ ├── /bsp # 板级支持包:按键、LED、OLED驱动 │ │ ├── /devices # 设备驱动:电机、传感器、编码器 │ │ ├── /algorithm # 核心算法:PID、滤波、路径规划 │ │ └── /system # 系统任务:状态机、任务调度 │ ├── /Middlewares # 中间件(如FreeRTOS) │ └── /Debug # 编译输出(通常由IDE管理) └── /tools # 测试脚本、数据处理工具(如Python脚本) - 代码管理习惯:
- 为每个重要的功能模块(如
motor.c,mpu6050.c)编写对应的头文件(.h),声明函数和全局变量。 - 使用
宏定义来管理硬件引脚,不要将引脚号直接写在代码里。例如:// 在 bsp_led.h 中 #define LED_GPIO_PORT GPIOA #define LED_GPIO_PIN GPIO_PIN_5 // 在 main.c 中 HAL_GPIO_WritePin(LED_GPIO_PORT, LED_GPIO_PIN, GPIO_PIN_SET); - 在关键函数和变量处添加简明注释。
- 为每个重要的功能模块(如
3. 从零搭建一个最小可运行系统并调试
拿到新器件,不要急于集成到复杂系统中。先建立“传感器/模块 -> 单片机 -> 电脑串口”的独立调试通道。
3.1 硬件连接与上电检查
- 电源连接:这是最易出错的一步。遵循以下顺序:
- 确认所有模块的电压等级(5V or 3.3V)。
- 使用万用表测量降压模块输出电压是否正确。
- 先断开所有负载,单独给降压模块上电,测量输出正常。
- 先连接单片机核心板,观察板载电源指示灯是否正常。
- 再逐一连接其他模块,每接一个,检查系统是否异常(芯片发烫、指示灯异常)。
- 信号线连接:
- I2C设备(如OLED、MPU6050):注意SCL和SDA需要上拉电阻(通常模块已集成)。
- SPI设备:注意主从设备的MISO/MOSI不要接反。
- PWM/编码器:连接到单片机具有对应复用功能的引脚。
3.2 编写基础驱动与测试代码
以最常用的OLED (SSD1306) 和MPU6050为例。
OLED显示测试:
- 在CubeMX中配置I2C引脚,并生成代码。
- 从开源社区(如GitHub)获取成熟的SSD1306驱动文件(
.c和.h),放入项目的/UserApp/bsp目录。 - 编写测试代码,在屏幕上显示“Hello Contest!”和某个变量的值。
// 在 main.c 中 #include "ssd1306.h" #include "stdio.h" char str_buf[32]; int count = 0; int main(void) { HAL_Init(); SystemClock_Config(); MX_I2C1_Init(); // CubeMX生成的I2C初始化 ssd1306_Init(); // 初始化OLED while (1) { count++; sprintf(str_buf, "Count: %d", count); ssd1306_SetCursor(0, 0); ssd1306_WriteString(str_buf, Font_7x10, White); ssd1306_UpdateScreen(); // 刷新显示 HAL_Delay(500); } }- 验证:编译下载后,OLED应能正常显示并刷新数字。
MPU6050传感器数据读取:
- 同样配置I2C,获取MPU6050驱动。
- 编写代码读取原始加速度和陀螺仪数据,并通过串口打印。
#include "mpu6050.h" #include "usart.h" int16_t accX, accY, accZ; int16_t gyroX, gyroY, gyroZ; int main(void) { // ... 初始化代码 MPU6050_Init(); while (1) { MPU6050_Read_Accel(&accX, &accY, &accZ); MPU6050_Read_Gyro(&gyroX, &gyroY, &gyroZ); printf("Acc: %6d %6d %6d | Gyro: %6d %6d %6d\r\n", accX, accY, accZ, gyroX, gyroY, gyroZ); HAL_Delay(100); } }- 在电脑上打开串口调试助手,选择正确的串口号和波特率(如115200),应能看到不断刷新的数据。晃动传感器,观察数据变化。
3.3 系统联调与问题隔离
当多个模块一起工作时,问题可能相互影响。采用“二分法”和“替换法”隔离问题。
- 现象:整个系统上电后,单片机不运行,或运行不稳定。
- 排查步骤:
- 单独测试:拔掉所有外围模块,只留单片机核心板,下载一个最简单的LED闪烁程序,看能否运行。
- 逐一添加:每添加一个模块(如先加OLED),就测试一次基础功能。如果加了某个模块后系统异常,问题就出在该模块或它与单片机的连接上。
- 检查电源:用万用表测量在连接所有模块时,单片机VCC引脚的实际电压。如果电压被拉低(如低于3.0V),说明电源带载能力不足或存在短路。
- 检查通信:对于I2C/SPI设备,可以用逻辑分析仪或示波器查看通信波形。没有仪器时,可以尝试降低通信速率(如I2C从400kHz降到100kHz),看是否改善。
4. 备赛过程中的常见问题与深度排查
即使按照教程操作,新手仍会遇到各种问题。以下是典型问题及其排查思路。
4.1 程序下载失败
| 现象 | 可能原因 | 检查与解决 |
|---|---|---|
| 找不到设备/ST-Link | 1. USB线或ST-Link损坏 2. 驱动未安装 3. 单片机Boot模式不对 | 1. 换线、换接口、换一个ST-Link试试。 2. 设备管理器查看有无未知设备,安装 STM32 ST-LINK Utility驱动包。3. 确保BOOT0引脚接地(从Flash启动)。 |
| 下载时提示“Target not connected” | 1. 单片机未供电 2. SWD接口(SWCLK, SWDIO)接触不良或被占用 | 1. 确认开发板已上电,电源灯亮。 2. 检查杜邦线是否松动,SWD引脚是否被程序复用为普通IO(在CubeMX中检查)。 |
| 下载成功但程序不运行 | 1. 时钟配置错误 2. 中断向量表地址错误(多见于带Bootloader) 3. 硬件复位电路问题 | 1. 检查CubeMX中时钟树配置,特别是HSE(外部晶振)是否选择正确并启用。 2. 下载后按一下复位键。 |
4.2 传感器数据异常或不更新
| 现象 | 可能原因 | 检查与解决 |
|---|---|---|
| I2C/SPI读取全为0或0xFF | 1. 通信引脚接错 2. 从设备地址错误 3. 未正确初始化(如MPU6050需唤醒) 4. 上拉电阻缺失 | 1. 对照模块手册和原理图,确认SDA/SCL, MOSI/MISO接法。 2. 用代码扫描I2C总线地址,确认设备存在。 3. 仔细阅读传感器数据手册,初始化序列一个不能少。 4. I2C总线加上拉电阻(4.7kΩ-10kΩ)。 |
| 数据有值但明显错误/跳动大 | 1. 电源噪声 2. 传感器未校准 3. 代码数据处理错误(如数据类型溢出) 4. 机械振动干扰(对加速度计影响大) | 1. 为模拟传感器供电增加滤波电容(如10uF并联0.1uF)。 2. 执行传感器校准程序,计算零偏和比例因子。 3. 对数据进行软件滤波(如均值滤波、卡尔曼滤波)。 |
4.3 电机、舵机控制异常
| 现象 | 可能原因 | 检查与解决 |
|---|---|---|
| 电机不转 | 1. 电源功率不足 2. 使能信号未给 3. PWM信号未输出或频率/占空比不对 4. 电机损坏 | 1. 测量电机驱动模块输入电压,带载时是否跌落严重。电机启动电流大,需独立电源。 2. 检查驱动芯片的使能(EN)引脚是否拉高。 3. 用示波器或LED检查单片机PWM输出引脚是否有波形。 4. 直接给电机两端加电压,看是否转动。 |
| 舵机抖动或角度不准 | 1. PWM频率不对(应为50Hz) 2. 电源带载能力差 3. 机械负载过重 | 1. 确认单片机定时器产生的PWM周期为20ms(50Hz)。 2. 舵机动作时,测量其供电电压是否稳定。最好单独供电。 3. 检查舵机扭矩是否足够。 |
4.4 系统运行不稳定(偶尔复位、死机)
这是最棘手的问题,通常由以下原因引起:
- 电源问题:电机、舵机等大电流设备动作时,引起电源网络电压瞬间跌落,导致单片机复位。解决方案:电机电源与单片机电源隔离(使用不同的降压模块),并在单片机电源入口处增加大电容(如100uF-470uF)储能。
- 堆栈溢出:如果使用了RTOS或大量局部变量、递归,可能耗尽内存。解决方案:在CubeMX或启动文件中增大堆栈大小,优化代码结构。
- 中断冲突或处理时间过长:在中断服务函数中执行了耗时操作(如
HAL_Delay, 浮点运算)。解决方案:中断函数只做标记、清标志等轻量操作,耗时任务放到主循环中处理。 - 看门狗未喂狗:如果开启了硬件看门狗(IWDG/WWDG),必须在超时前复位它。解决方案:在主循环合适位置调用
HAL_IWDG_Refresh(&hiwdg)。
5. 从学习到实战:备赛策略与报告撰写建议
5.1 分阶段备赛计划
- 第一阶段(基础巩固,赛前3-6个月):精通一种单片机(STM32),掌握GPIO、定时器(PWM、输入捕获)、ADC、DAC、串口、I2C、SPI等外设。独立调试完OLED、按键、编码器、电机驱动、MPU6050等常用模块。
- 第二阶段(模块集成,赛前1-3个月):做小系统练习。例如,用MPU6050和PID算法控制舵机平衡一根杆;用超声波和编码器实现小车定距停车。学习使用FreeRTOS进行多任务管理。
- 第三阶段(真题模拟,赛前1个月):找往年赛题,在4天3夜的规定时间内,2-3人一组进行模拟比赛。完整经历选题、方案设计、硬件搭建、软件编程、调试、报告撰写全过程。
- 第四阶段(物料清点与整理,赛前1周):根据本文开头的清单分析和模拟赛经验,最终确定采购清单。将所有器件、模块、工具、线材、耗材分类收纳,做好标签。准备好备用芯片和核心板。
5.2 设计报告撰写核心要点
设计报告是评分的重要依据,其重要性不亚于作品本身。
- 结构清晰:摘要、方案论证、理论计算、电路设计、软件设计、测试结果、总结,缺一不可。
- 图文并茂:多用框图描述系统结构,用电路图(可用仿真软件绘制)描述核心电路,用流程图描述程序逻辑,用表格对比测试数据。
- 数据说话:测试部分不能只写“效果良好”。要提供实测数据、波形图(示波器截图)、曲线图(如PID调试过程),并与理论值进行对比分析误差。
- 突出创新与优化:在方案论证和总结中,说明你们设计的亮点在哪里,是如何优化算法或电路以提高精度、稳定性或效率的。
- 格式规范:注意图表编号、公式引用、参考文献的规范性。提前准备好报告模板。
电赛备赛是一个系统工程,器件是砖瓦,知识是图纸,而调试能力和工程思维是将砖瓦建成大厦的施工工艺。这份“省心版”清单的终极目的,是让你在纷繁的器件列表中抓住主线,将有限的备赛时间投入到核心技能的训练和系统思维的构建上。从最小系统开始,稳定走通每一个环节,记录下每一个问题和解决方案,最终你会发现,官方清单上的每一个条目,都对应着你解决实际工程问题能力的一次坚实提升。