测试底盘电机

This commit is contained in:
Robofish 2026-01-10 04:29:56 +08:00
parent 71466bc61e
commit 5ffc6504b8
8 changed files with 94 additions and 33 deletions

View File

@ -80,6 +80,7 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE
User/task/blink.c User/task/blink.c
User/task/ctrl_chassis.c User/task/ctrl_chassis.c
User/task/ctrl_gimbal.c User/task/ctrl_gimbal.c
User/task/ctrl_shoot.c
User/task/init.c User/task/init.c
User/task/monitor.c User/task/monitor.c
User/task/rc.c User/task/rc.c

View File

@ -39,3 +39,10 @@
function: Task_blink function: Task_blink
name: blink name: blink
stack: 256 stack: 256
- delay: 0
description: ''
freq_control: true
frequency: 500.0
function: Task_ctrl_shoot
name: ctrl_shoot
stack: 256

View File

@ -1,5 +1,6 @@
/* /*
ctrl_chassis Task ctrl_chassis Task
*/ */
/* Includes ----------------------------------------------------------------- */ /* Includes ----------------------------------------------------------------- */
@ -16,14 +17,16 @@
/* Private macro ------------------------------------------------------------ */ /* Private macro ------------------------------------------------------------ */
/* Private variables -------------------------------------------------------- */ /* Private variables -------------------------------------------------------- */
/* USER STRUCT BEGIN */ /* USER STRUCT BEGIN */
MOTOR_LK_Param_t chassis_motor_params[4] = { MOTOR_LZ_Param_t motor_lz_param = {
{BSP_CAN_1, 0x201, MOTOR_LK_MF9025, false}, .can = BSP_CAN_3,
{BSP_CAN_1, 0x202, MOTOR_LK_MF9025, false}, .motor_id = 125,
{BSP_CAN_1, 0x203, MOTOR_LK_MF9025, false}, .host_id = 0xFF,
{BSP_CAN_1, 0x204, MOTOR_LK_MF9025, false} .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 */ /* USER STRUCT END */
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
@ -40,34 +43,15 @@ void Task_ctrl_chassis(void *argument) {
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
/* USER CODE INIT BEGIN */ /* USER CODE INIT BEGIN */
BSP_CAN_Init(); BSP_CAN_Init();
MOTOR_LZ_Init();
MOTOR_LZ_Register(&motor_lz_param);
// 注册所有底盘电机
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]);
}
/* USER CODE INIT END */ /* USER CODE INIT END */
while (1) { while (1) {
tick += delay_tick; /* 计算下一个唤醒时刻 */ tick += delay_tick; /* 计算下一个唤醒时刻 */
/* USER CODE BEGIN */ /* USER CODE BEGIN */
// 更新所有电机数据 MOTOR_LZ_Enable(&motor_lz_param);
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);
/* USER CODE END */ /* USER CODE END */
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */

View File

@ -6,7 +6,9 @@
/* Includes ----------------------------------------------------------------- */ /* Includes ----------------------------------------------------------------- */
#include "task/user_task.h" #include "task/user_task.h"
/* USER INCLUDE BEGIN */ /* USER INCLUDE BEGIN */
#include "bsp/can.h"
#include "device/motor.h"
#include "device/motor_dm.h"
/* USER INCLUDE END */ /* USER INCLUDE END */
/* Private typedef ---------------------------------------------------------- */ /* Private typedef ---------------------------------------------------------- */
@ -14,7 +16,13 @@
/* Private macro ------------------------------------------------------------ */ /* Private macro ------------------------------------------------------------ */
/* Private variables -------------------------------------------------------- */ /* Private variables -------------------------------------------------------- */
/* USER STRUCT BEGIN */ /* 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 */ /* USER STRUCT END */
/* Private function --------------------------------------------------------- */ /* Private function --------------------------------------------------------- */
@ -30,13 +38,14 @@ void Task_ctrl_gimbal(void *argument) {
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
/* USER CODE INIT BEGIN */ /* USER CODE INIT BEGIN */
BSP_CAN_Init();
MOTOR_DM_Register(&motor_dm_yaw);
/* USER CODE INIT END */ /* USER CODE INIT END */
while (1) { while (1) {
tick += delay_tick; /* 计算下一个唤醒时刻 */ tick += delay_tick; /* 计算下一个唤醒时刻 */
/* USER CODE BEGIN */ /* USER CODE BEGIN */
MOTOR_DM_Enable(&motor_dm_yaw);
/* USER CODE END */ /* USER CODE END */
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
} }

46
User/task/ctrl_shoot.c Normal file
View File

@ -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); /* 运行结束,等待下一次唤醒 */
}
}

