任务名称
2019年_H题:模拟电磁曲射炮
任务要求
难度

一、任务 

自行设计并制作一模拟电磁曲射炮(以下简称电磁炮),炮管水平方位及垂 直仰角方向可调节,用电磁力将弹丸射出,击中目标环形靶(见图 3),发射周 期不得超过 30 秒。电磁炮由直流稳压电源供电,电磁炮系统内允许使用容性储 能元件。

二、要求
电磁炮与环形靶的位置示意如图 1 及图 2 所示。电磁炮放置在定标点处,炮管初始水平方向与中轴线夹角为 0°、垂直方向仰角为 0°。环形靶水平放置在地面,靶心位置在与定标点距离 200cm≤d≤300cm,与中心轴线夹角a≤±30°的范围内。
1.基本要求
(1) 电磁炮能够将弹丸射出炮口。
(2) 环形靶放置在靶心距离定标点 200~300cm 间,且在中心轴线上的位置处,键盘输入距离 d 值,电磁炮将弹丸发射至该位置,距离偏差的绝对值不大于 50cm。
(3) 用键盘给电磁炮输入环形靶中心与定标点的距离 d 及与中心轴线的偏离角度a,一键启动后,电磁炮自动瞄准射击,按击中环形靶环数计分;若脱靶则不计分。
2.发挥部分
(1) 在指定范围内任意位置放置环形靶(有引导标识,参见说明 2),一键启动后,电磁炮自动搜寻目标并炮击环形靶,按击中环形靶环数计分,完成时间≤30s。
(2) 环形靶与引导标识一同放置在距离定标点 d=250cm 的弧线上(以靶心定位),引导标识处于最远位置。电磁炮放置在定标点,炮管水平方向与中轴线夹角a =-30°、仰角 0°。一键启动电磁炮,炮管在水平方向与中轴线夹角a从-30°至 30°、再返回-30°做往复转动,在转动过程中(中途不得停顿)电磁炮自动搜寻目标并炮击环形靶,按击中环形靶环数计分,启动至击发完成时间≤10s。
(3) 其他。

三、说明
1. 电磁炮的要求
(1) 电磁炮炮管长度不超过 20cm,工作时电磁炮架固定置于地面。
(2) 电磁炮口内径在 10-15mm 之间,弹丸形状不限。
(3) 电磁炮炮口指向在水平夹角及垂直仰角两个维度可以电动调节。
(4) 电磁炮可用键盘设置目标参数。
(5) 可检测靶标位置自动控制电磁炮瞄准与射击。
(6) 电磁炮弹丸射高不得超过 200cm。
2. 测试要求与说明
(1) 环形靶由 10 个直径分别为 5cm、10cm、15cm、… 50cm 的同心圆组成,外径 50cm,靶心直径 5cm,参见图 3。
(2) 环形靶引导标识为直径 20cm 的红色圆形平板,在距靶心 30cm 处与靶平面垂直固定安装,圆心距靶平面高度 30cm。放置时引导标识在距定标点最远方向。参见图 1。 

(3) 弹着点按现场摄像记录判读。
(4) 每个项目可测试 2 次,选择完成质量好的一次记录并评分。
(5) 制作及测试时应佩带防护眼镜及安全帽等护具,并做好防护棚(炮口前用布或塑料布搭制有顶且两侧下垂到地面的棚子,靶标后设置防反弹布帘)等安全措施。电磁炮加电状态下现场人员严禁进入炮击区域。

评审标准

参考答案

专家分享:

西安交通大学邓建国老师 - 模拟电磁曲射炮(H题)解析与交流


GPT-4o给出的设计方案:


一、任务概述

设计并制作一套能够自动调整电磁炮射击角度的系统,使炮管水平向左30°和水平向右30°内的任意角度上射击目标。电磁炮以环靶中心为准,射击时间在30秒内完成。

二、系统组成

  1. 电磁炮本体

    • 电磁炮:用于发射子弹。
    • 电磁线圈:产生磁场驱动弹丸。
    • 传感器:反馈炮管当前位置及角度。
  2. 控制系统

    • 微控制器:负责系统控制和数据处理。
    • 电机驱动模块:驱动电机调整炮管角度。
    • 电源模块:提供系统所需电能。
  3. 人机交互界面

    • 输入设备:用于输入目标角度和射击命令。
    • 显示设备:显示当前角度和系统状态。

三、设计步骤

  1. 机械结构设计

    • 确保电磁炮及其支撑结构的稳固,允许电磁炮在水平面内旋转。
    • 确定电机和齿轮组适配,以实现炮管的精准角度调整。
  2. 传感系统设计

    • 选用高精度旋转编码器,实时反馈电磁炮角度。
    • 设计限位开关,确保炮管不会超出设计角度范围。
  3. 控制系统设计

    • 通过微控制器接收目标角度输入,计算所需转动角度。
    • 驱动电机通过齿轮组调整炮管角度,编码器实时反馈修正。
  4. 软件设计

    • 编写微控制器控制程序,包括角度计算、PID控制算法和安全检查。
    • 设计用户界面,方便操作人员输入目标角度和监测系统状态。
  5. 电源设计

    • 设计稳定的电源管理系统,确保电磁炮及控制系统正常供电。
  6. 系统调试

    • 进行多次测试,调整控制算法确保炮管可在30秒内精准定位。
    • 验证系统可靠性,进行长时间连续运行测试。

