1. 项目背景与参赛体验
去年参加第十一届单片机国赛的经历让我收获颇丰。作为电子类专业学生,这是我第一次参加国家级别的专业竞赛。从省赛突围到全国总决赛,前后历时三个多月,期间经历了方案迭代、硬件调试、软件优化等完整开发流程。现在比赛结束已有一段时间,正好把备赛过程中的技术要点和实战经验做个系统梳理。
单片机竞赛与其他电子类赛事最大的不同在于其综合性。选手需要在限定时间内完成从电路设计、PCB制作到程序编写的全流程开发。今年的赛题延续了往年的风格,要求使用STM32系列单片机实现一个具备无线通信功能的工业数据采集系统。系统需要采集温度、湿度、振动三种传感器数据,并通过LoRa模块上传至云端服务器。
2. 硬件系统设计要点
2.1 核心器件选型
主控芯片选择了STM32F407VET6,这款芯片具有以下优势:
- 168MHz主频满足实时性要求
- 512KB Flash+192KB RAM的存储配置
- 丰富的外设接口(3个USART、2个SPI、3个I2C)
- 内置硬件浮点运算单元(FPU)
传感器选型方面,经过多轮测试最终确定:
- 温度:DS18B20(数字输出,±0.5℃精度)
- 湿度:SHT30(I2C接口,±2%RH精度)
- 振动:ADXL345(SPI接口,±16g量程)
2.2 电源电路设计
系统采用12V直流输入,通过两级稳压方案:
- 第一级:LM2596将12V降至5V(为LoRa模块供电)
- 第二级:AMS1117-3.3将5V降至3.3V(为MCU和传感器供电)
关键设计细节:
- 每个电源输出端并联100μF电解电容+0.1μF陶瓷电容
- 在传感器供电支路增加LC滤波(10μH电感+10μF电容)
- 所有数字IO口串联100Ω电阻作阻抗匹配
3. 软件架构与实现
3.1 系统任务划分
基于FreeRTOS实时操作系统,将功能划分为四个任务:
- 传感器数据采集任务(优先级3)
- 数据预处理任务(优先级2)
- 无线通信任务(优先级4)
- 系统监控任务(优先级1)
任务间通过消息队列通信,关键数据结构如下:
c复制typedef struct {
float temperature;
float humidity;
float vibration_x;
float vibration_y;
float vibration_z;
uint32_t timestamp;
} SensorData_t;
3.2 低功耗优化
为延长电池供电时间,采取以下措施:
- 动态调整采样频率(正常模式1Hz,异常状态10Hz)
- 使用STM32的Stop模式,在任务间隙进入低功耗状态
- LoRa模块采用定时唤醒机制(每60秒唤醒一次)
实测功耗对比:
| 模式 | 电流消耗 | 续航时间 |
|---|---|---|
| 全速运行 | 85mA | 12小时 |
| 优化后 | 18mA | 56小时 |
4. 通信协议设计
4.1 LoRa参数配置
使用SX1278模块,关键参数设置:
- 频率:433MHz
- 扩频因子:SF9
- 带宽:125kHz
- 编码率:4/5
- 发射功率:17dBm
实测通信性能:
| 距离 | RSSI | 丢包率 |
|---|---|---|
| 100m | -65dBm | 0.1% |
| 500m | -82dBm | 3.2% |
| 1000m | -95dBm | 15.7% |
4.2 数据帧格式
自定义的通信协议帧结构:
code复制[前导码][帧头][长度][命令字][数据][校验][帧尾]
- 前导码:0xAA 0x55(2字节)
- 帧头:0xFE(1字节)
- 长度:数据域长度(1字节)
- 命令字:0x01~0xFF(1字节)
- 数据:最大256字节
- 校验:CRC16(2字节)
- 帧尾:0xEF(1字节)
5. 现场调试与问题排查
5.1 典型问题记录
-
传感器数据跳变
- 现象:湿度值偶尔出现±20%突变
- 排查:发现I2C总线未加上拉电阻
- 解决:在SDA/SCL线增加4.7kΩ上拉电阻
-
LoRa通信距离短
- 现象:超过200m后丢包严重
- 排查:天线阻抗不匹配(实测阻抗72Ω)
- 解决:更换50Ω标准天线并调整匹配电路
-
系统死机
- 现象:连续运行4小时后无响应
- 排查:堆栈溢出(原配置256字节不足)
- 解决:将任务堆栈增大至512字节
5.2 调试工具推荐
-
逻辑分析仪
- 型号:Saleae Logic Pro 16
- 用途:抓取SPI/I2C通信波形
- 技巧:设置触发条件捕获特定数据包
-
电流探头
- 型号:TCP0030A
- 用途:测量各模块工作电流
- 技巧:用直流耦合模式观察动态电流变化
-
频谱分析仪
- 型号:Rigol DSA815
- 用途:分析LoRa发射频谱
- 技巧:使用峰值保持功能捕捉瞬时干扰
6. 竞赛经验总结
6.1 时间管理建议
根据我们的实战经验,建议按以下时间分配备赛:
- 方案设计:15%
- PCB制作:20%
- 软件编写:30%
- 系统调试:25%
- 文档整理:10%
特别提醒:一定要预留至少3天时间进行全系统联调,我们当时就因为低估调试难度,最后48小时几乎没合眼。
6.2 作品展示技巧
评委重点关注以下方面:
- 功能完整性(是否实现所有基础+拓展功能)
- 系统稳定性(连续运行演示不出现故障)
- 创新点体现(是否有独特的设计思路)
- 文档规范性(原理图、代码注释是否清晰)
一个小技巧:准备一个30秒的短视频,用手机拍摄系统主要功能演示,在答辩前播放给评委看,能快速建立良好第一印象。
7. 后续改进方向
赛后我们对系统进行了进一步优化:
- 改用STM32H743系列,主频提升至400MHz
- 增加NB-IoT作为备用通信通道
- 引入卡尔曼滤波算法提升数据质量
- 设计防水外壳(3D打印+硅胶密封)
实测改进后的系统在工业现场连续运行30天无故障,平均功耗降低到12mA。这套方案后来被本地一家环保监测公司采用,用于工地扬尘监测系统。
