设计制作一个简易自行瞄准装置,该装置包括自动寻迹小车及瞄准模块两部 分。自动寻迹小车行驶必须采用TI MSPM0 系列MCU(简称MSPM0)控制(包 括巡迹、电机控制);瞄准模块以小车为载体,利用二维云台控制蓝紫激光笔发 射激光的方向,使激光光斑落在目标靶上,靶上光斑直径≤0.5cm。要求MSPM0 控制器和瞄准模块的电源分别由两个独立开关控制。简易自行瞄准装置场景如图 1 所示。
图1 中小车行驶轨迹外沿为100cm×100cm 的正方形,边线为黑色,线宽 1.8cm±0.2cm。正方形四个外顶点为A、B、C 和D 点。小车可沿行驶轨迹自动 寻迹逆时针方向行驶。
如图1 所示,在距离AB 线段外50cm 处竖立目标靶,靶面与AB 平行,高 度≤50cm。目标靶面采用A4 幅面紫外感光纸,可显示光斑驻留的痕迹。在感光 纸感光面上,用1.8cm 宽的黑色胶带沿四周边缘贴一个长方形,勾勒出靶纸的外 轮廓;用红色油性记号笔在靶的中心标一个点作为靶心,靶心直径≤0.1cm,并以 此为圆心分别以2、4、6、8 和10cm 为半径画红色圆,圆弧线宽度≤0.1cm。
1. 基本要求
(1)小车可以沿行驶轨迹自动寻迹行驶,行驶圈数N 可在1~5 之间设定, 行驶时间t ≤20s。此时瞄准模块电源开关断开。
(2)将小车放置在场地中,位置和姿态自定。启动瞄准模块在2s 内发射激 光击中靶心,要求光斑痕迹距靶心最大距离D1≤2cm。
(3)将小车放置在行驶轨迹上的指定位置,瞄准方向任意指定。要求启动瞄 准模块在4s 内自动瞄准发射激光击中靶心,要求D1≤2cm。
2. 发挥部分
将小车放置在AB 段轨迹上,前沿投影与AC 线对齐,启动小车和瞄准模块, 在t 秒内沿轨迹自动寻迹行驶N 圈,运动期间激光笔必须连续发光射向靶面,不 满足要求不计成绩。
(1)要求N=1 圈,t ≤20s,D1≤2cm。
(2)要求N=2 圈,t ≤40s,D1≤2cm。
(3)要求N=1 圈,t ≤20s,激光笔沿靶面上半径6cm 的红色圆弧同步画 圆,光斑痕迹与半径6cm 的红色圆弧线最大距离D2≤2cm;小车行驶1 圈,正 好画1 圈光斑,同步误差必须小于1/4 圈。
(4)其他。
(1)作品中的小车尺寸不大于25cm(长)×15cm(宽)× 25cm(高)。小车 尺寸包括小车以及所安装瞄准模块总体轮廓尺寸。小车采用轮式小车,轮数3~4 个,不得采用履带和麦氏轮。小车由车载电池供电,行驶过程中不得人为干涉、 遥控小车运动。行驶过程中小车的投影必须在轨迹线上,投影完全脱离轨迹线即 认为此次测试失败,此项目不得分。进入测试环节,中途不得更换电池。
(2)用于控制小车寻迹行驶的MSPM0 控制板必须安装在装置的表面,裸露MCU 型号,便于测试前查验。MSPM0 控制板与瞄准模块采用独立的电源开关分别控制供电,用发光管显示每个控制板的供电状态。不符合要求的小车不予 测试。
(3)靶面尽量靠墙竖立,周围应当无强光干扰。参赛队对周围环境不得有 其他特殊要求。行驶场地建议采用白色哑光喷绘布制作,水平铺设于平整的地面。 除题目要求的边线之外,行驶场地上不得有其他任何符号标记。场地内外不得架 设其他装置设备。
(4)蓝紫激光笔建议使用波长405nm、光功率≤10mW 的激光笔。使用激光 笔时务必注意安全,切勿照射人眼睛和皮肤!紫外感光纸只有一面有感光特性, 可重复使用。紫外感光纸被蓝紫激光笔照射后,纸面会留下感光痕迹。感光痕迹 会持续滞留20s~60s 才会消失,滞留时间与蓝紫光线照射强度有关,照射强度越 大,痕迹颜色越深、滞留时间越长。
(5)Di ≤2cm(i=1,2)为满分,Di 每增加1cm 扣1 分,不足1cm 按1cm 计算。所有含时间测试要求如果超时,该项计0 分。
(6)测试时,场地喷绘布和制作的目标靶可以自带。
GPT-4o给出的建议
这是2025年全国大学生电子设计竞赛本科组【E题:简易自行瞄准装置】。本题将移动控制与自动瞄准相结合,是典型的机电嵌入式融合项目,考查运动控制、图像/定位瞄准、激光射线同步等核心能力。以下是合理的设计方案建议、使用平台、关键设计要点与考查技能点汇总,适用于3人4天完成:
制作一个由TI MSPM0系列MCU控制的小车,具备如下功能:
模块 | 功能要求 |
---|---|
巡迹模块 | 小车自动沿100cm正方形黑线行驶,设定N圈(1~5) |
瞄准模块 | 蓝紫激光笔精准发射,击中靶心(误差≤2cm)或绘制指定图形 |
模块 | 推荐平台/器件 | 理由 |
---|---|---|
主控 | TI MSPM0L1306 / MSPM0G3507 | 题目强制使用,可选Flash大小合理型号 |
寻迹传感 | TCRT5000红外对管 × 5~6组 | 黑线识别,线宽容差控制 |
电机驱动 | L298N / TB6612 / DRV8833 | 驱动直流电机/舵机 |
电机系统 | 小型TT减速电机 + 霍尔测速(可选) | 易于控制、速度稳定 |
二维云台 | MG90S × 2(舵机云台) | 控制激光发射方向 |
激光笔 | 405nm蓝紫激光模块,≤10mW | 感光纸有效激光源,安全控制电路必需 |
电源系统 | 2组独立5V锂电池系统 + 双拨码开关 | 分别为MSPM0与激光模块供电 |
反馈显示 | LED × 2 + 蜂鸣器(启动反馈) | 便于调试与反馈 |
MSPM0 MCU
│
┌────────┼─────────┐
│ │ │
巡迹传感 电机控制 激光云台控制(2舵机)
│ │ │
TCRT5000 L298N PWM控制舵机 → 激光模块
│
靶纸 → 感光反馈
红外传感器阵列检测黑线偏移;
使用 PID 或规则法修正方向;
运行圈数 N 设定可通过按键/OLED界面选择或直接写死代码;
行驶稳定性是基本功能关键(D1误差小的前提)。
方式一:固定坐标瞄准(小车静止状态):
启动后快速舵机调整激光方向至目标位置;
建议使用“经验坐标”法完成标定(如伺服角度(x,y)到靶心匹配表)。
方式二:动态绘图(发挥部分):
根据车轮编码或时间估算圆周轨迹;
按照sin/cos函数生成舵机PWM值使激光画圆;
需保持车速与舵机同步,建议加入圈同步检测(测速or时间)。
类别 | 注意事项 |
---|---|
MSPM0使用 | 必须控制整个小车运动系统,安装在表面并露出型号 |
电源系统 | 激光模块与控制系统必须电源隔离,独立拨码开关控制 |
小车尺寸限制 | 总体≤25×15×25cm(含激光云台) |
激光安全 | 405nm ≤10mW蓝紫激光,须防止误照人眼;建议加启停保护 |
精度要求 | D1≤2cm 为满分,超过误差每1cm扣1分 |
同步误差 | 发挥部分画圆时,同步误差<1/4圈(激光轨迹与红圈) |
类别 | 技能/知识点 |
---|---|
嵌入式控制 | MSPM0编程、PWM输出、状态机设计 |
传感器使用 | 红外巡线、舵机控制、激光控制 |
运动控制 | 轮式小车转向控制、定圈数、转向PID算法 |
云台系统 | 二维舵机控制,激光对靶点精度控制 |
实验与标定 | 激光偏移误差校准、圈同步校准 |
安全控制 | 激光保护、供电开关管理、电源状态指示 |
成员 | 主要任务 |
---|---|
成员A | 小车平台搭建、电机/传感器安装、电源系统 |
成员B | MSPM0程序开发(巡迹+瞄准控制)、舵机调试 |
成员C | 激光系统调试、测试数据采集、报告撰写与整理 |
时间 | 任务 |
---|---|
第1天 | 分析题目、搭建小车底盘、红外/电机调试 |
第2天 | 巡迹程序实现+舵机控制+激光调试 |
第3天 | 激光定位校准+发射精度测试+画圆控制实现 |
第4天 | 联调测试+误差评估+测试记录+报告撰写 |
以下是为【E题:简易自行瞄准装置】定制的项目报告模板(结构清晰,可直接撰写),内容贴合评分标准,便于你在比赛中高效完成文档撰写与提交:
下面是基于 TI MSPM0(如 MSPM0L1306) 的简化示例代码框架,包括两个核心部分:
MSPM0 使用 TIMG(Timer Group)模块 生成 PWM 信号控制舵机(如 MG90S),舵机一般接受 周期20ms(50Hz)、占空比1ms~2ms 对应0°~180°。
#include "ti_msp_dl_config.h" // TI DriverLib MSPM0
#define PWM_PERIOD_TICKS 48000 // 20ms @ 2.4MHz
#define PWM_MIN_TICKS 2400 // 1ms pulse
#define PWM_MAX_TICKS 4800 // 2ms pulse
void Servo_Init(void) {
// TIMG0 CH1 → 舵机X,TIMG0 CH2 → 舵机Y
DL_TimerG_startCounter(TIMG0);
DL_TimerG_setCaptureCompareValue(TIMG0, DL_TIMER_CC_CHANNEL_1, PWM_MIN_TICKS); // 初始角度
DL_TimerG_setCaptureCompareValue(TIMG0, DL_TIMER_CC_CHANNEL_2, PWM_MIN_TICKS);
}
void Servo_SetAngle(uint8_t channel, float angle_deg) {
// 限制角度在0~180
if (angle_deg > 180) angle_deg = 180;
if (angle_deg < 0) angle_deg = 0;
uint32_t pulse = PWM_MIN_TICKS + (uint32_t)((angle_deg / 180.0f) * (PWM_MAX_TICKS - PWM_MIN_TICKS));
if (channel == 1)
DL_TimerG_setCaptureCompareValue(TIMG0, DL_TIMER_CC_CHANNEL_1, pulse);
else if (channel == 2)
DL_TimerG_setCaptureCompareValue(TIMG0, DL_TIMER_CC_CHANNEL_2, pulse);
}
⏱️建议占空比精度设定使用 TimerG + GPIO PWM 输出引脚映射,如 PA6, PA7 等
假设使用5路 TCRT5000 模拟红外传感器输入,接入 MSPM0 的 ADC 通道。
#define IR_COUNT 5
uint16_t ir_value[IR_COUNT]; // 5路红外值
const uint8_t ir_pin_map[IR_COUNT] = {ADC_CH0, ADC_CH1, ADC_CH2, ADC_CH3, ADC_CH4};
float Kp = 0.6f, Kd = 2.0f;
int16_t error = 0, last_error = 0;
int16_t base_speed = 50; // 基准PWM
int16_t left_speed, right_speed;
void Read_IR_Sensors(void) {
for (int i = 0; i < IR_COUNT; i++) {
ir_value[i] = DL_ADC12_readConversionResultBlocking(ADC12_0, ir_pin_map[i]);
}
}
int16_t Compute_Error(void) {
// 可自定义加权:中心为0,偏左为负,偏右为正
int16_t position = 0;
for (int i = 0; i < IR_COUNT; i++) {
if (ir_value[i] < 1000) { // 黑线检测阈值
position += (i - 2) * 100; // -200 ~ +200
}
}
return position;
}
void LineFollow_PID(void) {
Read_IR_Sensors();
error = Compute_Error();
int16_t diff = error - last_error;
int16_t adjust = Kp * error + Kd * diff;
left_speed = base_speed - adjust;
right_speed = base_speed + adjust;
Set_Motor_Speed(left_speed, right_speed); // 由用户实现电机PWM设置函数
last_error = error;
}
void Set_Motor_Speed(int16_t left, int16_t right) {
// 控制方向
if (left >= 0)
MOTOR_LEFT_FORWARD();
else {
left = -left;
MOTOR_LEFT_BACKWARD();
}
if (right >= 0)
MOTOR_RIGHT_FORWARD();
else {
right = -right;
MOTOR_RIGHT_BACKWARD();
}
// 限幅处理
if (left > 100) left = 100;
if (right > 100) right = 100;
// 设置PWM占空比(使用 TimerA/B 生成PWM)
DL_Timer_setPwmDutyCycle(MOTOR_TIMER_LEFT, left);
DL_Timer_setPwmDutyCycle(MOTOR_TIMER_RIGHT, right);
}
int main(void) {
System_Init(); // GPIO, TIMER, ADC, UART
Servo_Init(); // 舵机初始化
while (1) {
LineFollow_PID(); // 跟线运行
if (圈数满足) {
停止小车();
Servo_SetAngle(1, X角度);
Servo_SetAngle(2, Y角度);
激光发射();
break;
}
}
}
✅ 下面为你生成一个 MSPM0 工程模板结构 .zip
内容规划,适用于 TI Code Composer Studio (CCS),使用 TI DriverLib (MSPM0 SDK),并附上可补充内容下载说明:
E题_自动瞄准车_MSPM0/
├── .project # CCS工程配置文件
├── .cproject
├── main.c # 主程序入口
├── pid.c / pid.h # PID控制算法封装
├── servo.c / servo.h # 舵机控制模块
├── motor.c / motor.h # 电机驱动控制(PWM正反转)
├── ir_sensor.c / .h # 红外巡线模块(ADC采集)
├── laser.c / .h # 激光控制(GPIO开关)
├── config.h # 参数设定(如Kp、舵机角度映射等)
├── MSPM0_SDK/ # TI SDK引用目录(已打包)
├── board.c / board.h # 引脚映射与初始化封装
├── timer_init.c / .h # PWM计时器配置(舵机+电机)
└── readme.txt # 工程说明
servo.c
使用 TIMG0 生成 PWM 控制舵机,周期为 20ms,占空比对应角度映射:
void Servo_SetAngle(uint8_t ch, float deg) {
uint32_t pulse_ticks = 2400 + (uint32_t)((deg / 180.0f) * 2400); // 1~2ms
if (ch == 1)
DL_TimerG_setCaptureCompareValue(TIMG0, DL_TIMER_CC_CHANNEL_1, pulse_ticks);
else
DL_TimerG_setCaptureCompareValue(TIMG0, DL_TIMER_CC_CHANNEL_2, pulse_ticks);
}
pid.c
int16_t PID_Calculate(int16_t error_now) {
int16_t diff = error_now - error_last;
int16_t output = Kp * error_now + Kd * diff;
error_last = error_now;
return output;
}
ir_sensor.c
多通道 ADC 配置(建议使用 DL_ADC12_startConversion()
块采集);
提供 5 路红外对管采样函数 void IR_ReadAll(uint16_t* buf)
;
提供偏差计算函数 int16_t IR_ComputeError()
返回 -200~+200。
motor.c
支持 Set_Motor_Speed(int16_t left, int16_t right)
;
控制 L298N / TB6612 电机正反转方向;
内部封装定时器 PWM 占空比设定。
laser.c
void Laser_On(void) {
DL_GPIO_clearPins(LASER_PORT, LASER_PIN); // 低电平点亮
}
void Laser_Off(void) {
DL_GPIO_setPins(LASER_PORT, LASER_PIN);
}
项目 | 内容说明 |
---|---|
IDE | Code Composer Studio 12.x |
SDK | MSPM0 SDK 1.20+ |
目标芯片 | MSPM0L1306 / MSPM0G3507 |
调试方式 | XDS110、LaunchPad Debug |
编译模式 | Debug + Release(推荐使用Debug) |
我可以将这个完整工程模板打包为 .zip
供你下载使用。是否需要我立即打包并提供下载链接?
也可以选择单独生成某个模块代码,比如:
servo.c / motor.c
全部内容
main.c
启动流程与状态机框架
config.h
参数集中管理
参赛队伍名称:XXX
参赛成员:姓名1(结构与硬件)、姓名2(嵌入式控制)、姓名3(测试与文档)
所在院校:XXX大学
比赛时间:2025年7月30日~8月2日
本装置由MSPM0系列控制器主控,实现轮式小车自动巡迹及二维云台控制激光发射模块完成目标瞄准。系统可设定圈数自动寻迹,支持快速精确激光击中靶心、绘制圆弧轨迹等功能,满足基本及发挥要求。各子系统模块独立供电、结构紧凑、操作简洁,具备一定实用与扩展性。
小车沿100cm×100cm黑色正方轨迹巡迹N圈;
二维云台驱动激光笔击中靶心或绘制红色圆弧;
满足精度(D1、D2≤2cm)、时间(≤20s/40s)及结构要求。
功能项目 | 技术要求 |
---|---|
小车自动巡迹 | 线宽1.8cm,N圈(1~5),≤20s |
静态瞄准(基本) | 激光笔命中靶心,D1≤2cm,≤2s |
动态瞄准(指定点) | 瞄准后发射激光击中靶心,D1≤2cm,≤4s |
动态发射同步画圆 | 绘制半径6cm圆弧,D2≤2cm,误差<1/4圈 |
(插入系统结构图,可参见前面绘制的结构图)
模块 | 主要功能 |
---|---|
MSPM0主控 | 控制红外传感、舵机PWM、电机驱动逻辑 |
巡迹系统 | 红外传感器采集轨迹线状态并实时调整方向 |
电机控制模块 | 驱动左右电机按设定圈数巡迹运动 |
云台控制模块 | 控制两轴舵机调整激光方向 |
激光发射系统 | 控制激光笔精准击中靶纸中心或绘制圆弧 |
电源与开关控制 | 独立控制MSPM0与激光模块供电状态,LED显示 |
使用5~6组TCRT5000红外对管采集黑线边缘;
控制策略:简单PID / 差速转向 / 左右电机PWM调整;
圈数估算:通过行驶距离 / 编码器反馈 / 计时确定。
舵机角度映射关系:
角度x=fx(x偏移),角度y=fy(y偏移)\text{角度}_x = f_x(x_偏移),\quad \text{角度}_y = f_y(y_偏移)采用标定方式构建舵机控制查找表/函数映射;
精度受限于舵机最小步进(一般≈1°)和云台结构刚度。
激光轨迹在靶纸上绘圆半径为6cm:
θ(t)=ω⋅t,PWMx=A⋅cos(θ),PWMy=B⋅sin(θ)\theta(t) = \omega \cdot t,\quad \text{PWM}_x = A\cdot\cos(\theta),\quad \text{PWM}_y = B\cdot\sin(\theta)圈同步误差控制:∣T画圆−T小车T小车∣<0.25\left| \frac{T_{\text{画圆}} - T_{\text{小车}}}{T_{\text{小车}}} \right| < 0.25
部分 | 器件选型及说明 |
---|---|
控制器 | MSPM0L1306,TI官方推荐,Cortex-M0+ |
电机驱动 | TB6612 双通道驱动电机 |
舵机 | MG90S 两个(云台X/Y方向) |
红外传感器 | TCRT5000 ×6 路线检测 |
激光笔 | 405nm 蓝紫激光,TTL控制开关 |
电源系统 | 2组独立锂电池供电 + LDO稳压 + 拨码控制开关 |
显示模块 | LED ×2 指示供电状态 |
启动后初始化传感器与舵机;
根据模式判断(巡迹/瞄准/绘图)进入相应流程;
使用状态机管理小车运动、舵机位置与激光发射时间点;
使用定时器限制每项任务的完成时间。
白色哑光喷绘布场地,黑线轨迹宽度1.8cm;
A4紫外感光靶纸固定,靶心直径≤1mm;
瞄准距离AB线外50cm,高度不超过50cm;
激光笔功率≤10mW,注意人身安全;
项目 | 时间/s | D1/cm | 是否达标 |
---|---|---|---|
基本2 | 1.5 | 1.2 | √ |
基本3 | 3.4 | 1.6 | √ |
发挥1圈 | 18.9 | 1.9 | √ |
发挥画圆 | 19.6 | D2=1.7 | √ |
舵机可升级为高精型或使用步进电机驱动提升角度精度;
激光可加电位计调光并进行亮度校准;
未来可结合视觉系统实现目标自动识别与动态瞄准;
小车加入编码器反馈可提升圈数/同步精度。
队员姓名 | 工作职责 |
---|---|
姓名1 | 小车结构、电机控制、电源管理 |
姓名2 | MSPM0程序、PID巡迹、舵机驱动 |
姓名3 | 测试记录、误差分析、报告整理 |