电赛:激光打靶小车通信与控制系统设计
全国大学生电子设计竞赛项目,负责视觉-云台通信协议设计、STM32 HAL库开发与任务调度框架实现
项目概述#
| 项目属性 | 内容 |
|---|---|
| 竞赛名称 | 全国大学生电子设计竞赛 |
| 赛题 | E题:简易自行瞄准装置 |
| 项目时间 | 2025.07 – 2025.08 |
| 获奖情况 | 省级二等奖 |
| 我的角色 | 核心成员(通信与控制系统) |
| 技术栈 | STM32、HAL库、通信协议设计、任务调度、SolidWorks |
赛题要求#
设计一款可自主巡线、精准打靶的智能小车,适配复杂场地(含弯道、障碍物)。
核心功能#
- 自主巡线行驶
- 识别靶心位置
- 云台自动瞄准
- 激光精准打靶
- 多任务切换(寻迹/瞄准/画圆)
我的技术贡献#
负责视觉模块与云台模块之间的通信逻辑设计、云台 HAL 库代码开发、任务运行框架设计。
1. 通信协议设计#
问题分析#
视觉模块(OpenMV)与云台模块(STM32)需要实时传输靶心坐标,传统方案存在:
- 数据传输不稳定
- 格式不统一导致解析错误
- 缺乏状态反馈机制
解决方案#
设计标准化的视觉-云台通信协议:
// 数据包格式定义
typedef struct {
uint8_t header; // 帧头 0xAA
uint8_t cmd_type; // 命令类型
int16_t target_x; // 靶心X坐标
int16_t target_y; // 靶心Y坐标
uint8_t status; // 云台状态
uint8_t checksum; // 校验和
} Vision_Packet_t;c| 字段 | 说明 | 取值范围 |
|---|---|---|
header | 帧头标识 | 0xAA |
cmd_type | 命令类型 | 0x01=坐标数据, 0x02=任务指令 |
target_x/y | 靶心坐标 | -320 ~ 320 (像素) |
status | 云台状态 | 0x00=空闲, 0x01=运行中, 0x02=错误 |
checksum | 校验和 | XOR校验 |
通信流程#
sequenceDiagram
participant V as 视觉模块(OpenMV)
participant G as 云台模块(STM32)
V->>V: 1. 识别靶心坐标
V->>V: 2. 封装数据包
V->>G: [0xAA][0x01][x][y][status][chk]
G->>G: 3. 解析数据包
G->>G: 4. 计算云台角度
G->>G: 5. 执行瞄准动作
G-->>V: [0xAA][0x02][ack][status][chk]
V->>V: 6. 接收确认
成果#
- 数据传输准确率 100%
- 通信延迟 < 20ms
- 支持错误重传机制
2. 云台 HAL 库开发#
基于 STM32 HAL 库开发云台底层驱动:
库架构设计#
flowchart TB
API[应用层 API
Gimbal_Init
Gimbal_SetAngle
Gimbal_GetStatus
Gimbal_EmergencyStop]
Driver[驱动层
PWM 输出控制 TIM
编码器读取 TIM+EXTI
串口通信 USART+DMA
ADC 采集]
HAL[HAL 层
STM32 HAL Driver]
API --> Driver --> HAL
核心 API#
| 函数 | 功能 | 参数 |
|---|---|---|
Gimbal_Init() | 云台初始化 | 无 |
Gimbal_SetAngle() | 设置目标角度 | pitch, yaw (度) |
Gimbal_GetAngle() | 获取当前角度 | 返回结构体 |
Gimbal_SetSpeed() | 设置转动速度 | speed (度/秒) |
Gimbal_GetStatus() | 获取云台状态 | 返回状态码 |
Gimbal_Calibrate() | 云台校准 | 无 |
控制算法#
采用 PID 闭环控制实现精准角度控制:
// PID 控制器
typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_error;
} PID_Controller_t;
float PID_Calculate(PID_Controller_t* pid, float setpoint, float measured) {
float error = setpoint - measured;
pid->integral += error;
float derivative = error - pid->prev_error;
pid->prev_error = error;
return pid->Kp * error +
pid->Ki * pid->integral +
pid->Kd * derivative;
}c控制精度:±0.5°
3. 任务调度框架设计#
需求分析#
赛题要求通过按键切换不同任务:
- 按键1:寻迹模式
- 按键2:瞄准模式
- 按键3:画圆模式
需要实现灵活的任务切换机制。
状态机设计#
// 任务状态枚举
typedef enum {
TASK_IDLE = 0, // 空闲状态
TASK_TRACE, // 寻迹模式
TASK_AIM, // 瞄准模式
TASK_CIRCLE, // 画圆模式
TASK_ERROR // 错误状态
} Task_State_t;
// 任务控制块
typedef struct {
Task_State_t state;
Task_State_t prev_state;
uint32_t entry_time;
void (*handler)(void);
} Task_ControlBlock_t;c状态转换图#
stateDiagram-v2 [*] --> IDLE IDLE --> TRACE: 按键1 IDLE --> AIM: 按键2 IDLE --> CIRCLE: 按键3 TRACE --> ERROR: 异常 AIM --> ERROR: 异常 CIRCLE --> ERROR: 异常 ERROR --> IDLE: 错误恢复
框架特性#
- 按键检测:消抖处理,响应时间 < 100ms
- 状态管理:保存上一状态,支持任务恢复
- 错误处理:异常状态自动切换至 ERROR 状态
- 实时调度:基于定时器中断,确保响应及时
4. 二维云台结构设计#
负责二维云台结构的 3D 建模、打印与装配:
设计要点#
- 轻量化设计:采用镂空结构,减轻重量 30%
- 刚度优化:加强筋设计,确保稳定性
- 集成设计:预留激光笔安装位
硬件集成#
- 集成 405nm 低功率激光笔
- 双舵机驱动(pitch + yaw 轴)
- 编码器反馈
项目成果#
完成情况#
| 模块 | 完成状态 | 性能指标 |
|---|---|---|
| 通信协议 | ✅ 完成 | 准确率 100%,延迟 < 20ms |
| 云台 HAL 库 | ✅ 完成 | 控制精度 ±0.5° |
| 任务调度框架 | ✅ 完成 | 切换响应 < 100ms |
| 云台结构 | ✅ 完成 | 轻量化设计,稳定可靠 |
项目整体情况#
由于负责视觉的学长部分和负责巡线的学长部分未成功完成,导致整体装置未能完成赛题全部任务,但我负责的通信逻辑、云台 HAL 库、任务框架均成功实现并通过联调验证。
X 因素:洞察与技能迁移#
核心洞察#
1. 模块化设计思想#
掌握”模块间通信设计、HAL 库开发、任务调度框架”的核心思路:
flowchart TB
subgraph P[模块化设计原则]
A[标准化接口
定义清晰 API
封装内部实现]
B[松耦合通信
消息/事件驱动
避免直接依赖]
C[独立测试
单元测试覆盖
mock 外部依赖]
end
理解嵌入式系统中模块化设计、标准化接口、任务管理的重要性。
2. 通信协议设计方法论#
总结出通信协议设计的通用方法:
flowchart LR
A[需求分析] --> B[帧格式设计] --> C[校验机制] --> D[错误处理] --> E[性能优化] --> F[文档编写]
技能沉淀#
| 技能类别 | 具体能力 |
|---|---|
| 通信协议设计 | 帧格式设计、校验算法、错误恢复机制 |
| STM32 HAL 开发 | 底层驱动、API 封装、中断处理 |
| 任务调度框架 | 状态机设计、实时调度、错误处理 |
| 结构设计 | SolidWorks 建模、3D 打印、装配调试 |
可迁移方向#
- 机器人模块化系统:多模块通信、标准化接口设计
- 海洋装备控制系统:嵌入式控制、实时任务调度
- 工业自动化:PLC 编程、运动控制、设备通信
技术亮点总结#
┌──────────────────────────────────────────────────────────────┐
│ 电赛项目核心亮点 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 📡 通信协议设计 自定义协议,数据传输准确率100% │
│ │
│ 🔧 HAL库开发 标准化API,控制精度±0.5° │
│ │
│ ⚙️ 任务调度框架 状态机设计,切换响应<100ms │
│ │
│ 🏗️ 结构设计 SolidWorks建模,轻量化设计 │
│ │
└──────────────────────────────────────────────────────────────┘plaintext相关项目#
| 相关项目 | 关系 |
|---|---|
| 智能桌面收纳管家 | 同属 STM32 嵌入式开发 |
| SUR-Nav自主探索研究 | 同属机器人系统开发 |
本文最后更新于 2025 年 8 月