diff --git a/CMakeLists.txt b/CMakeLists.txt index 9da878a..208a3ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE User/task/blink.c User/task/ctrl_chassis.c User/task/ctrl_gimbal.c + User/task/ctrl_shoot.c User/task/init.c User/task/monitor.c User/task/rc.c diff --git a/User/task/config.yaml b/User/task/config.yaml index 28adab5..79d617d 100644 --- a/User/task/config.yaml +++ b/User/task/config.yaml @@ -39,3 +39,10 @@ function: Task_blink name: blink stack: 256 +- delay: 0 + description: '' + freq_control: true + frequency: 500.0 + function: Task_ctrl_shoot + name: ctrl_shoot + stack: 256 diff --git a/User/task/ctrl_chassis.c b/User/task/ctrl_chassis.c index 36c1a8b..b2dffb7 100644 --- a/User/task/ctrl_chassis.c +++ b/User/task/ctrl_chassis.c @@ -1,5 +1,6 @@ /* ctrl_chassis Task + */ /* Includes ----------------------------------------------------------------- */ @@ -16,14 +17,16 @@ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN */ -MOTOR_LK_Param_t chassis_motor_params[4] = { - {BSP_CAN_1, 0x201, MOTOR_LK_MF9025, false}, - {BSP_CAN_1, 0x202, MOTOR_LK_MF9025, false}, - {BSP_CAN_1, 0x203, MOTOR_LK_MF9025, false}, - {BSP_CAN_1, 0x204, MOTOR_LK_MF9025, false} +MOTOR_LZ_Param_t motor_lz_param = { + .can = BSP_CAN_3, + .motor_id = 125, + .host_id = 0xFF, + .module = MOTOR_LZ_RSO3, + .reverse = false, + .mode = MOTOR_LZ_MODE_MOTION, }; -MOTOR_LK_t *chassis_motors[4] = {NULL, NULL, NULL, NULL}; +float out = 0.0f; /* USER STRUCT END */ /* Private function --------------------------------------------------------- */ @@ -40,34 +43,15 @@ void Task_ctrl_chassis(void *argument) { uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ /* USER CODE INIT BEGIN */ BSP_CAN_Init(); - - // 注册所有底盘电机 - for (int i = 0; i < 4; i++) { - MOTOR_LK_Register(&chassis_motor_params[i]); - } - - // 延时等待电机稳定 - osDelay(100); - - // 开启所有电机 - for (int i = 0; i < 4; i++) { - MOTOR_LK_MotorOn(&chassis_motor_params[i]); - } + MOTOR_LZ_Init(); + MOTOR_LZ_Register(&motor_lz_param); + /* USER CODE INIT END */ while (1) { tick += delay_tick; /* 计算下一个唤醒时刻 */ /* USER CODE BEGIN */ - // 更新所有电机数据 - for (int i = 0; i < 4; i++) { - MOTOR_LK_Update(&chassis_motor_params[i]); - } - - // 设置电机输出 - MOTOR_LK_SetOutput(&chassis_motor_params[0], 0.5f); - MOTOR_LK_SetOutput(&chassis_motor_params[1], 0.5f); - MOTOR_LK_SetOutput(&chassis_motor_params[2], 0.5f); - MOTOR_LK_SetOutput(&chassis_motor_params[3], 0.5f); + MOTOR_LZ_Enable(&motor_lz_param); /* USER CODE END */ osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ diff --git a/User/task/ctrl_gimbal.c b/User/task/ctrl_gimbal.c index 0182846..409eae8 100644 --- a/User/task/ctrl_gimbal.c +++ b/User/task/ctrl_gimbal.c @@ -6,7 +6,9 @@ /* Includes ----------------------------------------------------------------- */ #include "task/user_task.h" /* USER INCLUDE BEGIN */ - +#include "bsp/can.h" +#include "device/motor.h" +#include "device/motor_dm.h" /* USER INCLUDE END */ /* Private typedef ---------------------------------------------------------- */ @@ -14,7 +16,13 @@ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN */ - +MOTOR_DM_Param_t motor_dm_yaw = { + .can = BSP_CAN_1, + .can_id = 0x1, + .master_id = 0x11, + .module = MOTOR_DM_J4310, + .reverse = false, +}; /* USER STRUCT END */ /* Private function --------------------------------------------------------- */ @@ -30,13 +38,14 @@ void Task_ctrl_gimbal(void *argument) { uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ /* USER CODE INIT BEGIN */ - + BSP_CAN_Init(); + MOTOR_DM_Register(&motor_dm_yaw); /* USER CODE INIT END */ while (1) { tick += delay_tick; /* 计算下一个唤醒时刻 */ /* USER CODE BEGIN */ - + MOTOR_DM_Enable(&motor_dm_yaw); /* USER CODE END */ osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ } diff --git a/User/task/ctrl_shoot.c b/User/task/ctrl_shoot.c new file mode 100644 index 0000000..64a1e2b --- /dev/null +++ b/User/task/ctrl_shoot.c @@ -0,0 +1,46 @@ +/* + ctrl_shoot Task + +*/ + +/* Includes ----------------------------------------------------------------- */ +#include "task/user_task.h" +/* USER INCLUDE BEGIN */ +#include "bsp/can.h" +#include "device/motor.h" +#include "device/motor_dm.h" +/* USER INCLUDE END */ + +/* Private typedef ---------------------------------------------------------- */ +/* Private define ----------------------------------------------------------- */ +/* Private macro ------------------------------------------------------------ */ +/* Private variables -------------------------------------------------------- */ +/* USER STRUCT BEGIN */ + +/* USER STRUCT END */ + +/* Private function --------------------------------------------------------- */ +/* Exported functions ------------------------------------------------------- */ +void Task_ctrl_shoot(void *argument) { + (void)argument; /* 未使用argument,消除警告 */ + + + /* 计算任务运行到指定频率需要等待的tick数 */ + const uint32_t delay_tick = osKernelGetTickFreq() / CTRL_SHOOT_FREQ; + + osDelay(CTRL_SHOOT_INIT_DELAY); /* 延时一段时间再开启任务 */ + + uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ + /* USER CODE INIT BEGIN */ + + /* USER CODE INIT END */ + + while (1) { + tick += delay_tick; /* 计算下一个唤醒时刻 */ + /* USER CODE BEGIN */ + + /* USER CODE END */ + osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ + } + +} \ No newline at end of file diff --git a/User/task/init.c b/User/task/init.c index 1335718..d35a09c 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -36,6 +36,7 @@ void Task_Init(void *argument) { task_runtime.thread.ctrl_gimbal = osThreadNew(Task_ctrl_gimbal, NULL, &attr_ctrl_gimbal); task_runtime.thread.monitor = osThreadNew(Task_monitor, NULL, &attr_monitor); task_runtime.thread.blink = osThreadNew(Task_blink, NULL, &attr_blink); + task_runtime.thread.ctrl_shoot = osThreadNew(Task_ctrl_shoot, NULL, &attr_ctrl_shoot); // 创建消息队列 /* USER MESSAGE BEGIN */ diff --git a/User/task/user_task.c b/User/task/user_task.c index d1a428e..3f1a996 100644 --- a/User/task/user_task.c +++ b/User/task/user_task.c @@ -38,4 +38,9 @@ const osThreadAttr_t attr_blink = { .name = "blink", .priority = osPriorityNormal, .stack_size = 256 * 4, +}; +const osThreadAttr_t attr_ctrl_shoot = { + .name = "ctrl_shoot", + .priority = osPriorityNormal, + .stack_size = 256 * 4, }; \ No newline at end of file diff --git a/User/task/user_task.h b/User/task/user_task.h index 45ea231..fe9bec0 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -18,6 +18,7 @@ extern "C" { #define CTRL_GIMBAL_FREQ (500.0) #define MONITOR_FREQ (500.0) #define BLINK_FREQ (500.0) +#define CTRL_SHOOT_FREQ (500.0) /* 任务初始化延时ms */ #define TASK_INIT_DELAY (100u) @@ -27,6 +28,7 @@ extern "C" { #define CTRL_GIMBAL_INIT_DELAY (0) #define MONITOR_INIT_DELAY (0) #define BLINK_INIT_DELAY (0) +#define CTRL_SHOOT_INIT_DELAY (0) /* Exported defines --------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ @@ -42,6 +44,7 @@ typedef struct { osThreadId_t ctrl_gimbal; osThreadId_t monitor; osThreadId_t blink; + osThreadId_t ctrl_shoot; } thread; /* USER MESSAGE BEGIN */ @@ -69,6 +72,7 @@ typedef struct { UBaseType_t ctrl_gimbal; UBaseType_t monitor; UBaseType_t blink; + UBaseType_t ctrl_shoot; } stack_water_mark; /* 各任务运行频率 */ @@ -78,6 +82,7 @@ typedef struct { float ctrl_gimbal; float monitor; float blink; + float ctrl_shoot; } freq; /* 任务最近运行时间 */ @@ -87,6 +92,7 @@ typedef struct { float ctrl_gimbal; float monitor; float blink; + float ctrl_shoot; } last_up_time; } Task_Runtime_t; @@ -102,6 +108,7 @@ extern const osThreadAttr_t attr_ctrl_chassis; extern const osThreadAttr_t attr_ctrl_gimbal; extern const osThreadAttr_t attr_monitor; extern const osThreadAttr_t attr_blink; +extern const osThreadAttr_t attr_ctrl_shoot; /* 任务函数声明 */ void Task_Init(void *argument); @@ -111,6 +118,7 @@ void Task_ctrl_chassis(void *argument); void Task_ctrl_gimbal(void *argument); void Task_monitor(void *argument); void Task_blink(void *argument); +void Task_ctrl_shoot(void *argument); #ifdef __cplusplus }