四、实施与验收

  1. 系统的安装和初步调试

    • 安装电磁炮及其支撑结构,连接电机和编码器。
    • 测试电机和编码器的协同工作,进行初步角度调整。
  2. 软件调试与优化

    • 通过软件调试确保微控制器能够准确接收和处理输入命令。
    • 优化控制算法,提高调整速度和精度。
  3. 功能验收测试

    • 测试系统在30秒内多次调整角度射击目标的性能。
    • 检查系统是否满足精度和稳健性要求。

项目说明

  1. 系统元件选择

    • 电磁炮的一部分为现成组件,其他结构和控制系统需自行设计制造。
    • 传感器选择需满足更新频率高、响应速度快、精度高的要求。
  2. 保护措施

    • 设计多个保护机制,确保电磁炮射击过程中人员和设备的安全。
    • 设置紧急停机功能,防止系统失控。

通过以上系统设计,可实现对电磁炮射击角度的自动控制,确保射击准确性和安全性。


软件设计部分实现

1. 角度计算

对于电磁炮的角度计算,可以使用旋转编码器来获取当前的角度。假设旋转编码器提供的输出为一个整数代表当前的角度位置。

#include <stdint.h>

// 假设定义一个位置结构体来保存角度信息
typedef struct {
    int32_t current_angle;
    int32_t target_angle;
} AnglePosition;

// 获取当前角度
int32_t get_current_angle() {
    // 从传感器读取当前角度
    // 这里假设读取编码器数据函数为 read_encoder()
    return read_encoder();
}

// 设置目标角度
void set_target_angle(AnglePosition *angle_position, int32_t target_angle) {
    angle_position->target_angle = target_angle;
}

// 角度计算
void calculate_angle(AnglePosition *angle_position) {
    angle_position->current_angle = get_current_angle();
    // 可能还需要其他计算和处理
}

2. PID控制算法

PID(比例-积分-微分)控制器用于确保电机准确定位在目标角度。假设我们有一个函数 set_motor_speed(int speed) 用于设置电机速度。

#include <stdint.h>

typedef struct {
    float Kp;
    float Ki;
    float Kd;
    float integral;
    float previous_error;
} PIDController;

// 初始化PID控制器
void pid_init(PIDController *pid, float Kp, float Ki, float Kd) {
    pid->Kp = Kp;
    pid->Ki = Ki;
    pid->Kd = Kd;
    pid->integral = 0;
    pid->previous_error = 0;
}

// PID控制输出
int32_t pid_calculate(PIDController *pid, int32_t setpoint, int32_t measured_value) {
    int32_t error = setpoint - measured_value;
    pid->integral += error;
    float derivative = error - pid->previous_error;
    pid->previous_error = error;
    float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
    return (int32_t)output;
}

// 设置电机速度
void set_motor_speed(int32_t speed) {
    // 这里假设设置电机速度函数为 motor_set_speed()
    motor_set_speed(speed);
}

// 主控制循环
void control_loop(AnglePosition *angle_position, PIDController *pid) {
    calculate_angle(angle_position);
    int32_t speed = pid_calculate(pid, angle_position->target_angle, angle_position->current_angle);
    set_motor_speed(speed);
}

角度计算和PID控制的集成

在主程序中,可以持续运行一个控制循环,不断调整电机速度以达到目标角度。

int main() {
    AnglePosition angle_position = {0, 0};
    PIDController pid;

    // 初始化PID控制器
    pid_init(&pid, 1.0, 0.1, 0.05);

    // 设置目标角度
    set_target_angle(&angle_position, 30);  // 例如目标角度为30度

    while (1) {
        control_loop(&angle_position, &pid);
        // 根据需要添加延时或其他处理
    }

    return 0;
}

以上代码仅为基本示例,实际实现时可能需要根据具体情况进行调整和优化。在硬件系统中,需要考虑更多的时序和资源限制。对于硬件实现,可能还需要加入更多的保护和检查机制。这些示例代码展示了如何在软件和硬件中实现基本角度计算和PID控制算法。


本题考察的知识点

该项目设计考察了自动控制和精确定位技术,机械结构设计及其稳定性,电磁炮的工作原理,软硬件结合能力和系统集成。具体包括:

  1. 机械结构:确保电磁炮及支撑结构稳固,适应角度调整的需求。
  2. 传感系统:使用高精度传感器如旋转编码器,实现实时角度反馈。
  3. 控制系统:通过微控制器和电机驱动模块搭建精准的角度调整系统。
  4. 软件设计:运用PID控制算法来实现精准的角度控制,确保系统的快速响应与稳定性。
  5. 电源设计:设计稳定的电源管理系统,确保系统正常运行。
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号