View File

@ -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.ctrl_gimbal = osThreadNew(Task_ctrl_gimbal, NULL, &attr_ctrl_gimbal);
task_runtime.thread.monitor = osThreadNew(Task_monitor, NULL, &attr_monitor); task_runtime.thread.monitor = osThreadNew(Task_monitor, NULL, &attr_monitor);
task_runtime.thread.blink = osThreadNew(Task_blink, NULL, &attr_blink); 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 */ /* USER MESSAGE BEGIN */

View File

@ -39,3 +39,8 @@ const osThreadAttr_t attr_blink = {
.priority = osPriorityNormal, .priority = osPriorityNormal,
.stack_size = 256 * 4, .stack_size = 256 * 4,
}; };
const osThreadAttr_t attr_ctrl_shoot = {
.name = "ctrl_shoot",
.priority = osPriorityNormal,
.stack_size = 256 * 4,
};

View File

@ -18,6 +18,7 @@ extern "C" {
#define CTRL_GIMBAL_FREQ (500.0) #define CTRL_GIMBAL_FREQ (500.0)
#define MONITOR_FREQ (500.0) #define MONITOR_FREQ (500.0)
#define BLINK_FREQ (500.0) #define BLINK_FREQ (500.0)
#define CTRL_SHOOT_FREQ (500.0)
/* 任务初始化延时ms */ /* 任务初始化延时ms */
#define TASK_INIT_DELAY (100u) #define TASK_INIT_DELAY (100u)
@ -27,6 +28,7 @@ extern "C" {
#define CTRL_GIMBAL_INIT_DELAY (0) #define CTRL_GIMBAL_INIT_DELAY (0)
#define MONITOR_INIT_DELAY (0) #define MONITOR_INIT_DELAY (0)
#define BLINK_INIT_DELAY (0) #define BLINK_INIT_DELAY (0)
#define CTRL_SHOOT_INIT_DELAY (0)
/* Exported defines --------------------------------------------------------- */ /* Exported defines --------------------------------------------------------- */
/* Exported macro ----------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */
@ -42,6 +44,7 @@ typedef struct {
osThreadId_t ctrl_gimbal; osThreadId_t ctrl_gimbal;
osThreadId_t monitor; osThreadId_t monitor;
osThreadId_t blink; osThreadId_t blink;
osThreadId_t ctrl_shoot;
} thread; } thread;
/* USER MESSAGE BEGIN */ /* USER MESSAGE BEGIN */
@ -69,6 +72,7 @@ typedef struct {
UBaseType_t ctrl_gimbal; UBaseType_t ctrl_gimbal;
UBaseType_t monitor; UBaseType_t monitor;
UBaseType_t blink; UBaseType_t blink;
UBaseType_t ctrl_shoot;
} stack_water_mark; } stack_water_mark;
/* 各任务运行频率 */ /* 各任务运行频率 */
@ -78,6 +82,7 @@ typedef struct {
float ctrl_gimbal; float ctrl_gimbal;
float monitor; float monitor;
float blink; float blink;
float ctrl_shoot;
} freq; } freq;
/* 任务最近运行时间 */ /* 任务最近运行时间 */
@ -87,6 +92,7 @@ typedef struct {
float ctrl_gimbal; float ctrl_gimbal;
float monitor; float monitor;
float blink; float blink;
float ctrl_shoot;
} last_up_time; } last_up_time;
} Task_Runtime_t; } 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_ctrl_gimbal;
extern const osThreadAttr_t attr_monitor; extern const osThreadAttr_t attr_monitor;
extern const osThreadAttr_t attr_blink; extern const osThreadAttr_t attr_blink;
extern const osThreadAttr_t attr_ctrl_shoot;
/* 任务函数声明 */ /* 任务函数声明 */
void Task_Init(void *argument); void Task_Init(void *argument);
@ -111,6 +118,7 @@ void Task_ctrl_chassis(void *argument);
void Task_ctrl_gimbal(void *argument); void Task_ctrl_gimbal(void *argument);
void Task_monitor(void *argument); void Task_monitor(void *argument);
void Task_blink(void *argument); void Task_blink(void *argument);
void Task_ctrl_shoot(void *argument);
#ifdef __cplusplus #ifdef __cplusplus
} }