177 lines
5.3 KiB
C
177 lines
5.3 KiB
C
// /*
|
||
// * 射击模组
|
||
// */
|
||
|
||
// #pragma once
|
||
|
||
// #ifdef __cplusplus
|
||
// extern "C" {
|
||
// #endif
|
||
|
||
// /* Includes ----------------------------------------------------------------- */
|
||
// #include <cmsis_os2.h>
|
||
|
||
// #include "component/filter.h"
|
||
// #include "component/pid.h"
|
||
// #include "device/motor_rm.h"
|
||
// #include "device/motor.h"
|
||
|
||
// /* Exported constants ------------------------------------------------------- */
|
||
// #define SHOOT_OK (0) /* 运行正常 */
|
||
// #define SHOOT_ERR (-1) /* 运行时发现了其他错误 */
|
||
// #define SHOOT_ERR_NULL (-2) /* 运行时发现NULL指针 */
|
||
// #define SHOOT_ERR_MODE (-3) /* 运行时配置了错误的CMD_ShootMode_t */
|
||
|
||
// /* Exported macro ----------------------------------------------------------- */
|
||
// /* Exported types ----------------------------------------------------------- */
|
||
|
||
// typedef enum {
|
||
// SHOOT_MODE_RELAX = 0, /* 放松模式,电机不工作 */
|
||
// SHOOT_MODE_SAFE = 1, /* 安全模式,电机工作但不允许射击 */
|
||
// SHOOT_MODE_LOADED = 2 /* 上膛模式,电机工作并允许射击 */
|
||
// }Shoot_Mode_t;
|
||
|
||
// typedef struct {
|
||
// Shoot_Mode_t mode; /*射击模式*/
|
||
// float bullet_speed; /*弹丸射速*/
|
||
// uint32_t bullet_num; /*要发射的弹丸数*/
|
||
// }Shoot_CMD_t;
|
||
|
||
// /* 射击参数的结构体,包含所有初始化用的参数,通常是const,存好几组。*/
|
||
// typedef struct {
|
||
// MOTOR_RM_Param_t fric_motor_param[2]; /* 摩擦轮电机参数 */
|
||
// MOTOR_RM_Param_t trig_motor_param; /* 拨弹电机参数 */
|
||
|
||
|
||
// KPID_Params_t fric_pid_param; /* 摩擦轮电机控制PID的参数 */
|
||
// KPID_Params_t trig_pid_param; /* 扳机电机控制PID的参数 */
|
||
// /* 低通滤波器截止频率 */
|
||
// struct {
|
||
// /* 输入 */
|
||
// struct {
|
||
// float fric; /* 摩擦轮电机 */
|
||
// float trig; /* 扳机电机 */
|
||
// } in;
|
||
|
||
// /* 输出 */
|
||
// struct {
|
||
// float fric; /* 摩擦轮电机 */
|
||
// float trig; /* 扳机电机 */
|
||
// } out;
|
||
// } low_pass_cutoff_freq;
|
||
|
||
// float num_trig_tooth; /* 拨弹盘中一圈能存储几颗弹丸 */
|
||
// float fric_radius; /* 摩擦轮半径,单位:米 */
|
||
// float cover_open_duty; /* 弹舱盖打开时舵机PWM占空比 */
|
||
// float cover_close_duty; /* 弹舱盖关闭时舵机PWM占空比 */
|
||
// float bullet_speed; /* 弹丸初速度 */
|
||
// uint32_t min_shoot_delay; /* 通过设置最小射击间隔来设置最大射频 */
|
||
// } Shoot_Params_t;
|
||
|
||
|
||
// typedef struct {
|
||
// uint32_t last_shoot; /* 上次射击时间 单位:ms */
|
||
// bool last_fire; /* 上次开火状态 */
|
||
// bool first_fire; /* 第一次收到开火指令 */
|
||
// uint32_t shooted; /* 已经发射的弹丸 */
|
||
// uint32_t to_shoot; /* 计划发射的弹丸 */
|
||
// float bullet_speed; /* 弹丸初速度 */
|
||
// uint32_t period_ms; /* 弹丸击发延迟 */
|
||
// } Shoot_FireCtrl_t;
|
||
|
||
// /*
|
||
// * 运行的主结构体,所有这个文件里的函数都在操作这个结构体。
|
||
// * 包含了初始化参数,中间变量,输出变量。
|
||
// */
|
||
// typedef struct {
|
||
// uint64_t lask_wakeup;
|
||
// float dt;
|
||
|
||
// const Shoot_Params_t *param; /* 射击的参数,用Shoot_Init设定 */
|
||
// Shoot_FireCtrl_t fire_ctrl;
|
||
// /* 模块通用 */
|
||
// Shoot_Mode_t mode; /* 当前模式 */
|
||
|
||
// /* 反馈信息 */
|
||
// struct {
|
||
// MOTOR_Feedback_t fric[2]; /* 摩擦轮电机反馈 */
|
||
// MOTOR_Feedback_t trig; /* 拨弹电机反馈 */
|
||
// } feedback;
|
||
|
||
// /* PID计算的目标值 */
|
||
// struct {
|
||
// float fric_rpm[2]; /* 摩擦轮电机转速,单位:RPM */
|
||
// float trig_angle; /* 拨弹电机角度,单位:弧度 */
|
||
// } setpoint;
|
||
|
||
// /* 反馈控制用的PID */
|
||
// struct {
|
||
// KPID_t fric[2]; /* 控制摩擦轮 */
|
||
// KPID_t trig; /* 控制拨弹电机 */
|
||
// } pid;
|
||
|
||
// /* 过滤器 */
|
||
// struct {
|
||
// /* 反馈值滤波器 */
|
||
// struct {
|
||
// LowPassFilter2p_t fric[2]; /* 过滤摩擦轮 */
|
||
// LowPassFilter2p_t trig; /* 过滤拨弹电机 */
|
||
// } in;
|
||
|
||
// /* 输出值滤波器 */
|
||
// struct {
|
||
// LowPassFilter2p_t fric[2]; /* 过滤摩擦轮 */
|
||
// LowPassFilter2p_t trig; /* 过滤拨弹电机 */
|
||
// } out;
|
||
// } filter;
|
||
|
||
// } Shoot_t;
|
||
|
||
// /* Exported functions prototypes -------------------------------------------- */
|
||
|
||
// /**
|
||
// * \brief 初始化射击
|
||
// *
|
||
// * \param s 包含射击数据的结构体
|
||
// * \param param 包含射击参数的结构体指针
|
||
// * \param target_freq 任务预期的运行频率
|
||
// *
|
||
// * \return 函数运行结果
|
||
// */
|
||
// int8_t Shoot_Init(Shoot_t *s, const Shoot_Params_t *param, float target_freq);
|
||
|
||
// /**
|
||
// * \brief 更新射击的反馈信息
|
||
// *
|
||
// * \param s 包含射击数据的结构体
|
||
// * \param can CAN设备结构体
|
||
// *
|
||
// * \return 函数运行结果
|
||
// */
|
||
// int8_t Shoot_UpdateFeedback(Shoot_t *s);
|
||
|
||
// /**
|
||
// * \brief 运行射击控制逻辑
|
||
// *
|
||
// * \param s 包含射击数据的结构体
|
||
// * \param s_cmd 射击控制指令
|
||
// * \param s_ref 裁判系统数据
|
||
// * \param dt_sec 两次调用的时间间隔
|
||
// *
|
||
// * \return 函数运行结果
|
||
// */
|
||
// int8_t Shoot_Control(Shoot_t *s,Shoot_CMD_t *s_cmd);
|
||
|
||
// /**
|
||
// * \brief 射击输出值
|
||
// *
|
||
// * \param s 包含射击数据的结构体
|
||
// * \param out CAN设备射击输出结构体
|
||
// */
|
||
// void Shoot_Output(Shoot_t *s);
|
||
|
||
|
||
// #ifdef __cplusplus
|
||
// }
|
||
// #endif
|